2077 lines
4.6 MiB
2077 lines
4.6 MiB
/*
|
||
* 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/).
|
||
*/
|
||
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["main"],{
|
||
|
||
/***/ "./node_modules/next/dist/build/deployment-id.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/build/deployment-id.js ***!
|
||
\*******************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n enumerable: true,\n get: function() {\n return getDeploymentIdQueryOrEmptyString;\n }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n if (false) {}\n return \"\";\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL2RlcGxveW1lbnQtaWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixxRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBLFFBQVEsS0FBOEIsRUFBRSxFQUVuQztBQUNMO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9kZXBsb3ltZW50LWlkLmpzP2FhZDgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmdcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZztcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgICAgIHJldHVybiBgP2RwbD0ke3Byb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRH1gO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwbG95bWVudC1pZC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/deployment-id.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/build/polyfills/polyfill-module.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/polyfills/polyfill-module.js ***!
|
||
\*******************************************************************/
|
||
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]}),Object.hasOwn||(Object.hasOwn=function(t,r){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");return Object.prototype.hasOwnProperty.call(Object(t),r)}),\"canParse\"in URL||(URL.canParse=function(t,r){try{return!!new URL(t,r)}catch(t){return!1}});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsbVFBQW1RLCtCQUErQix1Q0FBdUMsc0JBQXNCLDREQUE0RCw2RUFBNkUsdUNBQXVDLDRCQUE0QixvRUFBb0UsOENBQThDLGdDQUFnQyw2QkFBNkIsc0NBQXNDLFNBQVMsRUFBRSxhQUFhLHNDQUFzQyxRQUFRLEVBQUUsRUFBRSxzREFBc0QsMENBQTBDLHNCQUFzQixHQUFHLEVBQUUsc0RBQXNELHVCQUF1QiwrREFBK0QsOENBQThDLDZFQUE2RSx5REFBeUQsZ0RBQWdELElBQUkscUJBQXFCLFNBQVMsVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUuanM/NjljOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInRyaW1TdGFydFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0PVN0cmluZy5wcm90b3R5cGUudHJpbUxlZnQpLFwidHJpbUVuZFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksXCJkZXNjcmlwdGlvblwiaW4gU3ltYm9sLnByb3RvdHlwZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9L1xcKCguKilcXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gdD90WzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksdD4xJiZyLnNvbWUoQXJyYXkuaXNBcnJheSk/ci5mbGF0KHQtMSk6cn0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAodCxyKS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzLnRoZW4odCx0KTt2YXIgcj10aGlzLmNvbnN0cnVjdG9yfHxQcm9taXNlO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX0pfSksT2JqZWN0LmZyb21FbnRyaWVzfHwoT2JqZWN0LmZyb21FbnRyaWVzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5mcm9tKHQpLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0W3JbMF1dPXJbMV0sdH0se30pfSksQXJyYXkucHJvdG90eXBlLmF0fHwoQXJyYXkucHJvdG90eXBlLmF0PWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgudHJ1bmModCl8fDA7aWYocjwwJiYocis9dGhpcy5sZW5ndGgpLCEocjwwfHxyPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbcl19KSxPYmplY3QuaGFzT3dufHwoT2JqZWN0Lmhhc093bj1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE9iamVjdCh0KSxyKX0pLFwiY2FuUGFyc2VcImluIFVSTHx8KFVSTC5jYW5QYXJzZT1mdW5jdGlvbih0LHIpe3RyeXtyZXR1cm4hIW5ldyBVUkwodCxyKX1jYXRjaCh0KXtyZXR1cm4hMX19KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/polyfills/polyfill-module.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/build/polyfills/process.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/build/polyfills/process.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === \"object\" ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wcm9jZXNzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxxQ0FBcUMscUJBQU0saUZBQWlGLHFCQUFNLGtFQUFrRSxxQkFBTSxXQUFXLG1CQUFPLENBQUMsd0ZBQTRCOztBQUV6UCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wcm9jZXNzLmpzP2NhNjUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX2dsb2JhbF9wcm9jZXNzLCBfZ2xvYmFsX3Byb2Nlc3MxO1xubW9kdWxlLmV4cG9ydHMgPSAoKF9nbG9iYWxfcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2dsb2JhbF9wcm9jZXNzLmVudikgJiYgdHlwZW9mICgoX2dsb2JhbF9wcm9jZXNzMSA9IGdsb2JhbC5wcm9jZXNzKSA9PSBudWxsID8gdm9pZCAwIDogX2dsb2JhbF9wcm9jZXNzMS5lbnYpID09PSBcIm9iamVjdFwiID8gZ2xvYmFsLnByb2Nlc3MgOiByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3Byb2Nlc3NcIik7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3MuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/polyfills/process.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/add-base-path.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/add-base-path.js ***!
|
||
\********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hZGQtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7K0NBS2dCQTs7O2VBQUFBOzs7MkNBTGM7b0RBQ2E7QUFFM0MsTUFBTUMsV0FBV0MsTUFBbUMsSUFBZTtBQUU1RCxTQUFTRixZQUFZSyxJQUFZLEVBQUVDLFFBQWtCO0lBQzFELE9BQU9DLENBQUFBLEdBQUFBLHdCQUFBQSwwQkFBMEIsRUFDL0JMLE1BQStDSSxHQUMzQ0QsQ0FBQUEsR0FDQUksQ0FBQUEsR0FBQUEsZUFBQUEsYUFBYSxFQUFDSixNQUFNSjtBQUU1QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9hZGQtYmFzZS1wYXRoLnRzPzUxNzEiXSwibmFtZXMiOlsiYWRkQmFzZVBhdGgiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInJlcXVpcmVkIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJhZGRQYXRoUHJlZml4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/add-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/add-locale.js":
|
||
/*!*****************************************************!*\
|
||
!*** ./node_modules/next/dist/client/add-locale.js ***!
|
||
\*****************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (false) {}\n return path;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hZGQtbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7NkNBR2FBOzs7ZUFBQUE7OztvREFGOEI7QUFFcEMsTUFBTUEsWUFBdUIsU0FBQ0MsSUFBQUE7cUNBQVNDLE9BQUFBLElBQUFBLE1BQUFBLE9BQUFBLElBQUFBLE9BQUFBLElBQUFBLElBQUFBLE9BQUFBLEdBQUFBLE9BQUFBLE1BQUFBLE9BQUFBO1FBQUFBLElBQUFBLENBQUFBLE9BQUFBLEVBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztJQUM1QyxJQUFJQyxLQUErQixFQUFFLEVBSXJDO0lBQ0EsT0FBT0Y7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9hZGQtbG9jYWxlLnRzP2ZhYWUiXSwibmFtZXMiOlsiYWRkTG9jYWxlIiwicGF0aCIsImFyZ3MiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/add-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/app-router-headers.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/app-router-headers.js ***!
|
||
\************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION: function() {\n return ACTION;\n },\n FLIGHT_PARAMETERS: function() {\n return FLIGHT_PARAMETERS;\n },\n NEXT_DID_POSTPONE_HEADER: function() {\n return NEXT_DID_POSTPONE_HEADER;\n },\n NEXT_ROUTER_PREFETCH_HEADER: function() {\n return NEXT_ROUTER_PREFETCH_HEADER;\n },\n NEXT_ROUTER_STATE_TREE: function() {\n return NEXT_ROUTER_STATE_TREE;\n },\n NEXT_RSC_UNION_QUERY: function() {\n return NEXT_RSC_UNION_QUERY;\n },\n NEXT_URL: function() {\n return NEXT_URL;\n },\n RSC_CONTENT_TYPE_HEADER: function() {\n return RSC_CONTENT_TYPE_HEADER;\n },\n RSC_HEADER: function() {\n return RSC_HEADER;\n }\n});\nconst RSC_HEADER = \"RSC\";\nconst ACTION = \"Next-Action\";\nconst NEXT_ROUTER_STATE_TREE = \"Next-Router-State-Tree\";\nconst NEXT_ROUTER_PREFETCH_HEADER = \"Next-Router-Prefetch\";\nconst NEXT_URL = \"Next-Url\";\nconst RSC_CONTENT_TYPE_HEADER = \"text/x-component\";\nconst FLIGHT_PARAMETERS = [\n [\n RSC_HEADER\n ],\n [\n NEXT_ROUTER_STATE_TREE\n ],\n [\n NEXT_ROUTER_PREFETCH_HEADER\n ]\n];\nconst NEXT_RSC_UNION_QUERY = \"_rsc\";\nconst NEXT_DID_POSTPONE_HEADER = \"x-nextjs-postponed\";\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-headers.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFDYUEsUUFBTTtlQUFOQTs7SUFPQUMsbUJBQWlCO2VBQWpCQTs7SUFRQUMsMEJBQXdCO2VBQXhCQTs7SUFaQUMsNkJBQTJCO2VBQTNCQTs7SUFEQUMsd0JBQXNCO2VBQXRCQTs7SUFXQUMsc0JBQW9CO2VBQXBCQTs7SUFUQUMsVUFBUTtlQUFSQTs7SUFDQUMseUJBQXVCO2VBQXZCQTs7SUFOQUMsWUFBVTtlQUFWQTs7O0FBQU4sTUFBTUEsYUFBYTtBQUNuQixNQUFNUixTQUFTO0FBRWYsTUFBTUkseUJBQXlCO0FBQy9CLE1BQU1ELDhCQUE4QjtBQUNwQyxNQUFNRyxXQUFXO0FBQ2pCLE1BQU1DLDBCQUEwQjtBQUVoQyxNQUFNTixvQkFBb0I7SUFDL0I7UUFBQ087S0FBVztJQUNaO1FBQUNKO0tBQXVCO0lBQ3hCO1FBQUNEO0tBQTRCO0NBQzlCO0FBRU0sTUFBTUUsdUJBQXVCO0FBRTdCLE1BQU1ILDJCQUEyQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycy50cz82NDkzIl0sIm5hbWVzIjpbIkFDVElPTiIsIkZMSUdIVF9QQVJBTUVURVJTIiwiTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSIiwiTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSIiwiTkVYVF9ST1VURVJfU1RBVEVfVFJFRSIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwiTkVYVF9VUkwiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsIlJTQ19IRUFERVIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/app-router-headers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js":
|
||
/*!***************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js ***!
|
||
\***************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CodeFrame\", ({\n enumerable: true,\n get: function() {\n return CodeFrame;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _anser = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/anser */ \"./node_modules/next/dist/compiled/anser/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _stackframe = __webpack_require__(/*! ../../helpers/stack-frame */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nconst _hotlinkedtext = __webpack_require__(/*! ../hot-linked-text */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nconst CodeFrame = function CodeFrame(param) {\n _s();\n let { stackFrame, codeFrame } = param;\n // Strip leading spaces out of the code frame:\n const formattedFrame = _react.useMemo(()=>{\n const lines = codeFrame.split(/\\r?\\n/g);\n // Find the minimum length of leading spaces after `|` in the code frame\n const miniLeadingSpacesLength = lines.map((line)=>/^>? +\\d+ +\\| [ ]+/.exec((0, _stripansi.default)(line)) === null ? null : /^>? +\\d+ +\\| ( *)/.exec((0, _stripansi.default)(line))).filter(Boolean).map((v)=>v.pop()).reduce((c, n)=>isNaN(c) ? n.length : Math.min(c, n.length), NaN);\n // When the minimum length of leading spaces is greater than 1, remove them\n // from the code frame to help the indentation looks better when there's a lot leading spaces.\n if (miniLeadingSpacesLength > 1) {\n return lines.map((line, a)=>~(a = line.indexOf(\"|\")) ? line.substring(0, a) + line.substring(a).replace(\"^\\\\ {\" + miniLeadingSpacesLength + \"}\", \"\") : line).join(\"\\n\");\n }\n return lines.join(\"\\n\");\n }, [\n codeFrame\n ]);\n const decoded = _react.useMemo(()=>{\n return _anser.default.ansiToJson(formattedFrame, {\n json: true,\n use_classes: true,\n remove_empty: true\n });\n }, [\n formattedFrame\n ]);\n const open = (0, _useopenineditor.useOpenInEditor)({\n file: stackFrame.file,\n lineNumber: stackFrame.lineNumber,\n column: stackFrame.column\n });\n // TODO: make the caret absolute\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-codeframe\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"p\", {\n role: \"link\",\n onClick: open,\n tabIndex: 1,\n title: \"Click to open in your editor\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n (0, _stackframe.getFrameSource)(stackFrame),\n \" @\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: stackFrame.methodName\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"pre\", {\n children: decoded.map((entry, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n style: {\n color: entry.fg ? \"var(--color-\" + entry.fg + \")\" : undefined,\n ...entry.decoration === \"bold\" ? {\n fontWeight: 800\n } : entry.decoration === \"italic\" ? {\n fontStyle: \"italic\"\n } : undefined\n },\n children: entry.content\n }, \"frame-\" + index))\n })\n ]\n });\n};\n_s(CodeFrame, \"4Gt+UceGaRqMOFv99GzJu8D2nx8=\");\n_c = CodeFrame;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CodeFrame.js.map\nvar _c;\n$RefreshReg$(_c, \"CodeFrame\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL0NvZGVGcmFtZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7NkNBVWFBOzs7ZUFBQUE7Ozs7Ozs0RUFWSzs2RUFDSztnRkFFRDt3Q0FDUzs2Q0FDQzsyQ0FDRjtBQUl2QixNQUFNQSxZQUFzQyxTQUFTQSxVQUFVQyxLQUdyRTs7SUFIcUUsTUFDcEVDLFVBQVUsRUFDVkMsU0FBUyxFQUNWLEdBSHFFRjtJQUlwRSw4Q0FBOEM7SUFDOUMsTUFBTUcsaUJBQWlCQyxPQUFNQyxPQUFPLENBQVM7UUFDM0MsTUFBTUMsUUFBUUosVUFBVUssS0FBSyxDQUFDO1FBRTlCLHdFQUF3RTtRQUN4RSxNQUFNQywwQkFBMEJGLE1BQzdCRyxHQUFHLENBQUMsQ0FBQ0MsT0FDSixvQkFBb0JDLElBQUksQ0FBQ0MsQ0FBQUEsR0FBQUEsV0FBQUEsT0FBUyxFQUFDRixXQUFXLE9BQzFDLE9BQ0Esb0JBQW9CQyxJQUFJLENBQUNDLENBQUFBLEdBQUFBLFdBQUFBLE9BQVMsRUFBQ0YsUUFFeENHLE1BQU0sQ0FBQ0MsU0FDUEwsR0FBRyxDQUFDLENBQUNNLElBQU1BLEVBQUdDLEdBQUcsSUFDakJDLE1BQU0sQ0FBQyxDQUFDQyxHQUFHQyxJQUFPQyxNQUFNRixLQUFLQyxFQUFFRSxNQUFNLEdBQUdDLEtBQUtDLEdBQUcsQ0FBQ0wsR0FBR0MsRUFBRUUsTUFBTSxHQUFJRztRQUVuRSwyRUFBMkU7UUFDM0UsOEZBQThGO1FBQzlGLElBQUloQiwwQkFBMEIsR0FBRztZQUMvQixPQUFPRixNQUNKRyxHQUFHLENBQUMsQ0FBQ0MsTUFBTWUsSUFDVixDQUFFQSxDQUFBQSxJQUFJZixLQUFLZ0IsT0FBTyxDQUFDLFFBQ2ZoQixLQUFLaUIsU0FBUyxDQUFDLEdBQUdGLEtBQ2xCZixLQUFLaUIsU0FBUyxDQUFDRixHQUFHRyxPQUFPLENBQUMsVUFBUXBCLDBCQUF3QixLQUFJLE1BQzlERSxNQUVMbUIsSUFBSSxDQUFDO1FBQ1Y7UUFDQSxPQUFPdkIsTUFBTXVCLElBQUksQ0FBQztJQUNwQixHQUFHO1FBQUMzQjtLQUFVO0lBRWQsTUFBTTRCLFVBQVUxQixPQUFNQyxPQUFPLENBQUM7UUFDNUIsT0FBTzBCLE9BQUFBLE9BQUssQ0FBQ0MsVUFBVSxDQUFDN0IsZ0JBQWdCO1lBQ3RDOEIsTUFBTTtZQUNOQyxhQUFhO1lBQ2JDLGNBQWM7UUFDaEI7SUFDRixHQUFHO1FBQUNoQztLQUFlO0lBRW5CLE1BQU1pQyxPQUFPQyxDQUFBQSxHQUFBQSxpQkFBQUEsZUFBZSxFQUFDO1FBQzNCQyxNQUFNckMsV0FBV3FDLElBQUk7UUFDckJDLFlBQVl0QyxXQUFXc0MsVUFBVTtRQUNqQ0MsUUFBUXZDLFdBQVd1QyxNQUFNO0lBQzNCO0lBRUEsZ0NBQWdDO0lBQ2hDLE9BQ0UsV0FERixHQUNFLElBQUFDLFlBQUFDLElBQUEsRUFBQ0MsT0FBQUE7UUFBSUMseUJBQXFCOzswQkFDeEIsSUFBQUgsWUFBQUksR0FBQSxFQUFDRixPQUFBQTswQkFDQyxrQkFBQUYsWUFBQUMsSUFBQSxFQUFDSSxLQUFBQTtvQkFDQ0MsTUFBSztvQkFDTEMsU0FBU1o7b0JBQ1RhLFVBQVU7b0JBQ1ZDLE9BQU07O3NDQUVOLElBQUFULFlBQUFDLElBQUEsRUFBQ1MsUUFBQUE7O2dDQUNFQyxDQUFBQSxHQUFBQSxZQUFBQSxjQUFjLEVBQUNuRDtnQ0FBWTtnQ0FBRzs4Q0FDL0IsSUFBQXdDLFlBQUFJLEdBQUEsRUFBQ1EsZUFBQUEsYUFBYTtvQ0FBQ0MsTUFBTXJELFdBQVdzRCxVQUFVOzs7O3NDQUU1QyxJQUFBZCxZQUFBQyxJQUFBLEVBQUNjLE9BQUFBOzRCQUNDQyxPQUFNOzRCQUNOQyxTQUFROzRCQUNSQyxNQUFLOzRCQUNMQyxRQUFPOzRCQUNQQyxhQUFZOzRCQUNaQyxlQUFjOzRCQUNkQyxnQkFBZTs7OENBRWYsSUFBQXRCLFlBQUFJLEdBQUEsRUFBQ21CLFFBQUFBO29DQUFLQyxHQUFFOzs4Q0FDUixJQUFBeEIsWUFBQUksR0FBQSxFQUFDcUIsWUFBQUE7b0NBQVNDLFFBQU87OzhDQUNqQixJQUFBMUIsWUFBQUksR0FBQSxFQUFDbkMsUUFBQUE7b0NBQUswRCxJQUFHO29DQUFLQyxJQUFHO29DQUFLQyxJQUFHO29DQUFLQyxJQUFHOzs7Ozs7OzBCQUl2QyxJQUFBOUIsWUFBQUksR0FBQSxFQUFDMkIsT0FBQUE7MEJBQ0UxQyxRQUFRckIsR0FBRyxDQUFDLENBQUNnRSxPQUFPQyxRQUNuQixXQURtQkEsR0FDbkIsSUFBQWpDLFlBQUFJLEdBQUEsRUFBQ00sUUFBQUE7d0JBRUN3QixPQUFPOzRCQUNMQyxPQUFPSCxNQUFNSSxFQUFFLEdBQUcsaUJBQWVKLE1BQU1JLEVBQUUsR0FBQyxNQUFLQzs0QkFDL0MsR0FBSUwsTUFBTU0sVUFBVSxLQUFLLFNBQ3JCO2dDQUFFQyxZQUFZOzRCQUFJLElBQ2xCUCxNQUFNTSxVQUFVLEtBQUssV0FDckI7Z0NBQUVFLFdBQVc7NEJBQVMsSUFDdEJILFNBQVM7d0JBQ2Y7a0NBRUNMLE1BQU1TLE9BQU87dUJBVlQsV0FBU1I7Ozs7QUFnQjFCO0dBaEdhM0U7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0NvZGVGcmFtZS9Db2RlRnJhbWUudHN4P2MxMGQiXSwibmFtZXMiOlsiQ29kZUZyYW1lIiwicGFyYW0iLCJzdGFja0ZyYW1lIiwiY29kZUZyYW1lIiwiZm9ybWF0dGVkRnJhbWUiLCJSZWFjdCIsInVzZU1lbW8iLCJsaW5lcyIsInNwbGl0IiwibWluaUxlYWRpbmdTcGFjZXNMZW5ndGgiLCJtYXAiLCJsaW5lIiwiZXhlYyIsInN0cmlwQW5zaSIsImZpbHRlciIsIkJvb2xlYW4iLCJ2IiwicG9wIiwicmVkdWNlIiwiYyIsIm4iLCJpc05hTiIsImxlbmd0aCIsIk1hdGgiLCJtaW4iLCJOYU4iLCJhIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJqb2luIiwiZGVjb2RlZCIsIkFuc2VyIiwiYW5zaVRvSnNvbiIsImpzb24iLCJ1c2VfY2xhc3NlcyIsInJlbW92ZV9lbXB0eSIsIm9wZW4iLCJ1c2VPcGVuSW5FZGl0b3IiLCJmaWxlIiwibGluZU51bWJlciIsImNvbHVtbiIsIl9qc3hydW50aW1lIiwianN4cyIsImRpdiIsImRhdGEtbmV4dGpzLWNvZGVmcmFtZSIsImpzeCIsInAiLCJyb2xlIiwib25DbGljayIsInRhYkluZGV4IiwidGl0bGUiLCJzcGFuIiwiZ2V0RnJhbWVTb3VyY2UiLCJIb3RsaW5rZWRUZXh0IiwidGV4dCIsIm1ldGhvZE5hbWUiLCJzdmciLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJwYXRoIiwiZCIsInBvbHlsaW5lIiwicG9pbnRzIiwieDEiLCJ5MSIsIngyIiwieTIiLCJwcmUiLCJlbnRyeSIsImluZGV4Iiwic3R5bGUiLCJjb2xvciIsImZnIiwidW5kZWZpbmVkIiwiZGVjb3JhdGlvbiIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJjb250ZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js":
|
||
/*!***********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js ***!
|
||
\***********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CodeFrame\", ({\n enumerable: true,\n get: function() {\n return _CodeFrame.CodeFrame;\n }\n}));\nconst _CodeFrame = __webpack_require__(/*! ./CodeFrame */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7NkNBQVNBOzs7ZUFBQUEsV0FBQUEsU0FBUzs7O3VDQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Db2RlRnJhbWUvaW5kZXgudHN4P2VmMzYiXSwibmFtZXMiOlsiQ29kZUZyYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js":
|
||
/*!************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js ***!
|
||
\************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-codeframe] {\\n overflow: auto;\\n border-radius: var(--size-gap-half);\\n background-color: var(--color-ansi-bg);\\n color: var(--color-ansi-fg);\\n }\\n [data-nextjs-codeframe]::selection,\\n [data-nextjs-codeframe] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n [data-nextjs-codeframe] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-codeframe] > * {\\n margin: 0;\\n padding: calc(var(--size-gap) + var(--size-gap-half))\\n calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n [data-nextjs-codeframe] > div {\\n display: inline-block;\\n width: auto;\\n min-width: 100%;\\n border-bottom: 1px solid var(--color-ansi-bright-black);\\n }\\n [data-nextjs-codeframe] > div > p {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n cursor: pointer;\\n margin: 0;\\n }\\n [data-nextjs-codeframe] > div > p:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-codeframe] div > p > svg {\\n width: auto;\\n height: 1em;\\n margin-left: 8px;\\n }\\n [data-nextjs-codeframe] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiOzs7OzBDQW1EU0E7OztlQUFBQTs7OzswQ0FuRG1COzs7Ozs7Ozs7O0FBRTVCLE1BQU1BLFNBQUFBLENBQUFBLEdBQVNDLGNBQUFBLElBQUcsRUFBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0NvZGVGcmFtZS9zdHlsZXMudHN4P2Q3Y2QiXSwibmFtZXMiOlsic3R5bGVzIiwiY3NzIiwiX3RlbXBsYXRlT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js":
|
||
/*!*********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js ***!
|
||
\*********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Dialog\", ({\n enumerable: true,\n get: function() {\n return Dialog;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _useonclickoutside = __webpack_require__(/*! ../../hooks/use-on-click-outside */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js\");\nconst Dialog = function Dialog(param) {\n _s();\n let { children, type, onClose, ...props } = param;\n const [dialog, setDialog] = _react.useState(null);\n const [role, setRole] = _react.useState(typeof document !== \"undefined\" && document.hasFocus() ? \"dialog\" : undefined);\n const onDialog = _react.useCallback((node)=>{\n setDialog(node);\n }, []);\n (0, _useonclickoutside.useOnClickOutside)(dialog, (e)=>{\n e.preventDefault();\n return onClose == null ? void 0 : onClose();\n });\n // Make HTMLElements with `role=link` accessible to be triggered by the\n // keyboard, i.e. [Enter].\n _react.useEffect(()=>{\n if (dialog == null) {\n return;\n }\n const root = dialog.getRootNode();\n // Always true, but we do this for TypeScript:\n if (!(root instanceof ShadowRoot)) {\n return;\n }\n const shadowRoot = root;\n function handler(e) {\n const el = shadowRoot.activeElement;\n if (e.key === \"Enter\" && el instanceof HTMLElement && el.getAttribute(\"role\") === \"link\") {\n e.preventDefault();\n e.stopPropagation();\n el.click();\n }\n }\n function handleFocus() {\n // safari will force itself as the active application when a background page triggers any sort of autofocus\n // this is a workaround to only set the dialog role if the document has focus\n setRole(document.hasFocus() ? \"dialog\" : undefined);\n }\n shadowRoot.addEventListener(\"keydown\", handler);\n window.addEventListener(\"focus\", handleFocus);\n window.addEventListener(\"blur\", handleFocus);\n return ()=>{\n shadowRoot.removeEventListener(\"keydown\", handler);\n window.removeEventListener(\"focus\", handleFocus);\n window.removeEventListener(\"blur\", handleFocus);\n };\n }, [\n dialog\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n ref: onDialog,\n \"data-nextjs-dialog\": true,\n tabIndex: -1,\n role: role,\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"aria-modal\": \"true\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-banner\": true,\n className: \"banner-\" + type\n }),\n children\n ]\n });\n};\n_s(Dialog, \"2HYcMztUKT19xxjUDXr42PZl9rE=\");\n_c = Dialog;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Dialog.js.map\nvar _c;\n$RefreshReg$(_c, \"Dialog\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7MENBMEZTQTs7O2VBQUFBOzs7Ozs2RUExRmM7K0NBQ1c7QUFVbEMsTUFBTUEsU0FBZ0MsU0FBU0EsT0FBT0MsS0FLckQ7O0lBTHFELE1BQ3BEQyxRQUFRLEVBQ1JDLElBQUksRUFDSkMsT0FBTyxFQUNQLEdBQUdDLE9BQ0osR0FMcURKO0lBTXBELE1BQU0sQ0FBQ0ssUUFBUUMsVUFBVSxHQUFHQyxPQUFNQyxRQUFRLENBQXdCO0lBQ2xFLE1BQU0sQ0FBQ0MsTUFBTUMsUUFBUSxHQUFHSCxPQUFNQyxRQUFRLENBQ3BDLE9BQU9HLGFBQWEsZUFBZUEsU0FBU0MsUUFBUSxLQUNoRCxXQUNBQztJQUVOLE1BQU1DLFdBQVdQLE9BQU1RLFdBQVcsQ0FBQyxDQUFDQztRQUNsQ1YsVUFBVVU7SUFDWixHQUFHLEVBQUU7SUFDTEMsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFpQixFQUFDWixRQUFRLENBQUNhO1FBQ3pCQSxFQUFFQyxjQUFjO1FBQ2hCLE9BQU9oQixXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQTtJQUNUO0lBRUEsdUVBQXVFO0lBQ3ZFLDBCQUEwQjtJQUMxQkksT0FBTWEsU0FBUyxDQUFDO1FBQ2QsSUFBSWYsVUFBVSxNQUFNO1lBQ2xCO1FBQ0Y7UUFFQSxNQUFNZ0IsT0FBT2hCLE9BQU9pQixXQUFXO1FBQy9CLDhDQUE4QztRQUM5QyxJQUFJLENBQUVELENBQUFBLGdCQUFnQkUsVUFBQUEsR0FBYTtZQUNqQztRQUNGO1FBQ0EsTUFBTUMsYUFBYUg7UUFDbkIsU0FBU0ksUUFBUVAsQ0FBZ0I7WUFDL0IsTUFBTVEsS0FBS0YsV0FBV0csYUFBYTtZQUNuQyxJQUNFVCxFQUFFVSxHQUFHLEtBQUssV0FDVkYsY0FBY0csZUFDZEgsR0FBR0ksWUFBWSxDQUFDLFlBQVksUUFDNUI7Z0JBQ0FaLEVBQUVDLGNBQWM7Z0JBQ2hCRCxFQUFFYSxlQUFlO2dCQUVqQkwsR0FBR00sS0FBSztZQUNWO1FBQ0Y7UUFFQSxTQUFTQztZQUNQLDJHQUEyRztZQUMzRyw2RUFBNkU7WUFDN0V2QixRQUFRQyxTQUFTQyxRQUFRLEtBQUssV0FBV0M7UUFDM0M7UUFFQVcsV0FBV1UsZ0JBQWdCLENBQUMsV0FBV1Q7UUFDdkNVLE9BQU9ELGdCQUFnQixDQUFDLFNBQVNEO1FBQ2pDRSxPQUFPRCxnQkFBZ0IsQ0FBQyxRQUFRRDtRQUNoQyxPQUFPO1lBQ0xULFdBQVdZLG1CQUFtQixDQUFDLFdBQVdYO1lBQzFDVSxPQUFPQyxtQkFBbUIsQ0FBQyxTQUFTSDtZQUNwQ0UsT0FBT0MsbUJBQW1CLENBQUMsUUFBUUg7UUFDckM7SUFDRixHQUFHO1FBQUM1QjtLQUFPO0lBRVgsT0FDRSxXQURGLEdBQ0UsSUFBQWdDLFlBQUFDLElBQUEsRUFBQ0MsT0FBQUE7UUFDQ0MsS0FBSzFCO1FBQ0wyQixzQkFBa0I7UUFDbEJDLFVBQVUsQ0FBQztRQUNYakMsTUFBTUE7UUFDTmtDLG1CQUFpQnZDLEtBQUssQ0FBQyxrQkFBa0I7UUFDekN3QyxvQkFBa0J4QyxLQUFLLENBQUMsbUJBQW1CO1FBQzNDeUMsY0FBVzs7MEJBRVgsSUFBQVIsWUFBQVMsR0FBQSxFQUFDUCxPQUFBQTtnQkFBSVEsNkJBQXlCO2dCQUFDQyxXQUFXLFlBQVU5Qzs7WUFDbkREOzs7QUFHUDtHQTdFTUY7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9EaWFsb2cudHN4P2UyYmIiXSwibmFtZXMiOlsiRGlhbG9nIiwicGFyYW0iLCJjaGlsZHJlbiIsInR5cGUiLCJvbkNsb3NlIiwicHJvcHMiLCJkaWFsb2ciLCJzZXREaWFsb2ciLCJSZWFjdCIsInVzZVN0YXRlIiwicm9sZSIsInNldFJvbGUiLCJkb2N1bWVudCIsImhhc0ZvY3VzIiwidW5kZWZpbmVkIiwib25EaWFsb2ciLCJ1c2VDYWxsYmFjayIsIm5vZGUiLCJ1c2VPbkNsaWNrT3V0c2lkZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInVzZUVmZmVjdCIsInJvb3QiLCJnZXRSb290Tm9kZSIsIlNoYWRvd1Jvb3QiLCJzaGFkb3dSb290IiwiaGFuZGxlciIsImVsIiwiYWN0aXZlRWxlbWVudCIsImtleSIsIkhUTUxFbGVtZW50IiwiZ2V0QXR0cmlidXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2xpY2siLCJoYW5kbGVGb2N1cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJ3aW5kb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2pzeHJ1bnRpbWUiLCJqc3hzIiwiZGl2IiwicmVmIiwiZGF0YS1uZXh0anMtZGlhbG9nIiwidGFiSW5kZXgiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYS1tb2RhbCIsImpzeCIsImRhdGEtbmV4dGpzLWRpYWxvZy1iYW5uZXIiLCJjbGFzc05hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js":
|
||
/*!*************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js ***!
|
||
\*************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogBody\", ({\n enumerable: true,\n get: function() {\n return DialogBody;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst DialogBody = function DialogBody(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-body\": true,\n className: className,\n children: children\n });\n};\n_c = DialogBody;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogBody.js.map\nvar _c;\n$RefreshReg$(_c, \"DialogBody\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0JvZHkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs4Q0FrQlNBOzs7ZUFBQUE7Ozs7OzZFQWxCYztBQU92QixNQUFNQSxhQUF3QyxTQUFTQSxXQUFXQyxLQUdqRTtJQUhpRSxNQUNoRUMsUUFBUSxFQUNSQyxTQUFTLEVBQ1YsR0FIaUVGO0lBSWhFLE9BQ0UsV0FERixHQUNFLElBQUFHLFlBQUFDLEdBQUEsRUFBQ0MsT0FBQUE7UUFBSUMsMkJBQXVCO1FBQUNKLFdBQVdBO2tCQUNyQ0Q7O0FBR1A7S0FUTUYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9EaWFsb2dCb2R5LnRzeD9iNTljIl0sIm5hbWVzIjpbIkRpYWxvZ0JvZHkiLCJwYXJhbSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJkaXYiLCJkYXRhLW5leHRqcy1kaWFsb2ctYm9keSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js":
|
||
/*!****************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js ***!
|
||
\****************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogContent\", ({\n enumerable: true,\n get: function() {\n return DialogContent;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst DialogContent = function DialogContent(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-content\": true,\n className: className,\n children: children\n });\n};\n_c = DialogContent;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogContent.js.map\nvar _c;\n$RefreshReg$(_c, \"DialogContent\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0NvbnRlbnQuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFrQlNBOzs7ZUFBQUE7Ozs7OzZFQWxCYztBQU92QixNQUFNQSxnQkFBOEMsU0FBU0EsY0FBY0MsS0FHMUU7SUFIMEUsTUFDekVDLFFBQVEsRUFDUkMsU0FBUyxFQUNWLEdBSDBFRjtJQUl6RSxPQUNFLFdBREYsR0FDRSxJQUFBRyxZQUFBQyxHQUFBLEVBQUNDLE9BQUFBO1FBQUlDLDhCQUEwQjtRQUFDSixXQUFXQTtrQkFDeENEOztBQUdQO0tBVE1GIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nQ29udGVudC50c3g/YzY3ZiJdLCJuYW1lcyI6WyJEaWFsb2dDb250ZW50IiwicGFyYW0iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsIl9qc3hydW50aW1lIiwianN4IiwiZGl2IiwiZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js":
|
||
/*!***************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js ***!
|
||
\***************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogHeader\", ({\n enumerable: true,\n get: function() {\n return DialogHeader;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst DialogHeader = function DialogHeader(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-header\": true,\n className: className,\n children: children\n });\n};\n_c = DialogHeader;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogHeader.js.map\nvar _c;\n$RefreshReg$(_c, \"DialogHeader\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0hlYWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7O2dEQWtCU0E7OztlQUFBQTs7Ozs7NkVBbEJjO0FBT3ZCLE1BQU1BLGVBQTRDLFNBQVNBLGFBQWFDLEtBR3ZFO0lBSHVFLE1BQ3RFQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVixHQUh1RUY7SUFJdEUsT0FDRSxXQURGLEdBQ0UsSUFBQUcsWUFBQUMsR0FBQSxFQUFDQyxPQUFBQTtRQUFJQyw2QkFBeUI7UUFBQ0osV0FBV0E7a0JBQ3ZDRDs7QUFHUDtLQVRNRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0hlYWRlci50c3g/Y2ZkOSJdLCJuYW1lcyI6WyJEaWFsb2dIZWFkZXIiLCJwYXJhbSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJkaXYiLCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js":
|
||
/*!********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js ***!
|
||
\********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Dialog: function() {\n return _Dialog.Dialog;\n },\n DialogBody: function() {\n return _DialogBody.DialogBody;\n },\n DialogContent: function() {\n return _DialogContent.DialogContent;\n },\n DialogHeader: function() {\n return _DialogHeader.DialogHeader;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _Dialog = __webpack_require__(/*! ./Dialog */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js\");\nconst _DialogBody = __webpack_require__(/*! ./DialogBody */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js\");\nconst _DialogContent = __webpack_require__(/*! ./DialogContent */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js\");\nconst _DialogHeader = __webpack_require__(/*! ./DialogHeader */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js\");\nconst _styles = __webpack_require__(/*! ./styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFTQSxRQUFNO2VBQU5BLFFBQUFBLE1BQU07O0lBQ05DLFlBQVU7ZUFBVkEsWUFBQUEsVUFBVTs7SUFDVkMsZUFBYTtlQUFiQSxlQUFBQSxhQUFhOztJQUNiQyxjQUFZO2VBQVpBLGNBQUFBLFlBQVk7O0lBQ1pDLFFBQU07ZUFBTkEsUUFBQUEsTUFBTTs7O29DQUpRO3dDQUNJOzJDQUNHOzBDQUNEO29DQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvaW5kZXgudHM/YzA4OSJdLCJuYW1lcyI6WyJEaWFsb2ciLCJEaWFsb2dCb2R5IiwiRGlhbG9nQ29udGVudCIsIkRpYWxvZ0hlYWRlciIsInN0eWxlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js":
|
||
/*!*********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js ***!
|
||
\*********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog] {\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n outline: none;\\n background: var(--color-background);\\n border-radius: var(--size-gap);\\n box-shadow: 0 var(--size-gap-half) var(--size-gap-double)\\n rgba(0, 0, 0, 0.25);\\n max-height: calc(100% - 56px);\\n overflow-y: hidden;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n max-height: calc(100% - 15px);\\n }\\n }\\n\\n @media (min-width: 576px) {\\n [data-nextjs-dialog] {\\n max-width: 540px;\\n box-shadow: 0 var(--size-gap) var(--size-gap-quad) rgba(0, 0, 0, 0.25);\\n }\\n }\\n\\n @media (min-width: 768px) {\\n [data-nextjs-dialog] {\\n max-width: 720px;\\n }\\n }\\n\\n @media (min-width: 992px) {\\n [data-nextjs-dialog] {\\n max-width: 960px;\\n }\\n }\\n\\n [data-nextjs-dialog-banner] {\\n position: relative;\\n }\\n [data-nextjs-dialog-banner].banner-warning {\\n border-color: var(--color-ansi-yellow);\\n }\\n [data-nextjs-dialog-banner].banner-error {\\n border-color: var(--color-ansi-red);\\n }\\n\\n [data-nextjs-dialog-banner]::after {\\n z-index: 2;\\n content: '';\\n position: absolute;\\n top: 0;\\n right: 0;\\n width: 100%;\\n /* banner width: */\\n border-top-width: var(--size-gap-half);\\n border-bottom-width: 0;\\n border-top-style: solid;\\n border-bottom-style: solid;\\n border-top-color: inherit;\\n border-bottom-color: transparent;\\n }\\n\\n [data-nextjs-dialog-content] {\\n overflow-y: auto;\\n border: none;\\n margin: 0;\\n /* calc(padding + banner width offset) */\\n padding: calc(var(--size-gap-double) + var(--size-gap-half))\\n var(--size-gap-double);\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n }\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: var(--size-gap-double);\\n }\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n position: relative;\\n flex: 1 1 auto;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiOzs7OzBDQTBGU0E7OztlQUFBQTs7OzswQ0ExRm1COzs7Ozs7Ozs7O0FBRTVCLE1BQU1BLFNBQUFBLENBQUFBLEdBQVNDLGNBQUFBLElBQUcsRUFBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9zdHlsZXMudHM/MDY5NSJdLCJuYW1lcyI6WyJzdHlsZXMiLCJjc3MiLCJfdGVtcGxhdGVPYmplY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js":
|
||
/*!***************************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js ***!
|
||
\***************************************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"LeftRightDialogHeader\", ({\n enumerable: true,\n get: function() {\n return LeftRightDialogHeader;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _CloseIcon = __webpack_require__(/*! ../../icons/CloseIcon */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\");\nconst LeftRightDialogHeader = function LeftRightDialogHeader(param) {\n _s();\n let { children, className, previous, next, close } = param;\n const buttonLeft = _react.useRef(null);\n const buttonRight = _react.useRef(null);\n const buttonClose = _react.useRef(null);\n const [nav, setNav] = _react.useState(null);\n const onNav = _react.useCallback((el)=>{\n setNav(el);\n }, []);\n _react.useEffect(()=>{\n if (nav == null) {\n return;\n }\n const root = nav.getRootNode();\n const d = self.document;\n function handler(e) {\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n e.stopPropagation();\n if (buttonLeft.current) {\n buttonLeft.current.focus();\n }\n previous && previous();\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n e.stopPropagation();\n if (buttonRight.current) {\n buttonRight.current.focus();\n }\n next && next();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n if (root instanceof ShadowRoot) {\n const a = root.activeElement;\n if (a && a !== buttonClose.current && a instanceof HTMLElement) {\n a.blur();\n return;\n }\n }\n close == null ? void 0 : close();\n }\n }\n root.addEventListener(\"keydown\", handler);\n if (root !== d) {\n d.addEventListener(\"keydown\", handler);\n }\n return function() {\n root.removeEventListener(\"keydown\", handler);\n if (root !== d) {\n d.removeEventListener(\"keydown\", handler);\n }\n };\n }, [\n close,\n nav,\n next,\n previous\n ]);\n // Unlock focus for browsers like Firefox, that break all user focus if the\n // currently focused item becomes disabled.\n _react.useEffect(()=>{\n if (nav == null) {\n return;\n }\n const root = nav.getRootNode();\n // Always true, but we do this for TypeScript:\n if (root instanceof ShadowRoot) {\n const a = root.activeElement;\n if (previous == null) {\n if (buttonLeft.current && a === buttonLeft.current) {\n buttonLeft.current.blur();\n }\n } else if (next == null) {\n if (buttonRight.current && a === buttonRight.current) {\n buttonRight.current.blur();\n }\n }\n }\n }, [\n nav,\n next,\n previous\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-dialog-left-right\": true,\n className: className,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"nav\", {\n ref: onNav,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n ref: buttonLeft,\n type: \"button\",\n disabled: previous == null ? true : undefined,\n \"aria-disabled\": previous == null ? true : undefined,\n onClick: previous != null ? previous : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"previous\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6.99996 1.16666L1.16663 6.99999L6.99996 12.8333M12.8333 6.99999H1.99996H12.8333Z\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n ref: buttonRight,\n type: \"button\",\n disabled: next == null ? true : undefined,\n \"aria-disabled\": next == null ? true : undefined,\n onClick: next != null ? next : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"next\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6.99996 1.16666L12.8333 6.99999L6.99996 12.8333M1.16663 6.99999H12H1.16663Z\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n })\n }),\n children\n ]\n }),\n close ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n \"data-nextjs-errors-dialog-left-right-close-button\": true,\n ref: buttonClose,\n type: \"button\",\n onClick: close,\n \"aria-label\": \"Close\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CloseIcon.CloseIcon, {})\n })\n }) : null\n ]\n });\n};\n_s(LeftRightDialogHeader, \"BTIclYWDjFVmQ0IbTZR6SGMkDDk=\");\n_c = LeftRightDialogHeader;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=LeftRightDialogHeader.js.map\nvar _c;\n$RefreshReg$(_c, \"LeftRightDialogHeader\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL0xlZnRSaWdodERpYWxvZ0hlYWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7eURBd0tTQTs7O2VBQUFBOzs7Ozs2RUF4S2M7dUNBQ0c7QUFVMUIsTUFBTUEsd0JBQ0osU0FBU0Esc0JBQXNCQyxLQU05Qjs7SUFOOEIsTUFDN0JDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxRQUFRLEVBQ1JDLElBQUksRUFDSkMsS0FBSyxFQUNOLEdBTjhCTDtJQU83QixNQUFNTSxhQUFhQyxPQUFNQyxNQUFNLENBQTJCO0lBQzFELE1BQU1DLGNBQWNGLE9BQU1DLE1BQU0sQ0FBMkI7SUFDM0QsTUFBTUUsY0FBY0gsT0FBTUMsTUFBTSxDQUEyQjtJQUUzRCxNQUFNLENBQUNHLEtBQUtDLE9BQU8sR0FBR0wsT0FBTU0sUUFBUSxDQUFxQjtJQUN6RCxNQUFNQyxRQUFRUCxPQUFNUSxXQUFXLENBQUMsQ0FBQ0M7UUFDL0JKLE9BQU9JO0lBQ1QsR0FBRyxFQUFFO0lBRUxULE9BQU1VLFNBQVMsQ0FBQztRQUNkLElBQUlOLE9BQU8sTUFBTTtZQUNmO1FBQ0Y7UUFFQSxNQUFNTyxPQUFPUCxJQUFJUSxXQUFXO1FBQzVCLE1BQU1DLElBQUlDLEtBQUtDLFFBQVE7UUFFdkIsU0FBU0MsUUFBUUMsQ0FBZ0I7WUFDL0IsSUFBSUEsRUFBRUMsR0FBRyxLQUFLLGFBQWE7Z0JBQ3pCRCxFQUFFRSxjQUFjO2dCQUNoQkYsRUFBRUcsZUFBZTtnQkFDakIsSUFBSXJCLFdBQVdzQixPQUFPLEVBQUU7b0JBQ3RCdEIsV0FBV3NCLE9BQU8sQ0FBQ0MsS0FBSztnQkFDMUI7Z0JBQ0ExQixZQUFZQTtZQUNkLE9BQU8sSUFBSXFCLEVBQUVDLEdBQUcsS0FBSyxjQUFjO2dCQUNqQ0QsRUFBRUUsY0FBYztnQkFDaEJGLEVBQUVHLGVB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LElBQUFmLFlBQUFLLEdBQUEsRUFBQ1csU0FBQUE7OENBQU07OzhDQUNQLElBQUFoQixZQUFBSyxHQUFBLEVBQUNZLFFBQUFBO29DQUNDbEMsR0FBRTtvQ0FDRm1DLFFBQU87b0NBQ1BDLGFBQVk7b0NBQ1pDLGVBQWM7b0NBQ2RDLGdCQUFlOzs7OztvQkFJcEJ6RDs7O1lBRUZJLFFBQ0MsV0FEREEsR0FDQyxJQUFBZ0MsWUFBQUssR0FBQSxFQUFDQyxVQUFBQTtnQkFDQ2dCLHFEQUFpRDtnQkFDakRsQixLQUFLL0I7Z0JBQ0xrQyxNQUFLO2dCQUNMSSxTQUFTM0M7Z0JBQ1R1RCxjQUFXOzBCQUVYLGtCQUFBdkIsWUFBQUssR0FBQSxFQUFDbUIsUUFBQUE7b0JBQUtDLGVBQVk7OEJBQ2hCLGtCQUFBekIsWUFBQUssR0FBQSxFQUFDcUIsV0FBQUEsU0FBUzs7aUJBR1o7OztBQUdWO0dBM0pJaEU7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9MZWZ0UmlnaHREaWFsb2dIZWFkZXIudHN4Pzc5OWYiXSwibmFtZXMiOlsiTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwicGFyYW0iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInByZXZpb3VzIiwibmV4dCIsImNsb3NlIiwiYnV0dG9uTGVmdCIsIlJlYWN0IiwidXNlUmVmIiwiYnV0dG9uUmlnaHQiLCJidXR0b25DbG9zZSIsIm5hdiIsInNldE5hdiIsInVzZVN0YXRlIiwib25OYXYiLCJ1c2VDYWxsYmFjayIsImVsIiwidXNlRWZmZWN0Iiwicm9vdCIsImdldFJvb3ROb2RlIiwiZCIsInNlbGYiLCJkb2N1bWVudCIsImhhbmRsZXIiLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjdXJyZW50IiwiZm9jdXMiLCJTaGFkb3dSb290IiwiYSIsImFjdGl2ZUVsZW1lbnQiLCJIVE1MRWxlbWVudCIsImJsdXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9qc3hydW50aW1lIiwianN4cyIsImRpdiIsImRhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0IiwicmVmIiwianN4IiwiYnV0dG9uIiwidHlwZSIsImRpc2FibGVkIiwidW5kZWZpbmVkIiwiYXJpYS1kaXNhYmxlZCIsIm9uQ2xpY2siLCJzdmciLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwidGl0bGUiLCJwYXRoIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJkYXRhLW5leHRqcy1lcnJvcnMtZGlhbG9nLWxlZnQtcmlnaHQtY2xvc2UtYnV0dG9uIiwiYXJpYS1sYWJlbCIsInNwYW4iLCJhcmlhLWhpZGRlbiIsIkNsb3NlSWNvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js":
|
||
/*!***********************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js ***!
|
||
\***********************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n LeftRightDialogHeader: function() {\n return _LeftRightDialogHeader.LeftRightDialogHeader;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _LeftRightDialogHeader = __webpack_require__(/*! ./LeftRightDialogHeader */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js\");\nconst _styles = __webpack_require__(/*! ./styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFTQSx1QkFBcUI7ZUFBckJBLHVCQUFBQSxxQkFBcUI7O0lBQ3JCQyxRQUFNO2VBQU5BLFFBQUFBLE1BQU07OzttREFEdUI7b0NBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9pbmRleC50cz9iZjcxIl0sIm5hbWVzIjpbIkxlZnRSaWdodERpYWxvZ0hlYWRlciIsInN0eWxlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js":
|
||
/*!************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js ***!
|
||
\************************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog-left-right] {\\n display: flex;\\n flex-direction: row;\\n align-content: center;\\n align-items: center;\\n justify-content: space-between;\\n }\\n [data-nextjs-dialog-left-right] > nav {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n margin-right: var(--size-gap);\\n }\\n [data-nextjs-dialog-left-right] > nav > button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n\\n width: calc(var(--size-gap-double) + var(--size-gap));\\n height: calc(var(--size-gap-double) + var(--size-gap));\\n font-size: 0;\\n border: none;\\n background-color: rgba(255, 85, 85, 0.1);\\n color: var(--color-ansi-red);\\n cursor: pointer;\\n transition: background-color 0.25s ease;\\n }\\n [data-nextjs-dialog-left-right] > nav > button > svg {\\n width: auto;\\n height: calc(var(--size-gap) + var(--size-gap-half));\\n }\\n [data-nextjs-dialog-left-right] > nav > button:hover {\\n background-color: rgba(255, 85, 85, 0.2);\\n }\\n [data-nextjs-dialog-left-right] > nav > button:disabled {\\n background-color: rgba(255, 85, 85, 0.1);\\n color: rgba(255, 85, 85, 0.4);\\n cursor: not-allowed;\\n }\\n\\n [data-nextjs-dialog-left-right] > nav > button:first-of-type {\\n border-radius: var(--size-gap-half) 0 0 var(--size-gap-half);\\n margin-right: 1px;\\n }\\n [data-nextjs-dialog-left-right] > nav > button:last-of-type {\\n border-radius: 0 var(--size-gap-half) var(--size-gap-half) 0;\\n }\\n\\n [data-nextjs-dialog-left-right] > button:last-of-type {\\n border: 0;\\n padding: 0;\\n\\n background-color: transparent;\\n appearance: none;\\n\\n opacity: 0.4;\\n transition: opacity 0.25s ease;\\n\\n color: var(--color-font);\\n }\\n [data-nextjs-dialog-left-right] > button:last-of-type:hover {\\n opacity: 0.7;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiOzs7OzBDQW9FU0E7OztlQUFBQTs7OzswQ0FwRW1COzs7Ozs7Ozs7O0FBRTVCLE1BQU1BLFNBQUFBLENBQUFBLEdBQVNDLGNBQUFBLElBQUcsRUFBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9zdHlsZXMudHM/OWQ5MiJdLCJuYW1lcyI6WyJzdHlsZXMiLCJjc3MiLCJfdGVtcGxhdGVPYmplY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js":
|
||
/*!***********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js ***!
|
||
\***********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Overlay\", ({\n enumerable: true,\n get: function() {\n return Overlay;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _maintaintabfocus = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./maintain--tab-focus */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _bodylocker = __webpack_require__(/*! ./body-locker */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js\");\nconst Overlay = function Overlay(param) {\n _s();\n let { className, children, fixed } = param;\n _react.useEffect(()=>{\n (0, _bodylocker.lock)();\n return ()=>{\n (0, _bodylocker.unlock)();\n };\n }, []);\n const [overlay, setOverlay] = _react.useState(null);\n const onOverlay = _react.useCallback((el)=>{\n setOverlay(el);\n }, []);\n _react.useEffect(()=>{\n if (overlay == null) {\n return;\n }\n const handle2 = (0, _maintaintabfocus.default)({\n context: overlay\n });\n return ()=>{\n handle2.disengage();\n };\n }, [\n overlay\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-dialog-overlay\": true,\n className: className,\n ref: onOverlay,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-backdrop\": true,\n \"data-nextjs-dialog-backdrop-fixed\": fixed ? true : undefined\n }),\n children\n ]\n });\n};\n_s(Overlay, \"7AKWSbA/gHapd2YTyFggUak94M8=\");\n_c = Overlay;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Overlay.js.map\nvar _c;\n$RefreshReg$(_c, \"Overlay\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OzsyQ0FpRFNBOzs7ZUFBQUE7Ozs7Ozt1RkFqRFk7NkVBQ0U7d0NBQ007QUFRN0IsTUFBTUEsVUFBa0MsU0FBU0EsUUFBUUMsS0FJeEQ7O0lBSndELE1BQ3ZEQyxTQUFTLEVBQ1RDLFFBQVEsRUFDUkMsS0FBSyxFQUNOLEdBSndESDtJQUt2REksT0FBTUMsU0FBUyxDQUFDO1FBQ2RDLENBQUFBLEdBQUFBLFlBQUFBLElBQUk7UUFDSixPQUFPO1lBQ0xDLENBQUFBLEdBQUFBLFlBQUFBLE1BQU07UUFDUjtJQUNGLEdBQUcsRUFBRTtJQUVMLE1BQU0sQ0FBQ0MsU0FBU0MsV0FBVyxHQUFHTCxPQUFNTSxRQUFRLENBQXdCO0lBQ3BFLE1BQU1DLFlBQVlQLE9BQU1RLFdBQVcsQ0FBQyxDQUFDQztRQUNuQ0osV0FBV0k7SUFDYixHQUFHLEVBQUU7SUFFTFQsT0FBTUMsU0FBUyxDQUFDO1FBQ2QsSUFBSUcsV0FBVyxNQUFNO1lBQ25CO1FBQ0Y7UUFFQSxNQUFNTSxVQUFVQyxDQUFBQSxHQUFBQSxrQkFBQUEsT0FBUSxFQUFDO1lBQUVDLFNBQVNSO1FBQVE7UUFDNUMsT0FBTztZQUNMTSxRQUFRRyxTQUFTO1FBQ25CO0lBQ0YsR0FBRztRQUFDVDtLQUFRO0lBRVosT0FDRSxXQURGLEdBQ0UsSUFBQVUsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtRQUFJQyw4QkFBMEI7UUFBQ3BCLFdBQVdBO1FBQVdxQixLQUFLWDs7MEJBQ3pELElBQUFPLFlBQUFLLEdBQUEsRUFBQ0gsT0FBQUE7Z0JBQ0NJLCtCQUEyQjtnQkFDM0JDLHFDQUFtQ3RCLFFBQVEsT0FBT3VCOztZQUVuRHhCOzs7QUFHUDtHQXJDTUg7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3g/MWU5YiJdLCJuYW1lcyI6WyJPdmVybGF5IiwicGFyYW0iLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsImZpeGVkIiwiUmVhY3QiLCJ1c2VFZmZlY3QiLCJsb2NrIiwidW5sb2NrIiwib3ZlcmxheSIsInNldE92ZXJsYXkiLCJ1c2VTdGF0ZSIsIm9uT3ZlcmxheSIsInVzZUNhbGxiYWNrIiwiZWwiLCJoYW5kbGUyIiwiYWxseVRyYXAiLCJjb250ZXh0IiwiZGlzZW5nYWdlIiwiX2pzeHJ1bnRpbWUiLCJqc3hzIiwiZGl2IiwiZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXkiLCJyZWYiLCJqc3giLCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AiLCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AtZml4ZWQiLCJ1bmRlZmluZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js":
|
||
/*!***************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js ***!
|
||
\***************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n lock: function() {\n return lock;\n },\n unlock: function() {\n return unlock;\n }\n});\nlet previousBodyPaddingRight;\nlet previousBodyOverflowSetting;\nlet activeLocks = 0;\nfunction lock() {\n setTimeout(()=>{\n if (activeLocks++ > 0) {\n return;\n }\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n if (scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = \"\" + scrollBarGap + \"px\";\n }\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n });\n}\nfunction unlock() {\n setTimeout(()=>{\n if (activeLocks === 0 || --activeLocks !== 0) {\n return;\n }\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n previousBodyPaddingRight = undefined;\n }\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n previousBodyOverflowSetting = undefined;\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=body-locker.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9ib2R5LWxvY2tlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFLZ0JBLE1BQUk7ZUFBSkE7O0lBbUJBQyxRQUFNO2VBQU5BOzs7QUF4QmhCLElBQUlDO0FBQ0osSUFBSUM7QUFFSixJQUFJQyxjQUFjO0FBRVgsU0FBU0o7SUFDZEssV0FBVztRQUNULElBQUlELGdCQUFnQixHQUFHO1lBQ3JCO1FBQ0Y7UUFFQSxNQUFNRSxlQUNKQyxPQUFPQyxVQUFVLEdBQUdDLFNBQVNDLGVBQWUsQ0FBQ0MsV0FBVztRQUUxRCxJQUFJTCxlQUFlLEdBQUc7WUFDcEJKLDJCQUEyQk8sU0FBU0csSUFBSSxDQUFDQyxLQUFLLENBQUNDLFlBQVk7WUFDM0RMLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxZQUFZLEdBQUcsS0FBR1IsZUFBYTtRQUNyRDtRQUVBSCw4QkFBOEJNLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxRQUFRO1FBQzFETixTQUFTRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsUUFBUSxHQUFHO0lBQ2pDO0FBQ0Y7QUFFTyxTQUFTZDtJQUNkSSxXQUFXO1FBQ1QsSUFBSUQsZ0JBQWdCLEtBQUssRUFBRUEsZ0JBQWdCLEdBQUc7WUFDNUM7UUFDRjtRQUVBLElBQUlGLDZCQUE2QmMsV0FBVztZQUMxQ1AsU0FBU0csSUFBSSxDQUFDQyxLQUFLLENBQUNDLFlBQVksR0FBR1o7WUFDbkNBLDJCQUEyQmM7UUFDN0I7UUFFQSxJQUFJYixnQ0FBZ0NhLFdBQVc7WUFDN0NQLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxRQUFRLEdBQUdaO1lBQy9CQSw4QkFBOEJhO1FBQ2hDO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9ib2R5LWxvY2tlci50cz9mOTc1Il0sIm5hbWVzIjpbImxvY2siLCJ1bmxvY2siLCJwcmV2aW91c0JvZHlQYWRkaW5nUmlnaHQiLCJwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmciLCJhY3RpdmVMb2NrcyIsInNldFRpbWVvdXQiLCJzY3JvbGxCYXJHYXAiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImJvZHkiLCJzdHlsZSIsInBhZGRpbmdSaWdodCIsIm92ZXJmbG93IiwidW5kZWZpbmVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js":
|
||
/*!*********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js ***!
|
||
\*********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Overlay\", ({\n enumerable: true,\n get: function() {\n return _Overlay.Overlay;\n }\n}));\nconst _Overlay = __webpack_require__(/*! ./Overlay */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQUFTQTs7O2VBQUFBLFNBQUFBLE9BQU87OztxQ0FBUSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC50c3g/OTM4YyJdLCJuYW1lcyI6WyJPdmVybGF5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js":
|
||
/*!***********************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js ***!
|
||
\***********************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* eslint-disable */ // @ts-nocheck\n// Copied from https://github.com/medialize/ally.js\n// License: MIT\n// Copyright (c) 2015 Rodney Rehm\n//\n// Entrypoint: ally.js/maintain/tab-focus\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _platform = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/platform */ \"./node_modules/next/dist/compiled/platform/platform.js\"));\nconst _cssescape = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/css.escape */ \"./node_modules/next/dist/compiled/css.escape/css.escape.js\"));\n// input may be undefined, selector-tring, Node, NodeList, HTMLCollection, array of Nodes\n// yes, to some extent this is a bad replica of jQuery's constructor function\nfunction nodeArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n // instanceof Node - does not work with iframes\n if (input.nodeType !== undefined) {\n return [\n input\n ];\n }\n if (typeof input === \"string\") {\n input = document.querySelectorAll(input);\n }\n if (input.length !== undefined) {\n return [].slice.call(input, 0);\n }\n throw new TypeError(\"unexpected input \" + String(input));\n}\nfunction contextToElement(_ref) {\n var context = _ref.context, _ref$label = _ref.label, label = _ref$label === undefined ? \"context-to-element\" : _ref$label, resolveDocument = _ref.resolveDocument, defaultToDocument = _ref.defaultToDocument;\n var element = nodeArray(context)[0];\n if (resolveDocument && element && element.nodeType === Node.DOCUMENT_NODE) {\n element = element.documentElement;\n }\n if (!element && defaultToDocument) {\n return document.documentElement;\n }\n if (!element) {\n throw new TypeError(label + \" requires valid options.context\");\n }\n if (element.nodeType !== Node.ELEMENT_NODE && element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n throw new TypeError(label + \" requires options.context to be an Element\");\n }\n return element;\n}\nfunction getShadowHost() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context;\n var element = contextToElement({\n label: \"get/shadow-host\",\n context: context\n });\n // walk up to the root\n var container = null;\n while(element){\n container = element;\n element = element.parentNode;\n }\n // https://developer.mozilla.org/docs/Web/API/Node.nodeType\n // NOTE: Firefox 34 does not expose ShadowRoot.host (but 37 does)\n if (container.nodeType === container.DOCUMENT_FRAGMENT_NODE && container.host) {\n // the root is attached to a fragment node that has a host\n return container.host;\n }\n return null;\n}\nfunction getDocument(node) {\n if (!node) {\n return document;\n }\n if (node.nodeType === Node.DOCUMENT_NODE) {\n return node;\n }\n return node.ownerDocument || document;\n}\nfunction isActiveElement(context) {\n var element = contextToElement({\n label: \"is/active-element\",\n resolveDocument: true,\n context: context\n });\n var _document = getDocument(element);\n if (_document.activeElement === element) {\n return true;\n }\n var shadowHost = getShadowHost({\n context: element\n });\n if (shadowHost && shadowHost.shadowRoot.activeElement === element) {\n return true;\n }\n return false;\n}\n// [elem, elem.parent, elem.parent.parent, …, html]\n// will not contain the shadowRoot (DOCUMENT_FRAGMENT_NODE) and shadowHost\nfunction getParents() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context;\n var list = [];\n var element = contextToElement({\n label: \"get/parents\",\n context: context\n });\n while(element){\n list.push(element);\n // IE does know support parentElement on SVGElement\n element = element.parentNode;\n if (element && element.nodeType !== Node.ELEMENT_NODE) {\n element = null;\n }\n }\n return list;\n}\n// Element.prototype.matches may be available at a different name\n// https://developer.mozilla.org/en/docs/Web/API/Element/matches\nvar names = [\n \"matches\",\n \"webkitMatchesSelector\",\n \"mozMatchesSelector\",\n \"msMatchesSelector\"\n];\nvar name = null;\nfunction findMethodName(element) {\n names.some(function(_name) {\n if (!element[_name]) {\n return false;\n }\n name = _name;\n return true;\n });\n}\nfunction elementMatches(element, selector) {\n if (!name) {\n findMethodName(element);\n }\n return element[name](selector);\n}\n// deep clone of original platform\nvar platform = JSON.parse(JSON.stringify(_platform.default));\n// operating system\nvar os = platform.os.family || \"\";\nvar ANDROID = os === \"Android\";\nvar WINDOWS = os.slice(0, 7) === \"Windows\";\nvar OSX = os === \"OS X\";\nvar IOS = os === \"iOS\";\n// layout\nvar BLINK = platform.layout === \"Blink\";\nvar GECKO = platform.layout === \"Gecko\";\nvar TRIDENT = platform.layout === \"Trident\";\nvar EDGE = platform.layout === \"EdgeHTML\";\nvar WEBKIT = platform.layout === \"WebKit\";\n// browser version (not layout engine version!)\nvar version = parseFloat(platform.version);\nvar majorVersion = Math.floor(version);\nplatform.majorVersion = majorVersion;\nplatform.is = {\n // operating system\n ANDROID: ANDROID,\n WINDOWS: WINDOWS,\n OSX: OSX,\n IOS: IOS,\n // layout\n BLINK: BLINK,\n GECKO: GECKO,\n TRIDENT: TRIDENT,\n EDGE: EDGE,\n WEBKIT: WEBKIT,\n // INTERNET EXPLORERS\n IE9: TRIDENT && majorVersion === 9,\n IE10: TRIDENT && majorVersion === 10,\n IE11: TRIDENT && majorVersion === 11\n};\nfunction before() {\n var data = {\n // remember what had focus to restore after test\n activeElement: document.activeElement,\n // remember scroll positions to restore after test\n windowScrollTop: window.scrollTop,\n windowScrollLeft: window.scrollLeft,\n bodyScrollTop: document.body.scrollTop,\n bodyScrollLeft: document.body.scrollLeft\n };\n // wrap tests in an element hidden from screen readers to prevent them\n // from announcing focus, which can be quite irritating to the user\n var iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"style\", \"position:absolute; position:fixed; top:0; left:-2px; width:1px; height:1px; overflow:hidden;\");\n iframe.setAttribute(\"aria-live\", \"off\");\n iframe.setAttribute(\"aria-busy\", \"true\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(iframe);\n var _window = iframe.contentWindow;\n var _document = _window.document;\n _document.open();\n _document.close();\n var wrapper = _document.createElement(\"div\");\n _document.body.appendChild(wrapper);\n data.iframe = iframe;\n data.wrapper = wrapper;\n data.window = _window;\n data.document = _document;\n return data;\n}\n// options.element:\n// {string} element name\n// {function} callback(wrapper, document) to generate an element\n// options.mutate: (optional)\n// {function} callback(element, wrapper, document) to manipulate element prior to focus-test.\n// Can return DOMElement to define focus target (default: element)\n// options.validate: (optional)\n// {function} callback(element, focusTarget, document) to manipulate test-result\nfunction test(data, options) {\n // make sure we operate on a clean slate\n data.wrapper.innerHTML = \"\";\n // create dummy element to test focusability of\n var element = typeof options.element === \"string\" ? data.document.createElement(options.element) : options.element(data.wrapper, data.document);\n // allow callback to further specify dummy element\n // and optionally define element to focus\n var focus = options.mutate && options.mutate(element, data.wrapper, data.document);\n if (!focus && focus !== false) {\n focus = element;\n }\n // element needs to be part of the DOM to be focusable\n !element.parentNode && data.wrapper.appendChild(element);\n // test if the element with invalid tabindex can be focused\n focus && focus.focus && focus.focus();\n // validate test's result\n return options.validate ? options.validate(element, focus, data.document) : data.document.activeElement === focus;\n}\nfunction after(data) {\n // restore focus to what it was before test and cleanup\n if (data.activeElement === document.body) {\n document.activeElement && document.activeElement.blur && document.activeElement.blur();\n if (platform.is.IE10) {\n // IE10 does not redirect focus to <body> when the activeElement is removed\n document.body.focus();\n }\n } else {\n data.activeElement && data.activeElement.focus && data.activeElement.focus();\n }\n document.body.removeChild(data.iframe);\n // restore scroll position\n window.scrollTop = data.windowScrollTop;\n window.scrollLeft = data.windowScrollLeft;\n document.body.scrollTop = data.bodyScrollTop;\n document.body.scrollLeft = data.bodyScrollLeft;\n}\nfunction detectFocus(tests) {\n var data = before();\n var results = {};\n Object.keys(tests).map(function(key) {\n results[key] = test(data, tests[key]);\n });\n after(data);\n return results;\n}\n// this file is overwritten by `npm run build:pre`\nvar version$1 = \"1.4.1\";\n/*\n Facility to cache test results in localStorage.\n\n USAGE:\n cache.get('key');\n cache.set('key', 'value');\n */ function readLocalStorage(key) {\n // allow reading from storage to retrieve previous support results\n // even while the document does not have focus\n var data = void 0;\n try {\n data = window.localStorage && window.localStorage.getItem(key);\n data = data ? JSON.parse(data) : {};\n } catch (e) {\n data = {};\n }\n return data;\n}\nfunction writeLocalStorage(key, value) {\n if (!document.hasFocus()) {\n // if the document does not have focus when tests are executed, focus() may\n // not be handled properly and events may not be dispatched immediately.\n // This can happen when a document is reloaded while Developer Tools have focus.\n try {\n window.localStorage && window.localStorage.removeItem(key);\n } catch (e) {\n // ignore\n }\n return;\n }\n try {\n window.localStorage && window.localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n // ignore\n }\n}\nvar userAgent = true && window.navigator.userAgent || \"\";\nvar cacheKey = \"ally-supports-cache\";\nvar cache = readLocalStorage(cacheKey);\n// update the cache if ally or the user agent changed (newer version, etc)\nif (cache.userAgent !== userAgent || cache.version !== version$1) {\n cache = {};\n}\ncache.userAgent = userAgent;\ncache.version = version$1;\nvar cache$1 = {\n get: function get() {\n return cache;\n },\n set: function set(values) {\n Object.keys(values).forEach(function(key) {\n cache[key] = values[key];\n });\n cache.time = new Date().toISOString();\n writeLocalStorage(cacheKey, cache);\n }\n};\nfunction cssShadowPiercingDeepCombinator() {\n var combinator = void 0;\n // see https://dev.w3.org/csswg/css-scoping-1/#deep-combinator\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1117572\n // https://code.google.com/p/chromium/issues/detail?id=446051\n try {\n document.querySelector(\"html >>> :first-child\");\n combinator = \">>>\";\n } catch (noArrowArrowArrow) {\n try {\n // old syntax supported at least up to Chrome 41\n // https://code.google.com/p/chromium/issues/detail?id=446051\n document.querySelector(\"html /deep/ :first-child\");\n combinator = \"/deep/\";\n } catch (noDeep) {\n combinator = \"\";\n }\n }\n return combinator;\n}\nvar gif = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaImgTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\">' + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" src=\"' + gif + '\">';\n return element.querySelector(\"area\");\n }\n};\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\">' + '<area href=\"#void\" tabindex=\"-1\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" alt=\"\" src=\"' + gif + '\">';\n return false;\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // fixes https://github.com/medialize/ally.js/issues/35\n // Firefox loads the DataURI asynchronously, causing a false-negative\n return true;\n }\n var focus = element.querySelector(\"area\");\n focus.focus();\n return _document.activeElement === focus;\n }\n};\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaWithoutHref = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-area-href-test\">' + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-area-href-test\" alt=\"\" src=\"' + gif + '\">';\n return element.querySelector(\"area\");\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // fixes https://github.com/medialize/ally.js/issues/35\n // Firefox loads the DataURI asynchronously, causing a false-negative\n return true;\n }\n return _document.activeElement === focusTarget;\n }\n};\nvar focusAudioWithoutControls = {\n name: \"can-focus-audio-without-controls\",\n element: \"audio\",\n mutate: function mutate(element) {\n try {\n // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n element.setAttribute(\"src\", gif);\n } catch (e) {\n // IE9 may throw \"Error: Not implemented\"\n }\n }\n};\nvar invalidGif = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\";\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusBrokenImageMap = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"broken-image-map-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#broken-image-map-test\" alt=\"\" src=\"' + invalidGif + '\">';\n return element.querySelector(\"area\");\n }\n};\n// Children of focusable elements with display:flex are focusable in IE10-11\nvar focusChildrenOfFocusableFlexbox = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"-1\");\n element.setAttribute(\"style\", \"display: -webkit-flex; display: -ms-flexbox; display: flex;\");\n element.innerHTML = '<span style=\"display: block;\">hello</span>';\n return element.querySelector(\"span\");\n }\n};\n// fieldset[tabindex=0][disabled] should not be focusable, but Blink and WebKit disagree\n// @specification https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\n// @browser-issue Chromium https://crbug.com/453847\n// @browser-issue WebKit https://bugs.webkit.org/show_bug.cgi?id=141086\nvar focusFieldsetDisabled = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", 0);\n element.setAttribute(\"disabled\", \"disabled\");\n }\n};\nvar focusFieldset = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.innerHTML = \"<legend>legend</legend><p>content</p>\";\n }\n};\n// elements with display:flex are focusable in IE10-11\nvar focusFlexboxContainer = {\n element: \"span\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"display: -webkit-flex; display: -ms-flexbox; display: flex;\");\n element.innerHTML = '<span style=\"display: block;\">hello</span>';\n }\n};\n// form[tabindex=0][disabled] should be focusable as the\n// specification doesn't know the disabled attribute on the form element\n// @specification https://www.w3.org/TR/html5/forms.html#the-form-element\nvar focusFormDisabled = {\n element: \"form\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", 0);\n element.setAttribute(\"disabled\", \"disabled\");\n }\n};\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// fixes https://github.com/medialize/ally.js/issues/20\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-ismap\nvar focusImgIsmap = {\n element: \"a\",\n mutate: function mutate(element) {\n element.href = \"#void\";\n element.innerHTML = '<img ismap src=\"' + gif + '\" alt=\"\">';\n return element.querySelector(\"img\");\n }\n};\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusImgUsemapTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" ' + 'src=\"' + gif + '\">';\n return element.querySelector(\"img\");\n }\n};\nvar focusInHiddenIframe = {\n element: function element(wrapper, _document) {\n var iframe = _document.createElement(\"iframe\");\n // iframe must be part of the DOM before accessing the contentWindow is possible\n wrapper.appendChild(iframe);\n // create the iframe's default document (<html><head></head><body></body></html>)\n var iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.close();\n return iframe;\n },\n mutate: function mutate(iframe) {\n iframe.style.visibility = \"hidden\";\n var iframeDocument = iframe.contentWindow.document;\n var input = iframeDocument.createElement(\"input\");\n iframeDocument.body.appendChild(input);\n return input;\n },\n validate: function validate(iframe) {\n var iframeDocument = iframe.contentWindow.document;\n var focus = iframeDocument.querySelector(\"input\");\n return iframeDocument.activeElement === focus;\n }\n};\nvar result = !platform.is.WEBKIT;\nfunction focusInZeroDimensionObject() {\n return result;\n}\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusInvalidTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"invalid-value\");\n }\n};\nvar focusLabelTabindex = {\n element: \"label\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"-1\");\n },\n validate: function validate(element, focusTarget, _document) {\n // force layout in Chrome 49, otherwise the element won't be focusable\n /* eslint-disable no-unused-vars */ var variableToPreventDeadCodeElimination = element.offsetHeight;\n /* eslint-enable no-unused-vars */ element.focus();\n return _document.activeElement === element;\n }\n};\nvar svg = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb\" + \"G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ\" + \"zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==\";\n// Note: IE10 on BrowserStack does not like this test\nvar focusObjectSvgHidden = {\n element: \"object\",\n mutate: function mutate(element) {\n element.setAttribute(\"type\", \"image/svg+xml\");\n element.setAttribute(\"data\", svg);\n element.setAttribute(\"width\", \"200\");\n element.setAttribute(\"height\", \"50\");\n element.style.visibility = \"hidden\";\n }\n};\n// Note: IE10 on BrowserStack does not like this test\nvar focusObjectSvg = {\n name: \"can-focus-object-svg\",\n element: \"object\",\n mutate: function mutate(element) {\n element.setAttribute(\"type\", \"image/svg+xml\");\n element.setAttribute(\"data\", svg);\n element.setAttribute(\"width\", \"200\");\n element.setAttribute(\"height\", \"50\");\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // Firefox seems to be handling the object creation asynchronously and thereby produces a false negative test result.\n // Because we know Firefox is able to focus object elements referencing SVGs, we simply cheat by sniffing the user agent string\n return true;\n }\n return _document.activeElement === element;\n }\n};\n// Every Environment except IE9 considers SWF objects focusable\nvar result$1 = !platform.is.IE9;\nfunction focusObjectSwf() {\n return result$1;\n}\nvar focusRedirectImgUsemap = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"focus-redirect-img-usemap\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#focus-redirect-img-usemap\" alt=\"\" ' + 'src=\"' + gif + '\">';\n // focus the <img>, not the <div>\n return element.querySelector(\"img\");\n },\n validate: function validate(element, focusTarget, _document) {\n var target = element.querySelector(\"area\");\n return _document.activeElement === target;\n }\n};\n// see https://jsbin.com/nenirisage/edit?html,js,console,output\nvar focusRedirectLegend = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.innerHTML = '<legend>legend</legend><input tabindex=\"-1\"><input tabindex=\"0\">';\n // take care of focus in validate();\n return false;\n },\n validate: function validate(element, focusTarget, _document) {\n var focusable = element.querySelector('input[tabindex=\"-1\"]');\n var tabbable = element.querySelector('input[tabindex=\"0\"]');\n // Firefox requires this test to focus the <fieldset> first, while this is not necessary in\n // https://jsbin.com/nenirisage/edit?html,js,console,output\n element.focus();\n element.querySelector(\"legend\").focus();\n return _document.activeElement === focusable && \"focusable\" || _document.activeElement === tabbable && \"tabbable\" || \"\";\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollBody = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px; overflow: auto;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n return element.querySelector(\"div\");\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainerWithoutOverflow = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainer = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px; overflow: auto;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n }\n};\nvar focusSummary = {\n element: \"details\",\n mutate: function mutate(element) {\n element.innerHTML = \"<summary>foo</summary><p>content</p>\";\n return element.firstElementChild;\n }\n};\nfunction makeFocusableForeignObject() {\n // Constructs <foreignObject width=\"30\" height=\"30\"><input type=\"text\"/></foreignObject>\n // without raising a Trusted Types violation\n var foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\");\n foreignObject.width.baseVal.value = 30;\n foreignObject.height.baseVal.value = 30;\n foreignObject.appendChild(document.createElement(\"input\"));\n foreignObject.lastChild.type = \"text\";\n return foreignObject;\n}\nfunction focusSvgForeignObjectHack(element) {\n // Edge13, Edge14: foreignObject focus hack\n // https://jsbin.com/kunehinugi/edit?html,js,output\n // https://jsbin.com/fajagi/3/edit?html,js,output\n var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === \"svg\";\n if (!isSvgElement) {\n return false;\n }\n // inject and focus an <input> element into the SVG element to receive focus\n var foreignObject = makeFocusableForeignObject();\n element.appendChild(foreignObject);\n var input = foreignObject.querySelector(\"input\");\n input.focus();\n // upon disabling the activeElement, IE and Edge\n // will not shift focus to <body> like all the other\n // browsers, but instead find the first focusable\n // ancestor and shift focus to that\n input.disabled = true;\n // clean up\n element.removeChild(foreignObject);\n return true;\n}\nfunction generate(element) {\n return '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">' + element + \"</svg>\";\n}\nfunction focus(element) {\n if (element.focus) {\n return;\n }\n try {\n HTMLElement.prototype.focus.call(element);\n } catch (e) {\n focusSvgForeignObjectHack(element);\n }\n}\nfunction validate(element, focusTarget, _document) {\n focus(focusTarget);\n return _document.activeElement === focusTarget;\n}\nvar focusSvgFocusableAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text focusable=\"true\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgTabindexAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text tabindex=\"0\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgNegativeTabindexAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text tabindex=\"-1\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgUseTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate([\n '<g id=\"ally-test-target\"><a xlink:href=\"#void\"><text>link</text></a></g>',\n '<use xlink:href=\"#ally-test-target\" x=\"0\" y=\"0\" tabindex=\"-1\" />'\n ].join(\"\"));\n return element.querySelector(\"use\");\n },\n validate: validate\n};\nvar focusSvgForeignobjectTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<foreignObject tabindex=\"-1\"><input type=\"text\" /></foreignObject>');\n // Safari 8's querySelector() can't identify foreignObject, but getElementsByTagName() can\n return element.querySelector(\"foreignObject\") || element.getElementsByTagName(\"foreignObject\")[0];\n },\n validate: validate\n};\n// Firefox seems to be handling the SVG-document-in-iframe creation asynchronously\n// and thereby produces a false negative test result. Thus the test is pointless\n// and we resort to UA sniffing once again.\n// see http://jsbin.com/vunadohoko/1/edit?js,console,output\nvar result$2 = Boolean(platform.is.GECKO && typeof SVGElement !== \"undefined\" && SVGElement.prototype.focus);\nfunction focusSvgInIframe() {\n return result$2;\n}\nvar focusSvg = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate(\"\");\n return element.firstChild;\n },\n validate: validate\n};\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusTabindexTrailingCharacters = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"3x\");\n }\n};\nvar focusTable = {\n element: \"table\",\n mutate: function mutate(element, wrapper, _document) {\n // IE9 has a problem replacing TBODY contents with innerHTML.\n // https://stackoverflow.com/a/8097055/515124\n // element.innerHTML = '<tr><td>cell</td></tr>';\n var fragment = _document.createDocumentFragment();\n fragment.innerHTML = \"<tr><td>cell</td></tr>\";\n element.appendChild(fragment);\n }\n};\nvar focusVideoWithoutControls = {\n element: \"video\",\n mutate: function mutate(element) {\n try {\n // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n element.setAttribute(\"src\", gif);\n } catch (e) {\n // IE9 may throw \"Error: Not implemented\"\n }\n }\n};\n// https://jsbin.com/vafaba/3/edit?html,js,console,output\nvar result$3 = platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE;\nfunction tabsequenceAreaAtImgPosition() {\n return result$3;\n}\nvar testCallbacks = {\n cssShadowPiercingDeepCombinator: cssShadowPiercingDeepCombinator,\n focusInZeroDimensionObject: focusInZeroDimensionObject,\n focusObjectSwf: focusObjectSwf,\n focusSvgInIframe: focusSvgInIframe,\n tabsequenceAreaAtImgPosition: tabsequenceAreaAtImgPosition\n};\nvar testDescriptions = {\n focusAreaImgTabindex: focusAreaImgTabindex,\n focusAreaTabindex: focusAreaTabindex,\n focusAreaWithoutHref: focusAreaWithoutHref,\n focusAudioWithoutControls: focusAudioWithoutControls,\n focusBrokenImageMap: focusBrokenImageMap,\n focusChildrenOfFocusableFlexbox: focusChildrenOfFocusableFlexbox,\n focusFieldsetDisabled: focusFieldsetDisabled,\n focusFieldset: focusFieldset,\n focusFlexboxContainer: focusFlexboxContainer,\n focusFormDisabled: focusFormDisabled,\n focusImgIsmap: focusImgIsmap,\n focusImgUsemapTabindex: focusImgUsemapTabindex,\n focusInHiddenIframe: focusInHiddenIframe,\n focusInvalidTabindex: focusInvalidTabindex,\n focusLabelTabindex: focusLabelTabindex,\n focusObjectSvg: focusObjectSvg,\n focusObjectSvgHidden: focusObjectSvgHidden,\n focusRedirectImgUsemap: focusRedirectImgUsemap,\n focusRedirectLegend: focusRedirectLegend,\n focusScrollBody: focusScrollBody,\n focusScrollContainerWithoutOverflow: focusScrollContainerWithoutOverflow,\n focusScrollContainer: focusScrollContainer,\n focusSummary: focusSummary,\n focusSvgFocusableAttribute: focusSvgFocusableAttribute,\n focusSvgTabindexAttribute: focusSvgTabindexAttribute,\n focusSvgNegativeTabindexAttribute: focusSvgNegativeTabindexAttribute,\n focusSvgUseTabindex: focusSvgUseTabindex,\n focusSvgForeignobjectTabindex: focusSvgForeignobjectTabindex,\n focusSvg: focusSvg,\n focusTabindexTrailingCharacters: focusTabindexTrailingCharacters,\n focusTable: focusTable,\n focusVideoWithoutControls: focusVideoWithoutControls\n};\nfunction executeTests() {\n var results = detectFocus(testDescriptions);\n Object.keys(testCallbacks).forEach(function(key) {\n results[key] = testCallbacks[key]();\n });\n return results;\n}\nvar supportsCache = null;\nfunction _supports() {\n if (supportsCache) {\n return supportsCache;\n }\n supportsCache = cache$1.get();\n if (!supportsCache.time) {\n cache$1.set(executeTests());\n supportsCache = cache$1.get();\n }\n return supportsCache;\n}\nvar supports = void 0;\n// https://www.w3.org/TR/html5/infrastructure.html#rules-for-parsing-integers\n// NOTE: all browsers agree to allow trailing spaces as well\nvar validIntegerPatternNoTrailing = /^\\s*(-|\\+)?[0-9]+\\s*$/;\nvar validIntegerPatternWithTrailing = /^\\s*(-|\\+)?[0-9]+.*$/;\nfunction isValidTabindex(context) {\n if (!supports) {\n supports = _supports();\n }\n var validIntegerPattern = supports.focusTabindexTrailingCharacters ? validIntegerPatternWithTrailing : validIntegerPatternNoTrailing;\n var element = contextToElement({\n label: \"is/valid-tabindex\",\n resolveDocument: true,\n context: context\n });\n // Edge 14 has a capitalization problem on SVG elements,\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n var hasTabindex = element.hasAttribute(\"tabindex\");\n var hasTabIndex = element.hasAttribute(\"tabIndex\");\n if (!hasTabindex && !hasTabIndex) {\n return false;\n }\n // older Firefox and Internet Explorer don't support tabindex on SVG elements\n var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === \"svg\";\n if (isSvgElement && !supports.focusSvgTabindexAttribute) {\n return false;\n }\n // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n if (supports.focusInvalidTabindex) {\n return true;\n }\n // an element matches the tabindex selector even if its value is invalid\n var tabindex = element.getAttribute(hasTabindex ? \"tabindex\" : \"tabIndex\");\n // IE11 parses tabindex=\"\" as the value \"-32768\"\n // @browser-issue Trident https://connect.microsoft.com/IE/feedback/details/1072965\n if (tabindex === \"-32768\") {\n return false;\n }\n return Boolean(tabindex && validIntegerPattern.test(tabindex));\n}\nfunction tabindexValue(element) {\n if (!isValidTabindex(element)) {\n return null;\n }\n // Edge 14 has a capitalization problem on SVG elements,\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n var hasTabindex = element.hasAttribute(\"tabindex\");\n var attributeName = hasTabindex ? \"tabindex\" : \"tabIndex\";\n // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n var tabindex = parseInt(element.getAttribute(attributeName), 10);\n return isNaN(tabindex) ? -1 : tabindex;\n}\n// this is a shared utility file for focus-relevant.js and tabbable.js\n// separate testing of this file's functions is not necessary,\n// as they're implicitly tested by way of the consumers\nfunction isUserModifyWritable(style) {\n // https://www.w3.org/TR/1999/WD-css3-userint-19990916#user-modify\n // https://github.com/medialize/ally.js/issues/17\n var userModify = style.webkitUserModify || \"\";\n return Boolean(userModify && userModify.indexOf(\"write\") !== -1);\n}\nfunction hasCssOverflowScroll(style) {\n return [\n style.getPropertyValue(\"overflow\"),\n style.getPropertyValue(\"overflow-x\"),\n style.getPropertyValue(\"overflow-y\")\n ].some(function(overflow) {\n return overflow === \"auto\" || overflow === \"scroll\";\n });\n}\nfunction hasCssDisplayFlex(style) {\n return style.display.indexOf(\"flex\") > -1;\n}\nfunction isScrollableContainer(element, nodeName, parentNodeName, parentStyle) {\n if (nodeName !== \"div\" && nodeName !== \"span\") {\n // Internet Explorer advances scrollable containers and bodies to focusable\n // only if the scrollable container is <div> or <span> - this does *not*\n // happen for <section>, <article>, …\n return false;\n }\n if (parentNodeName && parentNodeName !== \"div\" && parentNodeName !== \"span\" && !hasCssOverflowScroll(parentStyle)) {\n return false;\n }\n return element.offsetHeight < element.scrollHeight || element.offsetWidth < element.scrollWidth;\n}\nvar supports$1 = void 0;\nfunction isFocusRelevantRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n flexbox: false,\n scrollable: false,\n shadow: false\n } : _ref$except;\n if (!supports$1) {\n supports$1 = _supports();\n }\n var element = contextToElement({\n label: \"is/focus-relevant\",\n resolveDocument: true,\n context: context\n });\n if (!except.shadow && element.shadowRoot) {\n // a ShadowDOM host receives focus when the focus moves to its content\n return true;\n }\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"input\" && element.type === \"hidden\") {\n // input[type=\"hidden\"] supports.cannot be focused\n return false;\n }\n if (nodeName === \"input\" || nodeName === \"select\" || nodeName === \"button\" || nodeName === \"textarea\") {\n return true;\n }\n if (nodeName === \"legend\" && supports$1.focusRedirectLegend) {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"label\") {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"area\") {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"a\" && element.hasAttribute(\"href\")) {\n return true;\n }\n if (nodeName === \"object\" && element.hasAttribute(\"usemap\")) {\n // object[usemap] is not focusable in any browser\n return false;\n }\n if (nodeName === \"object\") {\n var svgType = element.getAttribute(\"type\");\n if (!supports$1.focusObjectSvg && svgType === \"image/svg+xml\") {\n // object[type=\"image/svg+xml\"] is not focusable in Internet Explorer\n return false;\n } else if (!supports$1.focusObjectSwf && svgType === \"application/x-shockwave-flash\") {\n // object[type=\"application/x-shockwave-flash\"] is not focusable in Internet Explorer 9\n return false;\n }\n }\n if (nodeName === \"iframe\" || nodeName === \"object\") {\n // browsing context containers\n return true;\n }\n if (nodeName === \"embed\" || nodeName === \"keygen\") {\n // embed is considered focus-relevant but not focusable\n // see https://github.com/medialize/ally.js/issues/82\n return true;\n }\n if (element.hasAttribute(\"contenteditable\")) {\n // also see CSS property user-modify below\n return true;\n }\n if (nodeName === \"audio\" && (supports$1.focusAudioWithoutControls || element.hasAttribute(\"controls\"))) {\n return true;\n }\n if (nodeName === \"video\" && (supports$1.focusVideoWithoutControls || element.hasAttribute(\"controls\"))) {\n return true;\n }\n if (supports$1.focusSummary && nodeName === \"summary\") {\n return true;\n }\n var validTabindex = isValidTabindex(element);\n if (nodeName === \"img\" && element.hasAttribute(\"usemap\")) {\n // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n // it appears the tabindex is overruled so focus is still forwarded to the <map>\n return validTabindex && supports$1.focusImgUsemapTabindex || supports$1.focusRedirectImgUsemap;\n }\n if (supports$1.focusTable && (nodeName === \"table\" || nodeName === \"td\")) {\n // IE10-11 supports.can focus <table> and <td>\n return true;\n }\n if (supports$1.focusFieldset && nodeName === \"fieldset\") {\n // IE10-11 supports.can focus <fieldset>\n return true;\n }\n var isSvgElement = nodeName === \"svg\";\n var isSvgContent = element.ownerSVGElement;\n var focusableAttribute = element.getAttribute(\"focusable\");\n var tabindex = tabindexValue(element);\n if (nodeName === \"use\" && tabindex !== null && !supports$1.focusSvgUseTabindex) {\n // <use> cannot be made focusable by adding a tabindex attribute anywhere but Blink and WebKit\n return false;\n }\n if (nodeName === \"foreignobject\") {\n // <use> can only be made focusable in Blink and WebKit\n return tabindex !== null && supports$1.focusSvgForeignobjectTabindex;\n }\n if (elementMatches(element, \"svg a\") && element.hasAttribute(\"xlink:href\")) {\n return true;\n }\n if ((isSvgElement || isSvgContent) && element.focus && !supports$1.focusSvgNegativeTabindexAttribute && tabindex < 0) {\n // Firefox 51 and 52 treat any natively tabbable SVG element with\n // tabindex=\"-1\" as tabbable and everything else as inert\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n return false;\n }\n if (isSvgElement) {\n return validTabindex || supports$1.focusSvg || supports$1.focusSvgInIframe || // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n Boolean(supports$1.focusSvgFocusableAttribute && focusableAttribute && focusableAttribute === \"true\");\n }\n if (isSvgContent) {\n if (supports$1.focusSvgTabindexAttribute && validTabindex) {\n return true;\n }\n if (supports$1.focusSvgFocusableAttribute) {\n // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n return focusableAttribute === \"true\";\n }\n }\n // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n if (validTabindex) {\n return true;\n }\n var style = window.getComputedStyle(element, null);\n if (isUserModifyWritable(style)) {\n return true;\n }\n if (supports$1.focusImgIsmap && nodeName === \"img\" && element.hasAttribute(\"ismap\")) {\n // IE10-11 considers the <img> in <a href><img ismap> focusable\n // https://github.com/medialize/ally.js/issues/20\n var hasLinkParent = getParents({\n context: element\n }).some(function(parent) {\n return parent.nodeName.toLowerCase() === \"a\" && parent.hasAttribute(\"href\");\n });\n if (hasLinkParent) {\n return true;\n }\n }\n // https://github.com/medialize/ally.js/issues/21\n if (!except.scrollable && supports$1.focusScrollContainer) {\n if (supports$1.focusScrollContainerWithoutOverflow) {\n // Internet Explorer does will consider the scrollable area focusable\n // if the element is a <div> or a <span> and it is in fact scrollable,\n // regardless of the CSS overflow property\n if (isScrollableContainer(element, nodeName)) {\n return true;\n }\n } else if (hasCssOverflowScroll(style)) {\n // Firefox requires proper overflow setting, IE does not necessarily\n // https://developer.mozilla.org/docs/Web/CSS/overflow\n return true;\n }\n }\n if (!except.flexbox && supports$1.focusFlexboxContainer && hasCssDisplayFlex(style)) {\n // elements with display:flex are focusable in IE10-11\n return true;\n }\n var parent = element.parentElement;\n if (!except.scrollable && parent) {\n var parentNodeName = parent.nodeName.toLowerCase();\n var parentStyle = window.getComputedStyle(parent, null);\n if (supports$1.focusScrollBody && isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n // scrollable bodies are focusable Internet Explorer\n // https://github.com/medialize/ally.js/issues/21\n return true;\n }\n // Children of focusable elements with display:flex are focusable in IE10-11\n if (supports$1.focusChildrenOfFocusableFlexbox) {\n if (hasCssDisplayFlex(parentStyle)) {\n return true;\n }\n }\n }\n // NOTE: elements marked as inert are not focusable,\n // but that property is not exposed to the DOM\n // https://www.w3.org/TR/html5/editing.html#inert\n return false;\n}\n// bind exceptions to an iterator callback\nisFocusRelevantRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isFocusRelevant = function isFocusRelevant(context) {\n return isFocusRelevantRules({\n context: context,\n except: except\n });\n };\n isFocusRelevant.rules = isFocusRelevantRules;\n return isFocusRelevant;\n};\n// provide isFocusRelevant(context) as default iterator callback\nvar isFocusRelevant = isFocusRelevantRules.except({});\nfunction findIndex(array, callback) {\n // attempt to use native or polyfilled Array#findIndex first\n if (array.findIndex) {\n return array.findIndex(callback);\n }\n var length = array.length;\n // shortcut if the array is empty\n if (length === 0) {\n return -1;\n }\n // otherwise loop over array\n for(var i = 0; i < length; i++){\n if (callback(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n}\nfunction getContentDocument(node) {\n try {\n // works on <object> and <iframe>\n return node.contentDocument || // works on <object> and <iframe>\n node.contentWindow && node.contentWindow.document || // works on <object> and <iframe> that contain SVG\n node.getSVGDocument && node.getSVGDocument() || null;\n } catch (e) {\n // SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement'\n // also IE may throw member not found exception e.g. on <object type=\"image/png\">\n return null;\n }\n}\nfunction getWindow(node) {\n var _document = getDocument(node);\n return _document.defaultView || window;\n}\nvar shadowPrefix = void 0;\nfunction selectInShadows(selector) {\n if (typeof shadowPrefix !== \"string\") {\n var operator = cssShadowPiercingDeepCombinator();\n if (operator) {\n shadowPrefix = \", html \" + operator + \" \";\n }\n }\n if (!shadowPrefix) {\n return selector;\n }\n return selector + shadowPrefix + selector.replace(/\\s*,\\s*/g, \",\").split(\",\").join(shadowPrefix);\n}\nvar selector = void 0;\nfunction findDocumentHostElement(_window) {\n if (!selector) {\n selector = selectInShadows(\"object, iframe\");\n }\n if (_window._frameElement !== undefined) {\n return _window._frameElement;\n }\n _window._frameElement = null;\n var potentialHosts = _window.parent.document.querySelectorAll(selector);\n [].some.call(potentialHosts, function(element) {\n var _document = getContentDocument(element);\n if (_document !== _window.document) {\n return false;\n }\n _window._frameElement = element;\n return true;\n });\n return _window._frameElement;\n}\nfunction getFrameElement(element) {\n var _window = getWindow(element);\n if (!_window.parent || _window.parent === _window) {\n // if there is no parent browsing context,\n // we're not going to get a frameElement either way\n return null;\n }\n try {\n // see https://developer.mozilla.org/docs/Web/API/Window/frameElement\n // does not work within <embed> anywhere, and not within in <object> in IE\n return _window.frameElement || findDocumentHostElement(_window);\n } catch (e) {\n return null;\n }\n}\n// https://www.w3.org/TR/html5/rendering.html#being-rendered\n// <area> is not rendered, but we *consider* it visible to simplfiy this function's usage\nvar notRenderedElementsPattern = /^(area)$/;\nfunction computedStyle(element, property) {\n return window.getComputedStyle(element, null).getPropertyValue(property);\n}\nfunction notDisplayed(_path) {\n return _path.some(function(element) {\n // display:none is not visible (optimized away at layout)\n return computedStyle(element, \"display\") === \"none\";\n });\n}\nfunction notVisible(_path) {\n // https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L109-L114\n // NOTE: a nested element can reverse visibility:hidden|collapse by explicitly setting visibility:visible\n // NOTE: visibility can be [\"\", \"visible\", \"hidden\", \"collapse\"]\n var hidden = findIndex(_path, function(element) {\n var visibility = computedStyle(element, \"visibility\");\n return visibility === \"hidden\" || visibility === \"collapse\";\n });\n if (hidden === -1) {\n // there is no hidden element\n return false;\n }\n var visible = findIndex(_path, function(element) {\n return computedStyle(element, \"visibility\") === \"visible\";\n });\n if (visible === -1) {\n // there is no visible element (but a hidden element)\n return true;\n }\n if (hidden < visible) {\n // there is a hidden element and it's closer than the first visible element\n return true;\n }\n // there may be a hidden element, but the closest element is visible\n return false;\n}\nfunction collapsedParent(_path) {\n var offset = 1;\n if (_path[0].nodeName.toLowerCase() === \"summary\") {\n offset = 2;\n }\n return _path.slice(offset).some(function(element) {\n // \"content children\" of a closed details element are not visible\n return element.nodeName.toLowerCase() === \"details\" && element.open === false;\n });\n}\nfunction isVisibleRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n notRendered: false,\n cssDisplay: false,\n cssVisibility: false,\n detailsElement: false,\n browsingContext: false\n } : _ref$except;\n var element = contextToElement({\n label: \"is/visible\",\n resolveDocument: true,\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n if (!except.notRendered && notRenderedElementsPattern.test(nodeName)) {\n return true;\n }\n var _path = getParents({\n context: element\n });\n // in Internet Explorer <audio> has a default display: none, where others have display: inline\n // but IE allows focusing <audio style=\"display:none\">, but not <div display:none><audio>\n // this is irrelevant to other browsers, as the controls attribute is required to make <audio> focusable\n var isAudioWithoutControls = nodeName === \"audio\" && !element.hasAttribute(\"controls\");\n if (!except.cssDisplay && notDisplayed(isAudioWithoutControls ? _path.slice(1) : _path)) {\n return false;\n }\n if (!except.cssVisibility && notVisible(_path)) {\n return false;\n }\n if (!except.detailsElement && collapsedParent(_path)) {\n return false;\n }\n if (!except.browsingContext) {\n // elements within a browsing context are affected by the\n // browsing context host element's visibility and tabindex\n var frameElement = getFrameElement(element);\n var _isVisible = isVisibleRules.except(except);\n if (frameElement && !_isVisible(frameElement)) {\n return false;\n }\n }\n return true;\n}\n// bind exceptions to an iterator callback\nisVisibleRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isVisible = function isVisible(context) {\n return isVisibleRules({\n context: context,\n except: except\n });\n };\n isVisible.rules = isVisibleRules;\n return isVisible;\n};\n// provide isVisible(context) as default iterator callback\nvar isVisible = isVisibleRules.except({});\nfunction getMapByName(name, _document) {\n // apparently getElementsByName() also considers id attribute in IE & opera\n // https://developer.mozilla.org/docs/Web/API/Document/getElementsByName\n var map = _document.querySelector('map[name=\"' + (0, _cssescape.default)(name) + '\"]');\n return map || null;\n}\nfunction getImageOfArea(element) {\n var map = element.parentElement;\n if (!map.name || map.nodeName.toLowerCase() !== \"map\") {\n return null;\n }\n // NOTE: image maps can also be applied to <object> with image content,\n // but no browser supports this at the moment\n // HTML5 specifies HTMLMapElement.images to be an HTMLCollection of all\n // <img> and <object> referencing the <map> element, but no browser implements this\n // https://www.w3.org/TR/html5/embedded-content-0.html#the-map-element\n // https://developer.mozilla.org/docs/Web/API/HTMLMapElement\n // the image must be valid and loaded for the map to take effect\n var _document = getDocument(element);\n return _document.querySelector('img[usemap=\"#' + (0, _cssescape.default)(map.name) + '\"]') || null;\n}\nvar supports$2 = void 0;\n// https://developer.mozilla.org/docs/Web/HTML/Element/map\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\n// https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L88-L107\nfunction isValidArea(context) {\n if (!supports$2) {\n supports$2 = _supports();\n }\n var element = contextToElement({\n label: \"is/valid-area\",\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName !== \"area\") {\n return false;\n }\n var hasTabindex = element.hasAttribute(\"tabindex\");\n if (!supports$2.focusAreaTabindex && hasTabindex) {\n // Blink and WebKit do not consider <area tabindex=\"-1\" href=\"#void\"> focusable\n return false;\n }\n var img = getImageOfArea(element);\n if (!img || !isVisible(img)) {\n return false;\n }\n // Firefox only allows fully loaded images to reference image maps\n // https://stereochro.me/ideas/detecting-broken-images-js\n if (!supports$2.focusBrokenImageMap && (!img.complete || !img.naturalHeight || img.offsetWidth <= 0 || img.offsetHeight <= 0)) {\n return false;\n }\n // Firefox supports.can focus area elements even if they don't have an href attribute\n if (!supports$2.focusAreaWithoutHref && !element.href) {\n // Internet explorer supports.can focus area elements without href if either\n // the area element or the image element has a tabindex attribute\n return supports$2.focusAreaTabindex && hasTabindex || supports$2.focusAreaImgTabindex && img.hasAttribute(\"tabindex\");\n }\n // https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\n var childOfInteractive = getParents({\n context: img\n }).slice(1).some(function(_element) {\n var name = _element.nodeName.toLowerCase();\n return name === \"button\" || name === \"a\";\n });\n if (childOfInteractive) {\n return false;\n }\n return true;\n}\nvar supports$3 = void 0;\n// https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\nvar disabledElementsPattern = void 0;\nvar disabledElements = {\n input: true,\n select: true,\n textarea: true,\n button: true,\n fieldset: true,\n form: true\n};\nfunction isNativeDisabledSupported(context) {\n if (!supports$3) {\n supports$3 = _supports();\n if (supports$3.focusFieldsetDisabled) {\n delete disabledElements.fieldset;\n }\n if (supports$3.focusFormDisabled) {\n delete disabledElements.form;\n }\n disabledElementsPattern = new RegExp(\"^(\" + Object.keys(disabledElements).join(\"|\") + \")$\");\n }\n var element = contextToElement({\n label: \"is/native-disabled-supported\",\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n return Boolean(disabledElementsPattern.test(nodeName));\n}\nvar supports$4 = void 0;\nfunction isDisabledFieldset(element) {\n var nodeName = element.nodeName.toLowerCase();\n return nodeName === \"fieldset\" && element.disabled;\n}\nfunction isDisabledForm(element) {\n var nodeName = element.nodeName.toLowerCase();\n return nodeName === \"form\" && element.disabled;\n}\nfunction isDisabled(context) {\n if (!supports$4) {\n supports$4 = _supports();\n }\n var element = contextToElement({\n label: \"is/disabled\",\n context: context\n });\n if (element.hasAttribute(\"data-ally-disabled\")) {\n // treat ally's element/disabled like the DOM native element.disabled\n return true;\n }\n if (!isNativeDisabledSupported(element)) {\n // non-form elements do not support the disabled attribute\n return false;\n }\n if (element.disabled) {\n // the element itself is disabled\n return true;\n }\n var parents = getParents({\n context: element\n });\n if (parents.some(isDisabledFieldset)) {\n // a parental <fieldset> is disabld and inherits the state onto this element\n return true;\n }\n if (!supports$4.focusFormDisabled && parents.some(isDisabledForm)) {\n // a parental <form> is disabld and inherits the state onto this element\n return true;\n }\n return false;\n}\nfunction isOnlyTabbableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n onlyFocusableBrowsingContext: false,\n visible: false\n } : _ref$except;\n var element = contextToElement({\n label: \"is/only-tabbable\",\n resolveDocument: true,\n context: context\n });\n if (!except.visible && !isVisible(element)) {\n return false;\n }\n if (!except.onlyFocusableBrowsingContext && (platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE)) {\n var frameElement = getFrameElement(element);\n if (frameElement) {\n if (tabindexValue(frameElement) < 0) {\n // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n // tabbable demotion onto elements of their browsing contexts\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n var tabindex = tabindexValue(element);\n if (nodeName === \"label\" && platform.is.GECKO) {\n // Firefox cannot focus, but tab to: label[tabindex=0]\n return tabindex !== null && tabindex >= 0;\n }\n // SVG Elements were keyboard focusable but not script focusable before Firefox 51.\n // Firefox 51 added the focus management DOM API (.focus and .blur) to SVGElement,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=778654\n if (platform.is.GECKO && element.ownerSVGElement && !element.focus) {\n if (nodeName === \"a\" && element.hasAttribute(\"xlink:href\")) {\n // any focusable child of <svg> cannot be focused, but tabbed to\n if (platform.is.GECKO) {\n return true;\n }\n }\n }\n return false;\n}\n// bind exceptions to an iterator callback\nisOnlyTabbableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isOnlyTabbable = function isOnlyTabbable(context) {\n return isOnlyTabbableRules({\n context: context,\n except: except\n });\n };\n isOnlyTabbable.rules = isOnlyTabbableRules;\n return isOnlyTabbable;\n};\n// provide isOnlyTabbable(context) as default iterator callback\nvar isOnlyTabbable = isOnlyTabbableRules.except({});\nvar supports$5 = void 0;\nfunction isOnlyFocusRelevant(element) {\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"embed\" || nodeName === \"keygen\") {\n // embed is considered focus-relevant but not focusable\n // see https://github.com/medialize/ally.js/issues/82\n return true;\n }\n var _tabindex = tabindexValue(element);\n if (element.shadowRoot && _tabindex === null) {\n // ShadowDOM host elements *may* receive focus\n // even though they are not considered focuable\n return true;\n }\n if (nodeName === \"label\") {\n // <label tabindex=\"0\"> is only tabbable in Firefox, not script-focusable\n // there's no way to make an element focusable other than by adding a tabindex,\n // and focus behavior of the label element seems hard-wired to ignore tabindex\n // in some browsers (like Gecko, Blink and WebKit)\n return !supports$5.focusLabelTabindex || _tabindex === null;\n }\n if (nodeName === \"legend\") {\n return _tabindex === null;\n }\n if (supports$5.focusSvgFocusableAttribute && (element.ownerSVGElement || nodeName === \"svg\")) {\n // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n var focusableAttribute = element.getAttribute(\"focusable\");\n return focusableAttribute && focusableAttribute === \"false\";\n }\n if (nodeName === \"img\" && element.hasAttribute(\"usemap\")) {\n // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n // it appears the tabindex is overruled so focus is still forwarded to the <map>\n return _tabindex === null || !supports$5.focusImgUsemapTabindex;\n }\n if (nodeName === \"area\") {\n // all <area>s are considered relevant,\n // but only the valid <area>s are focusable\n return !isValidArea(element);\n }\n return false;\n}\nfunction isFocusableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n disabled: false,\n visible: false,\n onlyTabbable: false\n } : _ref$except;\n if (!supports$5) {\n supports$5 = _supports();\n }\n var _isOnlyTabbable = isOnlyTabbable.rules.except({\n onlyFocusableBrowsingContext: true,\n visible: except.visible\n });\n var element = contextToElement({\n label: \"is/focusable\",\n resolveDocument: true,\n context: context\n });\n var focusRelevant = isFocusRelevant.rules({\n context: element,\n except: except\n });\n if (!focusRelevant || isOnlyFocusRelevant(element)) {\n return false;\n }\n if (!except.disabled && isDisabled(element)) {\n return false;\n }\n if (!except.onlyTabbable && _isOnlyTabbable(element)) {\n // some elements may be keyboard focusable, but not script focusable\n return false;\n }\n // elements that are not rendered, cannot be focused\n if (!except.visible) {\n var visibilityOptions = {\n context: element,\n except: {}\n };\n if (supports$5.focusInHiddenIframe) {\n // WebKit and Blink can focus content in hidden <iframe> and <object>\n visibilityOptions.except.browsingContext = true;\n }\n if (supports$5.focusObjectSvgHidden) {\n // Blink allows focusing the object element, even if it has visibility: hidden;\n // @browser-issue Blink https://code.google.com/p/chromium/issues/detail?id=586191\n var _nodeName2 = element.nodeName.toLowerCase();\n if (_nodeName2 === \"object\") {\n visibilityOptions.except.cssVisibility = true;\n }\n }\n if (!isVisible.rules(visibilityOptions)) {\n return false;\n }\n }\n var frameElement = getFrameElement(element);\n if (frameElement) {\n var _nodeName = frameElement.nodeName.toLowerCase();\n if (_nodeName === \"object\" && !supports$5.focusInZeroDimensionObject) {\n if (!frameElement.offsetWidth || !frameElement.offsetHeight) {\n // WebKit can not focus content in <object> if it doesn't have dimensions\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"svg\" && supports$5.focusSvgInIframe && !frameElement && element.getAttribute(\"tabindex\") === null) {\n return false;\n }\n return true;\n}\n// bind exceptions to an iterator callback\nisFocusableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isFocusable = function isFocusable(context) {\n return isFocusableRules({\n context: context,\n except: except\n });\n };\n isFocusable.rules = isFocusableRules;\n return isFocusable;\n};\n// provide isFocusRelevant(context) as default iterator callback\nvar isFocusable = isFocusableRules.except({});\nfunction createFilter(condition) {\n // see https://developer.mozilla.org/docs/Web/API/NodeFilter\n var filter = function filter(node) {\n if (node.shadowRoot) {\n // return ShadowRoot elements regardless of them being focusable,\n // so they can be walked recursively later\n return NodeFilter.FILTER_ACCEPT;\n }\n if (condition(node)) {\n // finds elements that could have been found by document.querySelectorAll()\n return NodeFilter.FILTER_ACCEPT;\n }\n return NodeFilter.FILTER_SKIP;\n };\n // IE requires a function, Browsers require {acceptNode: function}\n // see http://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm\n filter.acceptNode = filter;\n return filter;\n}\nvar PossiblyFocusableFilter = createFilter(isFocusRelevant);\nfunction queryFocusableStrict() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n if (!context) {\n context = document.documentElement;\n }\n var _isFocusable = isFocusable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n var _document = getDocument(context);\n // see https://developer.mozilla.org/docs/Web/API/Document/createTreeWalker\n var walker = _document.createTreeWalker(context, NodeFilter.SHOW_ELEMENT, strategy === \"all\" ? PossiblyFocusableFilter : createFilter(_isFocusable), false);\n var list = [];\n while(walker.nextNode()){\n if (walker.currentNode.shadowRoot) {\n if (_isFocusable(walker.currentNode)) {\n list.push(walker.currentNode);\n }\n list = list.concat(queryFocusableStrict({\n context: walker.currentNode.shadowRoot,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n }));\n } else {\n list.push(walker.currentNode);\n }\n }\n // add context if requested and focusable\n if (includeContext) {\n if (strategy === \"all\") {\n if (isFocusRelevant(context)) {\n list.unshift(context);\n }\n } else if (_isFocusable(context)) {\n list.unshift(context);\n }\n }\n return list;\n}\n// NOTE: this selector MUST *never* be used directly,\nvar supports$6 = void 0;\nvar selector$1 = void 0;\nfunction selector$2() {\n if (!supports$6) {\n supports$6 = _supports();\n }\n if (typeof selector$1 === \"string\") {\n return selector$1;\n }\n // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n selector$1 = \"\" + // IE11 supports.can focus <table> and <td>\n (supports$6.focusTable ? \"table, td,\" : \"\") + // IE11 supports.can focus <fieldset>\n (supports$6.focusFieldset ? \"fieldset,\" : \"\") + // Namespace problems of [xlink:href] explained in https://stackoverflow.com/a/23047888/515124\n // svg a[*|href] does not match in IE9, but since we're filtering\n // through is/focusable we can include all <a> from SVG\n \"svg a,\" + // may behave as 'svg, svg *,' in chrome as *every* svg element with a focus event listener is focusable\n // navigational elements\n \"a[href],\" + // validity determined by is/valid-area.js\n \"area[href],\" + // validity determined by is/disabled.js\n \"input, select, textarea, button,\" + // browsing context containers\n \"iframe, object, embed,\" + // interactive content\n \"keygen,\" + (supports$6.focusAudioWithoutControls ? \"audio,\" : \"audio[controls],\") + (supports$6.focusVideoWithoutControls ? \"video,\" : \"video[controls],\") + (supports$6.focusSummary ? \"summary,\" : \"\") + // validity determined by is/valid-tabindex.js\n \"[tabindex],\" + // editing hosts\n \"[contenteditable]\";\n // where ShadowDOM is supported, we also want the shadowed focusable elements (via \">>>\" or \"/deep/\")\n selector$1 = selectInShadows(selector$1);\n return selector$1;\n}\nfunction queryFocusableQuick() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable;\n var _selector = selector$2();\n var elements = context.querySelectorAll(_selector);\n // the selector potentially matches more than really is focusable\n var _isFocusable = isFocusable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n var result = [].filter.call(elements, _isFocusable);\n // add context if requested and focusable\n if (includeContext && _isFocusable(context)) {\n result.unshift(context);\n }\n return result;\n}\nfunction queryFocusable() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, _ref$strategy = _ref.strategy, strategy = _ref$strategy === undefined ? \"quick\" : _ref$strategy;\n var element = contextToElement({\n label: \"query/focusable\",\n resolveDocument: true,\n defaultToDocument: true,\n context: context\n });\n var options = {\n context: element,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n };\n if (strategy === \"quick\") {\n return queryFocusableQuick(options);\n } else if (strategy === \"strict\" || strategy === \"all\") {\n return queryFocusableStrict(options);\n }\n throw new TypeError('query/focusable requires option.strategy to be one of [\"quick\", \"strict\", \"all\"]');\n}\nvar supports$7 = void 0;\n// Internet Explorer 11 considers fieldset, table, td focusable, but not tabbable\n// Internet Explorer 11 considers body to have [tabindex=0], but does not allow tabbing to it\nvar focusableElementsPattern = /^(fieldset|table|td|body)$/;\nfunction isTabbableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n flexbox: false,\n scrollable: false,\n shadow: false,\n visible: false,\n onlyTabbable: false\n } : _ref$except;\n if (!supports$7) {\n supports$7 = _supports();\n }\n var element = contextToElement({\n label: \"is/tabbable\",\n resolveDocument: true,\n context: context\n });\n if (platform.is.BLINK && platform.is.ANDROID && platform.majorVersion > 42) {\n // External keyboard support worked fine in CHrome 42, but stopped working in Chrome 45.\n // The on-screen keyboard does not provide a way to focus the next input element (like iOS does).\n // That leaves us with no option to advance focus by keyboard, ergo nothing is tabbable (keyboard focusable).\n return false;\n }\n var frameElement = getFrameElement(element);\n if (frameElement) {\n if (platform.is.WEBKIT && platform.is.IOS) {\n // iOS only does not consider anything from another browsing context keyboard focusable\n return false;\n }\n // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n // tabbable demotion onto elements of their browsing contexts\n if (tabindexValue(frameElement) < 0) {\n return false;\n }\n if (!except.visible && (platform.is.BLINK || platform.is.WEBKIT) && !isVisible(frameElement)) {\n // Blink and WebKit consider elements in hidden browsing contexts focusable, but not tabbable\n return false;\n }\n // Webkit and Blink don't consider anything in <object> tabbable\n // Blink fixed that fixed in Chrome 54, Opera 41\n var frameNodeName = frameElement.nodeName.toLowerCase();\n if (frameNodeName === \"object\") {\n var isFixedBlink = platform.name === \"Chrome\" && platform.majorVersion >= 54 || platform.name === \"Opera\" && platform.majorVersion >= 41;\n if (platform.is.WEBKIT || platform.is.BLINK && !isFixedBlink) {\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n var _tabindex = tabindexValue(element);\n var tabindex = _tabindex === null ? null : _tabindex >= 0;\n if (platform.is.EDGE && platform.majorVersion >= 14 && frameElement && element.ownerSVGElement && _tabindex < 0) {\n // Edge 14+ considers <a xlink:href=\"…\" tabindex=\"-1\"> keyboard focusable\n // if the element is in a nested browsing context\n return true;\n }\n var hasTabbableTabindexOrNone = tabindex !== false;\n var hasTabbableTabindex = _tabindex !== null && _tabindex >= 0;\n // NOTE: Firefox 31 considers [contenteditable] to have [tabindex=-1], but allows tabbing to it\n // fixed in Firefox 40 the latest - https://bugzilla.mozilla.org/show_bug.cgi?id=1185657\n if (element.hasAttribute(\"contenteditable\")) {\n // tabbing can still be disabled by explicitly providing [tabindex=\"-1\"]\n return hasTabbableTabindexOrNone;\n }\n if (focusableElementsPattern.test(nodeName) && tabindex !== true) {\n return false;\n }\n if (platform.is.WEBKIT && platform.is.IOS) {\n // iOS only considers a hand full of elements tabbable (keyboard focusable)\n // this holds true even with external keyboards\n var potentiallyTabbable = nodeName === \"input\" && element.type === \"text\" || element.type === \"password\" || nodeName === \"select\" || nodeName === \"textarea\" || element.hasAttribute(\"contenteditable\");\n if (!potentiallyTabbable) {\n var style = window.getComputedStyle(element, null);\n potentiallyTabbable = isUserModifyWritable(style);\n }\n if (!potentiallyTabbable) {\n return false;\n }\n }\n if (nodeName === \"use\" && _tabindex !== null) {\n if (platform.is.BLINK || platform.is.WEBKIT && platform.majorVersion === 9) {\n // In Chrome and Safari 9 the <use> element is keyboard focusable even for tabindex=\"-1\"\n return true;\n }\n }\n if (elementMatches(element, \"svg a\") && element.hasAttribute(\"xlink:href\")) {\n if (hasTabbableTabindexOrNone) {\n // in Trident and Gecko SVGElement does not handle the tabIndex property properly\n return true;\n }\n if (element.focus && !supports$7.focusSvgNegativeTabindexAttribute) {\n // Firefox 51 and 52 treat any natively tabbable SVG element with\n // tabindex=\"-1\" as tabbable and everything else as inert\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n return true;\n }\n }\n if (nodeName === \"svg\" && supports$7.focusSvgInIframe && hasTabbableTabindexOrNone) {\n return true;\n }\n if (platform.is.TRIDENT || platform.is.EDGE) {\n if (nodeName === \"svg\") {\n if (supports$7.focusSvg) {\n // older Internet Explorers consider <svg> keyboard focusable\n // unless they have focsable=\"false\", but then they wouldn't\n // be focusable and thus not even reach this filter\n return true;\n }\n // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n return element.hasAttribute(\"focusable\") || hasTabbableTabindex;\n }\n if (element.ownerSVGElement) {\n if (supports$7.focusSvgTabindexAttribute && hasTabbableTabindex) {\n return true;\n }\n // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n return element.hasAttribute(\"focusable\");\n }\n }\n if (element.tabIndex === undefined) {\n return Boolean(except.onlyTabbable);\n }\n if (nodeName === \"audio\") {\n if (!element.hasAttribute(\"controls\")) {\n // In Internet Explorer the <audio> element is focusable, but not tabbable, and tabIndex property is wrong\n return false;\n } else if (platform.is.BLINK) {\n // In Chrome <audio controls tabindex=\"-1\"> remains keyboard focusable\n return true;\n }\n }\n if (nodeName === \"video\") {\n if (!element.hasAttribute(\"controls\")) {\n if (platform.is.TRIDENT || platform.is.EDGE) {\n // In Internet Explorer and Edge the <video> element is focusable, but not tabbable, and tabIndex property is wrong\n return false;\n }\n } else if (platform.is.BLINK || platform.is.GECKO) {\n // In Chrome and Firefox <video controls tabindex=\"-1\"> remains keyboard focusable\n return true;\n }\n }\n if (nodeName === \"object\") {\n if (platform.is.BLINK || platform.is.WEBKIT) {\n // In all Blink and WebKit based browsers <embed> and <object> are never keyboard focusable, even with tabindex=\"0\" set\n return false;\n }\n }\n if (nodeName === \"iframe\") {\n // In Internet Explorer all iframes are only focusable\n // In WebKit, Blink and Gecko iframes may be tabbable depending on content.\n // Since we can't reliably investigate iframe documents because of the\n // SameOriginPolicy, we're declaring everything only focusable.\n return false;\n }\n if (!except.scrollable && platform.is.GECKO) {\n // Firefox considers scrollable containers keyboard focusable,\n // even though their tabIndex property is -1\n var _style = window.getComputedStyle(element, null);\n if (hasCssOverflowScroll(_style)) {\n return hasTabbableTabindexOrNone;\n }\n }\n if (platform.is.TRIDENT || platform.is.EDGE) {\n // IE and Edge degrade <area> to script focusable, if the image\n // using the <map> has been given tabindex=\"-1\"\n if (nodeName === \"area\") {\n var img = getImageOfArea(element);\n if (img && tabindexValue(img) < 0) {\n return false;\n }\n }\n var _style2 = window.getComputedStyle(element, null);\n if (isUserModifyWritable(_style2)) {\n // prevent being swallowed by the overzealous isScrollableContainer() below\n return element.tabIndex >= 0;\n }\n if (!except.flexbox && hasCssDisplayFlex(_style2)) {\n if (_tabindex !== null) {\n return hasTabbableTabindex;\n }\n return isFocusRelevantWithoutFlexbox(element) && isTabbableWithoutFlexbox(element);\n }\n // IE considers scrollable containers script focusable only,\n // even though their tabIndex property is 0\n if (isScrollableContainer(element, nodeName)) {\n return false;\n }\n var parent = element.parentElement;\n if (parent) {\n var parentNodeName = parent.nodeName.toLowerCase();\n var parentStyle = window.getComputedStyle(parent, null);\n // IE considers scrollable bodies script focusable only,\n if (isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n return false;\n }\n // Children of focusable elements with display:flex are focusable in IE10-11,\n // even though their tabIndex property suggests otherwise\n if (hasCssDisplayFlex(parentStyle)) {\n // value of tabindex takes precedence\n return hasTabbableTabindex;\n }\n }\n }\n // https://www.w3.org/WAI/PF/aria-practices/#focus_tabindex\n return element.tabIndex >= 0;\n}\n// bind exceptions to an iterator callback\nisTabbableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isTabbable = function isTabbable(context) {\n return isTabbableRules({\n context: context,\n except: except\n });\n };\n isTabbable.rules = isTabbableRules;\n return isTabbable;\n};\nvar isFocusRelevantWithoutFlexbox = isFocusRelevant.rules.except({\n flexbox: true\n});\nvar isTabbableWithoutFlexbox = isTabbableRules.except({\n flexbox: true\n});\n// provide isTabbable(context) as default iterator callback\nvar isTabbable = isTabbableRules.except({});\nfunction queryTabbable() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n var _isTabbable = isTabbable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n return queryFocusable({\n context: context,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n }).filter(_isTabbable);\n}\n// sorts a list of elements according to their order in the DOM\nfunction compareDomPosition(a, b) {\n return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n}\nfunction sortDomOrder(elements) {\n return elements.sort(compareDomPosition);\n}\nfunction getFirstSuccessorOffset(list, target) {\n // find the first element that comes AFTER the target element\n return findIndex(list, function(element) {\n return target.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING;\n });\n}\nfunction findInsertionOffsets(list, elements, resolveElement) {\n // instead of mutating the elements list directly, remember position and map\n // to inject later, when we can do this more efficiently\n var insertions = [];\n elements.forEach(function(element) {\n var replace = true;\n var offset = list.indexOf(element);\n if (offset === -1) {\n // element is not in target list\n offset = getFirstSuccessorOffset(list, element);\n replace = false;\n }\n if (offset === -1) {\n // there is no successor in the tabsequence,\n // meaning the image must be the last element\n offset = list.length;\n }\n // allow the consumer to replace the injected element\n var injections = nodeArray(resolveElement ? resolveElement(element) : element);\n if (!injections.length) {\n // we can't inject zero elements\n return;\n }\n insertions.push({\n offset: offset,\n replace: replace,\n elements: injections\n });\n });\n return insertions;\n}\nfunction insertElementsAtOffsets(list, insertions) {\n // remember the number of elements we have already injected\n // so we account for the caused index offset\n var inserted = 0;\n // make sure that we insert the elements in sequence,\n // otherwise the offset compensation won't work\n insertions.sort(function(a, b) {\n return a.offset - b.offset;\n });\n insertions.forEach(function(insertion) {\n // array.splice has an annoying function signature :(\n var remove = insertion.replace ? 1 : 0;\n var args = [\n insertion.offset + inserted,\n remove\n ].concat(insertion.elements);\n list.splice.apply(list, args);\n inserted += insertion.elements.length - remove;\n });\n}\nfunction mergeInDomOrder() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, list = _ref.list, elements = _ref.elements, resolveElement = _ref.resolveElement;\n // operate on a copy so we don't mutate the original array\n var _list = list.slice(0);\n // make sure the elements we're injecting are provided in DOM order\n var _elements = nodeArray(elements).slice(0);\n sortDomOrder(_elements);\n // find the offsets within the target array (list) at which to inject\n // each individual element (from elements)\n var insertions = findInsertionOffsets(_list, _elements, resolveElement);\n // actually inject the elements into the target array at the identified positions\n insertElementsAtOffsets(_list, insertions);\n return _list;\n}\nvar _createClass = function() {\n function defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nvar Maps = function() {\n function Maps(context) {\n _classCallCheck(this, Maps);\n this._document = getDocument(context);\n this.maps = {};\n }\n _createClass(Maps, [\n {\n key: \"getAreasFor\",\n value: function getAreasFor(name) {\n if (!this.maps[name]) {\n // the map is not defined within the context, so we\n // have to go find it elsewhere in the document\n this.addMapByName(name);\n }\n return this.maps[name];\n }\n },\n {\n key: \"addMapByName\",\n value: function addMapByName(name) {\n var map = getMapByName(name, this._document);\n if (!map) {\n // if there is no map, the img[usemap] wasn't doing anything anyway\n return;\n }\n this.maps[map.name] = queryTabbable({\n context: map\n });\n }\n },\n {\n key: \"extractAreasFromList\",\n value: function extractAreasFromList(elements) {\n // remove all <area> elements from the elements list,\n // but put them the map for later retrieval\n return elements.filter(function(element) {\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName !== \"area\") {\n return true;\n }\n var map = element.parentNode;\n if (!this.maps[map.name]) {\n this.maps[map.name] = [];\n }\n this.maps[map.name].push(element);\n return false;\n }, this);\n }\n }\n ]);\n return Maps;\n}();\nfunction sortArea(elements, context) {\n // images - unless they are focusable themselves, likely not\n // part of the elements list, so we'll have to find them and\n // sort them into the elements list manually\n var usemaps = context.querySelectorAll(\"img[usemap]\");\n var maps = new Maps(context);\n // remove all <area> elements from the elements list,\n // but put them the map for later retrieval\n var _elements = maps.extractAreasFromList(elements);\n if (!usemaps.length) {\n // the context does not contain any <area>s so no need\n // to replace anything, just remove any maps\n return _elements;\n }\n return mergeInDomOrder({\n list: _elements,\n elements: usemaps,\n resolveElement: function resolveElement(image) {\n var name = image.getAttribute(\"usemap\").slice(1);\n return maps.getAreasFor(name);\n }\n });\n}\nvar _createClass$1 = function() {\n function defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck$1(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nvar Shadows = function() {\n function Shadows(context, sortElements) {\n _classCallCheck$1(this, Shadows);\n // document context we're working with\n this.context = context;\n // callback that sorts an array of elements\n this.sortElements = sortElements;\n // reference to create unique IDs for each ShadowHost\n this.hostCounter = 1;\n // reference map for child-ShadowHosts of a ShadowHost\n this.inHost = {};\n // reference map for child-ShadowHost of the document\n this.inDocument = [];\n // reference map for ShadowHosts\n this.hosts = {};\n // reference map for tabbable elements of a ShadowHost\n this.elements = {};\n }\n // remember which hosts we have to sort within later\n _createClass$1(Shadows, [\n {\n key: \"_registerHost\",\n value: function _registerHost(host) {\n if (host._sortingId) {\n return;\n }\n // make the ShadowHost identifiable (see cleanup() for undo)\n host._sortingId = \"shadow-\" + this.hostCounter++;\n this.hosts[host._sortingId] = host;\n // hosts may contain other hosts\n var parentHost = getShadowHost({\n context: host\n });\n if (parentHost) {\n this._registerHost(parentHost);\n this._registerHostParent(host, parentHost);\n } else {\n this.inDocument.push(host);\n }\n }\n },\n {\n key: \"_registerHostParent\",\n value: function _registerHostParent(host, parent) {\n if (!this.inHost[parent._sortingId]) {\n this.inHost[parent._sortingId] = [];\n }\n this.inHost[parent._sortingId].push(host);\n }\n },\n {\n key: \"_registerElement\",\n value: function _registerElement(element, host) {\n if (!this.elements[host._sortingId]) {\n this.elements[host._sortingId] = [];\n }\n this.elements[host._sortingId].push(element);\n }\n },\n {\n key: \"extractElements\",\n value: function extractElements(elements) {\n return elements.filter(function(element) {\n var host = getShadowHost({\n context: element\n });\n if (!host) {\n return true;\n }\n this._registerHost(host);\n this._registerElement(element, host);\n return false;\n }, this);\n }\n },\n {\n key: \"sort\",\n value: function sort(elements) {\n var _elements = this._injectHosts(elements);\n _elements = this._replaceHosts(_elements);\n this._cleanup();\n return _elements;\n }\n },\n {\n key: \"_injectHosts\",\n value: function _injectHosts(elements) {\n Object.keys(this.hosts).forEach(function(_sortingId) {\n var _list = this.elements[_sortingId];\n var _elements = this.inHost[_sortingId];\n var _context = this.hosts[_sortingId].shadowRoot;\n this.elements[_sortingId] = this._merge(_list, _elements, _context);\n }, this);\n return this._merge(elements, this.inDocument, this.context);\n }\n },\n {\n key: \"_merge\",\n value: function _merge(list, elements, context) {\n var merged = mergeInDomOrder({\n list: list,\n elements: elements\n });\n return this.sortElements(merged, context);\n }\n },\n {\n key: \"_replaceHosts\",\n value: function _replaceHosts(elements) {\n return mergeInDomOrder({\n list: elements,\n elements: this.inDocument,\n resolveElement: this._resolveHostElement.bind(this)\n });\n }\n },\n {\n key: \"_resolveHostElement\",\n value: function _resolveHostElement(host) {\n var merged = mergeInDomOrder({\n list: this.elements[host._sortingId],\n elements: this.inHost[host._sortingId],\n resolveElement: this._resolveHostElement.bind(this)\n });\n var _tabindex = tabindexValue(host);\n if (_tabindex !== null && _tabindex > -1) {\n return [\n host\n ].concat(merged);\n }\n return merged;\n }\n },\n {\n key: \"_cleanup\",\n value: function _cleanup() {\n // remove those identifers we put on the ShadowHost to avoid using Map()\n Object.keys(this.hosts).forEach(function(key) {\n delete this.hosts[key]._sortingId;\n }, this);\n }\n }\n ]);\n return Shadows;\n}();\nfunction sortShadowed(elements, context, sortElements) {\n var shadows = new Shadows(context, sortElements);\n var _elements = shadows.extractElements(elements);\n if (_elements.length === elements.length) {\n // no shadowed content found, no need to continue\n return sortElements(elements);\n }\n return shadows.sort(_elements);\n}\nfunction sortTabindex(elements) {\n // https://developer.mozilla.org/docs/Web/API/HTMLElement.tabIndex\n // elements with tabIndex \"0\" (including tabbableElements without tabIndex) should be navigated in the order they appear.\n // elements with a positive tabIndex:\n // Elements that have identical tabIndexes should be navigated in the order they appear.\n // Navigation proceeds from the lowest tabIndex to the highest tabIndex.\n // NOTE: sort implementation may be unstable and thus mess up DOM order,\n // that's why we build a map that's being sorted instead. If we were able to rely\n // on a stable sorting algorithm, sortTabindex() could be as simple as\n // elements.sort(function(a, b) { return a.tabIndex - b.tabIndex; });\n // at this time Chrome does not use a stable sorting algorithm\n // see http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html#stability\n // NOTE: compareDocumentPosition seemed like more overhead than just sorting this with buckets\n // https://developer.mozilla.org/docs/Web/API/Node.compareDocumentPosition\n var map = {};\n var indexes = [];\n var normal = elements.filter(function(element) {\n // in Trident and Gecko SVGElement does not know about the tabIndex property\n var tabIndex = element.tabIndex;\n if (tabIndex === undefined) {\n tabIndex = tabindexValue(element);\n }\n // extract elements that don't need sorting\n if (tabIndex <= 0 || tabIndex === null || tabIndex === undefined) {\n return true;\n }\n if (!map[tabIndex]) {\n // create sortable bucket for dom-order-preservation of elements with the same tabIndex\n map[tabIndex] = [];\n // maintain a list of unique tabIndexes\n indexes.push(tabIndex);\n }\n // sort element into the proper bucket\n map[tabIndex].push(element);\n // element moved to sorting map, so not \"normal\" anymore\n return false;\n });\n // sort the tabindex ascending,\n // then resolve them to their appropriate buckets,\n // then flatten the array of arrays to an array\n var _elements = indexes.sort().map(function(tabIndex) {\n return map[tabIndex];\n }).reduceRight(function(previous, current) {\n return current.concat(previous);\n }, normal);\n return _elements;\n}\nvar supports$8 = void 0;\nfunction moveContextToBeginning(elements, context) {\n var pos = elements.indexOf(context);\n if (pos > 0) {\n var tmp = elements.splice(pos, 1);\n return tmp.concat(elements);\n }\n return elements;\n}\nfunction sortElements(elements, _context) {\n if (supports$8.tabsequenceAreaAtImgPosition) {\n // Some browsers sort <area> in DOM order, some place the <area>s\n // where the <img> referecing them would've been in DOM order.\n // https://github.com/medialize/ally.js/issues/5\n elements = sortArea(elements, _context);\n }\n elements = sortTabindex(elements);\n return elements;\n}\nfunction queryTabsequence() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n if (!supports$8) {\n supports$8 = _supports();\n }\n var _context = nodeArray(context)[0] || document.documentElement;\n var elements = queryTabbable({\n context: _context,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n });\n if (document.body.createShadowRoot && platform.is.BLINK) {\n // sort tabindex localized to shadow dom\n // see https://github.com/medialize/ally.js/issues/6\n elements = sortShadowed(elements, _context, sortElements);\n } else {\n elements = sortElements(elements, _context);\n }\n if (includeContext) {\n // if we include the context itself, it has to be the first\n // element of the sequence\n elements = moveContextToBeginning(elements, _context);\n }\n return elements;\n}\n// codes mostly cloned from https://github.com/keithamus/jwerty/blob/master/jwerty.js\n// deliberately not exposing characters like <,.-#* because they vary *wildly*\n// across keyboard layouts and may cause various problems\n// (e.g. \"*\" is \"Shift +\" on a German Mac keyboard)\n// (e.g. \"@\" is \"Alt L\" on a German Mac keyboard)\nvar keycode = {\n // Element Focus\n tab: 9,\n // Navigation\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n pageUp: 33,\n \"page-up\": 33,\n pageDown: 34,\n \"page-down\": 34,\n end: 35,\n home: 36,\n // Action\n enter: 13,\n escape: 27,\n space: 32,\n // Modifier\n shift: 16,\n capsLock: 20,\n \"caps-lock\": 20,\n ctrl: 17,\n alt: 18,\n meta: 91,\n // in firefox: 224\n // on mac (chrome): meta-left=91, meta-right=93\n // on win (IE11): meta-left=91, meta-right=92\n pause: 19,\n // Content Manipulation\n insert: 45,\n delete: 46,\n backspace: 8,\n // the same logical key may be identified through different keyCodes\n _alias: {\n 91: [\n 92,\n 93,\n 224\n ]\n }\n};\n// Function keys (112 - 137)\n// NOTE: not every keyboard knows F13+\nfor(var n = 1; n < 26; n++){\n keycode[\"f\" + n] = n + 111;\n}\n// Number keys (48-57, numpad 96-105)\n// NOTE: not every keyboard knows num-0+\nfor(var _n = 0; _n < 10; _n++){\n var code = _n + 48;\n var numCode = _n + 96;\n keycode[_n] = code;\n keycode[\"num-\" + _n] = numCode;\n keycode._alias[code] = [\n numCode\n ];\n}\n// Latin characters (65 - 90)\nfor(var _n2 = 0; _n2 < 26; _n2++){\n var _code = _n2 + 65;\n var name$1 = String.fromCharCode(_code).toLowerCase();\n keycode[name$1] = _code;\n}\nvar modifier = {\n alt: \"altKey\",\n ctrl: \"ctrlKey\",\n meta: \"metaKey\",\n shift: \"shiftKey\"\n};\nvar modifierSequence = Object.keys(modifier).map(function(name) {\n return modifier[name];\n});\nfunction createExpectedModifiers(ignoreModifiers) {\n var value = ignoreModifiers ? null : false;\n return {\n altKey: value,\n ctrlKey: value,\n metaKey: value,\n shiftKey: value\n };\n}\nfunction resolveModifiers(modifiers) {\n var ignoreModifiers = modifiers.indexOf(\"*\") !== -1;\n var expected = createExpectedModifiers(ignoreModifiers);\n modifiers.forEach(function(token) {\n if (token === \"*\") {\n // we've already covered the all-in operator\n return;\n }\n // we want the modifier pressed\n var value = true;\n var operator = token.slice(0, 1);\n if (operator === \"?\") {\n // we don't care if the modifier is pressed\n value = null;\n } else if (operator === \"!\") {\n // we do not want the modifier pressed\n value = false;\n }\n if (value !== true) {\n // compensate for the modifier's operator\n token = token.slice(1);\n }\n var propertyName = modifier[token];\n if (!propertyName) {\n throw new TypeError('Unknown modifier \"' + token + '\"');\n }\n expected[propertyName] = value;\n });\n return expected;\n}\nfunction resolveKey(key) {\n var code = keycode[key] || parseInt(key, 10);\n if (!code || typeof code !== \"number\" || isNaN(code)) {\n throw new TypeError('Unknown key \"' + key + '\"');\n }\n return [\n code\n ].concat(keycode._alias[code] || []);\n}\nfunction matchModifiers(expected, event) {\n // returns true on match\n return !modifierSequence.some(function(prop) {\n // returns true on mismatch\n return typeof expected[prop] === \"boolean\" && Boolean(event[prop]) !== expected[prop];\n });\n}\nfunction keyBinding(text) {\n return text.split(/\\s+/).map(function(_text) {\n var tokens = _text.split(\"+\");\n var _modifiers = resolveModifiers(tokens.slice(0, -1));\n var _keyCodes = resolveKey(tokens.slice(-1));\n return {\n keyCodes: _keyCodes,\n modifiers: _modifiers,\n matchModifiers: matchModifiers.bind(null, _modifiers)\n };\n });\n}\n// Node.compareDocumentPosition is available since IE9\n// see https://developer.mozilla.org/docs/Web/API/Node.compareDocumentPosition\n// callback returns true when element is contained by parent or is the parent suited for use with Array.some()\n/*\n USAGE:\n var isChildOf = getParentComparator({parent: someNode});\n listOfElements.some(isChildOf)\n*/ function getParentComparator() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, parent = _ref.parent, element = _ref.element, includeSelf = _ref.includeSelf;\n if (parent) {\n return function isChildOf(node) {\n return Boolean(includeSelf && node === parent || parent.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n } else if (element) {\n return function isParentOf(node) {\n return Boolean(includeSelf && element === node || node.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n }\n throw new TypeError(\"util/compare-position#getParentComparator required either options.parent or options.element\");\n}\n// Bug 286933 - Key events in the autocomplete popup should be hidden from page scripts\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=286933\nfunction whenKey() {\n var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var bindings = {};\n var context = nodeArray(map.context)[0] || document.documentElement;\n delete map.context;\n var filter = nodeArray(map.filter);\n delete map.filter;\n var mapKeys = Object.keys(map);\n if (!mapKeys.length) {\n throw new TypeError(\"when/key requires at least one option key\");\n }\n var registerBinding = function registerBinding(event) {\n event.keyCodes.forEach(function(code) {\n if (!bindings[code]) {\n bindings[code] = [];\n }\n bindings[code].push(event);\n });\n };\n mapKeys.forEach(function(text) {\n if (typeof map[text] !== \"function\") {\n throw new TypeError('when/key requires option[\"' + text + '\"] to be a function');\n }\n var addCallback = function addCallback(event) {\n event.callback = map[text];\n return event;\n };\n keyBinding(text).map(addCallback).forEach(registerBinding);\n });\n var handleKeyDown = function handleKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (filter.length) {\n // ignore elements within the exempted sub-trees\n var isParentOfElement = getParentComparator({\n element: event.target,\n includeSelf: true\n });\n if (filter.some(isParentOfElement)) {\n return;\n }\n }\n var key = event.keyCode || event.which;\n if (!bindings[key]) {\n return;\n }\n bindings[key].forEach(function(_event) {\n if (!_event.matchModifiers(event)) {\n return;\n }\n _event.callback.call(context, event, disengage);\n });\n };\n context.addEventListener(\"keydown\", handleKeyDown, false);\n var disengage = function disengage() {\n context.removeEventListener(\"keydown\", handleKeyDown, false);\n };\n return {\n disengage: disengage\n };\n}\nfunction _default(param) {\n let { context } = param === void 0 ? {} : param;\n if (!context) {\n context = document.documentElement;\n }\n // Make sure the supports tests are run before intercepting the Tab key,\n // or IE10 and IE11 will fail to process the first Tab key event. Not\n // limiting this warm-up to IE because it may be a problem elsewhere, too.\n queryTabsequence();\n return whenKey({\n // Safari on OSX may require ALT+TAB to reach links,\n // see https://github.com/medialize/ally.js/issues/146\n \"?alt+?shift+tab\": function altShiftTab(event) {\n // we're completely taking over the Tab key handling\n event.preventDefault();\n var sequence = queryTabsequence({\n context: context\n });\n var backward = event.shiftKey;\n var first = sequence[0];\n var last = sequence[sequence.length - 1];\n // wrap around first to last, last to first\n var source = backward ? first : last;\n var target = backward ? last : first;\n if (isActiveElement(source)) {\n target.focus();\n return;\n }\n // find current position in tabsequence\n var currentIndex = void 0;\n var found = sequence.some(function(element, index) {\n if (!isActiveElement(element)) {\n return false;\n }\n currentIndex = index;\n return true;\n });\n if (!found) {\n // redirect to first as we're not in our tabsequence\n first.focus();\n return;\n }\n // shift focus to previous/next element in the sequence\n var offset = backward ? -1 : 1;\n sequence[currentIndex + offset].focus();\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=maintain--tab-focus.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9tYWludGFpbi0tdGFiLWZvY3VzLmpzIiwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixHQUNsQixjQUFjO0FBQ2QsbURBQW1EO0FBQ25ELGVBQWU7QUFDZixpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLHlDQUF5Qzs7Ozs7MkNBbTdHekM7OztlQUFBQTs7OzsrRUFqN0dzQjtnRkFDQTtBQUV0Qix5RkFBeUY7QUFDekYsNkVBQTZFO0FBQzdFLFNBQVNDLFVBQVVDLEtBQUs7SUFDdEIsSUFBSSxDQUFDQSxPQUFPO1FBQ1YsT0FBTyxFQUFFO0lBQ1g7SUFFQSxJQUFJQyxNQUFNQyxPQUFPLENBQUNGLFFBQVE7UUFDeEIsT0FBT0E7SUFDVDtJQUVBLCtDQUErQztJQUMvQyxJQUFJQSxNQUFNRyxRQUFRLEtBQUtDLFdBQVc7UUFDaEMsT0FBTztZQUFDSjtTQUFNO0lBQ2hCO0lBRUEsSUFBSSxPQUFPQSxVQUFVLFVBQVU7UUFDN0JBLFFBQVFLLFNBQVNDLGdCQUFnQixDQUFDTjtJQUNwQztJQUVBLElBQUlBLE1BQU1PLE1BQU0sS0FBS0gsV0FBVztRQUM5QixPQUFPLEVBQUUsQ0FBQ0ksS0FBSyxDQUFDQyxJQUFJLENBQUNULE9BQU87SUFDOUI7SUFFQSxNQUFNLElBQUlVLFVBQVUsc0JBQXNCQyxPQUFPWDtBQUNuRDtBQUVBLFNBQVNZLGlCQUFpQkMsSUFBSTtJQUM1QixJQUFJQyxVQUFVRCxLQUFLQyxPQUFPLEVBQ3hCQyxhQUFhRixLQUFLRyxLQUFLLEVBQ3ZCQSxRQUFRRCxlQUFlWCxZQUFZLHVCQUF1QlcsWUFDMURFLGtCQUFrQkosS0FBS0ksZUFBZSxFQUN0Q0Msb0JBQW9CTCxLQUFLSyxpQkFBaUI7SUFFNUMsSUFBSUMsVUFBVXBCLFVBQVVlLFFBQVEsQ0FBQyxFQUFFO0lBRW5DLElBQUlHLG1CQUFtQkUsV0FB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ZUFBZSxLQUFLO1lBQ3hCLElBQUlDLFFBQVFOLFNBQVNsZixJQUFJLENBQUMsU0FBVXpCLE9BQU8sRUFBRWtoQixLQUFLO2dCQUNoRCxJQUFJLENBQUNwZ0IsZ0JBQWdCZCxVQUFVO29CQUM3QixPQUFPO2dCQUNUO2dCQUVBZ2hCLGVBQWVFO2dCQUNmLE9BQU87WUFDVDtZQUVBLElBQUksQ0FBQ0QsT0FBTztnQkFDVixvREFBb0Q7Z0JBQ3BESixNQUFNaGMsS0FBSztnQkFDWDtZQUNGO1lBRUEsdURBQXVEO1lBQ3ZELElBQUlxTSxTQUFTMFAsV0FBVyxDQUFDLElBQUk7WUFDN0JELFFBQVEsQ0FBQ0ssZUFBZTlQLE9BQU8sQ0FBQ3JNLEtBQUs7UUFDdkM7SUFDRjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L21haW50YWluLS10YWItZm9jdXMudHM/Yjc0YiJdLCJuYW1lcyI6WyJfZGVmYXVsdCIsIm5vZGVBcnJheSIsImlucHV0IiwiQXJyYXkiLCJpc0FycmF5Iiwibm9kZVR5cGUiLCJ1bmRlZmluZWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJzbGljZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJjb250ZXh0VG9FbGVtZW50IiwiX3JlZiIsImNvbnRleHQiLCJfcmVmJGxhYmVsIiwibGFiZWwiLCJyZXNvbHZlRG9jdW1lbnQiLCJkZWZhdWx0VG9Eb2N1bWVudCIsImVsZW1lbnQiLCJOb2RlIiwiRE9DVU1FTlRfTk9ERSIsImRvY3VtZW50RWxlbWVudCIsIkVMRU1FTlRfTk9ERSIsIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUiLCJnZXRTaGFkb3dIb3N0IiwiYXJndW1lbnRzIiwiY29udGFpbmVyIiwicGFyZW50Tm9kZSIsImhvc3QiLCJnZXREb2N1bWVudCIsIm5vZGUiLCJvd25lckRvY3VtZW50IiwiaXNBY3RpdmVFbGVtZW50IiwiX2RvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsInNoYWRvd0hvc3QiLCJzaGFkb3dSb290IiwiZ2V0UGFyZW50cyIsImxpc3QiLCJwdXNoIiwibmFtZXMiLCJuYW1lIiwiZmluZE1ldGhvZE5hbWUiLCJzb21lIiwiX25hbWUiLCJlbGVtZW50TWF0Y2hlcyIsInNlbGVjdG9yIiwicGxhdGZvcm0iLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJfcGxhdGZvcm0iLCJvcyIsImZhbWlseSIsIkFORFJPSUQiLCJXSU5ET1dTIiwiT1NYIiwiSU9TIiwiQkxJTksiLCJsYXlvdXQiLCJHRUNLTyIsIlRSSURFTlQiLCJFREdFIiwiV0VCS0lUIiwidmVyc2lvbiIsInBhcnNlRmxvYXQiLCJtYWpvclZlcnNpb24iLCJNYXRoIiwiZmxvb3IiLCJpcyIsIklFOSIsIklFMTAiLCJJRTExIiwiYmVmb3JlIiwiZGF0YSIsIndpbmRvd1Njcm9sbFRvcCIsIndpbmRvdyIsInNjcm9sbFRvcCIsIndpbmRvd1Njcm9sbExlZnQiLCJzY3JvbGxMZWZ0IiwiYm9keVNjcm9sbFRvcCIsImJvZHkiLCJib2R5U2Nyb2xsTGVmdCIsImlmcmFtZSIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsIl93aW5kb3ciLCJjb250ZW50V2luZG93Iiwib3BlbiIsImNsb3NlIiwid3JhcHBlciIsInRlc3QiLCJvcHRpb25zIiwiaW5uZXJIVE1MIiwiZm9jdXMiLCJtdXRhdGUiLCJ2YWxpZGF0ZSIsImFmdGVyIiwiYmx1ciIsInJlbW92ZUNoaWxkIiwiZGV0ZWN0Rm9jdXMiLCJ0ZXN0cyIsInJlc3VsdHMiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwidmVyc2lvbiQxIiwicmVhZExvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJlIiwid3JpdGVMb2NhbFN0b3JhZ2UiLCJ2YWx1ZSIsImhhc0ZvY3VzIiwicmVtb3ZlSXRlbSIsInNldEl0ZW0iLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJjYWNoZUtleSIsImNhY2hlIiwiY2FjaGUkMSIsImdldCIsInNldCIsInZhbHVlcyIsImZvckVhY2giLCJ0aW1lIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiY3NzU2hhZG93UGllcmNpbmdEZWVwQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJxdWVyeVNlbGVjdG9yIiwibm9BcnJvd0Fycm93QXJyb3ciLCJub0RlZXAiLCJnaWYiLCJmb2N1c0FyZWFJbWdUYWJpbmRleCIsImZvY3VzQXJlYVRhYmluZGV4IiwiZm9jdXNUYXJnZXQiLCJmb2N1c0FyZWFXaXRob3V0SHJlZiIsImZvY3VzQXVkaW9XaXRob3V0Q29udHJvbHMiLCJpbnZhbGlkR2lmIiwiZm9jdXNCcm9rZW5JbWFnZU1hcCIsImZvY3VzQ2hpbGRyZW5PZkZvY3VzYWJsZUZsZXhib3giLCJmb2N1c0ZpZWxkc2V0RGlzYWJsZWQiLCJmb2N1c0ZpZWxkc2V0IiwiZm9jdXNGbGV4Ym94Q29udGFpbmVyIiwiZm9jdXNGb3JtRGlzYWJsZWQiLCJmb2N1c0ltZ0lzbWFwIiwiaHJlZiIsImZvY3VzSW1nVXNlbWFwVGFiaW5kZXgiLCJmb2N1c0luSGlkZGVuSWZyYW1lIiwiaWZyYW1lRG9jdW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJyZXN1bHQiLCJmb2N1c0luWmVyb0RpbWVuc2lvbk9iamVjdCIsImZvY3VzSW52YWxpZFRhYmluZGV4IiwiZm9jdXNMYWJlbFRhYmluZGV4IiwidmFyaWFibGVUb1ByZXZlbnREZWFkQ29kZUVsaW1pbmF0aW9uIiwib2Zmc2V0SGVpZ2h0Iiwic3ZnIiwiZm9jdXNPYmplY3RTdmdIaWRkZW4iLCJmb2N1c09iamVjdFN2ZyIsInJlc3VsdCQxIiwiZm9jdXNPYmplY3RTd2YiLCJmb2N1c1JlZGlyZWN0SW1nVXNlbWFwIiwidGFyZ2V0IiwiZm9jdXNSZWRpcmVjdExlZ2VuZCIsImZvY3VzYWJsZSIsInRhYmJhYmxlIiwiZm9jdXNTY3JvbGxCb2R5IiwiZm9jdXNTY3JvbGxDb250YWluZXJXaXRob3V0T3ZlcmZsb3ciLCJmb2N1c1Njcm9sbENvbnRhaW5lciIsImZvY3VzU3VtbWFyeSIsImZpcnN0RWxlbWVudENoaWxkIiwibWFrZUZvY3VzYWJsZUZvcmVpZ25PYmplY3QiLCJmb3JlaWduT2JqZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwid2lkdGgiLCJiYXNlVmFsIiwiaGVpZ2h0IiwibGFzdENoaWxkIiwidHlwZSIsImZvY3VzU3ZnRm9yZWlnbk9iamVjdEhhY2siLCJpc1N2Z0VsZW1lbnQiLCJvd25lclNWR0VsZW1lbnQiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiZGlzYWJsZWQiLCJnZW5lcmF0ZSIsIkhUTUxFbGVtZW50IiwicHJvdG90eXBlIiwiZm9jdXNTdmdGb2N1c2FibGVBdHRyaWJ1dGUiLCJmb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlIiwiZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlIiwiZm9jdXNTdmdVc2VUYWJpbmRleCIsImpvaW4iLCJmb2N1c1N2Z0ZvcmVpZ25vYmplY3RUYWJpbmRleCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwicmVzdWx0JDIiLCJCb29sZWFuIiwiU1ZHRWxlbWVudCIsImZvY3VzU3ZnSW5JZnJhbWUiLCJmb2N1c1N2ZyIsImZpcnN0Q2hpbGQiLCJmb2N1c1RhYmluZGV4VHJhaWxpbmdDaGFyYWN0ZXJzIiwiZm9jdXNUYWJsZSIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImZvY3VzVmlkZW9XaXRob3V0Q29udHJvbHMiLCJyZXN1bHQkMyIsInRhYnNlcXVlbmNlQXJlYUF0SW1nUG9zaXRpb24iLCJ0ZXN0Q2FsbGJhY2tzIiwidGVzdERlc2NyaXB0aW9ucyIsImV4ZWN1dGVUZXN0cyIsInN1cHBvcnRzQ2FjaGUiLCJfc3VwcG9ydHMiLCJzdXBwb3J0cyIsInZhbGlkSW50ZWdlclBhdHRlcm5Ob1RyYWlsaW5nIiwidmFsaWRJbnRlZ2VyUGF0dGVybldpdGhUcmFpbGluZyIsImlzVmFsaWRUYWJpbmRleCIsInZhbGlkSW50ZWdlclBhdHRlcm4iLCJoYXNUYWJpbmRleCIsImhhc0F0dHJpYnV0ZSIsImhhc1RhYkluZGV4IiwidGFiaW5kZXgiLCJnZXRBdHRyaWJ1dGUiLCJ0YWJpbmRleFZhbHVlIiwiYXR0cmlidXRlTmFtZSIsInBhcnNlSW50IiwiaXNOYU4iLCJpc1VzZXJNb2RpZnlXcml0YWJsZSIsInVzZXJNb2RpZnkiLCJ3ZWJraXRVc2VyTW9kaWZ5IiwiaW5kZXhPZiIsImhhc0Nzc092ZXJmbG93U2Nyb2xsIiwiZ2V0UHJvcGVydHlWYWx1ZSIsIm92ZXJmbG93IiwiaGFzQ3NzRGlzcGxheUZsZXgiLCJkaXNwbGF5IiwiaXNTY3JvbGxhYmxlQ29udGFpbmVyIiwicGFyZW50Tm9kZU5hbWUiLCJwYXJlbnRTdHlsZSIsInNjcm9sbEhlaWdodCIsIm9mZnNldFdpZHRoIiwic2Nyb2xsV2lkdGgiLCJzdXBwb3J0cyQxIiwiaXNGb2N1c1JlbGV2YW50UnVsZXMiLCJfcmVmJGV4Y2VwdCIsImV4Y2VwdCIsImZsZXhib3giLCJzY3JvbGxhYmxlIiwic2hhZG93Iiwic3ZnVHlwZSIsInZhbGlkVGFiaW5kZXgiLCJpc1N2Z0NvbnRlbnQiLCJmb2N1c2FibGVBdHRyaWJ1dGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGFzTGlua1BhcmVudCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJpc0ZvY3VzUmVsZXZhbnQiLCJydWxlcyIsImZpbmRJbmRleCIsImFycmF5IiwiY2FsbGJhY2siLCJpIiwiZ2V0Q29udGVudERvY3VtZW50IiwiY29udGVudERvY3VtZW50IiwiZ2V0U1ZHRG9jdW1lbnQiLCJnZXRXaW5kb3ciLCJkZWZhdWx0VmlldyIsInNoYWRvd1ByZWZpeCIsInNlbGVjdEluU2hhZG93cyIsIm9wZXJhdG9yIiwicmVwbGFjZSIsInNwbGl0IiwiZmluZERvY3VtZW50SG9zdEVsZW1lbnQiLCJfZnJhbWVFbGVtZW50IiwicG90ZW50aWFsSG9zdHMiLCJnZXRGcmFtZUVsZW1lbnQiLCJmcmFtZUVsZW1lbnQiLCJub3RSZW5kZXJlZEVsZW1lbnRzUGF0dGVybiIsImNvbXB1dGVkU3R5bGUiLCJwcm9wZXJ0eSIsIm5vdERpc3BsYXllZCIsIl9wYXRoIiwibm90VmlzaWJsZSIsImhpZGRlbiIsInZpc2libGUiLCJjb2xsYXBzZWRQYXJlbnQiLCJvZmZzZXQiLCJpc1Zpc2libGVSdWxlcyIsIm5vdFJlbmRlcmVkIiwiY3NzRGlzcGxheSIsImNzc1Zpc2liaWxpdHkiLCJkZXRhaWxzRWxlbWVudCIsImJyb3dzaW5nQ29udGV4dCIsImlzQXVkaW9XaXRob3V0Q29udHJvbHMiLCJfaXNWaXNpYmxlIiwiaXNWaXNpYmxlIiwiZ2V0TWFwQnlOYW1lIiwiY3NzRXNjYXBlIiwiZ2V0SW1hZ2VPZkFyZWEiLCJzdXBwb3J0cyQyIiwiaXNWYWxpZEFyZWEiLCJpbWciLCJjb21wbGV0ZSIsIm5hdHVyYWxIZWlnaHQiLCJjaGlsZE9mSW50ZXJhY3RpdmUiLCJfZWxlbWVudCIsInN1cHBvcnRzJDMiLCJkaXNhYmxlZEVsZW1lbnRzUGF0dGVybiIsImRpc2FibGVkRWxlbWVudHMiLCJzZWxlY3QiLCJ0ZXh0YXJlYSIsImJ1dHRvbiIsImZpZWxkc2V0IiwiZm9ybSIsImlzTmF0aXZlRGlzYWJsZWRTdXBwb3J0ZWQiLCJSZWdFeHAiLCJzdXBwb3J0cyQ0IiwiaXNEaXNhYmxlZEZpZWxkc2V0IiwiaXNEaXNhYmxlZEZvcm0iLCJpc0Rpc2FibGVkIiwicGFyZW50cyIsImlzT25seVRhYmJhYmxlUnVsZXMiLCJvbmx5Rm9jdXNhYmxlQnJvd3NpbmdDb250ZXh0IiwiaXNPbmx5VGFiYmFibGUiLCJzdXBwb3J0cyQ1IiwiaXNPbmx5Rm9jdXNSZWxldmFudCIsIl90YWJpbmRleCIsImlzRm9jdXNhYmxlUnVsZXMiLCJvbmx5VGFiYmFibGUiLCJfaXNPbmx5VGFiYmFibGUiLCJmb2N1c1JlbGV2YW50IiwidmlzaWJpbGl0eU9wdGlvbnMiLCJfbm9kZU5hbWUyIiwiX25vZGVOYW1lIiwiaXNGb2N1c2FibGUiLCJjcmVhdGVGaWx0ZXIiLCJjb25kaXRpb24iLCJmaWx0ZXIiLCJOb2RlRmlsdGVyIiwiRklMVEVSX0FDQ0VQVCIsIkZJTFRFUl9TS0lQIiwiYWNjZXB0Tm9kZSIsIlBvc3NpYmx5Rm9jdXNhYmxlRmlsdGVyIiwicXVlcnlGb2N1c2FibGVTdHJpY3QiLCJpbmNsdWRlQ29udGV4dCIsImluY2x1ZGVPbmx5VGFiYmFibGUiLCJzdHJhdGVneSIsIl9pc0ZvY3VzYWJsZSIsIndhbGtlciIsImNyZWF0ZVRyZWVXYWxrZXIiLCJTSE9XX0VMRU1FTlQiLCJuZXh0Tm9kZSIsImN1cnJlbnROb2RlIiwiY29uY2F0IiwidW5zaGlmdCIsInN1cHBvcnRzJDYiLCJzZWxlY3RvciQxIiwic2VsZWN0b3IkMiIsInF1ZXJ5Rm9jdXNhYmxlUXVpY2siLCJfc2VsZWN0b3IiLCJlbGVtZW50cyIsInF1ZXJ5Rm9jdXNhYmxlIiwiX3JlZiRzdHJhdGVneSIsInN1cHBvcnRzJDciLCJmb2N1c2FibGVFbGVtZW50c1BhdHRlcm4iLCJpc1RhYmJhYmxlUnVsZXMiLCJmcmFtZU5vZGVOYW1lIiwiaXNGaXhlZEJsaW5rIiwiaGFzVGFiYmFibGVUYWJpbmRleE9yTm9uZSIsImhhc1RhYmJhYmxlVGFiaW5kZXgiLCJwb3RlbnRpYWxseVRhYmJhYmxlIiwidGFiSW5kZXgiLCJfc3R5bGUiLCJfc3R5bGUyIiwiaXNGb2N1c1JlbGV2YW50V2l0aG91dEZsZXhib3giLCJpc1RhYmJhYmxlV2l0aG91dEZsZXhib3giLCJpc1RhYmJhYmxlIiwicXVlcnlUYWJiYWJsZSIsIl9pc1RhYmJhYmxlIiwiY29tcGFyZURvbVBvc2l0aW9uIiwiYSIsImIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsIkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyIsInNvcnREb21PcmRlciIsInNvcnQiLCJnZXRGaXJzdFN1Y2Nlc3Nvck9mZnNldCIsImZpbmRJbnNlcnRpb25PZmZzZXRzIiwicmVzb2x2ZUVsZW1lbnQiLCJpbnNlcnRpb25zIiwiaW5qZWN0aW9ucyIsImluc2VydEVsZW1lbnRzQXRPZmZzZXRzIiwiaW5zZXJ0ZWQiLCJpbnNlcnRpb24iLCJyZW1vdmUiLCJhcmdzIiwic3BsaWNlIiwiYXBwbHkiLCJtZXJnZUluRG9tT3JkZXIiLCJfbGlzdCIsIl9lbGVtZW50cyIsIl9jcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJkZWZpbmVQcm9wZXJ0eSIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJNYXBzIiwibWFwcyIsImdldEFyZWFzRm9yIiwiYWRkTWFwQnlOYW1lIiwiZXh0cmFjdEFyZWFzRnJvbUxpc3QiLCJzb3J0QXJlYSIsInVzZW1hcHMiLCJpbWFnZSIsIl9jcmVhdGVDbGFzcyQxIiwiX2NsYXNzQ2FsbENoZWNrJDEiLCJTaGFkb3dzIiwic29ydEVsZW1lbnRzIiwiaG9zdENvdW50ZXIiLCJpbkhvc3QiLCJpbkRvY3VtZW50IiwiaG9zdHMiLCJfcmVnaXN0ZXJIb3N0IiwiX3NvcnRpbmdJZCIsInBhcmVudEhvc3QiLCJfcmVnaXN0ZXJIb3N0UGFyZW50IiwiX3JlZ2lzdGVyRWxlbWVudCIsImV4dHJhY3RFbGVtZW50cyIsIl9pbmplY3RIb3N0cyIsIl9yZXBsYWNlSG9zdHMiLCJfY2xlYW51cCIsIl9jb250ZXh0IiwiX21lcmdlIiwibWVyZ2VkIiwiX3Jlc29sdmVIb3N0RWxlbWVudCIsImJpbmQiLCJzb3J0U2hhZG93ZWQiLCJzaGFkb3dzIiwic29ydFRhYmluZGV4IiwiaW5kZXhlcyIsIm5vcm1hbCIsInJlZHVjZVJpZ2h0IiwicHJldmlvdXMiLCJjdXJyZW50Iiwic3VwcG9ydHMkOCIsIm1vdmVDb250ZXh0VG9CZWdpbm5pbmciLCJwb3MiLCJ0bXAiLCJxdWVyeVRhYnNlcXVlbmNlIiwiY3JlYXRlU2hhZG93Um9vdCIsImtleWNvZGUiLCJ0YWIiLCJsZWZ0IiwidXAiLCJyaWdodCIsImRvd24iLCJwYWdlVXAiLCJwYWdlRG93biIsImVuZCIsImhvbWUiLCJlbnRlciIsImVzY2FwZSIsInNwYWNlIiwic2hpZnQiLCJjYXBzTG9jayIsImN0cmwiLCJhbHQiLCJtZXRhIiwicGF1c2UiLCJpbnNlcnQiLCJkZWxldGUiLCJiYWNrc3BhY2UiLCJfYWxpYXMiLCJuIiwiX24iLCJjb2RlIiwibnVtQ29kZSIsIl9uMiIsIl9jb2RlIiwibmFtZSQxIiwiZnJvbUNoYXJDb2RlIiwibW9kaWZpZXIiLCJtb2RpZmllclNlcXVlbmNlIiwiY3JlYXRlRXhwZWN0ZWRNb2RpZmllcnMiLCJpZ25vcmVNb2RpZmllcnMiLCJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5IiwicmVzb2x2ZU1vZGlmaWVycyIsIm1vZGlmaWVycyIsImV4cGVjdGVkIiwidG9rZW4iLCJwcm9wZXJ0eU5hbWUiLCJyZXNvbHZlS2V5IiwibWF0Y2hNb2RpZmllcnMiLCJldmVudCIsInByb3AiLCJrZXlCaW5kaW5nIiwidGV4dCIsIl90ZXh0IiwidG9rZW5zIiwiX21vZGlmaWVycyIsIl9rZXlDb2RlcyIsImtleUNvZGVzIiwiZ2V0UGFyZW50Q29tcGFyYXRvciIsImluY2x1ZGVTZWxmIiwiaXNDaGlsZE9mIiwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZIiwiaXNQYXJlbnRPZiIsIndoZW5LZXkiLCJiaW5kaW5ncyIsIm1hcEtleXMiLCJyZWdpc3RlckJpbmRpbmciLCJhZGRDYWxsYmFjayIsImhhbmRsZUtleURvd24iLCJkZWZhdWx0UHJldmVudGVkIiwiaXNQYXJlbnRPZkVsZW1lbnQiLCJrZXlDb2RlIiwid2hpY2giLCJfZXZlbnQiLCJkaXNlbmdhZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBhcmFtIiwiYWx0U2hpZnRUYWIiLCJwcmV2ZW50RGVmYXVsdCIsInNlcXVlbmNlIiwiYmFja3dhcmQiLCJmaXJzdCIsImxhc3QiLCJzb3VyY2UiLCJjdXJyZW50SW5kZXgiLCJmb3VuZCIsImluZGV4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js":
|
||
/*!**********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js ***!
|
||
\**********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog-overlay] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n overflow: auto;\\n z-index: 9000;\\n\\n display: flex;\\n align-content: center;\\n align-items: center;\\n flex-direction: column;\\n padding: 10vh 15px 0;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n padding: 15px 15px 0;\\n }\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: var(--color-backdrop);\\n pointer-events: all;\\n z-index: -1;\\n }\\n\\n [data-nextjs-dialog-backdrop-fixed] {\\n cursor: not-allowed;\\n -webkit-backdrop-filter: blur(8px);\\n backdrop-filter: blur(8px);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9zdHlsZXMuanMiLCJtYXBwaW5ncyI6Ijs7OzswQ0EyQ1NBOzs7ZUFBQUE7Ozs7MENBM0NtQjs7Ozs7Ozs7OztBQUU1QixNQUFNQSxTQUFBQSxDQUFBQSxHQUFTQyxjQUFBQSxJQUFHLEVBQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L3N0eWxlcy50c3g/MWQ4MiJdLCJuYW1lcyI6WyJzdHlsZXMiLCJjc3MiLCJfdGVtcGxhdGVPYmplY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js":
|
||
/*!********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js ***!
|
||
\********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ShadowPortal\", ({\n enumerable: true,\n get: function() {\n return ShadowPortal;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _reactdom = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\nfunction ShadowPortal(param) {\n _s();\n let { children } = param;\n let portalNode = _react.useRef(null);\n let shadowNode = _react.useRef(null);\n let [, forceUpdate] = _react.useState();\n _react.useLayoutEffect(()=>{\n const ownerDocument = document;\n portalNode.current = ownerDocument.createElement(\"nextjs-portal\");\n shadowNode.current = portalNode.current.attachShadow({\n mode: \"open\"\n });\n ownerDocument.body.appendChild(portalNode.current);\n forceUpdate({});\n return ()=>{\n if (portalNode.current && portalNode.current.ownerDocument) {\n portalNode.current.ownerDocument.body.removeChild(portalNode.current);\n }\n };\n }, []);\n return shadowNode.current ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, shadowNode.current) : null;\n}\n_s(ShadowPortal, \"P7YL0rn/sjH62F7+OsEXN5GMw3U=\");\n_c = ShadowPortal;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ShadowPortal.js.map\nvar _c;\n$RefreshReg$(_c, \"ShadowPortal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvU2hhZG93UG9ydGFsLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztnREFHZ0JBOzs7ZUFBQUE7Ozs7NkVBSE87c0NBQ007QUFFdEIsU0FBU0EsYUFBYUMsS0FBMkM7O0lBQTNDLE1BQUVDLFFBQVEsRUFBaUMsR0FBM0NEO0lBQzNCLElBQUlFLGFBQWFDLE9BQU1DLE1BQU0sQ0FBcUI7SUFDbEQsSUFBSUMsYUFBYUYsT0FBTUMsTUFBTSxDQUFvQjtJQUNqRCxJQUFJLEdBQUdFLFlBQVksR0FBR0gsT0FBTUksUUFBUTtJQUVwQ0osT0FBTUssZUFBZSxDQUFDO1FBQ3BCLE1BQU1DLGdCQUFnQkM7UUFDdEJSLFdBQVdTLE9BQU8sR0FBR0YsY0FBY0csYUFBYSxDQUFDO1FBQ2pEUCxXQUFXTSxPQUFPLEdBQUdULFdBQVdTLE9BQU8sQ0FBQ0UsWUFBWSxDQUFDO1lBQUVDLE1BQU07UUFBTztRQUNwRUwsY0FBY00sSUFBSSxDQUFDQyxXQUFXLENBQUNkLFdBQVdTLE9BQU87UUFDakRMLFlBQVksQ0FBQztRQUNiLE9BQU87WUFDTCxJQUFJSixXQUFXUyxPQUFPLElBQUlULFdBQVdTLE9BQU8sQ0FBQ0YsYUFBYSxFQUFFO2dCQUMxRFAsV0FBV1MsT0FBTyxDQUFDRixhQUFhLENBQUNNLElBQUksQ0FBQ0UsV0FBVyxDQUFDZixXQUFXUyxPQUFPO1lBQ3RFO1FBQ0Y7SUFDRixHQUFHLEVBQUU7SUFFTCxPQUFPTixXQUFXTSxPQUFPLEdBQ3JCTyxXQURxQixHQUNyQkEsQ0FBQUEsR0FBQUEsVUFBQUEsWUFBWSxFQUFDakIsVUFBVUksV0FBV00sT0FBTyxJQUN6QztBQUNOO0dBckJnQlo7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1NoYWRvd1BvcnRhbC50c3g/ZGM4OSJdLCJuYW1lcyI6WyJTaGFkb3dQb3J0YWwiLCJwYXJhbSIsImNoaWxkcmVuIiwicG9ydGFsTm9kZSIsIlJlYWN0IiwidXNlUmVmIiwic2hhZG93Tm9kZSIsImZvcmNlVXBkYXRlIiwidXNlU3RhdGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJvd25lckRvY3VtZW50IiwiZG9jdW1lbnQiLCJjdXJyZW50IiwiY3JlYXRlRWxlbWVudCIsImF0dGFjaFNoYWRvdyIsIm1vZGUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImNyZWF0ZVBvcnRhbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js":
|
||
/*!***************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js ***!
|
||
\***************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"EditorLink\", ({\n enumerable: true,\n get: function() {\n return EditorLink;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nfunction EditorLink(param) {\n let { file, isSourceFile, location } = param;\n var _location_line, _location_column;\n const open = (0, _useopenineditor.useOpenInEditor)({\n file,\n lineNumber: (_location_line = location == null ? void 0 : location.line) != null ? _location_line : 1,\n column: (_location_column = location == null ? void 0 : location.column) != null ? _location_column : 0\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-with-open-in-editor-link\": true,\n \"data-with-open-in-editor-link-source-file\": isSourceFile ? true : undefined,\n \"data-with-open-in-editor-link-import-trace\": isSourceFile ? undefined : true,\n tabIndex: 10,\n role: \"link\",\n onClick: open,\n title: \"Click to open in your editor\",\n children: [\n file,\n location ? \":\" + location.line + \":\" + location.column : null,\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n });\n}\n_c = EditorLink;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=EditorLink.js.map\nvar _c;\n$RefreshReg$(_c, \"EditorLink\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvRWRpdG9yTGluay5qcyIsIm1hcHBpbmdzIjoiOzs7OzhDQVdnQkE7OztlQUFBQTs7Ozs7NEVBWEU7NkNBQ2M7QUFVekIsU0FBU0EsV0FBV0MsS0FBaUQ7SUFBakQsTUFBRUMsSUFBSSxFQUFFQyxZQUFZLEVBQUVDLFFBQVEsRUFBbUIsR0FBakRIO1FBR1hHLGdCQUNKQTtJQUhWLE1BQU1DLE9BQU9DLENBQUFBLEdBQUFBLGlCQUFBQSxlQUFlLEVBQUM7UUFDM0JKO1FBQ0FLLFlBQVlILENBQUFBLGlCQUFBQSxZQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxTQUFVSSxJQUFJLFlBQWRKLGlCQUFrQjtRQUM5QkssUUFBUUwsQ0FBQUEsbUJBQUFBLFlBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFNBQVVLLE1BQU0sWUFBaEJMLG1CQUFvQjtJQUM5QjtJQUVBLE9BQ0UsV0FERixHQUNFLElBQUFNLFlBQUFDLElBQUEsRUFBQ0MsT0FBQUE7UUFDQ0MsaUNBQTZCO1FBQzdCQyw2Q0FDRVgsZUFBZSxPQUFPWTtRQUV4QkMsOENBQ0ViLGVBQWVZLFlBQVk7UUFFN0JFLFVBQVU7UUFDVkMsTUFBTTtRQUNOQyxTQUFTZDtRQUNUZSxPQUFPOztZQUVObEI7WUFDQUUsV0FBVyxNQUFJQSxTQUFTSSxJQUFJLEdBQUMsTUFBR0osU0FBU0ssTUFBTSxHQUFLOzBCQUNyRCxJQUFBQyxZQUFBQyxJQUFBLEVBQUNVLE9BQUFBO2dCQUNDQyxPQUFNO2dCQUNOQyxTQUFRO2dCQUNSQyxNQUFLO2dCQUNMQyxRQUFPO2dCQUNQQyxhQUFZO2dCQUNaQyxlQUFjO2dCQUNkQyxnQkFBZTs7a0NBRWYsSUFBQWxCLFlBQUFtQixHQUFBLEVBQUNDLFFBQUFBO3dCQUFLQyxHQUFFOztrQ0FDUixJQUFBckIsWUFBQW1CLEdBQUEsRUFBQ0csWUFBQUE7d0JBQVNDLFFBQU87O2tDQUNqQixJQUFBdkIsWUFBQW1CLEdBQUEsRUFBQ3JCLFFBQUFBO3dCQUFLMEIsSUFBRzt3QkFBS0MsSUFBRzt3QkFBS0MsSUFBRzt3QkFBS0MsSUFBRzs7Ozs7O0FBSXpDO0tBdENnQnJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9FZGl0b3JMaW5rLnRzeD82NmJmIl0sIm5hbWVzIjpbIkVkaXRvckxpbmsiLCJwYXJhbSIsImZpbGUiLCJpc1NvdXJjZUZpbGUiLCJsb2NhdGlvbiIsIm9wZW4iLCJ1c2VPcGVuSW5FZGl0b3IiLCJsaW5lTnVtYmVyIiwibGluZSIsImNvbHVtbiIsIl9qc3hydW50aW1lIiwianN4cyIsImRpdiIsImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rIiwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGUiLCJ1bmRlZmluZWQiLCJkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1pbXBvcnQtdHJhY2UiLCJ0YWJJbmRleCIsInJvbGUiLCJvbkNsaWNrIiwidGl0bGUiLCJzdmciLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJqc3giLCJwYXRoIiwiZCIsInBvbHlsaW5lIiwicG9pbnRzIiwieDEiLCJ5MSIsIngyIiwieTIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js":
|
||
/*!*************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js ***!
|
||
\*************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Terminal\", ({\n enumerable: true,\n get: function() {\n return Terminal;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _anser = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/anser */ \"./node_modules/next/dist/compiled/anser/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _hotlinkedtext = __webpack_require__(/*! ../hot-linked-text */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nconst _EditorLink = __webpack_require__(/*! ./EditorLink */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js\");\nfunction getFile(lines) {\n const contentFileName = lines.shift();\n if (!contentFileName) return null;\n const [fileName, line, column] = contentFileName.split(\":\", 3);\n const parsedLine = Number(line);\n const parsedColumn = Number(column);\n const hasLocation = !Number.isNaN(parsedLine) && !Number.isNaN(parsedColumn);\n return {\n fileName: hasLocation ? fileName : contentFileName,\n location: hasLocation ? {\n line: parsedLine,\n column: parsedColumn\n } : undefined\n };\n}\nfunction getImportTraceFiles(lines) {\n if (lines.some((line)=>/ReactServerComponentsError:/.test(line)) || lines.some((line)=>/Import trace for requested module:/.test(line))) {\n // Grab the lines at the end containing the files\n const files = [];\n while(/.+\\..+/.test(lines[lines.length - 1]) && !lines[lines.length - 1].includes(\":\")){\n const file = lines.pop().trim();\n files.unshift(file);\n }\n return files;\n }\n return [];\n}\nfunction getEditorLinks(content) {\n const lines = content.split(\"\\n\");\n const file = getFile(lines);\n const importTraceFiles = getImportTraceFiles(lines);\n return {\n file,\n source: lines.join(\"\\n\"),\n importTraceFiles\n };\n}\nconst Terminal = function Terminal(param) {\n _s();\n let { content } = param;\n const { file, source, importTraceFiles } = _react.useMemo(()=>getEditorLinks(content), [\n content\n ]);\n const decoded = _react.useMemo(()=>{\n return _anser.default.ansiToJson(source, {\n json: true,\n use_classes: true,\n remove_empty: true\n });\n }, [\n source\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-terminal\": true,\n children: [\n file && /*#__PURE__*/ (0, _jsxruntime.jsx)(_EditorLink.EditorLink, {\n isSourceFile: true,\n file: file.fileName,\n location: file.location\n }, file.fileName),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"pre\", {\n children: [\n decoded.map((entry, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n style: {\n color: entry.fg ? \"var(--color-\" + entry.fg + \")\" : undefined,\n ...entry.decoration === \"bold\" ? {\n fontWeight: 800\n } : entry.decoration === \"italic\" ? {\n fontStyle: \"italic\"\n } : undefined\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: entry.content\n })\n }, \"terminal-entry-\" + index)),\n importTraceFiles.map((importTraceFile)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_EditorLink.EditorLink, {\n isSourceFile: false,\n file: importTraceFile\n }, importTraceFile))\n ]\n })\n ]\n });\n};\n_s(Terminal, \"nkmao/TIox3Jie/+6JvWO3hTKPQ=\");\n_c = Terminal;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Terminal.js.map\nvar _c;\n$RefreshReg$(_c, \"Terminal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvVGVybWluYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OzRDQXdEYUE7OztlQUFBQTs7Ozs7OzRFQXhESzs2RUFDSzsyQ0FDTzt3Q0FDSDtBQUkzQixTQUFTQyxRQUFRQyxLQUFlO0lBQzlCLE1BQU1DLGtCQUFrQkQsTUFBTUUsS0FBSztJQUNuQyxJQUFJLENBQUNELGlCQUFpQixPQUFPO0lBQzdCLE1BQU0sQ0FBQ0UsVUFBVUMsTUFBTUMsT0FBTyxHQUFHSixnQkFBZ0JLLEtBQUssQ0FBQyxLQUFLO0lBRTVELE1BQU1DLGFBQWFDLE9BQU9KO0lBQzFCLE1BQU1LLGVBQWVELE9BQU9IO0lBQzVCLE1BQU1LLGNBQWMsQ0FBQ0YsT0FBT0csS0FBSyxDQUFDSixlQUFlLENBQUNDLE9BQU9HLEtBQUssQ0FBQ0Y7SUFFL0QsT0FBTztRQUNMTixVQUFVTyxjQUFjUCxXQUFXRjtRQUNuQ1csVUFBVUYsY0FDTjtZQUNFTixNQUFNRztZQUNORixRQUFRSTtRQUNWLElBQ0FJO0lBQ047QUFDRjtBQUVBLFNBQVNDLG9CQUFvQmQsS0FBZTtJQUMxQyxJQUNFQSxNQUFNZSxJQUFJLENBQUMsQ0FBQ1gsT0FBUyw4QkFBOEJZLElBQUksQ0FBQ1osVUFDeERKLE1BQU1lLElBQUksQ0FBQyxDQUFDWCxPQUFTLHFDQUFxQ1ksSUFBSSxDQUFDWixRQUMvRDtRQUNBLGlEQUFpRDtRQUNqRCxNQUFNYSxRQUFRLEVBQUU7UUFDaEIsTUFDRSxTQUFTRCxJQUFJLENBQUNoQixLQUFLLENBQUNBLE1BQU1rQixNQUFNLEdBQUcsRUFBRSxLQUNyQyxDQUFDbEIsS0FBSyxDQUFDQSxNQUFNa0IsTUFBTSxHQUFHLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLEtBQ2xDO1lBQ0EsTUFBTUMsT0FBT3BCLE1BQU1xQixHQUFHLEdBQUlDLElBQUk7WUFDOUJMLE1BQU1NLE9BQU8sQ0FBQ0g7UUFDaEI7UUFFQSxPQUFPSDtJQUNUO0lBRUEsT0FBTyxFQUFFO0FBQ1g7QUFFQSxTQUFTTyxlQUFlQyxPQUFlO0lBQ3JDLE1BQU16QixRQUFReUIsUUFBUW5CLEtBQUssQ0FBQztJQUM1QixNQUFNYyxPQUFPckIsUUFBUUM7SUFDckIsTUFBTTBCLG1CQUFtQlosb0JBQW9CZDtJQUU3QyxPQUFPO1FBQUVvQjtRQUFNTyxRQUFRM0IsTUFBTTRCLElBQUksQ0FBQztRQUFPRjtJQUFpQjtBQUM1RDtBQUVPLE1BQU01QixXQUFvQyxTQUFTQSxTQUFTK0IsS0FFbEU7O0lBRmtFLE1BQ2pFSixPQUFPLEVBQ1IsR0FGa0VJO0lBR2pFLE1BQU0sRUFBRVQsSUFBSSxFQUFFTyxNQUFNLEVBQUVELGdCQUFnQixFQUFFLEdBQUdJLE9BQU1DLE9BQU8sQ0FDdEQsSUFBTVAsZUFBZUMsVUFDckI7UUFBQ0E7S0FBUTtJQUdYLE1BQU1PLFVBQVVGLE9BQU1DLE9BQU8sQ0FBQztRQUM1QixPQUFPRSxPQUFBQSxPQUFLLENBQUNDLFVBQVUsQ0FBQ1AsUUFBUTtZQUM5QlEsTUFBTTtZQUNOQyxhQUFhO1lBQ2JDLGNBQWM7UUFDaEI7SUFDRixHQUFHO1FBQUNWO0tBQU87SUFFWCxPQUNFLFdBREYsR0FDRSxJQUFBVyxZQUFBQyxJQUFBLEVBQUNDLE9BQUFBO1FBQUlDLHdCQUFvQjs7WUFDdEJyQixRQUNDLFdBRERBLEdBQ0MsSUFBQWtCLFlBQUFJLEdBQUEsRUFBQ0MsWUFBQUEsVUFBVTtnQkFDVEMsY0FBWTtnQkFFWnhCLE1BQU1BLEtBQUtqQixRQUFRO2dCQUNuQlMsVUFBVVEsS0FBS1IsUUFBUTtlQUZsQlEsS0FBS2pCLFFBQVE7MEJBS3RCLElBQUFtQyxZQUFBQyxJQUFBLEVBQUNNLE9BQUFBOztvQkFDRWIsUUFBUWMsR0FBRyxDQUFDLENBQUNDLE9BQU9DLFFBQ25CLFdBRG1CQSxHQUNuQixJQUFBVixZQUFBSSxHQUFBLEVBQUNPLFFBQUFBOzRCQUVDQyxPQUFPO2dDQUNMQyxPQUFPSixNQUFNSyxFQUFFLEdBQUcsaUJBQWVMLE1BQU1LLEVBQUUsR0FBQyxNQUFLdkM7Z0NBQy9DLEdBQUlrQyxNQUFNTSxVQUFVLEtBQUssU0FDckI7b0NBQUVDLFlBQVk7Z0NBQUksSUFDbEJQLE1BQU1NLFVBQVUsS0FBSyxXQUNyQjtvQ0FBRUUsV0FBVztnQ0FBUyxJQUN0QjFDLFNBQVM7NEJBQ2Y7c0NBRUEsa0JBQUF5QixZQUFBSSxHQUFBLEVBQUNjLGVBQUFBLGFBQWE7Z0NBQUNDLE1BQU1WLE1BQU10QixPQUFPOzsyQkFWN0Isb0JBQWtCdUI7b0JBYTFCdEIsaUJBQWlCb0IsR0FBRyxDQUFDLENBQUNZLGtCQUNyQixXQURxQkEsR0FDckIsSUFBQXBCLFlBQUFJLEdBQUEsRUFBQ0MsWUFBQUEsVUFBVTs0QkFDVEMsY0FBYzs0QkFFZHhCLE1BQU1zQzsyQkFEREE7Ozs7O0FBT2pCO0dBcERhNUQ7S0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1Rlcm1pbmFsL1Rlcm1pbmFsLnRzeD8zYjhmIl0sIm5hbWVzIjpbIlRlcm1pbmFsIiwiZ2V0RmlsZSIsImxpbmVzIiwiY29udGVudEZpbGVOYW1lIiwic2hpZnQiLCJmaWxlTmFtZSIsImxpbmUiLCJjb2x1bW4iLCJzcGxpdCIsInBhcnNlZExpbmUiLCJOdW1iZXIiLCJwYXJzZWRDb2x1bW4iLCJoYXNMb2NhdGlvbiIsImlzTmFOIiwibG9jYXRpb24iLCJ1bmRlZmluZWQiLCJnZXRJbXBvcnRUcmFjZUZpbGVzIiwic29tZSIsInRlc3QiLCJmaWxlcyIsImxlbmd0aCIsImluY2x1ZGVzIiwiZmlsZSIsInBvcCIsInRyaW0iLCJ1bnNoaWZ0IiwiZ2V0RWRpdG9yTGlua3MiLCJjb250ZW50IiwiaW1wb3J0VHJhY2VGaWxlcyIsInNvdXJjZSIsImpvaW4iLCJwYXJhbSIsIlJlYWN0IiwidXNlTWVtbyIsImRlY29kZWQiLCJBbnNlciIsImFuc2lUb0pzb24iLCJqc29uIiwidXNlX2NsYXNzZXMiLCJyZW1vdmVfZW1wdHkiLCJfanN4cnVudGltZSIsImpzeHMiLCJkaXYiLCJkYXRhLW5leHRqcy10ZXJtaW5hbCIsImpzeCIsIkVkaXRvckxpbmsiLCJpc1NvdXJjZUZpbGUiLCJwcmUiLCJtYXAiLCJlbnRyeSIsImluZGV4Iiwic3BhbiIsInN0eWxlIiwiY29sb3IiLCJmZyIsImRlY29yYXRpb24iLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwiSG90bGlua2VkVGV4dCIsInRleHQiLCJpbXBvcnRUcmFjZUZpbGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js":
|
||
/*!**********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js ***!
|
||
\**********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Terminal\", ({\n enumerable: true,\n get: function() {\n return _Terminal.Terminal;\n }\n}));\nconst _Terminal = __webpack_require__(/*! ./Terminal */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs0Q0FBU0E7OztlQUFBQSxVQUFBQSxRQUFROzs7c0NBQVEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1Rlcm1pbmFsL2luZGV4LnRzeD8zZjZkIl0sIm5hbWVzIjpbIlRlcm1pbmFsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js":
|
||
/*!***********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js ***!
|
||
\***********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-terminal] {\\n border-radius: var(--size-gap-half);\\n background-color: var(--color-ansi-bg);\\n color: var(--color-ansi-fg);\\n }\\n [data-nextjs-terminal]::selection,\\n [data-nextjs-terminal] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n [data-nextjs-terminal] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n [data-nextjs-terminal] > * {\\n margin: 0;\\n padding: calc(var(--size-gap) + var(--size-gap-half))\\n calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n\\n [data-nextjs-terminal] pre {\\n white-space: pre-wrap;\\n word-break: break-word;\\n }\\n\\n [data-with-open-in-editor-link] svg {\\n width: auto;\\n height: var(--size-font-small);\\n margin-left: var(--size-gap);\\n }\\n [data-with-open-in-editor-link] {\\n cursor: pointer;\\n }\\n [data-with-open-in-editor-link]:hover {\\n text-decoration: underline dotted;\\n }\\n [data-with-open-in-editor-link-source-file] {\\n border-bottom: 1px solid var(--color-ansi-bright-black);\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n }\\n [data-with-open-in-editor-link-import-trace] {\\n margin-left: var(--size-gap-double);\\n }\\n [data-nextjs-terminal] a {\\n color: inherit;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7MENBcURTQTs7O2VBQUFBOzs7OzBDQXJEbUI7Ozs7Ozs7Ozs7QUFFNUIsTUFBTUEsU0FBQUEsQ0FBQUEsR0FBU0MsY0FBQUEsSUFBRyxFQUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvc3R5bGVzLnRzeD9hZGZhIl0sIm5hbWVzIjpbInN0eWxlcyIsImNzcyIsIl90ZW1wbGF0ZU9iamVjdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js":
|
||
/*!*******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js ***!
|
||
\*******************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Toast\", ({\n enumerable: true,\n get: function() {\n return Toast;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst Toast = function Toast(param) {\n let { onClick, children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-toast\": true,\n onClick: (e)=>{\n e.preventDefault();\n return onClick == null ? void 0 : onClick();\n },\n className: className,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-toast-wrapper\": true,\n children: children\n })\n });\n};\n_c = Toast;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Toast.js.map\nvar _c;\n$RefreshReg$(_c, \"Toast\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozt5Q0FRYUE7OztlQUFBQTs7Ozs7NkVBUlU7QUFRaEIsTUFBTUEsUUFBOEIsU0FBU0EsTUFBTUMsS0FJekQ7SUFKeUQsTUFDeERDLE9BQU8sRUFDUEMsUUFBUSxFQUNSQyxTQUFTLEVBQ1YsR0FKeURIO0lBS3hELE9BQ0UsV0FERixHQUNFLElBQUFJLFlBQUFDLEdBQUEsRUFBQ0MsT0FBQUE7UUFDQ0MscUJBQWlCO1FBQ2pCTixTQUFTLENBQUNPO1lBQ1JBLEVBQUVDLGNBQWM7WUFDaEIsT0FBT1IsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUE7UUFDVDtRQUNBRSxXQUFXQTtrQkFFWCxrQkFBQUMsWUFBQUMsR0FBQSxFQUFDQyxPQUFBQTtZQUFJSSw2QkFBeUI7c0JBQUVSOzs7QUFHdEM7S0FqQmFIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3g/M2Q3NiJdLCJuYW1lcyI6WyJUb2FzdCIsInBhcmFtIiwib25DbGljayIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJkaXYiLCJkYXRhLW5leHRqcy10b2FzdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRhdGEtbmV4dGpzLXRvYXN0LXdyYXBwZXIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js":
|
||
/*!*******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js ***!
|
||
\*******************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Toast: function() {\n return _Toast.Toast;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _styles = __webpack_require__(/*! ./styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js\");\nconst _Toast = __webpack_require__(/*! ./Toast */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3QvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQ1NBLE9BQUs7ZUFBTEEsT0FBQUEsS0FBSzs7SUFETEMsUUFBTTtlQUFOQSxRQUFBQSxNQUFNOzs7b0NBQVE7bUNBQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1RvYXN0L2luZGV4LnRzeD8wMDJiIl0sIm5hbWVzIjpbIlRvYXN0Iiwic3R5bGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js":
|
||
/*!********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js ***!
|
||
\********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-toast] {\\n position: fixed;\\n bottom: var(--size-gap-double);\\n left: var(--size-gap-double);\\n max-width: 420px;\\n z-index: 9000;\\n }\\n\\n @media (max-width: 440px) {\\n [data-nextjs-toast] {\\n max-width: 90vw;\\n left: 5vw;\\n }\\n }\\n\\n [data-nextjs-toast-wrapper] {\\n padding: 16px;\\n border-radius: var(--size-gap-half);\\n font-weight: 500;\\n color: var(--color-ansi-bright-white);\\n background-color: var(--color-ansi-red);\\n box-shadow: 0px var(--size-gap-double) var(--size-gap-quad)\\n rgba(0, 0, 0, 0.25);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3Qvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7MENBNkJTQTs7O2VBQUFBOzs7OzBDQTdCbUI7Ozs7Ozs7Ozs7QUFFNUIsTUFBTUEsU0FBQUEsQ0FBQUEsR0FBU0MsY0FBQUEsSUFBRyxFQUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3Qvc3R5bGVzLnRzPzUzYTQiXSwibmFtZXMiOlsic3R5bGVzIiwiY3NzIiwiX3RlbXBsYXRlT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js":
|
||
/*!*************************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js ***!
|
||
\*************************************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n VersionStalenessInfo: function() {\n return VersionStalenessInfo;\n },\n getStaleness: function() {\n return getStaleness;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nfunction VersionStalenessInfo(props) {\n if (!props) return null;\n const { staleness } = props;\n let { text, indicatorClass, title } = getStaleness(props);\n if (!text) return null;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"small\", {\n className: \"nextjs-container-build-error-version-status\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n className: indicatorClass\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n \"data-nextjs-version-checker\": true,\n title: title,\n children: text\n }),\n \" \",\n staleness === \"fresh\" || staleness === \"newer-than-npm\" || staleness === \"unknown\" ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n href: \"https://nextjs.org/docs/messages/version-staleness\",\n children: \"(learn more)\"\n }),\n false ? 0 : \"\"\n ]\n });\n}\n_c = VersionStalenessInfo;\nfunction getStaleness(param) {\n let { installed, staleness, expected } = param;\n let text = \"\";\n let title = \"\";\n let indicatorClass = \"\";\n const versionLabel = \"Next.js (\" + installed + \")\";\n switch(staleness){\n case \"newer-than-npm\":\n case \"fresh\":\n text = versionLabel;\n title = \"Latest available version is detected (\" + installed + \").\";\n indicatorClass = \"fresh\";\n break;\n case \"stale-patch\":\n case \"stale-minor\":\n text = \"\" + versionLabel + \" out of date\";\n title = \"There is a newer version (\" + expected + \") available, upgrade recommended! \";\n indicatorClass = \"stale\";\n break;\n case \"stale-major\":\n {\n text = \"\" + versionLabel + \" is outdated\";\n title = \"An outdated version detected (latest is \" + expected + \"), upgrade is highly recommended!\";\n indicatorClass = \"outdated\";\n break;\n }\n case \"stale-prerelease\":\n {\n text = \"\" + versionLabel + \" is outdated\";\n title = \"There is a newer canary version (\" + expected + \") available, please upgrade! \";\n indicatorClass = \"stale\";\n break;\n }\n case \"unknown\":\n break;\n default:\n break;\n }\n return {\n text,\n indicatorClass,\n title\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=VersionStalenessInfo.js.map\nvar _c;\n$RefreshReg$(_c, \"VersionStalenessInfo\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vVmVyc2lvblN0YWxlbmVzc0luZm8uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBR2dCQSxzQkFBb0I7ZUFBcEJBOztJQTZCQUMsY0FBWTtlQUFaQTs7Ozs7NEVBaENFO0FBR1gsU0FBU0QscUJBQXFCRSxLQUFrQjtJQUNyRCxJQUFJLENBQUNBLE9BQU8sT0FBTztJQUNuQixNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHRDtJQUN0QixJQUFJLEVBQUVFLElBQUksRUFBRUMsY0FBYyxFQUFFQyxLQUFLLEVBQUUsR0FBR0wsYUFBYUM7SUFFbkQsSUFBSSxDQUFDRSxNQUFNLE9BQU87SUFFbEIsT0FDRSxXQURGLEdBQ0UsSUFBQUcsWUFBQUMsSUFBQSxFQUFDQyxTQUFBQTtRQUFNQyxXQUFVOzswQkFDZixJQUFBSCxZQUFBSSxHQUFBLEVBQUNDLFFBQUFBO2dCQUFLRixXQUFXTDs7MEJBQ2pCLElBQUFFLFlBQUFJLEdBQUEsRUFBQ0YsU0FBQUE7Z0JBQU1JLCtCQUEyQjtnQkFBQ1AsT0FBT0E7MEJBQ3ZDRjs7WUFDTTtZQUNSRCxjQUFjLFdBQ2ZBLGNBQWMsb0JBQ2RBLGNBQWMsWUFBWSxPQUN4QixXQUR3QixHQUN4QixJQUFBSSxZQUFBSSxHQUFBLEVBQUNHLEtBQUFBO2dCQUNDQyxRQUFPO2dCQUNQQyxLQUFJO2dCQUNKQyxNQUFLOzBCQUNOOztZQUlGQyxNQUFxQixHQUFHLElBQWE7OztBQUc1QztLQTNCZ0JsQjtBQTZCVCxTQUFTQyxhQUFhb0IsS0FBK0M7SUFBL0MsTUFBRUMsU0FBUyxFQUFFbkIsU0FBUyxFQUFFb0IsUUFBUSxFQUFlLEdBQS9DRjtJQUMzQixJQUFJakIsT0FBTztJQUNYLElBQUlFLFFBQVE7SUFDWixJQUFJRCxpQkFBaUI7SUFDckIsTUFBTW1CLGVBQWUsY0FBWUYsWUFBVTtJQUMzQyxPQUFRbkI7UUFDTixLQUFLO1FBQ0wsS0FBSztZQUNIQyxPQUFPb0I7WUFDUGxCLFFBQVEsMkNBQXlDZ0IsWUFBVTtZQUMzRGpCLGlCQUFpQjtZQUNqQjtRQUNGLEtBQUs7UUFDTCxLQUFLO1lBQ0hELE9BQU8sS0FBR29CLGVBQWE7WUFDdkJsQixRQUFRLCtCQUE2QmlCLFdBQVM7WUFDOUNsQixpQkFBaUI7WUFDakI7UUFDRixLQUFLO1lBQWU7Z0JBQ2xCRCxPQUFPLEtBQUdvQixlQUFhO2dCQUN2QmxCLFFBQVEsNkNBQTJDaUIsV0FBUztnQkFDNURsQixpQkFBaUI7Z0JBQ2pCO1lBQ0Y7UUFDQSxLQUFLO1lBQW9CO2dCQUN2QkQsT0FBTyxLQUFHb0IsZUFBYTtnQkFDdkJsQixRQUFRLHNDQUFvQ2lCLFdBQVM7Z0JBQ3JEbEIsaUJBQWlCO2dCQUNqQjtZQUNGO1FBQ0EsS0FBSztZQUNIO1FBQ0Y7WUFDRTtJQUNKO0lBQ0EsT0FBTztRQUFFRDtRQUFNQztRQUFnQkM7SUFBTTtBQUN2QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vVmVyc2lvblN0YWxlbmVzc0luZm8udHN4P2YwYTEiXSwibmFtZXMiOlsiVmVyc2lvblN0YWxlbmVzc0luZm8iLCJnZXRTdGFsZW5lc3MiLCJwcm9wcyIsInN0YWxlbmVzcyIsInRleHQiLCJpbmRpY2F0b3JDbGFzcyIsInRpdGxlIiwiX2pzeHJ1bnRpbWUiLCJqc3hzIiwic21hbGwiLCJjbGFzc05hbWUiLCJqc3giLCJzcGFuIiwiZGF0YS1uZXh0anMtdmVyc2lvbi1jaGVja2VyIiwiYSIsInRhcmdldCIsInJlbCIsImhyZWYiLCJwcm9jZXNzIiwiZW52IiwiVFVSQk9QQUNLIiwicGFyYW0iLCJpbnN0YWxsZWQiLCJleHBlY3RlZCIsInZlcnNpb25MYWJlbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js":
|
||
/*!**********************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js ***!
|
||
\**********************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n VersionStalenessInfo: function() {\n return _VersionStalenessInfo.VersionStalenessInfo;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _styles = __webpack_require__(/*! ./styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ./VersionStalenessInfo */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQ1NBLHNCQUFvQjtlQUFwQkEsc0JBQUFBLG9CQUFvQjs7SUFEcEJDLFFBQU07ZUFBTkEsUUFBQUEsTUFBTTs7O29DQUFRO2tEQUNjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mby9pbmRleC50c3g/NjEzZSJdLCJuYW1lcyI6WyJWZXJzaW9uU3RhbGVuZXNzSW5mbyIsInN0eWxlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js":
|
||
/*!***********************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js ***!
|
||
\***********************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-build-error-version-status {\\n flex: 1;\\n text-align: right;\\n }\\n .nextjs-container-build-error-version-status small {\\n margin-left: var(--size-gap);\\n font-size: var(--size-font-small);\\n }\\n .nextjs-container-build-error-version-status a {\\n font-size: var(--size-font-small);\\n }\\n .nextjs-container-build-error-version-status span {\\n display: inline-block;\\n width: 10px;\\n height: 10px;\\n border-radius: 5px;\\n background: var(--color-ansi-bright-black);\\n }\\n .nextjs-container-build-error-version-status span.fresh {\\n background: var(--color-ansi-green);\\n }\\n .nextjs-container-build-error-version-status span.stale {\\n background: var(--color-ansi-yellow);\\n }\\n .nextjs-container-build-error-version-status span.outdated {\\n background: var(--color-ansi-red);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vc3R5bGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7MENBZ0NTQTs7O2VBQUFBOzs7OzBDQWhDbUI7Ozs7Ozs7Ozs7QUFFNUIsTUFBTUEsU0FBQUEsQ0FBQUEsR0FBU0MsY0FBQUEsSUFBRyxFQUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vc3R5bGVzLnRzPzE3ZTMiXSwibmFtZXMiOlsic3R5bGVzIiwiY3NzIiwiX3RlbXBsYXRlT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js":
|
||
/*!*****************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js ***!
|
||
\*****************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HotlinkedText\", ({\n enumerable: true,\n get: function() {\n return HotlinkedText;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _magicidentifier = __webpack_require__(/*! ../../../../../../shared/lib/magic-identifier */ \"./node_modules/next/dist/shared/lib/magic-identifier.js\");\nconst linkRegex = /https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/i;\nconst splitRegexp = new RegExp(\"(\" + _magicidentifier.MAGIC_IDENTIFIER_REGEX.source + \"|\\\\s+)\");\nconst HotlinkedText = function HotlinkedText(props) {\n const { text, matcher } = props;\n const wordsAndWhitespaces = text.split(splitRegexp);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: wordsAndWhitespaces.map((word, index)=>{\n if (linkRegex.test(word)) {\n const link = linkRegex.exec(word);\n const href = link[0];\n // If link matcher is present but the link doesn't match, don't turn it into a link\n if (typeof matcher === \"function\" && !matcher(href)) {\n return word;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n href: href,\n target: \"_blank\",\n rel: \"noreferrer noopener\",\n children: word\n })\n }, \"link-\" + index);\n }\n try {\n const decodedWord = (0, _magicidentifier.decodeMagicIdentifier)(word);\n if (decodedWord !== word) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"i\", {\n children: [\n \"{\",\n decodedWord,\n \"}\"\n ]\n }, \"ident-\" + index);\n }\n } catch (e) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"i\", {\n children: [\n \"{\",\n word,\n \" (decoding failed: \",\n \"\" + e,\n \")\",\n \"}\"\n ]\n }, \"ident-\" + index);\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.Fragment, {\n children: word\n }, \"text-\" + index);\n })\n });\n};\n_c = HotlinkedText;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"HotlinkedText\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvaG90LWxpbmtlZC10ZXh0L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBVWFBOzs7ZUFBQUE7Ozs7OzRFQVZLOzZDQUlYO0FBRVAsTUFBTUMsWUFBWTtBQUVsQixNQUFNQyxjQUFjLElBQUlDLE9BQU8sTUFBSUMsaUJBQUFBLHNCQUFzQixDQUFDQyxNQUFNLEdBQUM7QUFFMUQsTUFBTUwsZ0JBR1IsU0FBU0EsY0FBY00sS0FBSztJQUMvQixNQUFNLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFLEdBQUdGO0lBRTFCLE1BQU1HLHNCQUFzQkYsS0FBS0csS0FBSyxDQUFDUjtJQUV2QyxPQUNFLFdBREYsR0FDRSxJQUFBUyxZQUFBQyxHQUFBLEVBQUFELFlBQUFFLFFBQUE7a0JBQ0dKLG9CQUFvQkssR0FBRyxDQUFDLENBQUNDLE1BQU1DO1lBQzlCLElBQUlmLFVBQVVnQixJQUFJLENBQUNGLE9BQU87Z0JBQ3hCLE1BQU1HLE9BQU9qQixVQUFVa0IsSUFBSSxDQUFDSjtnQkFDNUIsTUFBTUssT0FBT0YsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLG1GQUFtRjtnQkFDbkYsSUFBSSxPQUFPVixZQUFZLGNBQWMsQ0FBQ0EsUUFBUVksT0FBTztvQkFDbkQsT0FBT0w7Z0JBQ1Q7Z0JBQ0EsT0FDRSxXQURGLEdBQ0UsSUFBQUosWUFBQUMsR0FBQSxFQUFDUyxPQUFBQSxPQUFLLENBQUNSLFFBQVE7OEJBQ2Isa0JBQUFGLFlBQUFDLEdBQUEsRUFBQ1UsS0FBQUE7d0JBQUVGLE1BQU1BO3dCQUFNRyxRQUFPO3dCQUFTQyxLQUFJO2tDQUNoQ1Q7O21CQUZnQixVQUFRQztZQU1qQztZQUNBLElBQUk7Z0JBQ0YsTUFBTVMsY0FBY0MsQ0FBQUEsR0FBQUEsaUJBQUFBLHFCQUFxQixFQUFDWDtnQkFDMUMsSUFBSVUsZ0JBQWdCVixNQUFNO29CQUN4QixPQUNFLFdBREYsR0FDRSxJQUFBSixZQUFBZ0IsSUFBQSxFQUFDQyxLQUFBQTs7NEJBQ0U7NEJBQ0FIOzRCQUNBOzt1QkFISyxXQUFTVDtnQkFNckI7WUFDRixFQUFFLE9BQU9hLEdBQUc7Z0JBQ1YsT0FDRSxXQURGLEdBQ0UsSUFBQWxCLFlBQUFnQixJQUFBLEVBQUNDLEtBQUFBOzt3QkFDRTt3QkFDQWI7d0JBQUs7d0JBQW9CLEtBQUtjO3dCQUFFO3dCQUFFOzttQkFGN0IsV0FBU2I7WUFLckI7WUFDQSxPQUFPLFdBQVAsR0FBTyxJQUFBTCxZQUFBQyxHQUFBLEVBQUNTLE9BQUFBLE9BQUssQ0FBQ1IsUUFBUTswQkFBd0JFO2VBQWxCLFVBQVFDO1FBQ3RDOztBQUdOO0tBakRhaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL2hvdC1saW5rZWQtdGV4dC9pbmRleC50c3g/MDZhNCJdLCJuYW1lcyI6WyJIb3RsaW5rZWRUZXh0IiwibGlua1JlZ2V4Iiwic3BsaXRSZWdleHAiLCJSZWdFeHAiLCJNQUdJQ19JREVOVElGSUVSX1JFR0VYIiwic291cmNlIiwicHJvcHMiLCJ0ZXh0IiwibWF0Y2hlciIsIndvcmRzQW5kV2hpdGVzcGFjZXMiLCJzcGxpdCIsIl9qc3hydW50aW1lIiwianN4IiwiRnJhZ21lbnQiLCJtYXAiLCJ3b3JkIiwiaW5kZXgiLCJ0ZXN0IiwibGluayIsImV4ZWMiLCJocmVmIiwiUmVhY3QiLCJhIiwidGFyZ2V0IiwicmVsIiwiZGVjb2RlZFdvcmQiLCJkZWNvZGVNYWdpY0lkZW50aWZpZXIiLCJqc3hzIiwiaSIsImUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js":
|
||
/*!*****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js ***!
|
||
\*****************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BuildError: function() {\n return BuildError;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Terminal = __webpack_require__(/*! ../components/Terminal */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-font-big);\\n line-height: var(--size-font-bigger);\\n font-weight: bold;\\n margin: var(--size-gap-double) 0;\\n }\\n .nextjs-container-errors-header p {\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-big);\\n white-space: pre-wrap;\\n }\\n .nextjs-container-errors-body footer {\\n margin-top: var(--size-gap);\\n }\\n .nextjs-container-errors-body footer p {\\n margin: 0;\\n }\\n\\n .nextjs-container-errors-body small {\\n color: var(--color-font);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst BuildError = function BuildError(param) {\n _s();\n let { message, versionInfo } = param;\n const noop = _react.useCallback(()=>{}, []);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n fixed: true,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_error_label\",\n \"aria-describedby\": \"nextjs__container_error_desc\",\n onClose: noop,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogHeader, {\n className: \"nextjs-container-errors-header\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n id: \"nextjs__container_errors_label\",\n children: \"Build Error\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_errors_desc\",\n className: \"nextjs__container_errors_desc\",\n children: \"Failed to compile\"\n }),\n versionInfo ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_VersionStalenessInfo.VersionStalenessInfo, {\n ...versionInfo\n }) : null\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogBody, {\n className: \"nextjs-container-errors-body\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Terminal.Terminal, {\n content: message\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"footer\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_build_error_desc\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error occurred during the build process and can only be dismissed by fixing the error.\"\n })\n })\n })\n ]\n })\n ]\n })\n })\n });\n};\n_s(BuildError, \"hHp3im7kVRcdOeKmK0+3cSEjzLI=\");\n_c = BuildError;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=BuildError.js.map\nvar _c;\n$RefreshReg$(_c, \"BuildError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9CdWlsZEVycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lBZWFBLFlBQVU7ZUFBVkE7O0lBeUNBQyxRQUFNO2VBQU5BOzs7Ozs7NkVBeERVO29DQU9oQjtxQ0FDaUI7c0NBQ0M7a0RBQ1k7MENBQ1Q7Ozs7Ozs7Ozs7QUFJckIsTUFBTUQsYUFBd0MsU0FBU0EsV0FBV0UsS0FHeEU7O0lBSHdFLE1BQ3ZFQyxPQUFPLEVBQ1BDLFdBQVcsRUFDWixHQUh3RUY7SUFJdkUsTUFBTUcsT0FBT0MsT0FBTUMsV0FBVyxDQUFDLEtBQU8sR0FBRyxFQUFFO0lBQzNDLE9BQ0UsV0FERixHQUNFLElBQUFDLFlBQUFDLEdBQUEsRUFBQ0MsU0FBQUEsT0FBTztRQUFDQyxPQUFLO2tCQUNaLGtCQUFBSCxZQUFBQyxHQUFBLEVBQUNHLFFBQUFBLE1BQU07WUFDTEMsTUFBSztZQUNMQyxtQkFBZ0I7WUFDaEJDLG9CQUFpQjtZQUNqQkMsU0FBU1g7c0JBRVQsa0JBQUFHLFlBQUFTLElBQUEsRUFBQ0MsUUFBQUEsYUFBYTs7a0NBQ1osSUFBQVYsWUFBQVMsSUFBQSxFQUFDRSxRQUFBQSxZQUFZO3dCQUFDQyxXQUFVOzswQ0FDdEIsSUFBQVosWUFBQUMsR0FBQSxFQUFDWSxNQUFBQTtnQ0FBR0MsSUFBRzswQ0FBa0M7OzBDQUN6QyxJQUFBZCxZQUFBQyxHQUFBLEVBQUNjLEtBQUFBO2dDQUNDRCxJQUFHO2dDQUNIRixXQUFVOzBDQUNYOzs0QkFHQWhCLGNBQWMsV0FBZEEsR0FBYyxJQUFBSSxZQUFBQyxHQUFBLEVBQUNlLHNCQUFBQSxvQkFBb0I7Z0NBQUUsR0FBR3BCLFdBQVc7aUNBQU87OztrQ0FFN0QsSUFBQUksWUFBQVMsSUFBQSxFQUFDUSxRQUFBQSxVQUFVO3dCQUFDTCxXQUFVOzswQ0FDcEIsSUFBQVosWUFBQUMsR0FBQSxFQUFDaUIsVUFBQUEsUUFBUTtnQ0FBQ0MsU0FBU3hCOzswQ0FDbkIsSUFBQUssWUFBQUMsR0FBQSxFQUFDbUIsVUFBQUE7MENBQ0Msa0JBQUFwQixZQUFBQyxHQUFBLEVBQUNjLEtBQUFBO29DQUFFRCxJQUFHOzhDQUNKLGtCQUFBZCxZQUFBQyxHQUFBLEVBQUNvQixTQUFBQTtrREFBTTs7Ozs7Ozs7OztBQVd2QjtHQXZDYTdCO0tBQUFBO0FBeUNOLE1BQU1DLFNBQUFBLENBQUFBLEdBQVM2QixjQUFBQSxJQUFHLEVBQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL0J1aWxkRXJyb3IudHN4P2U5MjAiXSwibmFtZXMiOlsiQnVpbGRFcnJvciIsInN0eWxlcyIsInBhcmFtIiwibWVzc2FnZSIsInZlcnNpb25JbmZvIiwibm9vcCIsIlJlYWN0IiwidXNlQ2FsbGJhY2siLCJfanN4cnVudGltZSIsImpzeCIsIk92ZXJsYXkiLCJmaXhlZCIsIkRpYWxvZyIsInR5cGUiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5Iiwib25DbG9zZSIsImpzeHMiLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nSGVhZGVyIiwiY2xhc3NOYW1lIiwiaDEiLCJpZCIsInAiLCJWZXJzaW9uU3RhbGVuZXNzSW5mbyIsIkRpYWxvZ0JvZHkiLCJUZXJtaW5hbCIsImNvbnRlbnQiLCJmb290ZXIiLCJzbWFsbCIsImNzcyIsIl90ZW1wbGF0ZU9iamVjdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js":
|
||
/*!*************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js ***!
|
||
\*************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Errors: function() {\n return Errors;\n },\n styles: function() {\n return styles;\n }\n});\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst _shared = __webpack_require__(/*! ../../shared */ \"./node_modules/next/dist/client/components/react-dev-overlay/shared.js\");\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _LeftRightDialogHeader = __webpack_require__(/*! ../components/LeftRightDialogHeader */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Toast = __webpack_require__(/*! ../components/Toast */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\");\nconst _getErrorByType = __webpack_require__(/*! ../helpers/getErrorByType */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nconst _CloseIcon = __webpack_require__(/*! ../icons/CloseIcon */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\");\nconst _RuntimeError = __webpack_require__(/*! ./RuntimeError */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _errorsource = __webpack_require__(/*! ../../../../../shared/lib/error-source */ \"./node_modules/next/dist/shared/lib/error-source.js\");\nconst _hotlinkedtext = __webpack_require__(/*! ../components/hot-linked-text */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nconst _componentstackpseudohtml = __webpack_require__(/*! ./RuntimeError/component-stack-pseudo-html */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js\");\nconst _hydrationerrorinfo = __webpack_require__(/*! ../helpers/hydration-error-info */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-font-big);\\n line-height: var(--size-font-bigger);\\n font-weight: bold;\\n margin: calc(var(--size-gap-double) * 1.5) 0;\\n color: var(--color-title-h1);\\n }\\n .nextjs-container-errors-header small {\\n font-size: var(--size-font-small);\\n color: var(--color-accents-1);\\n margin-left: var(--size-gap-double);\\n }\\n .nextjs-container-errors-header small > span {\\n font-family: var(--font-stack-monospace);\\n }\\n .nextjs-container-errors-header p {\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-big);\\n white-space: pre-wrap;\\n }\\n .nextjs__container_errors_desc {\\n font-family: var(--font-stack-monospace);\\n padding: var(--size-gap) var(--size-gap-double);\\n border-left: 2px solid var(--color-text-color-red-1);\\n margin-top: var(--size-gap);\\n font-weight: bold;\\n color: var(--color-text-color-red-1);\\n background-color: var(--color-text-background-red-1);\\n }\\n p.nextjs__container_errors__notes {\\n margin: var(--size-gap-double) auto;\\n color: var(--color-stack-notes);\\n font-weight: 600;\\n font-size: 15px;\\n }\\n .nextjs-container-errors-header > div > small {\\n margin: 0;\\n margin-top: var(--size-gap-half);\\n }\\n .nextjs-container-errors-header > p > a {\\n color: inherit;\\n font-weight: bold;\\n }\\n .nextjs-container-errors-body > h2:not(:first-child) {\\n margin-top: calc(var(--size-gap-double) + var(--size-gap));\\n }\\n .nextjs-container-errors-body > h2 {\\n color: var(--color-title-color);\\n margin-bottom: var(--size-gap);\\n font-size: var(--size-font-big);\\n }\\n .nextjs__container_errors__component-stack {\\n padding: 12px 32px;\\n color: var(--color-ansi-fg);\\n background: var(--color-ansi-bg);\\n }\\n .nextjs-toast-errors-parent {\\n cursor: pointer;\\n transition: transform 0.2s ease;\\n }\\n .nextjs-toast-errors-parent:hover {\\n transform: scale(1.1);\\n }\\n .nextjs-toast-errors {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n }\\n .nextjs-toast-errors > svg {\\n margin-right: var(--size-gap);\\n }\\n .nextjs-toast-errors-hide-button {\\n margin-left: var(--size-gap-triple);\\n border: none;\\n background: none;\\n color: var(--color-ansi-bright-white);\\n padding: 0;\\n transition: opacity 0.25s ease;\\n opacity: 0.7;\\n }\\n .nextjs-toast-errors-hide-button:hover {\\n opacity: 1;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction isNextjsLink(text) {\n return text.startsWith(\"https://nextjs.org\");\n}\nfunction getErrorSignature(ev) {\n const { event } = ev;\n switch(event.type){\n case _shared.ACTION_UNHANDLED_ERROR:\n case _shared.ACTION_UNHANDLED_REJECTION:\n {\n return event.reason.name + \"::\" + event.reason.message + \"::\" + event.reason.stack;\n }\n default:\n {}\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = event;\n return \"\";\n}\nfunction Errors(param) {\n let { isAppDir, errors, initialDisplayState, versionInfo } = param;\n var _activeError_componentStackFrames;\n const [lookups, setLookups] = (0, _react.useState)({});\n const [readyErrors, nextError] = (0, _react.useMemo)(()=>{\n let ready = [];\n let next = null;\n // Ensure errors are displayed in the order they occurred in:\n for(let idx = 0; idx < errors.length; ++idx){\n const e = errors[idx];\n const { id } = e;\n if (id in lookups) {\n ready.push(lookups[id]);\n continue;\n }\n // Check for duplicate errors\n if (idx > 0) {\n const prev = errors[idx - 1];\n if (getErrorSignature(prev) === getErrorSignature(e)) {\n continue;\n }\n }\n next = e;\n break;\n }\n return [\n ready,\n next\n ];\n }, [\n errors,\n lookups\n ]);\n const isLoading = (0, _react.useMemo)(()=>{\n return readyErrors.length < 1 && Boolean(errors.length);\n }, [\n errors.length,\n readyErrors.length\n ]);\n (0, _react.useEffect)(()=>{\n if (nextError == null) {\n return;\n }\n let mounted = true;\n (0, _getErrorByType.getErrorByType)(nextError, isAppDir).then((resolved)=>{\n // We don't care if the desired error changed while we were resolving,\n // thus we're not tracking it using a ref. Once the work has been done,\n // we'll store it.\n if (mounted) {\n setLookups((m)=>({\n ...m,\n [resolved.id]: resolved\n }));\n }\n }, ()=>{\n // TODO: handle this, though an edge case\n });\n return ()=>{\n mounted = false;\n };\n }, [\n nextError,\n isAppDir\n ]);\n const [displayState, setDisplayState] = (0, _react.useState)(initialDisplayState);\n const [activeIdx, setActiveIndex] = (0, _react.useState)(0);\n const previous = (0, _react.useCallback)(()=>setActiveIndex((v)=>Math.max(0, v - 1)), []);\n const next = (0, _react.useCallback)(()=>setActiveIndex((v)=>Math.max(0, Math.min(readyErrors.length - 1, v + 1))), [\n readyErrors.length\n ]);\n const activeError = (0, _react.useMemo)(()=>{\n var _readyErrors_activeIdx;\n return (_readyErrors_activeIdx = readyErrors[activeIdx]) != null ? _readyErrors_activeIdx : null;\n }, [\n activeIdx,\n readyErrors\n ]);\n // Reset component state when there are no errors to be displayed.\n // This should never happen, but lets handle it.\n (0, _react.useEffect)(()=>{\n if (errors.length < 1) {\n setLookups({});\n setDisplayState(\"hidden\");\n setActiveIndex(0);\n }\n }, [\n errors.length\n ]);\n const minimize = (0, _react.useCallback)(()=>setDisplayState(\"minimized\"), []);\n const hide = (0, _react.useCallback)(()=>setDisplayState(\"hidden\"), []);\n const fullscreen = (0, _react.useCallback)(()=>setDisplayState(\"fullscreen\"), []);\n // This component shouldn't be rendered with no errors, but if it is, let's\n // handle it gracefully by rendering nothing.\n if (errors.length < 1 || activeError == null) {\n return null;\n }\n if (isLoading) {\n // TODO: better loading state\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {});\n }\n if (displayState === \"hidden\") {\n return null;\n }\n if (displayState === \"minimized\") {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Toast.Toast, {\n className: \"nextjs-toast-errors-parent\",\n onClick: fullscreen,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n className: \"nextjs-toast-errors\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"12\",\n y1: \"8\",\n x2: \"12\",\n y2: \"12\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"12\",\n y1: \"16\",\n x2: \"12.01\",\n y2: \"16\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n readyErrors.length,\n \" error\",\n readyErrors.length > 1 ? \"s\" : \"\"\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n \"data-nextjs-toast-errors-hide-button\": true,\n className: \"nextjs-toast-errors-hide-button\",\n type: \"button\",\n onClick: (e)=>{\n e.stopPropagation();\n hide();\n },\n \"aria-label\": \"Hide Errors\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CloseIcon.CloseIcon, {})\n })\n ]\n })\n });\n }\n const error = activeError.error;\n const isServerError = [\n \"server\",\n \"edge-server\"\n ].includes((0, _errorsource.getErrorSource)(error) || \"\");\n const errorDetails = error.details || {};\n const [warningTemplate, serverContent, clientContent] = errorDetails.warning || [\n null,\n \"\",\n \"\"\n ];\n const hydrationErrorType = (0, _hydrationerrorinfo.getHydrationWarningType)(warningTemplate);\n const hydrationWarning = warningTemplate ? warningTemplate.replace(\"%s\", serverContent).replace(\"%s\", clientContent).replace(\"%s\", \"\") // remove the %s for stack\n .replace(/%s$/, \"\") // If there's still a %s at the end, remove it\n .replace(/^Warning: /, \"\") : null;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_errors_label\",\n \"aria-describedby\": \"nextjs__container_errors_desc\",\n onClose: isServerError ? undefined : minimize,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogHeader, {\n className: \"nextjs-container-errors-header\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_LeftRightDialogHeader.LeftRightDialogHeader, {\n previous: activeIdx > 0 ? previous : null,\n next: activeIdx < readyErrors.length - 1 ? next : null,\n close: isServerError ? undefined : minimize,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"small\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: activeIdx + 1\n }),\n \" of\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"data-nextjs-dialog-header-total-count\": true,\n children: readyErrors.length\n }),\n \" error\",\n readyErrors.length < 2 ? \"\" : \"s\"\n ]\n }),\n versionInfo ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_VersionStalenessInfo.VersionStalenessInfo, {\n ...versionInfo\n }) : null\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n id: \"nextjs__container_errors_label\",\n children: isServerError ? \"Server Error\" : \"Unhandled Runtime Error\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"p\", {\n id: \"nextjs__container_errors_desc\",\n className: \"nextjs__container_errors_desc\",\n children: [\n error.name,\n \":\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: error.message,\n matcher: isNextjsLink\n })\n ]\n }),\n hydrationWarning && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_errors__notes\",\n className: \"nextjs__container_errors__notes\",\n children: hydrationWarning\n }),\n ((_activeError_componentStackFrames = activeError.componentStackFrames) == null ? void 0 : _activeError_componentStackFrames.length) ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_componentstackpseudohtml.PseudoHtmlDiff, {\n className: \"nextjs__container_errors__component-stack\",\n hydrationMismatchType: hydrationErrorType,\n componentStackFrames: activeError.componentStackFrames,\n firstContent: serverContent,\n secondContent: clientContent\n }) : null\n ]\n }),\n isServerError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error happened while generating the page. Any console logs will be displayed in the terminal window.\"\n })\n }) : undefined\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.DialogBody, {\n className: \"nextjs-container-errors-body\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_RuntimeError.RuntimeError, {\n error: activeError\n }, activeError.id.toString())\n })\n ]\n })\n })\n });\n}\n_c = Errors;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Errors.js.map\nvar _c;\n$RefreshReg$(_c, \"Errors\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9FcnJvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBa0VnQkEsUUFBTTtlQUFOQTs7SUF3UEhDLFFBQU07ZUFBTkE7Ozs7O21DQTFUNkM7b0NBTW5EO29DQU1BO21EQUMrQjtxQ0FDZDttQ0FDRjs0Q0FDUzswQ0FFSDt1Q0FDRjswQ0FDRztrREFDUTt5Q0FFTjsyQ0FDRDtzREFDQztnREFJeEI7Ozs7Ozs7Ozs7QUFpQlAsU0FBU0MsYUFBYUMsSUFBWTtJQUNoQyxPQUFPQSxLQUFLQyxVQUFVLENBQUM7QUFDekI7QUFFQSxTQUFTQyxrQkFBa0JDLEVBQXVCO0lBQ2hELE1BQU0sRUFBRUMsS0FBSyxFQUFFLEdBQUdEO0lBQ2xCLE9BQVFDLE1BQU1DLElBQUk7UUFDaEIsS0FBS0MsUUFBQUEsc0JBQXNCO1FBQzNCLEtBQUtDLFFBQUFBLDBCQUEwQjtZQUFFO2dCQUMvQixPQUFPSCxNQUFTSSxNQUFNLENBQUNDLElBQUksR0FBQyxPQUFJTCxNQUFNSSxNQUFNLENBQUNFLE9BQU8sR0FBQyxPQUFJTixNQUFNSSxNQUFNLENBQUNHLEtBQUs7WUFDN0U7UUFDQTtZQUFTLENBQ1Q7SUFDRjtJQUVBLDZEQUE2RDtJQUM3RCxNQUFNQyxJQUFXUjtJQUNqQixPQUFPO0FBQ1Q7QUFFTyxTQUFTUCxPQUFPZ0IsS0FLVDtJQUxTLE1BQ3JCQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsbUJBQW1CLEVBQ25CQyxXQUFXLEVBQ0MsR0FMU0o7UUEyTk5LO0lBck5mLE1BQU0sQ0FBQ0MsU0FBU0MsV0FBVyxHQUFHQyxDQUFBQSxHQUFBQSxPQUFBQSxRQUFRLEVBQ3BDLENBQUM7SUFHSCxNQUFNLENBQUNDLGFBQWFDLFVBQVUsR0FBR0MsQ0FBQUEsR0FBQUEsT0FBQUEsT0FBTyxFQUV0QztRQUNBLElBQUlDLFFBQTJCLEVBQUU7UUFDakMs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RixJQUFHO3dDQUNINEIsV0FBVTtrREFFVHlDOztvQ0FFRmpGLENBQUFBLENBQUFBLG9DQUFBQSxZQUFZb0csb0JBQW9CLHFCQUFoQ3BHLGtDQUFrQ1UsTUFBTSxJQUN2QyxXQUR1QyxHQUN2QyxJQUFBMEIsWUFBQUMsR0FBQSxFQUFDZ0UsMEJBQUFBLGNBQWM7d0NBQ2I3RCxXQUFVO3dDQUNWOEQsdUJBQXVCdkI7d0NBQ3ZCcUIsc0JBQXNCcEcsWUFBWW9HLG9CQUFvQjt3Q0FDdERHLGNBQWMzQjt3Q0FDZDRCLGVBQWUzQjt5Q0FFZjs7OzRCQUdQUCxnQkFDQyxXQUREQSxHQUNDLElBQUFsQyxZQUFBQyxHQUFBLEVBQUNNLE9BQUFBOzBDQUNDLGtCQUFBUCxZQUFBQyxHQUFBLEVBQUN1RCxTQUFBQTs4Q0FBTTs7aUNBS1BMOzs7a0NBRU4sSUFBQW5ELFlBQUFDLEdBQUEsRUFBQ29FLFFBQUFBLFVBQVU7d0JBQUNqRSxXQUFVO2tDQUNwQixrQkFBQUosWUFBQUMsR0FBQSxFQUFDcUUsY0FBQUEsWUFBWTs0QkFBaUNyQyxPQUFPckU7MkJBQWxDQSxZQUFZWSxFQUFFLENBQUMrRixRQUFROzs7Ozs7QUFNdEQ7S0F0UGdCaEk7QUF3UFQsTUFBTUMsU0FBQUEsQ0FBQUEsR0FBU2dJLGNBQUFBLElBQUcsRUFBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvRXJyb3JzLnRzeD80MGFhIl0sIm5hbWVzIjpbIkVycm9ycyIsInN0eWxlcyIsImlzTmV4dGpzTGluayIsInRleHQiLCJzdGFydHNXaXRoIiwiZ2V0RXJyb3JTaWduYXR1cmUiLCJldiIsImV2ZW50IiwidHlwZSIsIkFDVElPTl9VTkhBTkRMRURfRVJST1IiLCJBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiIsInJlYXNvbiIsIm5hbWUiLCJtZXNzYWdlIiwic3RhY2siLCJfIiwicGFyYW0iLCJpc0FwcERpciIsImVycm9ycyIsImluaXRpYWxEaXNwbGF5U3RhdGUiLCJ2ZXJzaW9uSW5mbyIsImFjdGl2ZUVycm9yIiwibG9va3VwcyIsInNldExvb2t1cHMiLCJ1c2VTdGF0ZSIsInJlYWR5RXJyb3JzIiwibmV4dEVycm9yIiwidXNlTWVtbyIsInJlYWR5IiwibmV4dCIsImlkeCIsImxlbmd0aCIsImUiLCJpZCIsInB1c2giLCJwcmV2IiwiaXNMb2FkaW5nIiwiQm9vbGVhbiIsInVzZUVmZmVjdCIsIm1vdW50ZWQiLCJnZXRFcnJvckJ5VHlwZSIsInRoZW4iLCJyZXNvbHZlZCIsIm0iLCJkaXNwbGF5U3RhdGUiLCJzZXREaXNwbGF5U3RhdGUiLCJhY3RpdmVJZHgiLCJzZXRBY3RpdmVJbmRleCIsInByZXZpb3VzIiwidXNlQ2FsbGJhY2siLCJ2IiwiTWF0aCIsIm1heCIsIm1pbiIsIm1pbmltaXplIiwiaGlkZSIsImZ1bGxzY3JlZW4iLCJfanN4cnVudGltZSIsImpzeCIsIk92ZXJsYXkiLCJUb2FzdCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJqc3hzIiwiZGl2Iiwic3ZnIiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJjaXJjbGUiLCJjeCIsImN5IiwiciIsImxpbmUiLCJ4MSIsInkxIiwieDIiLCJ5MiIsInNwYW4iLCJidXR0b24iLCJkYXRhLW5leHRqcy10b2FzdC1lcnJvcnMtaGlkZS1idXR0b24iLCJzdG9wUHJvcGFnYXRpb24iLCJhcmlhLWxhYmVsIiwiQ2xvc2VJY29uIiwiZXJyb3IiLCJpc1NlcnZlckVycm9yIiwiaW5jbHVkZXMiLCJnZXRFcnJvclNvdXJjZSIsImVycm9yRGV0YWlscyIsImRldGFpbHMiLCJ3YXJuaW5nVGVtcGxhdGUiLCJzZXJ2ZXJDb250ZW50IiwiY2xpZW50Q29udGVudCIsIndhcm5pbmciLCJoeWRyYXRpb25FcnJvclR5cGUiLCJnZXRIeWRyYXRpb25XYXJuaW5nVHlwZSIsImh5ZHJhdGlvbldhcm5pbmciLCJyZXBsYWNlIiwiRGlhbG9nIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsIm9uQ2xvc2UiLCJ1bmRlZmluZWQiLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nSGVhZGVyIiwiTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwiY2xvc2UiLCJzbWFsbCIsImRhdGEtbmV4dGpzLWRpYWxvZy1oZWFkZXItdG90YWwtY291bnQiLCJWZXJzaW9uU3RhbGVuZXNzSW5mbyIsImgxIiwicCIsIkhvdGxpbmtlZFRleHQiLCJtYXRjaGVyIiwiRnJhZ21lbnQiLCJjb21wb25lbnRTdGFja0ZyYW1lcyIsIlBzZXVkb0h0bWxEaWZmIiwiaHlkcmF0aW9uTWlzbWF0Y2hUeXBlIiwiZmlyc3RDb250ZW50Iiwic2Vjb25kQ29udGVudCIsIkRpYWxvZ0JvZHkiLCJSdW50aW1lRXJyb3IiLCJ0b1N0cmluZyIsImNzcyIsIl90ZW1wbGF0ZU9iamVjdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js":
|
||
/*!**********************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js ***!
|
||
\**********************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CallStackFrame\", ({\n enumerable: true,\n get: function() {\n return CallStackFrame;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _stackframe = __webpack_require__(/*! ../../helpers/stack-frame */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nconst _hotlinkedtext = __webpack_require__(/*! ../../components/hot-linked-text */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nconst CallStackFrame = function CallStackFrame(param) {\n let { frame } = param;\n var _frame_originalStackFrame;\n // TODO: ability to expand resolved frames\n // TODO: render error or external indicator\n const f = (_frame_originalStackFrame = frame.originalStackFrame) != null ? _frame_originalStackFrame : frame.sourceStackFrame;\n const hasSource = Boolean(frame.originalCodeFrame);\n const open = (0, _useopenineditor.useOpenInEditor)(hasSource ? {\n file: f.file,\n lineNumber: f.lineNumber,\n column: f.column\n } : undefined);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-call-stack-frame\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h3\", {\n \"data-nextjs-frame-expanded\": Boolean(frame.expanded),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: f.methodName\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-has-source\": hasSource ? \"true\" : undefined,\n tabIndex: hasSource ? 10 : undefined,\n role: hasSource ? \"link\" : undefined,\n onClick: open,\n title: hasSource ? \"Click to open in your editor\" : undefined,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: (0, _stackframe.getFrameSource)(f)\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n })\n ]\n });\n};\n_c = CallStackFrame;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CallStackFrame.js.map\nvar _c;\n$RefreshReg$(_c, \"CallStackFrame\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvQ2FsbFN0YWNrRnJhbWUuanMiLCJtYXBwaW5ncyI6Ijs7OztrREFRYUE7OztlQUFBQTs7Ozt3Q0FKTjs2Q0FDeUI7MkNBQ0Y7QUFFdkIsTUFBTUEsaUJBRVIsU0FBU0EsZUFBZUMsS0FBUztJQUFULE1BQUVDLEtBQUssRUFBRSxHQUFURDtRQUlMQztJQUh0QiwwQ0FBMEM7SUFDMUMsMkNBQTJDO0lBRTNDLE1BQU1DLElBQWdCRCxDQUFBQSw0QkFBQUEsTUFBTUUsa0JBQWtCLFlBQXhCRiw0QkFBNEJBLE1BQU1HLGdCQUFnQjtJQUN4RSxNQUFNQyxZQUFZQyxRQUFRTCxNQUFNTSxpQkFBaUI7SUFDakQsTUFBTUMsT0FBT0MsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQWUsRUFDMUJKLFlBQ0k7UUFDRUssTUFBTVIsRUFBRVEsSUFBSTtRQUNaQyxZQUFZVCxFQUFFUyxVQUFVO1FBQ3hCQyxRQUFRVixFQUFFVSxNQUFNO0lBQ2xCLElBQ0FDO0lBR04sT0FDRSxXQURGLEdBQ0UsSUFBQUMsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtRQUFJQyxnQ0FBNEI7OzBCQUMvQixJQUFBSCxZQUFBSSxHQUFBLEVBQUNDLE1BQUFBO2dCQUFHQyw4QkFBNEJkLFFBQVFMLE1BQU1vQixRQUFROzBCQUNwRCxrQkFBQVAsWUFBQUksR0FBQSxFQUFDSSxlQUFBQSxhQUFhO29CQUFDQyxNQUFNckIsRUFBRXNCLFVBQVU7OzswQkFFbkMsSUFBQVYsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtnQkFDQ1MsbUJBQWlCcEIsWUFBWSxTQUFTUTtnQkFDdENhLFVBQVVyQixZQUFZLEtBQUtRO2dCQUMzQmMsTUFBTXRCLFlBQVksU0FBU1E7Z0JBQzNCZSxTQUFTcEI7Z0JBQ1RxQixPQUFPeEIsWUFBWSxpQ0FBaUNROztrQ0FFcEQsSUFBQUMsWUFBQUksR0FBQSxFQUFDWSxRQUFBQTtrQ0FBTUMsQ0FBQUEsR0FBQUEsWUFBQUEsY0FBYyxFQUFDN0I7O2tDQUN0QixJQUFBWSxZQUFBQyxJQUFBLEVBQUNpQixPQUFBQTt3QkFDQ0MsT0FBTTt3QkFDTkMsU0FBUTt3QkFDUkMsTUFBSzt3QkFDTEMsUUFBTzt3QkFDUEMsYUFBWTt3QkFDWkMsZUFBYzt3QkFDZEMsZ0JBQWU7OzBDQUVmLElBQUF6QixZQUFBSSxHQUFBLEVBQUNzQixRQUFBQTtnQ0FBS0MsR0FBRTs7MENBQ1IsSUFBQTNCLFlBQUFJLEdBQUEsRUFBQ3dCLFlBQUFBO2dDQUFTQyxRQUFPOzswQ0FDakIsSUFBQTdCLFlBQUFJLEdBQUEsRUFBQzBCLFFBQUFBO2dDQUFLQyxJQUFHO2dDQUFLQyxJQUFHO2dDQUFLQyxJQUFHO2dDQUFLQyxJQUFHOzs7Ozs7OztBQUszQztLQS9DYWpEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9DYWxsU3RhY2tGcmFtZS50c3g/ZGIwZiJdLCJuYW1lcyI6WyJDYWxsU3RhY2tGcmFtZSIsInBhcmFtIiwiZnJhbWUiLCJmIiwib3JpZ2luYWxTdGFja0ZyYW1lIiwic291cmNlU3RhY2tGcmFtZSIsImhhc1NvdXJjZSIsIkJvb2xlYW4iLCJvcmlnaW5hbENvZGVGcmFtZSIsIm9wZW4iLCJ1c2VPcGVuSW5FZGl0b3IiLCJmaWxlIiwibGluZU51bWJlciIsImNvbHVtbiIsInVuZGVmaW5lZCIsIl9qc3hydW50aW1lIiwianN4cyIsImRpdiIsImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUiLCJqc3giLCJoMyIsImRhdGEtbmV4dGpzLWZyYW1lLWV4cGFuZGVkIiwiZXhwYW5kZWQiLCJIb3RsaW5rZWRUZXh0IiwidGV4dCIsIm1ldGhvZE5hbWUiLCJkYXRhLWhhcy1zb3VyY2UiLCJ0YWJJbmRleCIsInJvbGUiLCJvbkNsaWNrIiwidGl0bGUiLCJzcGFuIiwiZ2V0RnJhbWVTb3VyY2UiLCJzdmciLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJwYXRoIiwiZCIsInBvbHlsaW5lIiwicG9pbnRzIiwibGluZSIsIngxIiwieTEiLCJ4MiIsInkyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js":
|
||
/*!**************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js ***!
|
||
\**************************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"GroupedStackFrames\", ({\n enumerable: true,\n get: function() {\n return GroupedStackFrames;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _CallStackFrame = __webpack_require__(/*! ./CallStackFrame */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\");\nconst _CollapseIcon = __webpack_require__(/*! ../../icons/CollapseIcon */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CollapseIcon.js\");\nconst _FrameworkIcon = __webpack_require__(/*! ../../icons/FrameworkIcon */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/FrameworkIcon.js\");\nfunction FrameworkGroup(param) {\n let { framework, stackFrames } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"details\", {\n \"data-nextjs-collapsed-call-stack-details\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"summary\", {\n tabIndex: 10,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CollapseIcon.CollapseIcon, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_FrameworkIcon.FrameworkIcon, {\n framework: framework\n }),\n framework === \"react\" ? \"React\" : \"Next.js\"\n ]\n }),\n stackFrames.map((frame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"call-stack-\" + index))\n ]\n });\n}\n_c = FrameworkGroup;\nfunction GroupedStackFrames(param) {\n let { groupedStackFrames, show } = param;\n if (!show) return;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: groupedStackFrames.map((stackFramesGroup, groupIndex)=>{\n // Collapse React and Next.js frames\n if (stackFramesGroup.framework) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(FrameworkGroup, {\n framework: stackFramesGroup.framework,\n stackFrames: stackFramesGroup.stackFrames\n }, \"call-stack-framework-group-\" + groupIndex);\n }\n return stackFramesGroup.stackFrames.map((frame, frameIndex)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"call-stack-\" + groupIndex + \"-\" + frameIndex));\n })\n });\n}\n_c1 = GroupedStackFrames;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=GroupedStackFrames.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"FrameworkGroup\");\n$RefreshReg$(_c1, \"GroupedStackFrames\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvR3JvdXBlZFN0YWNrRnJhbWVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7c0RBMkJnQkE7OztlQUFBQTs7Ozs0Q0ExQmU7MENBQ0Y7MkNBQ0M7QUFFOUIsU0FBU0MsZUFBZUMsS0FNdkI7SUFOdUIsTUFDdEJDLFNBQVMsRUFDVEMsV0FBVyxFQUlaLEdBTnVCRjtJQU90QixPQUNFLFdBREYsR0FDRSxJQUFBRyxZQUFBQyxJQUFBLEVBQUNDLFdBQUFBO1FBQVFDLDRDQUF3Qzs7MEJBRS9DLElBQUFILFlBQUFDLElBQUEsRUFBQ0csV0FBQUE7Z0JBQVFDLFVBQVU7O2tDQUNqQixJQUFBTCxZQUFBTSxHQUFBLEVBQUNDLGNBQUFBLFlBQVk7a0NBQ2IsSUFBQVAsWUFBQU0sR0FBQSxFQUFDRSxlQUFBQSxhQUFhO3dCQUFDVixXQUFXQTs7b0JBQ3pCQSxjQUFjLFVBQVUsVUFBVTs7O1lBRXBDQyxZQUFZVSxHQUFHLENBQUMsQ0FBQ0MsT0FBT0MsUUFDdkIsV0FEdUJBLEdBQ3ZCLElBQUFYLFlBQUFNLEdBQUEsRUFBQ00sZ0JBQUFBLGNBQWM7b0JBQTZCRixPQUFPQTttQkFBOUIsZ0JBQWNDOzs7QUFJM0M7S0FwQlNmO0FBc0JGLFNBQVNELG1CQUFtQkUsS0FNbEM7SUFOa0MsTUFDakNnQixrQkFBa0IsRUFDbEJDLElBQUksRUFJTCxHQU5rQ2pCO0lBT2pDLElBQUksQ0FBQ2lCLE1BQU07SUFDWCxPQUNFLFdBREYsR0FDRSxJQUFBZCxZQUFBTSxHQUFBLEVBQUFOLFlBQUFlLFFBQUE7a0JBQ0dGLG1CQUFtQkosR0FBRyxDQUFDLENBQUNPLGtCQUFrQkM7WUFDekMsb0NBQW9DO1lBQ3BDLElBQUlELGlCQUFpQmxCLFNBQVMsRUFBRTtnQkFDOUIsT0FDRSxXQURGLEdBQ0UsSUFBQUUsWUFBQU0sR0FBQSxFQUFDVixnQkFBQUE7b0JBRUNFLFdBQVdrQixpQkFBaUJsQixTQUFTO29CQUNyQ0MsYUFBYWlCLGlCQUFpQmpCLFdBQVc7bUJBRnBDLGdDQUE4QmtCO1lBS3pDO1lBRUEsT0FFRUQsaUJBQWlCakIsV0FBVyxDQUFDVSxHQUFHLENBQUMsQ0FBQ0MsT0FBT1EsYUFDdkMsV0FEdUNBLEdBQ3ZDLElBQUFsQixZQUFBTSxHQUFBLEVBQUNNLGdCQUFBQSxjQUFjO29CQUViRixPQUFPQTttQkFERixnQkFBY08sYUFBVyxNQUFHQztRQUt6Qzs7QUFHTjtNQWxDZ0J2QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvR3JvdXBlZFN0YWNrRnJhbWVzLnRzeD8zMWVkIl0sIm5hbWVzIjpbIkdyb3VwZWRTdGFja0ZyYW1lcyIsIkZyYW1ld29ya0dyb3VwIiwicGFyYW0iLCJmcmFtZXdvcmsiLCJzdGFja0ZyYW1lcyIsIl9qc3hydW50aW1lIiwianN4cyIsImRldGFpbHMiLCJkYXRhLW5leHRqcy1jb2xsYXBzZWQtY2FsbC1zdGFjay1kZXRhaWxzIiwic3VtbWFyeSIsInRhYkluZGV4IiwianN4IiwiQ29sbGFwc2VJY29uIiwiRnJhbWV3b3JrSWNvbiIsIm1hcCIsImZyYW1lIiwiaW5kZXgiLCJDYWxsU3RhY2tGcmFtZSIsImdyb3VwZWRTdGFja0ZyYW1lcyIsInNob3ciLCJGcmFnbWVudCIsInN0YWNrRnJhbWVzR3JvdXAiLCJncm91cEluZGV4IiwiZnJhbWVJbmRleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js":
|
||
/*!***********************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js ***!
|
||
\***********************************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"PseudoHtmlDiff\", ({\n enumerable: true,\n get: function() {\n return PseudoHtmlDiff;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst _CollapseIcon = __webpack_require__(/*! ../../icons/CollapseIcon */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CollapseIcon.js\");\nfunction getAdjacentProps(isAdj) {\n return {\n \"data-nextjs-container-errors-pseudo-html--tag-adjacent\": isAdj\n };\n}\nfunction PseudoHtmlDiff(param) {\n let { componentStackFrames, firstContent, secondContent, hydrationMismatchType, ...props } = param;\n const isHtmlTagsWarning = hydrationMismatchType === \"tag\";\n // For text mismatch, mismatched text will take 2 rows, so we display 4 rows of component stack\n const MAX_NON_COLLAPSED_FRAMES = isHtmlTagsWarning ? 6 : 4;\n const shouldCollapse = componentStackFrames.length > MAX_NON_COLLAPSED_FRAMES;\n const [isHtmlCollapsed, toggleCollapseHtml] = (0, _react.useState)(shouldCollapse);\n const htmlComponents = (0, _react.useMemo)(()=>{\n const tagNames = isHtmlTagsWarning ? [\n firstContent.replace(/<|>/g, \"\"),\n secondContent.replace(/<|>/g, \"\")\n ] : [];\n const nestedHtmlStack = [];\n let lastText = \"\";\n const componentStack = componentStackFrames.map((frame)=>frame.component).reverse();\n // [child index, parent index]\n const matchedIndex = [\n -1,\n -1\n ];\n if (isHtmlTagsWarning) {\n // Reverse search for the child tag\n for(let i = componentStack.length - 1; i >= 0; i--){\n if (componentStack[i] === tagNames[0]) {\n matchedIndex[0] = i;\n break;\n }\n }\n // Start searching parent tag from child tag above\n for(let i = matchedIndex[0] - 1; i >= 0; i--){\n if (componentStack[i] === tagNames[1]) {\n matchedIndex[1] = i;\n break;\n }\n }\n }\n componentStack.forEach((component, index, componentList)=>{\n const spaces = \" \".repeat(nestedHtmlStack.length * 2);\n // const prevComponent = componentList[index - 1]\n // const nextComponent = componentList[index + 1]\n // When component is the server or client tag name, highlight it\n const isHighlightedTag = isHtmlTagsWarning ? index === matchedIndex[0] || index === matchedIndex[1] : tagNames.includes(component);\n const isAdjacentTag = isHighlightedTag || Math.abs(index - matchedIndex[0]) <= 1 || Math.abs(index - matchedIndex[1]) <= 1;\n const isLastFewFrames = !isHtmlTagsWarning && index >= componentList.length - 6;\n const adjProps = getAdjacentProps(isAdjacentTag);\n if (isHtmlTagsWarning && isAdjacentTag || isLastFewFrames) {\n const codeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n spaces,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n ...adjProps,\n ...isHighlightedTag ? {\n \"data-nextjs-container-errors-pseudo-html--tag-error\": true\n } : undefined,\n children: \"<\" + component + \">\\n\"\n })\n ]\n });\n lastText = component;\n const wrappedCodeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n codeLine,\n isHighlightedTag && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"data-nextjs-container-errors-pseudo-html--hint\": true,\n children: spaces + \"^\".repeat(component.length + 2) + \"\\n\"\n })\n ]\n }, nestedHtmlStack.length);\n nestedHtmlStack.push(wrappedCodeLine);\n } else {\n if (nestedHtmlStack.length >= MAX_NON_COLLAPSED_FRAMES && isHtmlCollapsed) {\n return;\n }\n if (!isHtmlCollapsed || isLastFewFrames) {\n nestedHtmlStack.push(/*#__PURE__*/ (0, _react.createElement)(\"span\", {\n ...adjProps,\n key: nestedHtmlStack.length,\n children: [\n spaces,\n \"<\" + component + \">\\n\"\n ]\n }));\n } else if (isHtmlCollapsed && lastText !== \"...\") {\n lastText = \"...\";\n nestedHtmlStack.push(/*#__PURE__*/ (0, _react.createElement)(\"span\", {\n ...adjProps,\n key: nestedHtmlStack.length,\n children: [\n spaces,\n \"...\\n\"\n ]\n }));\n }\n }\n });\n // Hydration mismatch: text or text-tag\n if (!isHtmlTagsWarning) {\n const spaces = \" \".repeat(nestedHtmlStack.length * 2);\n let wrappedCodeLine;\n if (hydrationMismatchType === \"text\") {\n // hydration type is \"text\", represent [server content, client content]\n wrappedCodeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"data-nextjs-container-errors-pseudo-html--diff-remove\": true,\n children: spaces + ('\"' + firstContent + '\"\\n')\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"data-nextjs-container-errors-pseudo-html--diff-add\": true,\n children: spaces + ('\"' + secondContent + '\"\\n')\n })\n ]\n }, nestedHtmlStack.length);\n } else {\n // hydration type is \"text-in-tag\", represent [parent tag, mismatch content]\n wrappedCodeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"data-nextjs-container-errors-pseudo-html--tag-adjacent\": true,\n children: spaces + (\"<\" + secondContent + \">\\n\")\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"data-nextjs-container-errors-pseudo-html--diff-remove\": true,\n children: spaces + (' \"' + firstContent + '\"\\n')\n })\n ]\n }, nestedHtmlStack.length);\n }\n nestedHtmlStack.push(wrappedCodeLine);\n }\n return nestedHtmlStack;\n }, [\n componentStackFrames,\n isHtmlCollapsed,\n firstContent,\n secondContent,\n isHtmlTagsWarning,\n hydrationMismatchType,\n MAX_NON_COLLAPSED_FRAMES\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-container-errors-pseudo-html\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n tabIndex: 10,\n \"data-nextjs-container-errors-pseudo-html-collapse\": true,\n onClick: ()=>toggleCollapseHtml(!isHtmlCollapsed),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CollapseIcon.CollapseIcon, {\n collapsed: isHtmlCollapsed\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"pre\", {\n ...props,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"code\", {\n children: htmlComponents\n })\n })\n ]\n });\n}\n_c = PseudoHtmlDiff;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=component-stack-pseudo-html.js.map\nvar _c;\n$RefreshReg$(_c, \"PseudoHtmlDiff\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvY29tcG9uZW50LXN0YWNrLXBzZXVkby1odG1sLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBd0RnQkE7OztlQUFBQTs7OzttQ0F4RDRCOzBDQUVmO0FBRTdCLFNBQVNDLGlCQUFpQkMsS0FBYztJQUN0QyxPQUFPO1FBQUUsMERBQTBEQTtJQUFNO0FBQzNFO0FBa0RPLFNBQVNGLGVBQWVHLEtBV1M7SUFYVCxNQUM3QkMsb0JBQW9CLEVBQ3BCQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMscUJBQXFCLEVBQ3JCLEdBQUdDLE9BTW1DLEdBWFRMO0lBWTdCLE1BQU1NLG9CQUFvQkYsMEJBQTBCO0lBQ3BELCtGQUErRjtJQUMvRixNQUFNRywyQkFBMkJELG9CQUFvQixJQUFJO0lBQ3pELE1BQU1FLGlCQUFpQlAscUJBQXFCUSxNQUFNLEdBQUdGO0lBQ3JELE1BQU0sQ0FBQ0csaUJBQWlCQyxtQkFBbUIsR0FBR0MsQ0FBQUEsR0FBQUEsT0FBQUEsUUFBUSxFQUFDSjtJQUV2RCxNQUFNSyxpQkFBaUJDLENBQUFBLEdBQUFBLE9BQUFBLE9BQU8sRUFBQztRQUM3QixNQUFNQyxXQUFXVCxvQkFFYjtZQUFDSixhQUFhYyxPQUFPLENBQUMsUUFBUTtZQUFLYixjQUFjYSxPQUFPLENBQUMsUUFBUTtTQUFJLEdBQ3JFLEVBQUU7UUFDTixNQUFNQyxrQkFBcUMsRUFBRTtRQUM3QyxJQUFJQyxXQUFXO1FBRWYsTUFBTUMsaUJBQWlCbEIscUJBQ3BCbUIsR0FBRyxDQUFDLENBQUNDLFFBQVVBLE1BQU1DLFNBQVMsRUFDOUJDLE9BQU87UUFFViw4QkFBOEI7UUFDOUIsTUFBTUMsZUFBZTtZQUFDLENBQUM7WUFBRyxDQUFDO1NBQUU7UUFDN0IsSUFBSWxCLG1CQUFtQjtZQUNyQixtQ0FBbUM7WUFDbkMsSUFBSyxJQUFJbUIsSUFB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R0FBR3pELEtBQUs7MEJBQ1osa0JBQUFrQyxZQUFBRyxHQUFBLEVBQUNxQixRQUFBQTs4QkFBTWxEOzs7OztBQUlmO0tBekxnQmhCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9jb21wb25lbnQtc3RhY2stcHNldWRvLWh0bWwudHN4PzllZmUiXSwibmFtZXMiOlsiUHNldWRvSHRtbERpZmYiLCJnZXRBZGphY2VudFByb3BzIiwiaXNBZGoiLCJwYXJhbSIsImNvbXBvbmVudFN0YWNrRnJhbWVzIiwiZmlyc3RDb250ZW50Iiwic2Vjb25kQ29udGVudCIsImh5ZHJhdGlvbk1pc21hdGNoVHlwZSIsInByb3BzIiwiaXNIdG1sVGFnc1dhcm5pbmciLCJNQVhfTk9OX0NPTExBUFNFRF9GUkFNRVMiLCJzaG91bGRDb2xsYXBzZSIsImxlbmd0aCIsImlzSHRtbENvbGxhcHNlZCIsInRvZ2dsZUNvbGxhcHNlSHRtbCIsInVzZVN0YXRlIiwiaHRtbENvbXBvbmVudHMiLCJ1c2VNZW1vIiwidGFnTmFtZXMiLCJyZXBsYWNlIiwibmVzdGVkSHRtbFN0YWNrIiwibGFzdFRleHQiLCJjb21wb25lbnRTdGFjayIsIm1hcCIsImZyYW1lIiwiY29tcG9uZW50IiwicmV2ZXJzZSIsIm1hdGNoZWRJbmRleCIsImkiLCJmb3JFYWNoIiwiaW5kZXgiLCJjb21wb25lbnRMaXN0Iiwic3BhY2VzIiwicmVwZWF0IiwiaXNIaWdobGlnaHRlZFRhZyIsImluY2x1ZGVzIiwiaXNBZGphY2VudFRhZyIsIk1hdGgiLCJhYnMiLCJpc0xhc3RGZXdGcmFtZXMiLCJhZGpQcm9wcyIsImNvZGVMaW5lIiwiX2pzeHJ1bnRpbWUiLCJqc3hzIiwic3BhbiIsImpzeCIsInVuZGVmaW5lZCIsIndyYXBwZWRDb2RlTGluZSIsIkZyYWdtZW50IiwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0taGludCIsInB1c2giLCJfcmVhY3QiLCJjcmVhdGVFbGVtZW50Iiwia2V5IiwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZi1yZW1vdmUiLCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmLWFkZCIsImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLXRhZy1hZGphY2VudCIsImRpdiIsImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwiLCJidXR0b24iLCJ0YWJJbmRleCIsImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtY29sbGFwc2UiLCJvbkNsaWNrIiwiQ29sbGFwc2VJY29uIiwiY29sbGFwc2VkIiwicHJlIiwiY29kZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js":
|
||
/*!*************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js ***!
|
||
\*************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RuntimeError: function() {\n return RuntimeError;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _CodeFrame = __webpack_require__(/*! ../../components/CodeFrame */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nconst _groupstackframesbyframework = __webpack_require__(/*! ../../helpers/group-stack-frames-by-framework */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js\");\nconst _GroupedStackFrames = __webpack_require__(/*! ./GroupedStackFrames */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n button[data-nextjs-data-runtime-error-collapsed-action] {\\n background: none;\\n border: none;\\n padding: 0;\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-bigger);\\n color: var(--color-accents-3);\\n }\\n\\n [data-nextjs-call-stack-frame]:not(:last-child),\\n [data-nextjs-component-stack-frame]:not(:last-child) {\\n margin-bottom: var(--size-gap-double);\\n }\\n\\n [data-nextjs-call-stack-frame] > h3,\\n [data-nextjs-component-stack-frame] > h3 {\\n margin-top: 0;\\n margin-bottom: var(--size-gap);\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-font);\\n color: #222;\\n }\\n [data-nextjs-call-stack-frame] > h3[data-nextjs-frame-expanded='false'] {\\n color: #666;\\n }\\n [data-nextjs-call-stack-frame] > div,\\n [data-nextjs-component-stack-frame] > div {\\n display: flex;\\n align-items: center;\\n padding-left: calc(var(--size-gap) + var(--size-gap-half));\\n font-size: var(--size-font-small);\\n color: #999;\\n }\\n [data-nextjs-call-stack-frame] > div > svg,\\n [data-nextjs-component-stack-frame] > [role='link'] > svg {\\n width: auto;\\n height: var(--size-font-small);\\n margin-left: var(--size-gap);\\n flex-shrink: 0;\\n\\n display: none;\\n }\\n\\n [data-nextjs-call-stack-frame] > div[data-has-source],\\n [data-nextjs-component-stack-frame] > [role='link'] {\\n cursor: pointer;\\n }\\n [data-nextjs-call-stack-frame] > div[data-has-source]:hover,\\n [data-nextjs-component-stack-frame] > [role='link']:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-call-stack-frame] > div[data-has-source] > svg,\\n [data-nextjs-component-stack-frame] > [role='link'] > svg {\\n display: unset;\\n }\\n\\n [data-nextjs-call-stack-framework-icon] {\\n margin-right: var(--size-gap);\\n }\\n [data-nextjs-call-stack-framework-icon='next'] > mask {\\n mask-type: alpha;\\n }\\n [data-nextjs-call-stack-framework-icon='react'] {\\n color: rgb(20, 158, 202);\\n }\\n [data-nextjs-collapsed-call-stack-details][open]\\n [data-nextjs-call-stack-chevron-icon] {\\n transform: rotate(90deg);\\n }\\n [data-nextjs-collapsed-call-stack-details] summary {\\n display: flex;\\n align-items: center;\\n margin-bottom: var(--size-gap);\\n list-style: none;\\n }\\n [data-nextjs-collapsed-call-stack-details] summary::-webkit-details-marker {\\n display: none;\\n }\\n\\n [data-nextjs-collapsed-call-stack-details] h3 {\\n color: #666;\\n }\\n [data-nextjs-collapsed-call-stack-details] [data-nextjs-call-stack-frame] {\\n margin-bottom: var(--size-gap-double);\\n }\\n\\n [data-nextjs-container-errors-pseudo-html] {\\n position: relative;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse] {\\n position: absolute;\\n left: 10px;\\n top: 10px;\\n color: inherit;\\n background: none;\\n border: none;\\n padding: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff-add] {\\n color: var(--color-ansi-green);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff-remove] {\\n color: var(--color-ansi-red);\\n }\\n [data-nextjs-container-errors-pseudo-html--tag-error] {\\n color: var(--color-ansi-red);\\n font-weight: bold;\\n }\\n /* hide but text are still accessible in DOM */\\n [data-nextjs-container-errors-pseudo-html--hint] {\\n display: inline-block;\\n font-size: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\\n color: var(--color-accents-1);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction RuntimeError(param) {\n _s();\n let { error } = param;\n const { firstFrame, allLeadingFrames, allCallStackFrames } = _react.useMemo(()=>{\n const filteredFrames = error.frames.filter((f)=>{\n var _f_sourceStackFrame_file;\n return !(f.sourceStackFrame.file === \"<anonymous>\" && [\n \"stringify\",\n \"<unknown>\"\n ].includes(f.sourceStackFrame.methodName)) && !((_f_sourceStackFrame_file = f.sourceStackFrame.file) == null ? void 0 : _f_sourceStackFrame_file.startsWith(\"node:internal\"));\n });\n const firstFirstPartyFrameIndex = filteredFrames.findIndex((entry)=>entry.expanded && Boolean(entry.originalCodeFrame) && Boolean(entry.originalStackFrame));\n var _filteredFrames_firstFirstPartyFrameIndex;\n return {\n firstFrame: (_filteredFrames_firstFirstPartyFrameIndex = filteredFrames[firstFirstPartyFrameIndex]) != null ? _filteredFrames_firstFirstPartyFrameIndex : null,\n allLeadingFrames: firstFirstPartyFrameIndex < 0 ? [] : filteredFrames.slice(0, firstFirstPartyFrameIndex),\n allCallStackFrames: filteredFrames.slice(firstFirstPartyFrameIndex + 1)\n };\n }, [\n error.frames\n ]);\n const [all, setAll] = _react.useState(firstFrame == null);\n const { canShowMore, leadingFramesGroupedByFramework, stackFramesGroupedByFramework } = _react.useMemo(()=>{\n const leadingFrames = allLeadingFrames.filter((f)=>f.expanded || all);\n const visibleCallStackFrames = allCallStackFrames.filter((f)=>f.expanded || all);\n return {\n canShowMore: allCallStackFrames.length !== visibleCallStackFrames.length || all && firstFrame != null,\n stackFramesGroupedByFramework: (0, _groupstackframesbyframework.groupStackFramesByFramework)(allCallStackFrames),\n leadingFramesGroupedByFramework: (0, _groupstackframesbyframework.groupStackFramesByFramework)(leadingFrames)\n };\n }, [\n all,\n allCallStackFrames,\n allLeadingFrames,\n firstFrame\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n firstFrame ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Source\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_GroupedStackFrames.GroupedStackFrames, {\n groupedStackFrames: leadingFramesGroupedByFramework,\n show: all\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CodeFrame.CodeFrame, {\n stackFrame: firstFrame.originalStackFrame,\n codeFrame: firstFrame.originalCodeFrame\n })\n ]\n }) : undefined,\n stackFramesGroupedByFramework.length ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Call Stack\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_GroupedStackFrames.GroupedStackFrames, {\n groupedStackFrames: stackFramesGroupedByFramework,\n show: all\n })\n ]\n }) : undefined,\n canShowMore ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"button\", {\n tabIndex: 10,\n \"data-nextjs-data-runtime-error-collapsed-action\": true,\n type: \"button\",\n onClick: ()=>setAll(!all),\n children: [\n all ? \"Hide\" : \"Show\",\n \" collapsed frames\"\n ]\n })\n }) : undefined\n ]\n });\n}\n_s(RuntimeError, \"IxUV+6sfFf94RV83YAUHBr0cfHM=\");\n_c = RuntimeError;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"RuntimeError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7SUFTZ0JBLGNBQVk7ZUFBWkE7O0lBOEZIQyxRQUFNO2VBQU5BOzs7Ozs7NkVBdkdVO3VDQUNHOzBDQUVFO3lEQUNnQjtnREFDVDs7Ozs7Ozs7OztBQUk1QixTQUFTRCxhQUFhRSxLQUE0Qjs7SUFBNUIsTUFBRUMsS0FBSyxFQUFxQixHQUE1QkQ7SUFDM0IsTUFBTSxFQUFFRSxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxrQkFBa0IsRUFBRSxHQUN4REMsT0FBTUMsT0FBTyxDQUFDO1FBQ1osTUFBTUMsaUJBQWlCTixNQUFNTyxNQUFNLENBQUNDLE1BQU0sQ0FDeEMsQ0FBQ0M7Z0JBSU9BO21CQUhOLENBQ0VBLENBQUFBLEVBQUVDLGdCQUFnQixDQUFDQyxJQUFJLEtBQUssaUJBQzVCO2dCQUFDO2dCQUFhO2FBQVksQ0FBQ0MsUUFBUSxDQUFDSCxFQUFFQyxnQkFBZ0IsQ0FBQ0csVUFBVSxNQUM5RCxHQUFDSiwyQkFBQUEsRUFBRUMsZ0JBQWdCLENBQUNDLElBQUkscUJBQXZCRix5QkFBeUJLLFVBQVUsQ0FBQzs7UUFHOUMsTUFBTUMsNEJBQTRCVCxlQUFlVSxTQUFTLENBQ3hELENBQUNDLFFBQ0NBLE1BQU1DLFFBQVEsSUFDZEMsUUFBUUYsTUFBTUcsaUJBQWlCLEtBQy9CRCxRQUFRRixNQUFNSSxrQkFBa0I7WUFJdEJmO1FBRGQsT0FBTztZQUNMTCxZQUFZSyxDQUFBQSw0Q0FBQUEsY0FBYyxDQUFDUywwQkFBMEIsWUFBekNULDRDQUE2QztZQUN6REosa0JBQ0VhLDRCQUE0QixJQUN4QixFQUFFLEdBQ0ZULGVBQWVnQixLQUFLLENBQUMsR0FBR1A7WUFDOUJaLG9CQUFvQkcsZUFBZWdCLEtBQUssQ0FBQ1AsNEJBQTRCO1FBQ3ZFO0lBQ0YsR0FBRztRQUFDZixNQUFNTyxNQUFNO0tBQUM7SUFFbkIsTUFBTSxDQUFDZ0IsS0FBS0MsT0FBTyxHQUFHcEIsT0FBTXFCLFFBQVEsQ0FBQ3hCLGNBQWM7SUFFbkQsTUFBTSxFQUNKeUIsV0FBVyxFQUNYQywrQkFBK0IsRUFDL0JDLDZCQUE2QixFQUM5QixHQUFHeEIsT0FBTUMsT0FBTyxDQUFDO1FBQ2hCLE1BQU13QixnQkFBZ0IzQixpQkFBaUJNLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxFQUFFUyxRQUFRLElBQUlLO1FBQ25FLE1BQU1PLHlCQUF5QjNCLG1CQUFtQkssTUFBTSxDQUN0RCxDQUFDQyxJQUFNQSxFQUFFUyxRQUFRLElBQUlLO1FBR3ZCLE9BQU87WUFDTEcsYUFDRXZCLG1CQUFtQjRCLE1BQU0sS0FBS0QsdUJBQXVCQyxNQUFNLElBQzFEUixPQUFPdEIsY0FBYztZQUV4QjJCLCtCQUNFSSxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQTJCLEVBQUM3QjtZQUU5QndCLGlDQUNFSyxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQTJCLEVBQUNIO1FBQ2hDO0lBQ0YsR0FBRztRQUFDTjtRQUFLcEI7UUFBb0JEO1FBQWtCRDtLQUFXO0lBRTFELE9BQ0UsV0FERixHQUNFLElBQUFnQyxZQUFBQyxJQUFBLEVBQUM5QixPQUFNK0IsUUFBUTs7WUFDWmxDLGFBQ0MsV0FEREEsR0FDQyxJQUFBZ0MsWUFBQUMsSUFBQSxFQUFDOUIsT0FBTStCLFFBQVE7O2tDQUNiLElBQUFGLFlBQUFHLEdBQUEsRUFBQ0MsTUFBQUE7a0NBQUc7O2tDQUNKLElBQUFKLFlBQUFHLEdBQUEsRUFBQ0Usb0JBQUFBLGtCQUFrQjt3QkFDakJDLG9CQUFvQlo7d0JBQ3BCYSxNQUFNakI7O2tDQUVSLElBQUFVLFlBQUFHLEdBQUEsRUFBQ0ssV0FBQUEsU0FBUzt3QkFDUkMsWUFBWXpDLFdBQVdvQixrQkFBa0I7d0JBQ3pDc0IsV0FBVzFDLFdBQVdtQixpQkFBaUI7OztpQkFHekN3QjtZQUVIaEIsOEJBQThCRyxNQUFNLEdBQ25DLFdBRG1DLEdBQ25DLElBQUFFLFlBQUFDLElBQUEsRUFBQzlCLE9BQU0rQixRQUFROztrQ0FDYixJQUFBRixZQUFBRyxHQUFBLEVBQUNDLE1BQUFBO2tDQUFHOztrQ0FDSixJQUFBSixZQUFBRyxHQUFBLEVBQUNFLG9CQUFBQSxrQkFBa0I7d0JBQ2pCQyxvQkFBb0JYO3dCQUNwQlksTUFBTWpCOzs7aUJBR1JxQjtZQUNIbEIsY0FDQyxXQUREQSxHQUNDLElBQUFPLFlBQUFHLEdBQUEsRUFBQ2hDLE9BQU0rQixRQUFROzBCQUNiLGtCQUFBRixZQUFBQyxJQUFBLEVBQUNXLFVBQUFBO29CQUNDQyxVQUFVO29CQUNWQyxtREFBK0M7b0JBQy9DQyxNQUFLO29CQUNMQyxTQUFTLElBQU16QixPQUFPLENBQUNEOzt3QkFFdEJBLE1BQU0sU0FBUzt3QkFBTzs7O2lCQUd6QnFCOzs7QUFHVjtHQTVGZ0IvQztLQUFBQTtBQThGVCxNQUFNQyxTQUFBQSxDQUFBQSxHQUFTb0QsY0FBQUEsSUFBRyxFQUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvaW5kZXgudHN4P2FiMjciXSwibmFtZXMiOlsiUnVudGltZUVycm9yIiwic3R5bGVzIiwicGFyYW0iLCJlcnJvciIsImZpcnN0RnJhbWUiLCJhbGxMZWFkaW5nRnJhbWVzIiwiYWxsQ2FsbFN0YWNrRnJhbWVzIiwiUmVhY3QiLCJ1c2VNZW1vIiwiZmlsdGVyZWRGcmFtZXMiLCJmcmFtZXMiLCJmaWx0ZXIiLCJmIiwic291cmNlU3RhY2tGcmFtZSIsImZpbGUiLCJpbmNsdWRlcyIsIm1ldGhvZE5hbWUiLCJzdGFydHNXaXRoIiwiZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleCIsImZpbmRJbmRleCIsImVudHJ5IiwiZXhwYW5kZWQiLCJCb29sZWFuIiwib3JpZ2luYWxDb2RlRnJhbWUiLCJvcmlnaW5hbFN0YWNrRnJhbWUiLCJzbGljZSIsImFsbCIsInNldEFsbCIsInVzZVN0YXRlIiwiY2FuU2hvd01vcmUiLCJsZWFkaW5nRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrIiwic3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsiLCJsZWFkaW5nRnJhbWVzIiwidmlzaWJsZUNhbGxTdGFja0ZyYW1lcyIsImxlbmd0aCIsImdyb3VwU3RhY2tGcmFtZXNCeUZyYW1ld29yayIsIl9qc3hydW50aW1lIiwianN4cyIsIkZyYWdtZW50IiwianN4IiwiaDIiLCJHcm91cGVkU3RhY2tGcmFtZXMiLCJncm91cGVkU3RhY2tGcmFtZXMiLCJzaG93IiwiQ29kZUZyYW1lIiwic3RhY2tGcmFtZSIsImNvZGVGcmFtZSIsInVuZGVmaW5lZCIsImJ1dHRvbiIsInRhYkluZGV4IiwiZGF0YS1uZXh0anMtZGF0YS1ydW50aW1lLWVycm9yLWNvbGxhcHNlZC1hY3Rpb24iLCJ0eXBlIiwib25DbGljayIsImNzcyIsIl90ZW1wbGF0ZU9iamVjdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/format-webpack-messages.js":
|
||
/*!****************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/format-webpack-messages.js ***!
|
||
\****************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"./node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = \"Syntax error:\";\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = \"\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.\";\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === \"object\" && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + \"\\n\" : \"\") + (message.file ? (0, _stripansi.default)(message.file) + \"\\n\" : \"\") + body + (message.details && verbose ? \"\\n\" + message.details : \"\") + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || \"\\n\\nImport trace for requested module:\") + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join(\"\") : \"\") + (message.stack && verbose ? \"\\n\" + message.stack : \"\");\n }\n let lines = message.split(\"\\n\");\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join(\"\\n\");\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split(\"\\n\");\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === \"\") {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf(\"Module not found: \") === 0) {\n lines = [\n lines[0],\n lines[1].replace(\"Error: \", \"\").replace(\"Module not found: Cannot find file:\", \"Cannot find file:\"),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split(\"!\");\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += \"Run `npm i sass` or `yarn add sass` inside your workspace.\\n\";\n lines[1] += \"\\nLearn more: https://nextjs.org/docs/messages/install-sass\";\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join(\"\\n\");\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, \"\") // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, \"\") // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, \"\");\n lines = message.split(\"\\n\");\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== \"\" || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join(\"\\n\");\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes(\"An error occurred in `next/font`.\");\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes(\"ReactServerComponentsError\")) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=format-webpack-messages.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkE7Ozs7MkNBaUtBOzs7ZUFBd0JBOzs7O2dGQWhLRjtBQUN0QixxS0FBcUs7QUFDckssMERBQTBEO0FBRTFELE1BQU1DLDJCQUEyQjtBQUVqQyxNQUFNQyxvQ0FDSjtBQUVGLFNBQVNDLHFCQUFxQkMsT0FBZTtJQUMzQyxPQUFPQyxDQUFBQSxHQUFBQSxXQUFBQSxPQUFTLEVBQUNELFNBQVNFLFFBQVEsQ0FBQ0w7QUFDckM7QUFFQSxJQUFJTSxzQkFBc0I7QUFFMUIsb0NBQW9DO0FBQ3BDLFNBQVNDLGNBQ1BKLE9BQVksRUFDWkssT0FBaUIsRUFDakJDLGVBQXlCO0lBRXpCLDhDQUE4QztJQUM5QyxJQUFJLE9BQU9OLFlBQVksWUFBWUEsUUFBUUEsT0FBTyxFQUFFO1FBQ2xELE1BQU1PLHNCQUNKUCxRQUFRUSxXQUFXLElBQ25CUixRQUFRUSxXQUFXLENBQUNDLE1BQU0sQ0FDeEIsQ0FBQ0MsUUFDQyxDQUFDLGdFQUFnRUMsSUFBSSxDQUNuRUQsTUFBTUUsVUFBVTtRQUl4QixJQUFJQyxPQUFPYixRQUFRQSxPQUFPO1FBQzFCLE1BQU1jLHNCQUFzQkQsS0FBS0UsT0FBTyxDQUFDakI7UUFDekMsSUFBSWdCLHVCQUF1QixHQUFHO1lBQzVCRCxPQUFPQSxLQUFLRyxLQUFLLENBQUMsR0FBR0Y7UUFDdkI7UUFFQWQsVUFDRSxDQUFDQSxRQUFRaUIsVUFBVSxHQUFHaEIsQ0FBQUEsR0FBQUEsV0FBQUEsT0FBUyxFQUFDRCxRQUFRaUIsVUFBVSxJQUFJLE9BQU8sTUFDNURqQixDQUFBQSxRQUFRa0IsSUFBSSxHQUFHakIsQ0FBQUEsR0FBQUEsV0FBQUEsT0FBUyxFQUFDRCxRQUFRa0IsSUFBSSxJQUFJLE9B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LGdCQUFnQlEsT0FBTyxDQUFDRCxLQUFLLENBQUMsRUFBRTtJQUNsQztJQUVBLE1BQU1FLFNBQVM7UUFDYixHQUFHVixJQUFJO1FBQ1BFLFFBQVFEO1FBQ1JJLFVBQVVEO0lBQ1o7SUFDQSxJQUFJLENBQUN0QyxXQUFXNEMsT0FBT1IsTUFBTSxDQUFDUyxJQUFJLENBQUNuRCx1QkFBdUI7UUFDeEQsa0RBQWtEO1FBQ2xEa0QsT0FBT1IsTUFBTSxHQUFHUSxPQUFPUixNQUFNLENBQUNoQyxNQUFNLENBQUNWO1FBQ3JDa0QsT0FBT0wsUUFBUSxHQUFHLEVBQUU7SUFDdEI7SUFDQSxPQUFPSztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9mb3JtYXQtd2VicGFjay1tZXNzYWdlcy50cz8xMWRlIl0sIm5hbWVzIjpbImZvcm1hdFdlYnBhY2tNZXNzYWdlcyIsImZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCIsIldFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyIsImlzTGlrZWx5QVN5bnRheEVycm9yIiwibWVzc2FnZSIsInN0cmlwQW5zaSIsImluY2x1ZGVzIiwiaGFkTWlzc2luZ1Nhc3NFcnJvciIsImZvcm1hdE1lc3NhZ2UiLCJ2ZXJib3NlIiwiaW1wb3J0VHJhY2VOb3RlIiwiZmlsdGVyZWRNb2R1bGVUcmFjZSIsIm1vZHVsZVRyYWNlIiwiZmlsdGVyIiwidHJhY2UiLCJ0ZXN0Iiwib3JpZ2luTmFtZSIsImJvZHkiLCJicmVha2luZ0NoYW5nZUluZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwibW9kdWxlTmFtZSIsImZpbGUiLCJkZXRhaWxzIiwibGVuZ3RoIiwibWFwIiwiam9pbiIsInN0YWNrIiwibGluZXMiLCJzcGxpdCIsImxpbmUiLCJwYXJzaW5nRXJyb3IiLCJleGVjIiwiZXJyb3JMaW5lIiwiZXJyb3JDb2x1bW4iLCJlcnJvck1lc3NhZ2UiLCJyZXBsYWNlIiwidHJpbSIsInNwbGljZSIsIm1hdGNoIiwiZmlyc3RMaW5lIiwiaW5kZXgiLCJhcnIiLCJqc29uIiwiZm9ybWF0dGVkRXJyb3JzIiwiZXJyb3JzIiwiaXNVbmtub3duTmV4dEZvbnRFcnJvciIsImZvcm1hdHRlZFdhcm5pbmdzIiwid2FybmluZ3MiLCJyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciIsImkiLCJlcnJvciIsInVuc2hpZnQiLCJyZXN1bHQiLCJzb21lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/format-webpack-messages.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js":
|
||
/*!*******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js ***!
|
||
\*******************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n enumerable: true,\n get: function() {\n return getSocketUrl;\n }\n}));\nconst _normalizedassetprefix = __webpack_require__(/*! ../../../../../shared/lib/normalized-asset-prefix */ \"./node_modules/next/dist/shared/lib/normalized-asset-prefix.js\");\nfunction getSocketProtocol(assetPrefix) {\n let protocol = window.location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === \"http:\" ? \"ws:\" : \"wss:\";\n}\nfunction getSocketUrl(assetPrefix) {\n const prefix = (0, _normalizedassetprefix.normalizedAssetPrefix)(assetPrefix);\n const protocol = getSocketProtocol(assetPrefix || \"\");\n if (URL.canParse(prefix)) {\n // since normalized asset prefix is ensured to be a URL format,\n // we can safely replace the protocol\n return prefix.replace(/^http/, \"ws\");\n }\n const { hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\") + prefix;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-socket-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0LXNvY2tldC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFhZ0JBOzs7ZUFBQUE7OzttREFic0I7QUFFdEMsU0FBU0Msa0JBQWtCQyxXQUFtQjtJQUM1QyxJQUFJQyxXQUFXQyxPQUFPQyxRQUFRLENBQUNGLFFBQVE7SUFFdkMsSUFBSTtRQUNGLHVCQUF1QjtRQUN2QkEsV0FBVyxJQUFJRyxJQUFJSixhQUFhQyxRQUFRO0lBQzFDLEVBQUUsT0FBQUksR0FBTSxDQUFDO0lBRVQsT0FBT0osYUFBYSxVQUFVLFFBQVE7QUFDeEM7QUFFTyxTQUFTSCxhQUFhRSxXQUErQjtJQUMxRCxNQUFNTSxTQUFTQyxDQUFBQSxHQUFBQSx1QkFBQUEscUJBQXFCLEVBQUNQO0lBQ3JDLE1BQU1DLFdBQVdGLGtCQUFrQkMsZUFBZTtJQUVsRCxJQUFJSSxJQUFJSSxRQUFRLENBQUNGLFNBQVM7UUFDeEIsK0RBQStEO1FBQy9ELHFDQUFxQztRQUNyQyxPQUFPQSxPQUFPRyxPQUFPLENBQUMsU0FBUztJQUNqQztJQUVBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUUsR0FBR1QsT0FBT0MsUUFBUTtJQUMxQyxPQUFPRixXQUFZLE9BQUlTLFdBQVdDLENBQUFBLE9BQU8sTUFBSUEsT0FBUyxNQUFLTDtBQUM3RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0LXNvY2tldC11cmwudHM/N2ZiMCJdLCJuYW1lcyI6WyJnZXRTb2NrZXRVcmwiLCJnZXRTb2NrZXRQcm90b2NvbCIsImFzc2V0UHJlZml4IiwicHJvdG9jb2wiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIlVSTCIsImUiLCJwcmVmaXgiLCJub3JtYWxpemVkQXNzZXRQcmVmaXgiLCJjYW5QYXJzZSIsInJlcGxhY2UiLCJob3N0bmFtZSIsInBvcnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js":
|
||
/*!*******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js ***!
|
||
\*******************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getErrorByType\", ({\n enumerable: true,\n get: function() {\n return getErrorByType;\n }\n}));\nconst _shared = __webpack_require__(/*! ../../shared */ \"./node_modules/next/dist/client/components/react-dev-overlay/shared.js\");\nconst _stackframe = __webpack_require__(/*! ./stack-frame */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _errorsource = __webpack_require__(/*! ../../../../../shared/lib/error-source */ \"./node_modules/next/dist/shared/lib/error-source.js\");\nasync function getErrorByType(ev, isAppDir) {\n const { id, event } = ev;\n switch(event.type){\n case _shared.ACTION_UNHANDLED_ERROR:\n case _shared.ACTION_UNHANDLED_REJECTION:\n {\n const readyRuntimeError = {\n id,\n runtime: true,\n error: event.reason,\n frames: await (0, _stackframe.getOriginalStackFrames)(event.frames, (0, _errorsource.getErrorSource)(event.reason), isAppDir, event.reason.toString())\n };\n if (event.type === _shared.ACTION_UNHANDLED_ERROR) {\n readyRuntimeError.componentStackFrames = event.componentStackFrames;\n }\n return readyRuntimeError;\n }\n default:\n {\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = event;\n throw new Error(\"type system invariant violation\");\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=getErrorByType.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0RXJyb3JCeVR5cGUuanMiLCJtYXBwaW5ncyI6Ijs7OztrREFrQnNCQTs7O2VBQUFBOzs7b0NBZmY7d0NBRWdDO3lDQUdSO0FBVXhCLGVBQWVBLGVBQ3BCQyxFQUF1QixFQUN2QkMsUUFBaUI7SUFFakIsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLEtBQUssRUFBRSxHQUFHSDtJQUN0QixPQUFRRyxNQUFNQyxJQUFJO1FBQ2hCLEtBQUtDLFFBQUFBLHNCQUFzQjtRQUMzQixLQUFLQyxRQUFBQSwwQkFBMEI7WUFBRTtnQkFDL0IsTUFBTUMsb0JBQXVDO29CQUMzQ0w7b0JBQ0FNLFNBQVM7b0JBQ1RDLE9BQU9OLE1BQU1PLE1BQU07b0JBQ25CQyxRQUFRLE1BQU1DLENBQUFBLEdBQUFBLFlBQUFBLHNCQUFzQixFQUNsQ1QsTUFBTVEsTUFBTSxFQUNaRSxDQUFBQSxHQUFBQSxhQUFBQSxjQUFjLEVBQUNWLE1BQU1PLE1BQU0sR0FDM0JULFVBQ0FFLE1BQU1PLE1BQU0sQ0FBQ0ksUUFBUTtnQkFFekI7Z0JBQ0EsSUFBSVgsTUFBTUMsSUFBSSxLQUFLQyxRQUFBQSxzQkFBc0IsRUFBRTtvQkFDekNFLGtCQUFrQlEsb0JBQW9CLEdBQUdaLE1BQU1ZLG9CQUFvQjtnQkFDckU7Z0JBQ0EsT0FBT1I7WUFDVDtRQUNBO1lBQVM7Z0JBQ1A7WUFDRjtJQUNGO0lBQ0EsNkRBQTZEO0lBQzdELE1BQU1TLElBQVdiO0lBQ2pCLE1BQU0sSUFBSWMsTUFBTTtBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0RXJyb3JCeVR5cGUudHM/YWI3ZSJdLCJuYW1lcyI6WyJnZXRFcnJvckJ5VHlwZSIsImV2IiwiaXNBcHBEaXIiLCJpZCIsImV2ZW50IiwidHlwZSIsIkFDVElPTl9VTkhBTkRMRURfRVJST1IiLCJBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiIsInJlYWR5UnVudGltZUVycm9yIiwicnVudGltZSIsImVycm9yIiwicmVhc29uIiwiZnJhbWVzIiwiZ2V0T3JpZ2luYWxTdGFja0ZyYW1lcyIsImdldEVycm9yU291cmNlIiwidG9TdHJpbmciLCJjb21wb25lbnRTdGFja0ZyYW1lcyIsIl8iLCJFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js":
|
||
/*!************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js ***!
|
||
\************************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"groupStackFramesByFramework\", ({\n enumerable: true,\n get: function() {\n return groupStackFramesByFramework;\n }\n}));\nfunction groupStackFramesByFramework(stackFrames) {\n const stackFramesGroupedByFramework = [];\n for (const stackFrame of stackFrames){\n const currentGroup = stackFramesGroupedByFramework[stackFramesGroupedByFramework.length - 1];\n const framework = stackFrame.sourcePackage;\n if (currentGroup && currentGroup.framework === framework) {\n currentGroup.stackFrames.push(stackFrame);\n } else {\n stackFramesGroupedByFramework.push({\n framework: framework,\n stackFrames: [\n stackFrame\n ]\n });\n }\n }\n return stackFramesGroupedByFramework;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=group-stack-frames-by-framework.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ3JvdXAtc3RhY2stZnJhbWVzLWJ5LWZyYW1ld29yay5qcyIsIm1hcHBpbmdzIjoiOzs7OytEQTZCZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLDRCQUNkQyxXQUFpQztJQUVqQyxNQUFNQyxnQ0FBb0QsRUFBRTtJQUU1RCxLQUFLLE1BQU1DLGNBQWNGLFlBQWE7UUFDcEMsTUFBTUcsZUFDSkYsNkJBQTZCLENBQUNBLDhCQUE4QkcsTUFBTSxHQUFHLEVBQUU7UUFDekUsTUFBTUMsWUFBWUgsV0FBV0ksYUFBYTtRQUUxQyxJQUFJSCxnQkFBZ0JBLGFBQWFFLFNBQVMsS0FBS0EsV0FBVztZQUN4REYsYUFBYUgsV0FBVyxDQUFDTyxJQUFJLENBQUNMO1FBQ2hDLE9BQU87WUFDTEQsOEJBQThCTSxJQUFJLENBQUM7Z0JBQ2pDRixXQUFXQTtnQkFDWEwsYUFBYTtvQkFBQ0U7aUJBQVc7WUFDM0I7UUFDRjtJQUNGO0lBRUEsT0FBT0Q7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ3JvdXAtc3RhY2stZnJhbWVzLWJ5LWZyYW1ld29yay50cz81ZDVhIl0sIm5hbWVzIjpbImdyb3VwU3RhY2tGcmFtZXNCeUZyYW1ld29yayIsInN0YWNrRnJhbWVzIiwic3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsiLCJzdGFja0ZyYW1lIiwiY3VycmVudEdyb3VwIiwibGVuZ3RoIiwiZnJhbWV3b3JrIiwic291cmNlUGFja2FnZSIsInB1c2giXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js":
|
||
/*!*************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js ***!
|
||
\*************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getHydrationWarningType: function() {\n return getHydrationWarningType;\n },\n hydrationErrorState: function() {\n return hydrationErrorState;\n },\n patchConsoleError: function() {\n return patchConsoleError;\n }\n});\nconst getHydrationWarningType = (msg)=>{\n if (isHtmlTagsWarning(msg)) return \"tag\";\n if (isTextInTagsMismatchWarning(msg)) return \"text-in-tag\";\n return \"text\";\n};\nconst isHtmlTagsWarning = (msg)=>Boolean(msg && htmlTagsWarnings.has(msg));\nconst isTextMismatchWarning = (msg)=>textMismatchWarning === msg;\nconst isTextInTagsMismatchWarning = (msg)=>Boolean(msg && textAndTagsMismatchWarnings.has(msg));\nconst isKnownHydrationWarning = (msg)=>isHtmlTagsWarning(msg) || isTextInTagsMismatchWarning(msg) || isTextMismatchWarning(msg);\nconst hydrationErrorState = {};\n// https://github.com/facebook/react/blob/main/packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js used as a reference\nconst htmlTagsWarnings = new Set([\n 'Warning: Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async=\"\" or moving it into the root <head> tag.%s',\n \"Warning: In HTML, %s cannot be a child of <%s>.%s\\nThis will cause a hydration error.%s\",\n \"Warning: In HTML, %s cannot be a descendant of <%s>.\\nThis will cause a hydration error.%s\",\n \"Warning: In HTML, text nodes cannot be a child of <%s>.\\nThis will cause a hydration error.\",\n \"Warning: In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\\nThis will cause a hydration error.\",\n \"Warning: Expected server HTML to contain a matching <%s> in <%s>.%s\",\n \"Warning: Did not expect server HTML to contain a <%s> in <%s>.%s\"\n]);\nconst textAndTagsMismatchWarnings = new Set([\n 'Warning: Expected server HTML to contain a matching text node for \"%s\" in <%s>.%s',\n 'Warning: Did not expect server HTML to contain the text node \"%s\" in <%s>.%s'\n]);\nconst textMismatchWarning = 'Warning: Text content did not match. Server: \"%s\" Client: \"%s\"%s';\nfunction patchConsoleError() {\n const prev = console.error;\n console.error = function(msg, serverContent, clientContent, componentStack) {\n if (isKnownHydrationWarning(msg)) {\n hydrationErrorState.warning = [\n // remove the last %s from the message\n msg,\n serverContent,\n clientContent\n ];\n hydrationErrorState.componentStack = componentStack;\n hydrationErrorState.serverContent = serverContent;\n hydrationErrorState.clientContent = clientContent;\n }\n // @ts-expect-error argument is defined\n prev.apply(console, arguments);\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hydration-error-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvaHlkcmF0aW9uLWVycm9yLWluZm8uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBVWFBLHlCQUF1QjtlQUF2QkE7O0lBb0JBQyxxQkFBbUI7ZUFBbkJBOztJQXlCR0MsbUJBQWlCO2VBQWpCQTs7O0FBN0NULE1BQU1GLDBCQUEwQixDQUNyQ0c7SUFFQSxJQUFJQyxrQkFBa0JELE1BQU0sT0FBTztJQUNuQyxJQUFJRSw0QkFBNEJGLE1BQU0sT0FBTztJQUM3QyxPQUFPO0FBQ1Q7QUFFQSxNQUFNQyxvQkFBb0IsQ0FBQ0QsTUFDekJHLFFBQVFILE9BQU9JLGlCQUFpQkMsR0FBRyxDQUFDTDtBQUV0QyxNQUFNTSx3QkFBd0IsQ0FBQ04sTUFBc0JPLHdCQUF3QlA7QUFDN0UsTUFBTUUsOEJBQThCLENBQUNGLE1BQ25DRyxRQUFRSCxPQUFPUSw0QkFBNEJILEdBQUcsQ0FBQ0w7QUFFakQsTUFBTVMsMEJBQTBCLENBQUNULE1BQy9CQyxrQkFBa0JELFFBQ2xCRSw0QkFBNEJGLFFBQzVCTSxzQkFBc0JOO0FBRWpCLE1BQU1GLHNCQUEyQyxDQUFDO0FBRXpELGlJQUFpSTtBQUNqSSxNQUFNTSxtQkFBbUIsSUFBSU0sSUFBSTtJQUMvQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBQ0QsTUFBTUYsOEJBQThCLElBQUlFLElBQUk7SUFDMUM7SUFDQTtDQUNEO0FBQ0QsTUFBTUgsc0JBQ0o7QUFRSyxTQUFTUjtJQUNkLE1BQU1ZLE9BQU9DLFFBQVFDLEtBQUs7SUFDMUJELFFBQVFDLEtBQUssR0FBRyxTQUFVYixHQUFHLEVBQUVjLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxjQUFjO1FBQ3pFLElBQUlQLHdCQUF3QlQsTUFBTTtZQUNoQ0Ysb0JBQW9CbUIsT0FBTyxHQUFHO2dCQUM1QixzQ0FBc0M7Z0JBQ3RDakI7Z0JBQ0FjO2dCQUNBQzthQUNEO1lBQ0RqQixvQkFBb0JrQixjQUFjLEdBQUdBO1lBQ3JDbEIsb0JBQW9CZ0IsYUFBYSxHQUFHQTtZQUNwQ2hCLG9CQUFvQmlCLGFBQWEsR0FBR0E7UUFDdEM7UUFFQSx1Q0FBdUM7UUFDdkNKLEtBQUtPLEtBQUssQ0FBQ04sU0FBU087SUFDdEI7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvaHlkcmF0aW9uLWVycm9yLWluZm8udHM/YmMwYyJdLCJuYW1lcyI6WyJnZXRIeWRyYXRpb25XYXJuaW5nVHlwZSIsImh5ZHJhdGlvbkVycm9yU3RhdGUiLCJwYXRjaENvbnNvbGVFcnJvciIsIm1zZyIsImlzSHRtbFRhZ3NXYXJuaW5nIiwiaXNUZXh0SW5UYWdzTWlzbWF0Y2hXYXJuaW5nIiwiQm9vbGVhbiIsImh0bWxUYWdzV2FybmluZ3MiLCJoYXMiLCJpc1RleHRNaXNtYXRjaFdhcm5pbmciLCJ0ZXh0TWlzbWF0Y2hXYXJuaW5nIiwidGV4dEFuZFRhZ3NNaXNtYXRjaFdhcm5pbmdzIiwiaXNLbm93bkh5ZHJhdGlvbldhcm5pbmciLCJTZXQiLCJwcmV2IiwiY29uc29sZSIsImVycm9yIiwic2VydmVyQ29udGVudCIsImNsaWVudENvbnRlbnQiLCJjb21wb25lbnRTdGFjayIsIndhcm5pbmciLCJhcHBseSIsImFyZ3VtZW50cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js":
|
||
/*!********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js ***!
|
||
\********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getFilesystemFrame: function() {\n return getFilesystemFrame;\n },\n getServerError: function() {\n return getServerError;\n }\n});\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nconst _errorsource = __webpack_require__(/*! ../../../../../shared/lib/error-source */ \"./node_modules/next/dist/shared/lib/error-source.js\");\nfunction getFilesystemFrame(frame) {\n const f = {\n ...frame\n };\n if (typeof f.file === \"string\") {\n if (f.file.startsWith(\"/\") || // Win32:\n /^[a-z]:\\\\/i.test(f.file) || // Win32 UNC:\n f.file.startsWith(\"\\\\\\\\\")) {\n f.file = \"file://\" + f.file;\n }\n }\n return f;\n}\nfunction getServerError(error, type) {\n let n;\n try {\n throw new Error(error.message);\n } catch (e) {\n n = e;\n }\n n.name = error.name;\n try {\n n.stack = n.toString() + \"\\n\" + (0, _stacktraceparser.parse)(error.stack).map(getFilesystemFrame).map((f)=>{\n let str = \" at \" + f.methodName;\n if (f.file) {\n let loc = f.file;\n if (f.lineNumber) {\n loc += \":\" + f.lineNumber;\n if (f.column) {\n loc += \":\" + f.column;\n }\n }\n str += \" (\" + loc + \")\";\n }\n return str;\n }).join(\"\\n\");\n } catch (e) {\n n.stack = error.stack;\n }\n (0, _errorsource.decorateServerError)(n, type);\n return n;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=nodeStackFrames.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvbm9kZVN0YWNrRnJhbWVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQU9nQkEsb0JBQWtCO2VBQWxCQTs7SUFtQkFDLGdCQUFjO2VBQWRBOzs7OENBMUJNO3lDQUtmO0FBRUEsU0FBU0QsbUJBQW1CRSxLQUFpQjtJQUNsRCxNQUFNQyxJQUFnQjtRQUFFLEdBQUdELEtBQUs7SUFBQztJQUVqQyxJQUFJLE9BQU9DLEVBQUVDLElBQUksS0FBSyxVQUFVO1FBQzlCLElBRUVELEVBQUVDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLFFBQ2xCLFNBQVM7UUFDVCxhQUFhQyxJQUFJLENBQUNILEVBQUVDLElBQUksS0FDeEIsYUFBYTtRQUNiRCxFQUFFQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxTQUNsQjtZQUNBRixFQUFFQyxJQUFJLEdBQUcsWUFBVUQsRUFBRUMsSUFBSTtRQUMzQjtJQUNGO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNGLGVBQWVNLEtBQVksRUFBRUMsSUFBcUI7SUFDaEUsSUFBSUM7SUFDSixJQUFJO1FBQ0YsTUFBTSxJQUFJQyxNQUFNSCxNQUFNSSxPQUFPO0lBQy9CLEVBQUUsT0FBT0MsR0FBRztRQUNWSCxJQUFJRztJQUNOO0lBRUFILEVBQUVJLElBQUksR0FBR04sTUFBTU0sSUFBSTtJQUNuQixJQUFJO1FBQ0ZKLEVBQUVLLEtBQUssR0FBR0wsRUFBS00sUUFBUSxLQUFHLE9BQUlDLENBQUFBLEdBQUFBLGtCQUFBQSxLQUFLLEVBQUNULE1BQU1PLEtBQUssRUFDNUNHLEdBQUcsQ0FBQ2pCLG9CQUNKaUIsR0FBRyxDQUFDLENBQUNkO1lBQ0osSUFBSWUsTUFBTSxZQUFVZixFQUFFZ0IsVUFBVTtZQUNoQyxJQUFJaEIsRUFBRUMsSUFBSSxFQUFFO2dCQUNWLElBQUlnQixNQUFNakIsRUFBRUMsSUFBSTtnQkFDaEIsSUFBSUQsRUFBRWtCLFVBQVUsRUFBRTtvQkFDaEJELE9BQU8sTUFBSWpCLEVBQUVrQixVQUFVO29CQUN2QixJQUFJbEIsRUFBRW1CLE1BQU0sRUFBRTt3QkFDWkYsT0FBTyxNQUFJakIsRUFBRW1CLE1BQU07b0JBQ3JCO2dCQUNGO2dCQUNBSixPQUFPLE9BQUtFLE1BQUk7WUFDbEI7WUFDQSxPQUFPRjtRQUNULEdBQ0NLLElBQUksQ0FBQztJQUNWLEVBQUUsT0FBQVgsR0FBTTtRQUNOSCxFQUFFSyxLQUFLLEdBQUdQLE1BQU1PLEtBQUs7SUFDdkI7SUFFQVUsQ0FBQUEsR0FBQUEsYUFBQUEsbUJBQW1CLEVBQUNmLEdBQUdEO0lBQ3ZCLE9BQU9DO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL25vZGVTdGFja0ZyYW1lcy50cz9hMjY3Il0sIm5hbWVzIjpbImdldEZpbGVzeXN0ZW1GcmFtZSIsImdldFNlcnZlckVycm9yIiwiZnJhbWUiLCJmIiwiZmlsZSIsInN0YXJ0c1dpdGgiLCJ0ZXN0IiwiZXJyb3IiLCJ0eXBlIiwibiIsIkVycm9yIiwibWVzc2FnZSIsImUiLCJuYW1lIiwic3RhY2siLCJ0b1N0cmluZyIsInBhcnNlIiwibWFwIiwic3RyIiwibWV0aG9kTmFtZSIsImxvYyIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJqb2luIiwiZGVjb3JhdGVTZXJ2ZXJFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js":
|
||
/*!******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js ***!
|
||
\******************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"noop\", ({\n enumerable: true,\n get: function() {\n return noop;\n }\n}));\nfunction noop(strings) {\n for(var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n keys[_key - 1] = arguments[_key];\n }\n const lastIndex = strings.length - 1;\n return strings.slice(0, lastIndex).reduce((p, s, i)=>p + s + keys[i], \"\") + strings[lastIndex];\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=noop-template.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3dDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsS0FDZEMsT0FBNkI7SUFDN0IsUUFBQUMsT0FBQUMsVUFBQUMsTUFBQSxFQUFBQyxPQUFBLElBQUFDLE1BQUFKLE9BQUEsSUFBQUEsT0FBQSxRQUFBSyxPQUFBLEdBQUFBLE9BQUFMLE1BQUFLLE9BQUE7UUFBR0YsSUFBQUEsQ0FBSEUsT0FBQSxLQUFBSixTQUFBLENBQUFJLEtBQTBCOztJQUUxQixNQUFNQyxZQUFZUCxRQUFRRyxNQUFNLEdBQUc7SUFDbkMsT0FDRUgsUUFBUVEsS0FBSyxDQUFDLEdBQUdELFdBQVdFLE1BQU0sQ0FBQyxDQUFDQyxHQUFHQyxHQUFHQyxJQUFNRixJQUFJQyxJQUFJUCxJQUFJLENBQUNRLEVBQUUsRUFBRSxNQUNqRVosT0FBTyxDQUFDTyxVQUFVO0FBRXRCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ub29wLXRlbXBsYXRlLnRzP2M2ZTgiXSwibmFtZXMiOlsibm9vcCIsInN0cmluZ3MiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwia2V5cyIsIkFycmF5IiwiX2tleSIsImxhc3RJbmRleCIsInNsaWNlIiwicmVkdWNlIiwicCIsInMiLCJpIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js":
|
||
/*!**************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js ***!
|
||
\**************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseComponentStack\", ({\n enumerable: true,\n get: function() {\n return parseComponentStack;\n }\n}));\nvar LocationType;\n(function(LocationType) {\n LocationType[\"FILE\"] = \"file\";\n LocationType[\"WEBPACK_INTERNAL\"] = \"webpack-internal\";\n LocationType[\"HTTP\"] = \"http\";\n LocationType[\"PROTOCOL_RELATIVE\"] = \"protocol-relative\";\n LocationType[\"UNKNOWN\"] = \"unknown\";\n})(LocationType || (LocationType = {}));\n/**\n * Get the type of frame line based on the location\n */ function getLocationType(location) {\n if (location.startsWith(\"file://\")) {\n return \"file\";\n }\n if (location.startsWith(\"webpack-internal://\")) {\n return \"webpack-internal\";\n }\n if (location.startsWith(\"http://\") || location.startsWith(\"https://\")) {\n return \"http\";\n }\n if (location.startsWith(\"//\")) {\n return \"protocol-relative\";\n }\n return \"unknown\";\n}\nfunction parseStackFrameLocation(location) {\n const locationType = getLocationType(location);\n const modulePath = location == null ? void 0 : location.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/, \"\");\n var _modulePath_match;\n const [, file, lineNumber, column] = (_modulePath_match = modulePath == null ? void 0 : modulePath.match(/^(.+):(\\d+):(\\d+)/)) != null ? _modulePath_match : [];\n switch(locationType){\n case \"file\":\n case \"webpack-internal\":\n return {\n canOpenInEditor: true,\n file,\n lineNumber: lineNumber ? Number(lineNumber) : undefined,\n column: column ? Number(column) : undefined\n };\n // When the location is a URL we only show the file\n // TODO: Resolve http(s) URLs through sourcemaps\n case \"http\":\n case \"protocol-relative\":\n case \"unknown\":\n default:\n {\n return {\n canOpenInEditor: false\n };\n }\n }\n}\nfunction parseComponentStack(componentStack) {\n const componentStackFrames = [];\n for (const line of componentStack.trim().split(\"\\n\")){\n // Get component and file from the component stack line\n const match = /at ([^ ]+)( \\((.*)\\))?/.exec(line);\n if (match == null ? void 0 : match[1]) {\n const component = match[1];\n const location = match[3];\n if (!location) {\n componentStackFrames.push({\n canOpenInEditor: false,\n component\n });\n continue;\n }\n // Stop parsing the component stack if we reach a Next.js component\n if (location == null ? void 0 : location.includes(\"next/dist\")) {\n break;\n }\n const frameLocation = parseStackFrameLocation(location);\n componentStackFrames.push({\n component,\n ...frameLocation\n });\n }\n }\n return componentStackFrames;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=parse-component-stack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcGFyc2UtY29tcG9uZW50LXN0YWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBcUVnQkE7OztlQUFBQTs7OztVQTdEWEMsWUFBQUE7Ozs7OztHQUFBQSxnQkFBQUEsQ0FBQUEsZUFBQUEsQ0FBQUEsQ0FBQUE7QUFRTDs7Q0FFQyxHQUNELFNBQVNDLGdCQUFnQkMsUUFBZ0I7SUFDdkMsSUFBSUEsU0FBU0MsVUFBVSxDQUFDLFlBQVk7UUFDbEM7SUFDRjtJQUNBLElBQUlELFNBQVNDLFVBQVUsQ0FBQyx3QkFBd0I7UUFDOUM7SUFDRjtJQUNBLElBQUlELFNBQVNDLFVBQVUsQ0FBQyxjQUFjRCxTQUFTQyxVQUFVLENBQUMsYUFBYTtRQUNyRTtJQUNGO0lBQ0EsSUFBSUQsU0FBU0MsVUFBVSxDQUFDLE9BQU87UUFDN0I7SUFDRjtJQUNBO0FBQ0Y7QUFFQSxTQUFTQyx3QkFDUEYsUUFBZ0I7SUFFaEIsTUFBTUcsZUFBZUosZ0JBQWdCQztJQUVyQyxNQUFNSSxhQUFhSixZQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxTQUFVSyxPQUFPLENBQ2xDLG1EQUNBO1FBR0FEO0lBREYsTUFBTSxHQUFHRSxNQUFNQyxZQUFZQyxPQUFPLEdBQ2hDSixDQUFBQSxvQkFBQUEsY0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsV0FBWUssS0FBSyxDQUFDLGdDQUFsQkwsb0JBQTBDLEVBQUU7SUFFOUMsT0FBUUQ7UUFDTjtRQUNBO1lBQ0UsT0FBTztnQkFDTE8saUJBQWlCO2dCQUNqQko7Z0JBQ0FDLFlBQVlBLGFBQWFJLE9BQU9KLGNBQWNLO2dCQUM5Q0osUUFBUUEsU0FBU0csT0FBT0gsVUFBVUk7WUFDcEM7UUFDRixtREFBbUQ7UUFDbkQsZ0RBQWdEO1FBQ2hEO1FBQ0E7UUFDQTtRQUNBO1lBQVM7Z0JBQ1AsT0FBTztvQkFDTEYsaUJBQWlCO2dCQUNuQjtZQUNGO0lBQ0Y7QUFDRjtBQUVPLFNBQVNiLG9CQUNkZ0IsY0FBc0I7SUFFdEIsTUFBTUMsdUJBQThDLEVBQUU7SUFDdEQsS0FBSyxNQUFNQyxRQUFRRixlQUFlRyxJQUFJLEdBQUdDLEtBQUssQ0FBQyxNQUFPO1FBQ3BELHVEQUF1RDtRQUN2RCxNQUFNUixRQUFRLHlCQUF5QlMsSUFBSSxDQUFDSDtRQUM1QyxJQUFJTixTQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxLQUFPLENBQUMsRUFBRSxFQUFFO1lBQ2QsTUFBTVUsWUFBWVYsS0FBSyxDQUFDLEVBQUU7WUFDMUIsTUFBTVQsV0FBV1MsS0FBSyxDQUFDLEVBQUU7WUFFekIsSUFBSSxDQUFDVCxVQUFVO2dCQUNiYyxxQkFBcUJNLElBQUksQ0FBQztvQkFDeEJWLGlCQUFpQjtvQkFDakJTO2dCQUNGO2dCQUNBO1lBQ0Y7WUFFQSxtRUFBbUU7WUFDbkUsSUFBSW5CLFlBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFNBQVVxQixRQUFRLENBQUMsY0FBYztnQkFDbkM7WUFDRjtZQUVBLE1BQU1DLGdCQUFnQnBCLHdCQUF3QkY7WUFDOUNjLHFCQUFxQk0sSUFBSSxDQUFDO2dCQUN4QkQ7Z0JBQ0EsR0FBR0csYUFBYTtZQUNsQjtRQUNGO0lBQ0Y7SUFFQSxPQUFPUjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9wYXJzZS1jb21wb25lbnQtc3RhY2sudHM/ZDRkYiJdLCJuYW1lcyI6WyJwYXJzZUNvbXBvbmVudFN0YWNrIiwiTG9jYXRpb25UeXBlIiwiZ2V0TG9jYXRpb25UeXBlIiwibG9jYXRpb24iLCJzdGFydHNXaXRoIiwicGFyc2VTdGFja0ZyYW1lTG9jYXRpb24iLCJsb2NhdGlvblR5cGUiLCJtb2R1bGVQYXRoIiwicmVwbGFjZSIsImZpbGUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwibWF0Y2giLCJjYW5PcGVuSW5FZGl0b3IiLCJOdW1iZXIiLCJ1bmRlZmluZWQiLCJjb21wb25lbnRTdGFjayIsImNvbXBvbmVudFN0YWNrRnJhbWVzIiwibGluZSIsInRyaW0iLCJzcGxpdCIsImV4ZWMiLCJjb21wb25lbnQiLCJwdXNoIiwiaW5jbHVkZXMiLCJmcmFtZUxvY2F0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js":
|
||
/*!***************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js ***!
|
||
\***************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseStack\", ({\n enumerable: true,\n get: function() {\n return parseStack;\n }\n}));\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nconst regexNextStatic = /\\/_next(\\/static\\/.+)/;\nfunction parseStack(stack) {\n const frames = (0, _stacktraceparser.parse)(stack);\n return frames.map((frame)=>{\n try {\n const url = new URL(frame.file);\n const res = regexNextStatic.exec(url.pathname);\n if (res) {\n var _process_env___NEXT_DIST_DIR_replace, _process_env___NEXT_DIST_DIR;\n const distDir = (_process_env___NEXT_DIST_DIR = \"/app/frontend/build\") == null ? void 0 : (_process_env___NEXT_DIST_DIR_replace = _process_env___NEXT_DIST_DIR.replace(/\\\\/g, \"/\")) == null ? void 0 : _process_env___NEXT_DIST_DIR_replace.replace(/\\/$/, \"\");\n if (distDir) {\n frame.file = \"file://\" + distDir.concat(res.pop()) + url.search;\n }\n }\n } catch (e) {}\n return frame;\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=parseStack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcGFyc2VTdGFjay5qcyIsIm1hcHBpbmdzIjoiOzs7OzhDQUtnQkE7OztlQUFBQTs7OzhDQUxNO0FBR3RCLE1BQU1DLGtCQUFrQjtBQUVqQixTQUFTRCxXQUFXRSxLQUFhO0lBQ3RDLE1BQU1DLFNBQVNDLENBQUFBLEdBQUFBLGtCQUFBQSxLQUFLLEVBQUNGO0lBQ3JCLE9BQU9DLE9BQU9FLEdBQUcsQ0FBQyxDQUFDQztRQUNqQixJQUFJO1lBQ0YsTUFBTUMsTUFBTSxJQUFJQyxJQUFJRixNQUFNRyxJQUFJO1lBQzlCLE1BQU1DLE1BQU1ULGdCQUFnQlUsSUFBSSxDQUFDSixJQUFJSyxRQUFRO1lBQzdDLElBQUlGLEtBQUs7b0JBQ1NHLHNDQUFBQTtnQkFBaEIsTUFBTUMsVUFBQUEsQ0FBVUQsK0JBQUFBLHFCQUEyQixzQkFBM0JBLHVDQUFBQSw2QkFDWkksT0FBTyxDQUFDLE9BQU8seUJBREhKLHFDQUVaSSxPQUFPLENBQUMsT0FBTztnQkFDbkIsSUFBSUgsU0FBUztvQkFDWFIsTUFBTUcsSUFBSSxHQUFHLFlBQVlLLFFBQVFJLE1BQU0sQ0FBQ1IsSUFBSVMsR0FBRyxNQUFPWixJQUFJYSxNQUFNO2dCQUNsRTtZQUNGO1FBQ0YsRUFBRSxPQUFBQyxHQUFNLENBQUM7UUFDVCxPQUFPZjtJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlU3RhY2sudHM/NzcyOSJdLCJuYW1lcyI6WyJwYXJzZVN0YWNrIiwicmVnZXhOZXh0U3RhdGljIiwic3RhY2siLCJmcmFtZXMiLCJwYXJzZSIsIm1hcCIsImZyYW1lIiwidXJsIiwiVVJMIiwiZmlsZSIsInJlcyIsImV4ZWMiLCJwYXRobmFtZSIsInByb2Nlc3MiLCJkaXN0RGlyIiwiZW52IiwiX19ORVhUX0RJU1RfRElSIiwicmVwbGFjZSIsImNvbmNhdCIsInBvcCIsInNlYXJjaCIsImUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/runtime-error-handler.js":
|
||
/*!**************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/runtime-error-handler.js ***!
|
||
\**************************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RuntimeErrorHandler\", ({\n enumerable: true,\n get: function() {\n return RuntimeErrorHandler;\n }\n}));\nconst RuntimeErrorHandler = {\n hadRuntimeError: false\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=runtime-error-handler.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcnVudGltZS1lcnJvci1oYW5kbGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBQWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLHNCQUFzQjtJQUNqQ0MsaUJBQWlCO0FBQ25CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ydW50aW1lLWVycm9yLWhhbmRsZXIudHM/MWQwMyJdLCJuYW1lcyI6WyJSdW50aW1lRXJyb3JIYW5kbGVyIiwiaGFkUnVudGltZUVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/runtime-error-handler.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js":
|
||
/*!****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js ***!
|
||
\****************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getFrameSource: function() {\n return getFrameSource;\n },\n getOriginalStackFrames: function() {\n return getOriginalStackFrames;\n }\n});\nfunction getOriginalStackFrame(source, type, isAppDir, errorMessage) {\n var _source_file, _source_file1;\n async function _getOriginalStackFrame() {\n var /* collapsed */ _source_file, _body_originalStackFrame_file, _body_originalStackFrame, _body_originalStackFrame_file1, _body_originalStackFrame1;\n const params = new URLSearchParams();\n params.append(\"isServer\", String(type === \"server\"));\n params.append(\"isEdgeServer\", String(type === \"edge-server\"));\n params.append(\"isAppDirectory\", String(isAppDir));\n params.append(\"errorMessage\", errorMessage);\n for(const key in source){\n var _source_key;\n params.append(key, ((_source_key = source[key]) != null ? _source_key : \"\").toString());\n }\n const controller = new AbortController();\n const tm = setTimeout(()=>controller.abort(), 3000);\n const res = await self.fetch(( false || \"\") + \"/__nextjs_original-stack-frame?\" + params.toString(), {\n signal: controller.signal\n }).finally(()=>{\n clearTimeout(tm);\n });\n if (!res.ok || res.status === 204) {\n return Promise.reject(new Error(await res.text()));\n }\n const body = await res.json();\n var _ref;\n return {\n error: false,\n reason: null,\n external: false,\n expanded: !Boolean((_ref = ((_source_file = source.file) == null ? void 0 : _source_file.includes(\"node_modules\")) || ((_body_originalStackFrame = body.originalStackFrame) == null ? void 0 : (_body_originalStackFrame_file = _body_originalStackFrame.file) == null ? void 0 : _body_originalStackFrame_file.includes(\"node_modules\")) || ((_body_originalStackFrame1 = body.originalStackFrame) == null ? void 0 : (_body_originalStackFrame_file1 = _body_originalStackFrame1.file) == null ? void 0 : _body_originalStackFrame_file1.startsWith(\"[turbopack]/\"))) != null ? _ref : true),\n sourceStackFrame: source,\n originalStackFrame: body.originalStackFrame,\n originalCodeFrame: body.originalCodeFrame || null,\n sourcePackage: body.sourcePackage\n };\n }\n if (source.file === \"<anonymous>\" || ((_source_file = source.file) == null ? void 0 : _source_file.match(/^node:/)) || ((_source_file1 = source.file) == null ? void 0 : _source_file1.match(/https?:\\/\\//))) {\n return Promise.resolve({\n error: false,\n reason: null,\n external: true,\n expanded: false,\n sourceStackFrame: source,\n originalStackFrame: null,\n originalCodeFrame: null,\n sourcePackage: null\n });\n }\n return _getOriginalStackFrame().catch((err)=>{\n var _err_message, _ref;\n return {\n error: true,\n reason: (_ref = (_err_message = err == null ? void 0 : err.message) != null ? _err_message : err == null ? void 0 : err.toString()) != null ? _ref : \"Unknown Error\",\n external: false,\n expanded: false,\n sourceStackFrame: source,\n originalStackFrame: null,\n originalCodeFrame: null,\n sourcePackage: null\n };\n });\n}\nfunction getOriginalStackFrames(frames, type, isAppDir, errorMessage) {\n return Promise.all(frames.map((frame)=>getOriginalStackFrame(frame, type, isAppDir, errorMessage)));\n}\nconst webpackRegExes = [\n /^webpack-internal:\\/\\/\\/(\\.)?(\\((\\w+)\\))?/,\n /^(webpack:\\/\\/\\/(\\.)?|webpack:\\/\\/(_N_E\\/)?)(\\((\\w+)\\))?/\n];\nfunction isWebpackBundled(file) {\n return webpackRegExes.some((regEx)=>regEx.test(file));\n}\n/**\n * Format the webpack internal id to original file path\n * webpack-internal:///./src/hello.tsx => ./src/hello.tsx\n * webpack://_N_E/./src/hello.tsx => ./src/hello.tsx\n * webpack://./src/hello.tsx => ./src/hello.tsx\n * webpack:///./src/hello.tsx => ./src/hello.tsx\n */ function formatFrameSourceFile(file) {\n for (const regex of webpackRegExes)file = file.replace(regex, \"\");\n return file;\n}\nfunction getFrameSource(frame) {\n if (!frame.file) return \"\";\n let str = \"\";\n try {\n var _globalThis_location;\n const u = new URL(frame.file);\n // Strip the origin for same-origin scripts.\n if (((_globalThis_location = globalThis.location) == null ? void 0 : _globalThis_location.origin) !== u.origin) {\n // URLs can be valid without an `origin`, so long as they have a\n // `protocol`. However, `origin` is preferred.\n if (u.origin === \"null\") {\n str += u.protocol;\n } else {\n str += u.origin;\n }\n }\n // Strip query string information as it's typically too verbose to be\n // meaningful.\n str += u.pathname;\n str += \" \";\n str = formatFrameSourceFile(str);\n } catch (e) {\n str += formatFrameSourceFile(frame.file || \"(unknown)\") + \" \";\n }\n if (!isWebpackBundled(frame.file) && frame.lineNumber != null) {\n if (frame.column != null) {\n str += \"(\" + frame.lineNumber + \":\" + frame.column + \") \";\n } else {\n str += \"(\" + frame.lineNumber + \") \";\n }\n }\n return str.slice(0, -1);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=stack-frame.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvc3RhY2stZnJhbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNkhnQkEsZ0JBQWM7ZUFBZEE7O0lBbENBQyx3QkFBc0I7ZUFBdEJBOzs7QUFoRmhCLFNBQVNDLHNCQUNQQyxNQUFrQixFQUNsQkMsSUFBcUMsRUFDckNDLFFBQWlCLEVBQ2pCQyxZQUFvQjtRQWlEbEJILGNBQ0FBO0lBaERGLGVBQWVJO1lBZ0NULGFBQWEsR0FDWkosY0FDQ0ssK0JBQUFBLDBCQUNBQSxnQ0FBQUE7UUFsQ04sTUFBTUMsU0FBUyxJQUFJQztRQUNuQkQsT0FBT0UsTUFBTSxDQUFDLFlBQVlDLE9BQU9SLFNBQVM7UUFDMUNLLE9BQU9FLE1BQU0sQ0FBQyxnQkFBZ0JDLE9BQU9SLFNBQVM7UUFDOUNLLE9BQU9FLE1BQU0sQ0FBQyxrQkFBa0JDLE9BQU9QO1FBQ3ZDSSxPQUFPRSxNQUFNLENBQUMsZ0JBQWdCTDtRQUM5QixJQUFLLE1BQU1PLE9BQU9WLE9BQVE7Z0JBQ0pXO1lBQXBCTCxPQUFPRSxNQUFNLENBQUNFLEtBQUssQ0FBQyxDQUFBQyxjQUFBWCxNQUFlLENBQUNVLElBQUksWUFBcEJDLGNBQXdCLElBQUlDLFFBQVE7UUFDMUQ7UUFFQSxNQUFNQyxhQUFhLElBQUlDO1FBQ3ZCLE1BQU1DLEtBQUtDLFdBQVcsSUFBTUgsV0FBV0ksS0FBSyxJQUFJO1FBQ2hELE1BQU1DLE1BQU0sTUFBTUMsS0FDZkMsS0FBSyxDQUNKLENBQ0VDLE1BQWtDLElBQUksTUFDdkMsb0NBQWlDZixPQUFPTSxRQUFRLElBQ2pEO1lBQUVZLFFBQVFYLFdBQVdXLE1BQU07UUFBQyxHQUU3QkMsT0FBTyxDQUFDO1lBQ1BDLGFBQWFYO1FBQ2Y7UUFDRixJQUFJLENBQUNHLElBQUlTLEVBQUUsSUFBSVQsSUFBSVUsTUFBTSxLQUFLLEtBQUs7WUFDakMsT0FBT0Ms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TUFBTSxLQUFLLFFBQVE7Z0JBQ3ZCTCxPQUFPRSxFQUFFSSxRQUFRO1lBQ25CLE9BQU87Z0JBQ0xOLE9BQU9FLEVBQUVHLE1BQU07WUFDakI7UUFDRjtRQUVBLHFFQUFxRTtRQUNyRSxjQUFjO1FBQ2RMLE9BQU9FLEVBQUVLLFFBQVE7UUFDakJQLE9BQU87UUFDUEEsTUFBTUgsc0JBQXNCRztJQUM5QixFQUFFLE9BQUFRLEdBQU07UUFDTlIsT0FBT0gsc0JBQXNCTixNQUFNZixJQUFJLElBQUksZUFBZTtJQUM1RDtJQUVBLElBQUksQ0FBQ2lCLGlCQUFpQkYsTUFBTWYsSUFBSSxLQUFLZSxNQUFNa0IsVUFBVSxJQUFJLE1BQU07UUFDN0QsSUFBSWxCLE1BQU1tQixNQUFNLElBQUksTUFBTTtZQUN4QlYsT0FBTyxNQUFJVCxNQUFNa0IsVUFBVSxHQUFDLE1BQUdsQixNQUFNbUIsTUFBTSxHQUFDO1FBQzlDLE9BQU87WUFDTFYsT0FBTyxNQUFJVCxNQUFNa0IsVUFBVSxHQUFDO1FBQzlCO0lBQ0Y7SUFDQSxPQUFPVCxJQUFJVyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3ZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9zdGFjay1mcmFtZS50cz82NjdlIl0sIm5hbWVzIjpbImdldEZyYW1lU291cmNlIiwiZ2V0T3JpZ2luYWxTdGFja0ZyYW1lcyIsImdldE9yaWdpbmFsU3RhY2tGcmFtZSIsInNvdXJjZSIsInR5cGUiLCJpc0FwcERpciIsImVycm9yTWVzc2FnZSIsIl9nZXRPcmlnaW5hbFN0YWNrRnJhbWUiLCJib2R5IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiU3RyaW5nIiwia2V5IiwiX3NvdXJjZV9rZXkiLCJ0b1N0cmluZyIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJ0bSIsInNldFRpbWVvdXQiLCJhYm9ydCIsInJlcyIsInNlbGYiLCJmZXRjaCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwic2lnbmFsIiwiZmluYWxseSIsImNsZWFyVGltZW91dCIsIm9rIiwic3RhdHVzIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwidGV4dCIsImpzb24iLCJlcnJvciIsInJlYXNvbiIsImV4dGVybmFsIiwiZXhwYW5kZWQiLCJCb29sZWFuIiwiZmlsZSIsImluY2x1ZGVzIiwib3JpZ2luYWxTdGFja0ZyYW1lIiwic3RhcnRzV2l0aCIsInNvdXJjZVN0YWNrRnJhbWUiLCJvcmlnaW5hbENvZGVGcmFtZSIsInNvdXJjZVBhY2thZ2UiLCJtYXRjaCIsInJlc29sdmUiLCJjYXRjaCIsImVyciIsIm1lc3NhZ2UiLCJmcmFtZXMiLCJhbGwiLCJtYXAiLCJmcmFtZSIsIndlYnBhY2tSZWdFeGVzIiwiaXNXZWJwYWNrQnVuZGxlZCIsInNvbWUiLCJyZWdFeCIsInRlc3QiLCJmb3JtYXRGcmFtZVNvdXJjZUZpbGUiLCJyZWdleCIsInJlcGxhY2UiLCJzdHIiLCJnbG9iYWxUaGlzIiwidSIsIlVSTCIsImxvY2F0aW9uIiwib3JpZ2luIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsImUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js":
|
||
/*!***********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js ***!
|
||
\***********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useOpenInEditor\", ({\n enumerable: true,\n get: function() {\n return useOpenInEditor;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nfunction useOpenInEditor(param) {\n let { file, lineNumber, column } = param === void 0 ? {} : param;\n const openInEditor = (0, _react.useCallback)(()=>{\n if (file == null || lineNumber == null || column == null) return;\n const params = new URLSearchParams();\n params.append(\"file\", file);\n params.append(\"lineNumber\", String(lineNumber));\n params.append(\"column\", String(column));\n self.fetch(( false || \"\") + \"/__nextjs_launch-editor?\" + params.toString()).then(()=>{}, ()=>{\n console.error(\"There was an issue opening this code in your editor.\");\n });\n }, [\n file,\n lineNumber,\n column\n ]);\n return openInEditor;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-open-in-editor.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7bURBRWdCQTs7O2VBQUFBOzs7bUNBRlk7QUFFckIsU0FBU0EsZ0JBQWdCQyxLQUFBO0lBQUEsTUFDOUJDLElBQUksRUFDSkMsVUFBVSxFQUNWQyxNQUFNLEVBS1AsR0FSK0JILFVBQUEsU0FRNUIsQ0FBQyxJQVIyQkE7SUFTOUIsTUFBTUksZUFBZUMsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBVyxFQUFDO1FBQy9CLElBQUlKLFFBQVEsUUFBUUMsY0FBYyxRQUFRQyxVQUFVLE1BQU07UUFFMUQsTUFBTUcsU0FBUyxJQUFJQztRQUNuQkQsT0FBT0UsTUFBTSxDQUFDLFFBQVFQO1FBQ3RCSyxPQUFPRSxNQUFNLENBQUMsY0FBY0MsT0FBT1A7UUFDbkNJLE9BQU9FLE1BQU0sQ0FBQyxVQUFVQyxPQUFPTjtRQUUvQk8sS0FDR0MsS0FBSyxDQUNKLENBQ0VDLE1BQWtDLElBQUksTUFDdkMsNkJBQTBCTixPQUFPUyxRQUFRLElBRTNDQyxJQUFJLENBQ0gsS0FBTyxHQUNQO1lBQ0VDLFFBQVFDLEtBQUssQ0FBQztRQUNoQjtJQUVOLEdBQUc7UUFBQ2pCO1FBQU1DO1FBQVlDO0tBQU87SUFFN0IsT0FBT0M7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yLnRzPzA4ODYiXSwibmFtZXMiOlsidXNlT3BlbkluRWRpdG9yIiwicGFyYW0iLCJmaWxlIiwibGluZU51bWJlciIsImNvbHVtbiIsIm9wZW5JbkVkaXRvciIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiU3RyaW5nIiwic2VsZiIsImZldGNoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJ0b1N0cmluZyIsInRoZW4iLCJjb25zb2xlIiwiZXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js":
|
||
/*!***********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js ***!
|
||
\***********************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useOnClickOutside\", ({\n enumerable: true,\n get: function() {\n return useOnClickOutside;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nfunction useOnClickOutside(el, handler) {\n _s();\n _react.useEffect(()=>{\n if (el == null || handler == null) {\n return;\n }\n const listener = (e)=>{\n // Do nothing if clicking ref's element or descendent elements\n if (!el || el.contains(e.target)) {\n return;\n }\n handler(e);\n };\n const root = el.getRootNode();\n root.addEventListener(\"mousedown\", listener);\n root.addEventListener(\"touchstart\", listener);\n return function() {\n root.removeEventListener(\"mousedown\", listener);\n root.removeEventListener(\"touchstart\", listener);\n };\n }, [\n handler,\n el\n ]);\n}\n_s(useOnClickOutside, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-on-click-outside.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hvb2tzL3VzZS1vbi1jbGljay1vdXRzaWRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztxREFFZ0JBOzs7ZUFBQUE7Ozs7NkVBRk87QUFFaEIsU0FBU0Esa0JBQ2RDLEVBQWUsRUFDZkMsT0FBMkQ7O0lBRTNEQyxPQUFNQyxTQUFTLENBQUM7UUFDZCxJQUFJSCxNQUFNLFFBQVFDLFdBQVcsTUFBTTtZQUNqQztRQUNGO1FBRUEsTUFBTUcsV0FBVyxDQUFDQztZQUNoQiw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDTCxNQUFNQSxHQUFHTSxRQUFRLENBQUNELEVBQUVFLE1BQU0sR0FBYztnQkFDM0M7WUFDRjtZQUVBTixRQUFRSTtRQUNWO1FBRUEsTUFBTUcsT0FBT1IsR0FBR1MsV0FBVztRQUMzQkQsS0FBS0UsZ0JBQWdCLENBQUMsYUFBYU47UUFDbkNJLEtBQUtFLGdCQUFnQixDQUFDLGNBQWNOO1FBQ3BDLE9BQU87WUFDTEksS0FBS0csbUJBQW1CLENBQUMsYUFBYVA7WUFDdENJLEtBQUtHLG1CQUFtQixDQUFDLGNBQWNQO1FBQ3pDO0lBQ0YsR0FBRztRQUFDSDtRQUFTRDtLQUFHO0FBQ2xCO0dBMUJnQkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9ob29rcy91c2Utb24tY2xpY2stb3V0c2lkZS50cz8wYWRiIl0sIm5hbWVzIjpbInVzZU9uQ2xpY2tPdXRzaWRlIiwiZWwiLCJoYW5kbGVyIiwiUmVhY3QiLCJ1c2VFZmZlY3QiLCJsaXN0ZW5lciIsImUiLCJjb250YWlucyIsInRhcmdldCIsInJvb3QiLCJnZXRSb290Tm9kZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js":
|
||
/*!************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js ***!
|
||
\************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CloseIcon\", ({\n enumerable: true,\n get: function() {\n return CloseIcon;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst CloseIcon = ()=>{\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 6L6 18\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6 6L18 18\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n};\n_c = CloseIcon;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CloseIcon.js.map\nvar _c;\n$RefreshReg$(_c, \"CloseIcon\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2ljb25zL0Nsb3NlSWNvbi5qcyIsIm1hcHBpbmdzIjoiOzs7OzZDQTZCU0E7OztlQUFBQTs7Ozs7NkVBN0JjO0FBRXZCLE1BQU1BLFlBQVk7SUFDaEIsT0FDRSxXQURGLEdBQ0UsSUFBQUMsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtRQUNDQyxPQUFNO1FBQ05DLFFBQU87UUFDUEMsU0FBUTtRQUNSQyxNQUFLO1FBQ0xDLE9BQU07OzBCQUVOLElBQUFQLFlBQUFRLEdBQUEsRUFBQ0MsUUFBQUE7Z0JBQ0NDLEdBQUU7Z0JBQ0ZDLFFBQU87Z0JBQ1BDLGFBQVk7Z0JBQ1pDLGVBQWM7Z0JBQ2RDLGdCQUFlOzswQkFFakIsSUFBQWQsWUFBQVEsR0FBQSxFQUFDQyxRQUFBQTtnQkFDQ0MsR0FBRTtnQkFDRkMsUUFBTztnQkFDUEMsYUFBWTtnQkFDWkMsZUFBYztnQkFDZEMsZ0JBQWU7Ozs7QUFJdkI7S0F6Qk1mIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaWNvbnMvQ2xvc2VJY29uLnRzeD9lMzg0Il0sIm5hbWVzIjpbIkNsb3NlSWNvbiIsIl9qc3hydW50aW1lIiwianN4cyIsInN2ZyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJ4bWxucyIsImpzeCIsInBhdGgiLCJkIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CollapseIcon.js":
|
||
/*!***************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CollapseIcon.js ***!
|
||
\***************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CollapseIcon\", ({\n enumerable: true,\n get: function() {\n return CollapseIcon;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nfunction CollapseIcon(param) {\n let { collapsed } = param === void 0 ? {} : param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"svg\", {\n \"data-nextjs-call-stack-chevron-icon\": true,\n \"data-collapsed\": collapsed,\n fill: \"none\",\n height: \"20\",\n width: \"20\",\n shapeRendering: \"geometricPrecision\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n viewBox: \"0 0 24 24\",\n ...typeof collapsed === \"boolean\" ? {\n style: {\n transform: collapsed ? undefined : \"rotate(90deg)\"\n }\n } : {},\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M9 18l6-6-6-6\"\n })\n });\n}\n_c = CollapseIcon;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CollapseIcon.js.map\nvar _c;\n$RefreshReg$(_c, \"CollapseIcon\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2ljb25zL0NvbGxhcHNlSWNvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O2dEQUFnQkE7OztlQUFBQTs7OztBQUFULFNBQVNBLGFBQWFDLEtBQUE7SUFBQSxNQUFFQyxTQUFTLEVBQTJCLEdBQXRDRCxVQUFBLFNBQXlDLENBQUMsSUFBMUNBO0lBQzNCLE9BQ0UsV0FERixHQUNFLElBQUFFLFlBQUFDLEdBQUEsRUFBQ0MsT0FBQUE7UUFDQ0MsdUNBQW1DO1FBQ25DQyxrQkFBZ0JMO1FBQ2hCTSxNQUFLO1FBQ0xDLFFBQU87UUFDUEMsT0FBTTtRQUNOQyxnQkFBZTtRQUNmQyxRQUFPO1FBQ1BDLGVBQWM7UUFDZEMsZ0JBQWU7UUFDZkMsYUFBWTtRQUNaQyxTQUFRO1FBR1AsR0FBSSxPQUFPZCxjQUFjLFlBQ3RCO1lBQUVlLE9BQU87Z0JBQUVDLFdBQVdoQixZQUFZaUIsWUFBWTtZQUFnQjtRQUFFLElBQ2hFLENBQUMsQ0FBQztrQkFFTixrQkFBQWhCLFlBQUFDLEdBQUEsRUFBQ2dCLFFBQUFBO1lBQUtDLEdBQUU7OztBQUdkO0tBdkJnQnJCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaWNvbnMvQ29sbGFwc2VJY29uLnRzeD82ZTk3Il0sIm5hbWVzIjpbIkNvbGxhcHNlSWNvbiIsInBhcmFtIiwiY29sbGFwc2VkIiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJzdmciLCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNoZXZyb24taWNvbiIsImRhdGEtY29sbGFwc2VkIiwiZmlsbCIsImhlaWdodCIsIndpZHRoIiwic2hhcGVSZW5kZXJpbmciLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsInZpZXdCb3giLCJzdHlsZSIsInRyYW5zZm9ybSIsInVuZGVmaW5lZCIsInBhdGgiLCJkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CollapseIcon.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/FrameworkIcon.js":
|
||
/*!****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/FrameworkIcon.js ***!
|
||
\****************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"FrameworkIcon\", ({\n enumerable: true,\n get: function() {\n return FrameworkIcon;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nfunction FrameworkIcon(param) {\n let { framework } = param;\n if (framework === \"react\") {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n \"data-nextjs-call-stack-framework-icon\": \"react\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 410 369\",\n fill: \"none\",\n shapeRendering: \"geometricPrecision\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"5\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M204.995 224.552C226.56 224.552 244.042 207.07 244.042 185.506C244.042 163.941 226.56 146.459 204.995 146.459C183.43 146.459 165.948 163.941 165.948 185.506C165.948 207.07 183.43 224.552 204.995 224.552Z\",\n fill: \"currentColor\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M409.99 184.505C409.99 153.707 381.437 126.667 335.996 108.925C343.342 60.6535 334.19 22.3878 307.492 6.98883C283.649 -6.77511 250.631 -0.0395641 214.512 25.9753C211.316 28.2692 208.143 30.7097 204.97 33.2477C201.822 30.7097 198.65 28.2692 195.477 25.9753C159.359 -0.0395641 126.34 -6.79951 102.497 6.98883C75.8237 22.3878 66.6721 60.6291 74.0422 108.852C28.5529 126.618 0 153.682 0 184.505C0 215.303 28.5528 242.342 73.9934 260.084C66.6477 308.356 75.7993 346.621 102.497 362.02C110.575 366.682 119.727 369 129.684 369C149.085 369 171.61 360.215 195.477 343.034C198.674 340.74 201.847 338.3 205.019 335.762C208.167 338.3 211.34 340.74 214.512 343.034C238.38 360.239 260.905 369 280.306 369C290.263 369 299.415 366.682 307.492 362.02C331.335 348.256 342 316.287 337.534 271.993C337.143 268.089 336.631 264.135 335.996 260.109C381.461 242.367 409.99 215.327 409.99 184.505ZM225.934 41.8136C246.238 27.1955 265.127 19.5814 280.306 19.5814C286.871 19.5814 292.728 20.9968 297.731 23.8765C315.204 33.9798 322.672 62.9475 317.327 102.433C299.756 97.0401 280.306 92.9158 259.392 90.2802C246.872 73.8074 233.597 58.9453 220.003 46.2551C221.98 44.7421 223.957 43.229 225.934 41.8136ZM112.259 23.8765C117.262 20.9968 123.119 19.5814 129.684 19.5814C144.863 19.5814 163.752 27.1711 184.056 41.8136C186.033 43.229 188.01 44.7176 189.986 46.2551C176.393 58.9453 163.142 73.783 150.622 90.2558C129.732 92.8914 110.258 97.0401 92.687 102.409C87.3424 62.9475 94.7857 33.9798 112.259 23.8765ZM19.5233 184.505C19.5233 164.322 40.9014 143.359 77.776 128.253C81.9003 146.141 88.0502 165.054 96.1768 184.456C88.0014 203.881 81.8515 222.819 77.7272 240.732C40.9014 225.626 19.5233 204.687 19.5233 184.505ZM184.056 327.196C154.966 348.134 128.805 354.675 112.259 345.133C94.7857 335.029 87.3181 306.062 92.6626 266.576C110.234 271.969 129.684 276.093 150.598 278.729C163.117 295.202 176.393 310.064 189.986 322.754C188.01 324.292 186.033 325.78 184.056 327.196ZM204.995 310.04C180.591 287.685 157.138 257.815 137.347 223.551C132.051 214.4 121.344 191.396 117 182.489C113.535 190.786 110.112 198.398 107.427 206.5C109.623 210.575 118.092 229.213 120.434 233.288C125.071 241.317 129.928 249.127 134.931 256.692C120.898 254.227 107.915 251.055 96.1035 247.321C102.815 217.011 116.213 182.064 137.347 145.458C142.545 136.453 153.838 116.346 159.5 108C150.568 109.147 143.395 108.767 135 110.5C132.56 114.453 122.777 131.645 120.434 135.721C115.749 143.823 111.454 151.925 107.427 159.978C102.546 146.581 98.8124 133.744 96.1524 121.64C125.755 112.293 162.727 106.411 204.995 106.411C215.562 106.411 237.63 106.197 247.49 106.905C242.048 99.7544 237.38 93.2819 231.694 86.888C227.082 86.7416 209.705 86.888 204.995 86.888C195.672 86.888 186.545 87.2053 177.589 87.7422C186.472 77.1752 195.672 67.5111 204.995 58.9697C229.375 81.3239 252.851 111.195 272.643 145.458C277.841 154.463 289.073 175.426 293.49 184.505C296.98 176.207 300.281 168.64 302.99 160.489C300.793 156.389 291.898 139.747 289.555 135.696C284.918 127.667 280.062 119.858 275.059 112.317C289.092 114.782 302.075 117.954 313.886 121.688C307.175 151.998 293.777 186.945 272.643 223.551C267.445 232.556 252.651 253.178 246.99 261.524C255.922 260.377 265.595 258.663 273.99 256.93C276.43 252.976 287.212 237.364 289.555 233.288C294.216 225.235 298.512 217.182 302.489 209.153C307.224 222.185 310.982 234.997 313.715 247.394C284.138 256.741 247.214 262.598 204.995 262.598C194.428 262.598 169.859 261.208 160 260.5C165.442 267.65 171.304 275.095 176.99 281.489C181.602 281.635 200.285 282.121 204.995 282.121C214.317 282.121 223.444 281.804 232.401 281.267C223.493 291.834 214.317 301.498 204.995 310.04ZM297.731 345.133C281.185 354.699 254.999 348.159 225.934 327.196C223.957 325.78 221.98 324.292 220.003 322.754C233.597 310.064 246.848 295.226 259.367 278.753C280.233 276.118 299.659 271.993 317.205 266.625C317.547 269.089 317.888 271.554 318.132 273.97C321.72 309.649 314.277 335.566 297.731 345.133ZM332.262 240.756C328.065 222.599 321.842 203.686 313.813 184.578C321.988 165.152 328.138 146.215 332.262 128.302C369.088 143.408 390.466 164.322 390.466 184.505C390.466 204.687 369.113 225.626 332.262 240.756Z\",\n fill: \"currentColor\"\n })\n ]\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n \"data-nextjs-call-stack-framework-icon\": \"next\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 180 180\",\n fill: \"none\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"mask\", {\n id: \"mask0_408_139\",\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"180\",\n height: \"180\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"90\",\n cy: \"90\",\n r: \"90\",\n fill: \"black\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"g\", {\n mask: \"url(#mask0_408_139)\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"90\",\n cy: \"90\",\n r: \"87\",\n fill: \"black\",\n stroke: \"white\",\n strokeWidth: \"6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M149.508 157.52L69.142 54H54V125.97H66.1136V69.3836L139.999 164.845C143.333 162.614 146.509 160.165 149.508 157.52Z\",\n fill: \"url(#paint0_linear_408_139)\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"rect\", {\n x: \"115\",\n y: \"54\",\n width: \"12\",\n height: \"72\",\n fill: \"url(#paint1_linear_408_139)\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"defs\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"linearGradient\", {\n id: \"paint0_linear_408_139\",\n x1: \"109\",\n y1: \"116.5\",\n x2: \"144.5\",\n y2: \"160.5\",\n gradientUnits: \"userSpaceOnUse\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n stopColor: \"white\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n offset: \"1\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"linearGradient\", {\n id: \"paint1_linear_408_139\",\n x1: \"121\",\n y1: \"54\",\n x2: \"120.799\",\n y2: \"106.875\",\n gradientUnits: \"userSpaceOnUse\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n stopColor: \"white\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n offset: \"1\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n })\n ]\n })\n ]\n })\n ]\n });\n}\n_c = FrameworkIcon;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=FrameworkIcon.js.map\nvar _c;\n$RefreshReg$(_c, \"FrameworkIcon\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2ljb25zL0ZyYW1ld29ya0ljb24uanMiLCJtYXBwaW5ncyI6Ijs7OztpREFFZ0JBOzs7ZUFBQUE7Ozs7QUFBVCxTQUFTQSxjQUFjQyxLQUk3QjtJQUo2QixNQUM1QkMsU0FBUyxFQUdWLEdBSjZCRDtJQUs1QixJQUFJQyxjQUFjLFNBQVM7UUFDekIsT0FDRSxXQURGLEdBQ0UsSUFBQUMsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtZQUNDQyx5Q0FBc0M7WUFDdENDLE9BQU07WUFDTkMsT0FBTTtZQUNOQyxRQUFPO1lBQ1BDLFNBQVE7WUFDUkMsTUFBSztZQUNMQyxnQkFBZTtZQUNmQyxRQUFPO1lBQ1BDLGVBQWM7WUFDZEMsZ0JBQWU7WUFDZkMsYUFBWTs7OEJBRVosSUFBQWIsWUFBQWMsR0FBQSxFQUFDQyxRQUFBQTtvQkFDQ0MsR0FBRTtvQkFDRlIsTUFBSzs7OEJBRVAsSUFBQVIsWUFBQWMsR0FBQSxFQUFDQyxRQUFBQTtvQkFDQ0MsR0FBRTtvQkFDRlIsTUFBSzs7OztJQUliO0lBRUEsT0FDRSxXQURGLEdBQ0UsSUFBQVIsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtRQUNDQyx5Q0FBc0M7UUFDdENDLE9BQU07UUFDTkMsT0FBTTtRQUNOQyxRQUFPO1FBQ1BDLFNBQVE7UUFDUkMsTUFBSzs7MEJBRUwsSUFBQVIsWUFBQWMsR0FBQSxFQUFDRyxRQUFBQTtnQkFDQ0MsSUFBRztnQkFDSEMsV0FBVTtnQkFDVkMsR0FBRTtnQkFDRkMsR0FBRTtnQkFDRmhCLE9BQU07Z0JBQ05DLFFBQU87MEJBRVAsa0JBQUFOLFlBQUFjLEdBQUEsRUFBQ1EsVUFBQUE7b0JBQU9DLElBQUc7b0JBQUtDLElBQUc7b0JBQUtDLEdBQUU7b0JBQUtqQixNQUFLOzs7MEJBRXRDLElBQUFSLFlBQUFDLElBQUEsRUFBQ3lCLEtBQUFBO2dCQUFFVCxNQUFLOztrQ0FDTixJQUFBakIsWUFBQWMsR0FBQSxFQUFDUSxVQUFBQTt3QkFDQ0MsSUFBRzt3QkFDSEMsSUFBRzt3QkFDSEMsR0FBRTt3QkFDRmpCLE1BQUs7d0JBQ0xFLFFBQU87d0JBQ1BHLGFBQVk7O2tDQUVkLElBQUFiLFlBQUFjLEdBQUEsRUFBQ0MsUUFBQUE7d0JBQ0NDLEdBQUU7d0JBQ0ZSLE1BQUs7O2tDQUVQLElBQUFSLFlBQUFjLEdBQUEsRUFBQ2EsUUFBQUE7d0JBQ0NQLEdBQUU7d0JBQ0ZDLEdBQUU7d0JBQ0ZoQixPQUFNO3dCQUNOQyxRQUFPO3dCQUNQRSxNQUFLOzs7OzBCQUdULElBQUFSLFlBQUFDLElBQUEsRUFBQzJCLFFBQUFBOztrQ0FDQyxJQUFBNUIsWUFBQUMsSUFBQSxFQUFDNEIsa0JBQUFBO3dCQUNDWCxJQUFHO3dCQUNIWSxJQUFHO3dCQUNIQyxJQUFHO3dCQUNIQyxJQUFHO3dCQUNIQyxJQUFHO3dCQUNIQyxlQUFjOzswQ0FFZCxJQUFBbEMsWUFBQWMsR0FBQSxFQUFDcUIsUUFBQUE7Z0NBQUtDLFdBQVU7OzBDQUNoQixJQUFBcEMsWUFBQWMsR0FBQSxFQUFDcUIsUUFBQUE7Z0NBQUtFLFFBQU87Z0NBQUlELFdBQVU7Z0NBQVFFLGFBQVk7Ozs7a0NBRWpELElBQUF0QyxZQUFBQyxJQUFBLEVBQUM0QixrQkFBQUE7d0JBQ0NYLElBQUc7d0JBQ0hZLElBQUc7d0JBQ0hDLElBQUc7d0JBQ0hDLElBQUc7d0JBQ0hDLElBQUc7d0JBQ0hDLGVBQWM7OzBDQUVkLElBQUFsQyxZQUFBYyxHQUFBLEVBQUNxQixRQUFBQTtnQ0FBS0MsV0FBVTs7MENBQ2hCLElBQUFwQyxZQUFBYyxHQUFBLEVBQUNxQixRQUFBQTtnQ0FBS0UsUUFBTztnQ0FBSUQsV0FBVTtnQ0FBUUUsYUFBWTs7Ozs7Ozs7QUFLekQ7S0FsR2dCekMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9pY29ucy9GcmFtZXdvcmtJY29uLnRzeD85OTgyIl0sIm5hbWVzIjpbIkZyYW1ld29ya0ljb24iLCJwYXJhbSIsImZyYW1ld29yayIsIl9qc3hydW50aW1lIiwianN4cyIsInN2ZyIsImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWV3b3JrLWljb24iLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJzaGFwZVJlbmRlcmluZyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwianN4IiwicGF0aCIsImQiLCJtYXNrIiwiaWQiLCJtYXNrVW5pdHMiLCJ4IiwieSIsImNpcmNsZSIsImN4IiwiY3kiLCJyIiwiZyIsInJlY3QiLCJkZWZzIiwibGluZWFyR3JhZGllbnQiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImdyYWRpZW50VW5pdHMiLCJzdG9wIiwic3RvcENvbG9yIiwib2Zmc2V0Iiwic3RvcE9wYWNpdHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/FrameworkIcon.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js":
|
||
/*!********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js ***!
|
||
\********************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Base\", ({\n enumerable: true,\n get: function() {\n return Base;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n :host {\\n --size-gap-half: 4px;\\n --size-gap: 8px;\\n --size-gap-double: 16px;\\n --size-gap-triple: 24px;\\n --size-gap-quad: 32px;\\n\\n --size-font-small: 14px;\\n --size-font: 16px;\\n --size-font-big: 20px;\\n --size-font-bigger: 24px;\\n\\n --color-background: white;\\n --color-font: #757575;\\n --color-backdrop: rgba(17, 17, 17, 0.2);\\n\\n --color-title-color: #1f1f1f;\\n --color-stack-h6: #222;\\n --color-stack-headline: #666;\\n --color-stack-subline: #999;\\n --color-stack-notes: #777;\\n\\n --color-accents-1: #808080;\\n --color-accents-2: #222222;\\n --color-accents-3: #404040;\\n\\n --color-text-color-red-1: #ff5555;\\n --color-text-background-red-1: #fff9f9;\\n\\n --font-stack-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono',\\n Menlo, Courier, monospace;\\n --font-stack-sans: -apple-system, 'Source Sans Pro', sans-serif;\\n\\n --color-ansi-selection: rgba(95, 126, 151, 0.48);\\n --color-ansi-bg: #111111;\\n --color-ansi-fg: #cccccc;\\n\\n --color-ansi-white: #777777;\\n --color-ansi-black: #141414;\\n --color-ansi-blue: #00aaff;\\n --color-ansi-cyan: #88ddff;\\n --color-ansi-green: #98ec65;\\n --color-ansi-magenta: #aa88ff;\\n --color-ansi-red: #ff5555;\\n --color-ansi-yellow: #ffcc33;\\n --color-ansi-bright-white: #ffffff;\\n --color-ansi-bright-black: #777777;\\n --color-ansi-bright-blue: #33bbff;\\n --color-ansi-bright-cyan: #bbecff;\\n --color-ansi-bright-green: #b6f292;\\n --color-ansi-bright-magenta: #cebbff;\\n --color-ansi-bright-red: #ff8888;\\n --color-ansi-bright-yellow: #ffd966;\\n }\\n\\n @media (prefers-color-scheme: dark) {\\n :host {\\n --color-background: rgb(28, 28, 30);\\n --color-font: white;\\n --color-backdrop: rgb(44, 44, 46);\\n\\n --color-title-color: #fafafa;\\n --color-stack-h6: rgb(200, 200, 204);\\n --color-stack-headline: rgb(99, 99, 102);\\n --color-stack-notes: #a9a9a9;\\n --color-stack-subline: rgb(121, 121, 121);\\n\\n --color-accents-3: rgb(118, 118, 118);\\n\\n --color-text-background-red-1: #2a1e1e;\\n }\\n }\\n\\n .mono {\\n font-family: var(--font-stack-monospace);\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-bottom: var(--size-gap);\\n font-weight: 500;\\n line-height: 1.5;\\n }\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction Base() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject())\n });\n}\n_c = Base;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Base.js.map\nvar _c;\n$RefreshReg$(_c, \"Base\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9CYXNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7d0NBR2dCQTs7O2VBQUFBOzs7Ozs7NkVBSE87MENBQ0s7Ozs7Ozs7Ozs7QUFFckIsU0FBU0E7SUFDZCxPQUNFLFdBREYsR0FDRSxJQUFBQyxZQUFBQyxHQUFBLEVBQUNDLFNBQUFBO3NCQUNFQyxjQUFBQSxJQUFHLEVBQUFDOztBQTJGVjtLQTlGZ0JMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvc3R5bGVzL0Jhc2UudHN4PzFmYjAiXSwibmFtZXMiOlsiQmFzZSIsIl9qc3hydW50aW1lIiwianN4Iiwic3R5bGUiLCJjc3MiLCJfdGVtcGxhdGVPYmplY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js":
|
||
/*!*******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js ***!
|
||
\*******************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ComponentStyles\", ({\n enumerable: true,\n get: function() {\n return ComponentStyles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _styles = __webpack_require__(/*! ../components/CodeFrame/styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js\");\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _styles1 = __webpack_require__(/*! ../components/LeftRightDialogHeader/styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\");\nconst _styles2 = __webpack_require__(/*! ../components/Overlay/styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js\");\nconst _styles3 = __webpack_require__(/*! ../components/Terminal/styles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js\");\nconst _Toast = __webpack_require__(/*! ../components/Toast */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _BuildError = __webpack_require__(/*! ../container/BuildError */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\");\nconst _Errors = __webpack_require__(/*! ../container/Errors */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\");\nconst _RuntimeError = __webpack_require__(/*! ../container/RuntimeError */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction ComponentStyles() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject(), _styles2.styles, _Toast.styles, _Dialog.styles, _styles1.styles, _styles.styles, _styles3.styles, _BuildError.styles, _Errors.styles, _RuntimeError.styles, _VersionStalenessInfo.styles)\n });\n}\n_c = ComponentStyles;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ComponentStyles.js.map\nvar _c;\n$RefreshReg$(_c, \"ComponentStyles\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9Db21wb25lbnRTdHlsZXMuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFZZ0JBOzs7ZUFBQUE7Ozs7O29DQVpvQjtvQ0FDSDtxQ0FDZTtxQ0FDZDtxQ0FDQzttQ0FDSDtrREFDVzt3Q0FDQTtvQ0FDSTswQ0FDTzswQ0FDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJCLFNBQVNBO0lBQ2QsT0FDRSxXQURGLEdBQ0UsSUFBQUMsWUFBQUMsR0FBQSxFQUFDQyxTQUFBQTtzQkFDRUMsY0FBQUEsSUFBRyxFQUFBQyxtQkFDQUMsU0FBQUEsTUFBTyxFQUNQQyxPQUFBQSxNQUFLLEVBQ0xDLFFBQUFBLE1BQU0sRUFDTkMsU0FBQUEsTUFBcUIsRUFDckJDLFFBQUFBLE1BQVMsRUFDVEMsU0FBQUEsTUFBUSxFQUNSQyxZQUFBQSxNQUFnQixFQUNoQkMsUUFBQUEsTUFBb0IsRUFDcEJDLGNBQUFBLE1BQTJCLEVBQzNCQyxzQkFBQUEsTUFBZ0I7O0FBSTFCO0tBakJnQmYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9zdHlsZXMvQ29tcG9uZW50U3R5bGVzLnRzeD8wOTZjIl0sIm5hbWVzIjpbIkNvbXBvbmVudFN0eWxlcyIsIl9qc3hydW50aW1lIiwianN4Iiwic3R5bGUiLCJjc3MiLCJfdGVtcGxhdGVPYmplY3QiLCJvdmVybGF5IiwidG9hc3QiLCJkaWFsb2ciLCJsZWZ0UmlnaHREaWFsb2dIZWFkZXIiLCJjb2RlRnJhbWUiLCJ0ZXJtaW5hbCIsImJ1aWxkRXJyb3JTdHlsZXMiLCJjb250YWluZXJFcnJvclN0eWxlcyIsImNvbnRhaW5lclJ1bnRpbWVFcnJvclN0eWxlcyIsInZlcnNpb25TdGFsZW5lc3MiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js":
|
||
/*!************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js ***!
|
||
\************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CssReset\", ({\n enumerable: true,\n get: function() {\n return CssReset;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n :host {\\n all: initial;\\n\\n /* the direction property is not reset by 'all' */\\n direction: ltr;\\n }\\n\\n /*!\\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n * Copyright 2011-2019 The Bootstrap Authors\\n * Copyright 2011-2019 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n */\\n *,\\n *::before,\\n *::after {\\n box-sizing: border-box;\\n }\\n\\n :host {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n }\\n\\n article,\\n aside,\\n figcaption,\\n figure,\\n footer,\\n header,\\n hgroup,\\n main,\\n nav,\\n section {\\n display: block;\\n }\\n\\n :host {\\n margin: 0;\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n 'Noto Color Emoji';\\n font-size: 16px;\\n font-weight: 400;\\n line-height: 1.5;\\n color: var(--color-font);\\n text-align: left;\\n background-color: #fff;\\n }\\n\\n [tabindex='-1']:focus:not(:focus-visible) {\\n outline: 0 !important;\\n }\\n\\n hr {\\n box-sizing: content-box;\\n height: 0;\\n overflow: visible;\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-top: 0;\\n margin-bottom: 8px;\\n }\\n\\n p {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n abbr[title],\\n abbr[data-original-title] {\\n text-decoration: underline;\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n cursor: help;\\n border-bottom: 0;\\n -webkit-text-decoration-skip-ink: none;\\n text-decoration-skip-ink: none;\\n }\\n\\n address {\\n margin-bottom: 16px;\\n font-style: normal;\\n line-height: inherit;\\n }\\n\\n ol,\\n ul,\\n dl {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n ol ol,\\n ul ul,\\n ol ul,\\n ul ol {\\n margin-bottom: 0;\\n }\\n\\n dt {\\n font-weight: 700;\\n }\\n\\n dd {\\n margin-bottom: 8px;\\n margin-left: 0;\\n }\\n\\n blockquote {\\n margin: 0 0 16px;\\n }\\n\\n b,\\n strong {\\n font-weight: bolder;\\n }\\n\\n small {\\n font-size: 80%;\\n }\\n\\n sub,\\n sup {\\n position: relative;\\n font-size: 75%;\\n line-height: 0;\\n vertical-align: baseline;\\n }\\n\\n sub {\\n bottom: -0.25em;\\n }\\n\\n sup {\\n top: -0.5em;\\n }\\n\\n a {\\n color: #007bff;\\n text-decoration: none;\\n background-color: transparent;\\n }\\n\\n a:hover {\\n color: #0056b3;\\n text-decoration: underline;\\n }\\n\\n a:not([href]) {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n a:not([href]):hover {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n pre,\\n code,\\n kbd,\\n samp {\\n font-family: SFMono-Regular, Menlo, Monaco, Consolas,\\n 'Liberation Mono', 'Courier New', monospace;\\n font-size: 1em;\\n }\\n\\n pre {\\n margin-top: 0;\\n margin-bottom: 16px;\\n overflow: auto;\\n }\\n\\n figure {\\n margin: 0 0 16px;\\n }\\n\\n img {\\n vertical-align: middle;\\n border-style: none;\\n }\\n\\n svg {\\n overflow: hidden;\\n vertical-align: middle;\\n }\\n\\n table {\\n border-collapse: collapse;\\n }\\n\\n caption {\\n padding-top: 12px;\\n padding-bottom: 12px;\\n color: #6c757d;\\n text-align: left;\\n caption-side: bottom;\\n }\\n\\n th {\\n text-align: inherit;\\n }\\n\\n label {\\n display: inline-block;\\n margin-bottom: 8px;\\n }\\n\\n button {\\n border-radius: 0;\\n }\\n\\n button:focus {\\n outline: 1px dotted;\\n outline: 5px auto -webkit-focus-ring-color;\\n }\\n\\n input,\\n button,\\n select,\\n optgroup,\\n textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n }\\n\\n button,\\n input {\\n overflow: visible;\\n }\\n\\n button,\\n select {\\n text-transform: none;\\n }\\n\\n select {\\n word-wrap: normal;\\n }\\n\\n button,\\n [type='button'],\\n [type='reset'],\\n [type='submit'] {\\n -webkit-appearance: button;\\n }\\n\\n button:not(:disabled),\\n [type='button']:not(:disabled),\\n [type='reset']:not(:disabled),\\n [type='submit']:not(:disabled) {\\n cursor: pointer;\\n }\\n\\n button::-moz-focus-inner,\\n [type='button']::-moz-focus-inner,\\n [type='reset']::-moz-focus-inner,\\n [type='submit']::-moz-focus-inner {\\n padding: 0;\\n border-style: none;\\n }\\n\\n input[type='radio'],\\n input[type='checkbox'] {\\n box-sizing: border-box;\\n padding: 0;\\n }\\n\\n input[type='date'],\\n input[type='time'],\\n input[type='datetime-local'],\\n input[type='month'] {\\n -webkit-appearance: listbox;\\n }\\n\\n textarea {\\n overflow: auto;\\n resize: vertical;\\n }\\n\\n fieldset {\\n min-width: 0;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n }\\n\\n legend {\\n display: block;\\n width: 100%;\\n max-width: 100%;\\n padding: 0;\\n margin-bottom: 8px;\\n font-size: 24px;\\n line-height: inherit;\\n color: inherit;\\n white-space: normal;\\n }\\n\\n progress {\\n vertical-align: baseline;\\n }\\n\\n [type='number']::-webkit-inner-spin-button,\\n [type='number']::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n [type='search'] {\\n outline-offset: -2px;\\n -webkit-appearance: none;\\n }\\n\\n [type='search']::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n ::-webkit-file-upload-button {\\n font: inherit;\\n -webkit-appearance: button;\\n }\\n\\n output {\\n display: inline-block;\\n }\\n\\n summary {\\n display: list-item;\\n cursor: pointer;\\n }\\n\\n template {\\n display: none;\\n }\\n\\n [hidden] {\\n display: none !important;\\n }\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction CssReset() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject())\n });\n}\n_c = CssReset;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CssReset.js.map\nvar _c;\n$RefreshReg$(_c, \"CssReset\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9Dc3NSZXNldC5qcyIsIm1hcHBpbmdzIjoiOzs7OzRDQUdnQkE7OztlQUFBQTs7Ozs7OzZFQUhPOzBDQUNLOzs7Ozs7Ozs7O0FBRXJCLFNBQVNBO0lBQ2QsT0FDRSxXQURGLEdBQ0UsSUFBQUMsWUFBQUMsR0FBQSxFQUFDQyxTQUFBQTtzQkFDRUMsY0FBQUEsSUFBRyxFQUFBQzs7QUFtV1Y7S0F0V2dCTCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9Dc3NSZXNldC50c3g/M2M1ZiJdLCJuYW1lcyI6WyJDc3NSZXNldCIsIl9qc3hydW50aW1lIiwianN4Iiwic3R5bGUiLCJjc3MiLCJfdGVtcGxhdGVPYmplY3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/pages/ErrorBoundary.js":
|
||
/*!*******************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/pages/ErrorBoundary.js ***!
|
||
\*******************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ErrorBoundary\", ({\n enumerable: true,\n get: function() {\n return ErrorBoundary;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nclass ErrorBoundary extends _react.PureComponent {\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n componentDidCatch(error, // accidentally excluded in some versions.\n errorInfo) {\n this.props.onError(error, (errorInfo == null ? void 0 : errorInfo.componentStack) || null);\n if (!this.props.globalOverlay) {\n this.setState({\n error\n });\n }\n }\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific the the `@types/react` version.\n render() {\n // The component has to be unmounted or else it would continue to error\n return this.state.error || this.props.globalOverlay && this.props.isMounted ? // we have to render the html shell otherwise the shadow root will not be able to attach\n this.props.globalOverlay ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"body\", {})\n ]\n }) : null : this.props.children;\n }\n constructor(...args){\n super(...args);\n this.state = {\n error: null\n };\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ErrorBoundary.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL0Vycm9yQm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFVYUE7OztlQUFBQTs7Ozs7NkVBVlU7QUFVaEIsTUFBTUEsc0JBQXNCQyxPQUFNQyxhQUFhO0lBTXBELE9BQU9DLHlCQUF5QkMsS0FBWSxFQUFFO1FBQzVDLE9BQU87WUFBRUE7UUFBTTtJQUNqQjtJQUVBQyxrQkFDRUQsS0FBWSxFQUVaLDBDQUEwQztJQUMxQ0UsU0FBOEMsRUFDOUM7UUFDQSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixPQUFPRSxDQUFBQSxhQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxVQUFXRyxjQUFjLEtBQUk7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQ0YsS0FBSyxDQUFDRyxhQUFhLEVBQUU7WUFDN0IsSUFBSSxDQUFDQyxRQUFRLENBQUM7Z0JBQUVQO1lBQU07UUFDeEI7SUFDRjtJQUVBLDBJQUEwSTtJQUMxSVEsU0FBMEI7UUFDeEIsdUVBQXVFO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDQyxLQUFLLENBQUNULEtBQUssSUFDcEIsSUFBSSxDQUFDRyxLQUFLLENBQUNHLGFBQWEsSUFBSSxJQUFJLENBQUNILEtBQUssQ0FBQ08sU0FBUyxHQUVqRCx3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDUCxLQUFLLENBQUNHLGFBQWEsR0FDdEIsV0FEc0IsR0FDdEIsSUFBQUssWUFBQUMsSUFBQSxFQUFDQyxRQUFBQTs7OEJBQ0MsSUFBQUYsWUFBQUcsR0FBQSxFQUFDQyxRQUFBQSxDQUFBQTs4QkFDRCxJQUFBSixZQUFBRyxHQUFBLEVBQUNFLFFBQUFBLENBQUFBOzthQUVELE9BRUosSUFBSSxDQUFDYixLQUFLLENBQUNjLFFBQVE7SUFFdkI7OzthQWxDQVIsS0FBQUEsR0FBUTtZQUFFVCxPQUFPO1FBQUs7O0FBbUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL0Vycm9yQm91bmRhcnkudHN4P2U2YjMiXSwibmFtZXMiOlsiRXJyb3JCb3VuZGFyeSIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImVycm9yIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJlcnJvckluZm8iLCJwcm9wcyIsIm9uRXJyb3IiLCJjb21wb25lbnRTdGFjayIsImdsb2JhbE92ZXJsYXkiLCJzZXRTdGF0ZSIsInJlbmRlciIsInN0YXRlIiwiaXNNb3VudGVkIiwiX2pzeHJ1bnRpbWUiLCJqc3hzIiwiaHRtbCIsImpzeCIsImhlYWQiLCJib2R5IiwiY2hpbGRyZW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/pages/ErrorBoundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/pages/ReactDevOverlay.js":
|
||
/*!*********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/pages/ReactDevOverlay.js ***!
|
||
\*********************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return ReactDevOverlay;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _bus = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./bus */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/bus.js\"));\nconst _ShadowPortal = __webpack_require__(/*! ../internal/components/ShadowPortal */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js\");\nconst _BuildError = __webpack_require__(/*! ../internal/container/BuildError */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\");\nconst _Errors = __webpack_require__(/*! ../internal/container/Errors */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\");\nconst _ErrorBoundary = __webpack_require__(/*! ./ErrorBoundary */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/ErrorBoundary.js\");\nconst _Base = __webpack_require__(/*! ../internal/styles/Base */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js\");\nconst _ComponentStyles = __webpack_require__(/*! ../internal/styles/ComponentStyles */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js\");\nconst _CssReset = __webpack_require__(/*! ../internal/styles/CssReset */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"./node_modules/next/dist/client/components/react-dev-overlay/shared.js\");\nconst shouldPreventDisplay = (errorType, preventType)=>{\n if (!preventType || !errorType) {\n return false;\n }\n return preventType.includes(errorType);\n};\nfunction ReactDevOverlay(param) {\n _s();\n let { children, preventDisplay, globalOverlay } = param;\n const [state, dispatch] = (0, _shared.useErrorOverlayReducer)();\n _react.useEffect(()=>{\n _bus.on(dispatch);\n return function() {\n _bus.off(dispatch);\n };\n }, [\n dispatch\n ]);\n const onComponentError = _react.useCallback((_error, _componentStack)=>{\n // TODO: special handling\n }, []);\n const hasBuildError = state.buildError != null;\n const hasRuntimeErrors = Boolean(state.errors.length);\n const errorType = hasBuildError ? \"build\" : hasRuntimeErrors ? \"runtime\" : null;\n const isMounted = errorType !== null;\n const displayPrevented = shouldPreventDisplay(errorType, preventDisplay);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_ErrorBoundary.ErrorBoundary, {\n globalOverlay: globalOverlay,\n isMounted: isMounted,\n onError: onComponentError,\n children: children != null ? children : null\n }),\n isMounted ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ShadowPortal.ShadowPortal, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CssReset.CssReset, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Base.Base, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_ComponentStyles.ComponentStyles, {}),\n displayPrevented ? null : hasBuildError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_BuildError.BuildError, {\n message: state.buildError,\n versionInfo: state.versionInfo\n }) : hasRuntimeErrors ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Errors.Errors, {\n isAppDir: false,\n errors: state.errors,\n versionInfo: state.versionInfo,\n initialDisplayState: \"fullscreen\"\n }) : undefined\n ]\n }) : undefined\n ]\n });\n}\n_s(ReactDevOverlay, \"yiU6D4sMPUxEaIlbYMKpxnTQY+U=\");\n_c = ReactDevOverlay;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ReactDevOverlay.js.map\nvar _c;\n$RefreshReg$(_c, \"ReactDevOverlay\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL1JlYWN0RGV2T3ZlcmxheS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7MkNBOEJBOzs7ZUFBd0JBOzs7Ozs2RUE5QkQ7MkVBRUY7MENBQ1E7d0NBQ0Y7b0NBQ0o7MkNBQ087a0NBQ1Q7NkNBQ1c7c0NBQ1A7b0NBQ2M7QUFJdkMsTUFBTUMsdUJBQXVCLENBQzNCQyxXQUNBQztJQUVBLElBQUksQ0FBQ0EsZUFBZSxDQUFDRCxXQUFXO1FBQzlCLE9BQU87SUFDVDtJQUNBLE9BQU9DLFlBQVlDLFFBQVEsQ0FBQ0Y7QUFDOUI7QUFRZSxTQUFTRixnQkFBZ0JLLEtBSWpCOztJQUppQixNQUN0Q0MsUUFBUSxFQUNSQyxjQUFjLEVBQ2RDLGFBQWEsRUFDUSxHQUppQkg7SUFLdEMsTUFBTSxDQUFDSSxPQUFPQyxTQUFTLEdBQUdDLENBQUFBLEdBQUFBLFFBQUFBLHNCQUFzQjtJQUVoREMsT0FBTUMsU0FBUyxDQUFDO1FBQ2RDLEtBQUlDLEVBQUUsQ0FBQ0w7UUFDUCxPQUFPO1lBQ0xJLEtBQUlFLEdBQUcsQ0FBQ047UUFDVjtJQUNGLEdBQUc7UUFBQ0E7S0FBUztJQUViLE1BQU1PLG1CQUFtQkwsT0FBTU0sV0FBVyxDQUN4QyxDQUFDQyxRQUFlQztJQUNkLHlCQUF5QjtJQUMzQixHQUNBLEVBQUU7SUFHSixNQUFNQyxnQkFBZ0JaLE1BQU1hLFVBQVUsSUFBSTtJQUMxQyxNQUFNQyxtQkFBbUJDLFFBQVFmLE1BQU1nQixNQUFNLENBQUNDLE1BQU07SUFDcEQsTUFBTXhCLFlBQVltQixnQkFDZCxVQUNBRSxtQkFDQSxZQUNBO0lBQ0osTUFBTUksWUFBWXpCLGNBQWM7SUFFaEMsTUFBTTBCLG1CQUFtQjNCLHFCQUFxQkMsV0FBV0s7SUFFekQsT0FDRSxXQURGLEdBQ0UsSUFBQXNCLFlBQUFDLElBQUEsRUFBQUQsWUFBQUUsUUFBQTs7MEJBQ0UsSUFBQUYsWUFBQUcsR0FBQSxFQUFDQyxlQUFBQSxhQUFhO2dCQUNaekIsZUFBZUE7Z0JBQ2ZtQixXQUFXQTtnQkFDWE8sU0FBU2pCOzBCQUVSWCxZQUFBQSxPQUFBQSxXQUFZOztZQUVkcUIsWUFDQyxXQUREQSxHQUNDLElBQUFFLFlBQUFDLElBQUEsRUFBQ0ssY0FBQUEsWUFBWTs7a0NBQ1gsSUFBQU4sWUFBQUcsR0FBQSxFQUFDSSxVQUFBQSxRQUFRO2tDQUNULElBQUFQLFlBQUFHLEdBQUEsRUFBQ0ssTUFBQUEsSUFBSTtrQ0FDTCxJQUFBUixZQUFBRyxHQUFBLEVBQUNNLGlCQUFBQSxlQUFlO29CQUVmVixtQkFBbUIsT0FBT1AsZ0JBQ3pCLFdBRHlCQSxHQUN6QixJQUFBUSxZQUFBRyxHQUFBLEVBQUNPLFlBQUFBLFVBQVU7d0JBQ1RDLFNBQVMvQixNQUFNYSxVQUFVO3dCQUN6Qm1CLGFBQWFoQyxNQUFNZ0MsV0FBVzt5QkFFOUJsQixtQkFDRixXQURFQSxHQUNGLElBQUFNLFlBQUFHLEdBQUEsRUFBQ1UsUUFBQUEsTUFBTTt3QkFDTEMsVUFBVTt3QkFDVmxCLFFBQVFoQixNQUFNZ0IsTUFBTTt3QkFDcEJnQixhQUFhaEMsTUFBTWdDLFdBQVc7d0JBQzlCRyxxQkFBcUI7eUJBRXJCQzs7aUJBRUpBOzs7QUFHVjtHQWhFd0I3QztLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL1JlYWN0RGV2T3ZlcmxheS50c3g/ZjBlZCJdLCJuYW1lcyI6WyJSZWFjdERldk92ZXJsYXkiLCJzaG91bGRQcmV2ZW50RGlzcGxheSIsImVycm9yVHlwZSIsInByZXZlbnRUeXBlIiwiaW5jbHVkZXMiLCJwYXJhbSIsImNoaWxkcmVuIiwicHJldmVudERpc3BsYXkiLCJnbG9iYWxPdmVybGF5Iiwic3RhdGUiLCJkaXNwYXRjaCIsInVzZUVycm9yT3ZlcmxheVJlZHVjZXIiLCJSZWFjdCIsInVzZUVmZmVjdCIsIkJ1cyIsIm9uIiwib2ZmIiwib25Db21wb25lbnRFcnJvciIsInVzZUNhbGxiYWNrIiwiX2Vycm9yIiwiX2NvbXBvbmVudFN0YWNrIiwiaGFzQnVpbGRFcnJvciIsImJ1aWxkRXJyb3IiLCJoYXNSdW50aW1lRXJyb3JzIiwiQm9vbGVhbiIsImVycm9ycyIsImxlbmd0aCIsImlzTW91bnRlZCIsImRpc3BsYXlQcmV2ZW50ZWQiLCJfanN4cnVudGltZSIsImpzeHMiLCJGcmFnbWVudCIsImpzeCIsIkVycm9yQm91bmRhcnkiLCJvbkVycm9yIiwiU2hhZG93UG9ydGFsIiwiQ3NzUmVzZXQiLCJCYXNlIiwiQ29tcG9uZW50U3R5bGVzIiwiQnVpbGRFcnJvciIsIm1lc3NhZ2UiLCJ2ZXJzaW9uSW5mbyIsIkVycm9ycyIsImlzQXBwRGlyIiwiaW5pdGlhbERpc3BsYXlTdGF0ZSIsInVuZGVmaW5lZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/pages/ReactDevOverlay.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/pages/bus.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/pages/bus.js ***!
|
||
\*********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n emit: function() {\n return emit;\n },\n off: function() {\n return off;\n },\n on: function() {\n return on;\n }\n});\nlet handlers = new Set();\nlet queue = [];\nfunction drain() {\n // Draining should never happen synchronously in case multiple handlers are\n // registered.\n setTimeout(function() {\n while(Boolean(queue.length) && // Or, if all handlers removed themselves as a result of handling the\n // event(s)\n Boolean(handlers.size)){\n const ev = queue.shift();\n handlers.forEach((handler)=>handler(ev));\n }\n }, 1);\n}\nfunction emit(ev) {\n queue.push(Object.freeze({\n ...ev\n }));\n drain();\n}\nfunction on(fn) {\n if (handlers.has(fn)) {\n return false;\n }\n handlers.add(fn);\n drain();\n return true;\n}\nfunction off(fn) {\n if (handlers.has(fn)) {\n handlers.delete(fn);\n return true;\n }\n return false;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=bus.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL2J1cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF3QmdCQSxNQUFJO2VBQUpBOztJQWVBQyxLQUFHO2VBQUhBOztJQVZBQyxJQUFFO2VBQUZBOzs7QUF6QmhCLElBQUlDLFdBQWlDLElBQUlDO0FBQ3pDLElBQUlDLFFBQW9CLEVBQUU7QUFFMUIsU0FBU0M7SUFDUCwyRUFBMkU7SUFDM0UsY0FBYztJQUNkQyxXQUFXO1FBQ1QsTUFFRUMsUUFBUUgsTUFBTUksTUFBTSxLQUNwQixxRUFBcUU7UUFDckUsV0FBVztRQUNYRCxRQUFRTCxTQUFTTyxJQUFJLEVBQ3JCO1lBQ0EsTUFBTUMsS0FBS04sTUFBTU8sS0FBSztZQUN0QlQsU0FBU1UsT0FBTyxDQUFDLENBQUNDLFVBQVlBLFFBQVFIO1FBQ3hDO0lBQ0YsR0FBRztBQUNMO0FBRU8sU0FBU1gsS0FBS1csRUFBWTtJQUMvQk4sTUFBTVUsSUFBSSxDQUFDQyxPQUFPQyxNQUFNLENBQUM7UUFBRSxHQUFHTixFQUFFO0lBQUM7SUFDakNMO0FBQ0Y7QUFFTyxTQUFTSixHQUFHZ0IsRUFBbUI7SUFDcEMsSUFBSWYsU0FBU2dCLEdBQUcsQ0FBQ0QsS0FBSztRQUNwQixPQUFPO0lBQ1Q7SUFFQWYsU0FBU2lCLEdBQUcsQ0FBQ0Y7SUFDYlo7SUFDQSxPQUFPO0FBQ1Q7QUFFTyxTQUFTTCxJQUFJaUIsRUFBbUI7SUFDckMsSUFBSWYsU0FBU2dCLEdBQUcsQ0FBQ0QsS0FBSztRQUNwQmYsU0FBU2tCLE1BQU0sQ0FBQ0g7UUFDaEIsT0FBTztJQUNUO0lBRUEsT0FBTztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvcGFnZXMvYnVzLnRzP2U5MGYiXSwibmFtZXMiOlsiZW1pdCIsIm9mZiIsIm9uIiwiaGFuZGxlcnMiLCJTZXQiLCJxdWV1ZSIsImRyYWluIiwic2V0VGltZW91dCIsIkJvb2xlYW4iLCJsZW5ndGgiLCJzaXplIiwiZXYiLCJzaGlmdCIsImZvckVhY2giLCJoYW5kbGVyIiwicHVzaCIsIk9iamVjdCIsImZyZWV6ZSIsImZuIiwiaGFzIiwiYWRkIiwiZGVsZXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/pages/bus.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/pages/client.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/pages/client.js ***!
|
||
\************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ReactDevOverlay: function() {\n return _ReactDevOverlay.default;\n },\n getErrorByType: function() {\n return _getErrorByType.getErrorByType;\n },\n getServerError: function() {\n return _nodeStackFrames.getServerError;\n },\n onBeforeRefresh: function() {\n return onBeforeRefresh;\n },\n onBuildError: function() {\n return onBuildError;\n },\n onBuildOk: function() {\n return onBuildOk;\n },\n onRefresh: function() {\n return onRefresh;\n },\n onVersionInfo: function() {\n return onVersionInfo;\n },\n register: function() {\n return register;\n },\n unregister: function() {\n return unregister;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _bus = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./bus */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/bus.js\"));\nconst _parseStack = __webpack_require__(/*! ../internal/helpers/parseStack */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\");\nconst _parsecomponentstack = __webpack_require__(/*! ../internal/helpers/parse-component-stack */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js\");\nconst _hydrationerrorinfo = __webpack_require__(/*! ../internal/helpers/hydration-error-info */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"./node_modules/next/dist/client/components/react-dev-overlay/shared.js\");\nconst _getErrorByType = __webpack_require__(/*! ../internal/helpers/getErrorByType */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\");\nconst _nodeStackFrames = __webpack_require__(/*! ../internal/helpers/nodeStackFrames */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\");\nconst _ReactDevOverlay = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./ReactDevOverlay */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/ReactDevOverlay.js\"));\n// Patch console.error to collect information about hydration errors\n(0, _hydrationerrorinfo.patchConsoleError)();\nlet isRegistered = false;\nlet stackTraceLimit = undefined;\nfunction onUnhandledError(ev) {\n const error = ev == null ? void 0 : ev.error;\n if (!error || !(error instanceof Error) || typeof error.stack !== \"string\") {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n if (error.message.match(/(hydration|content does not match|did not match)/i)) {\n if (_hydrationerrorinfo.hydrationErrorState.warning) {\n error.details = {\n ...error.details,\n // It contains the warning, component stack, server and client tag names\n ..._hydrationerrorinfo.hydrationErrorState\n };\n }\n error.message += \"\\nSee more info here: https://nextjs.org/docs/messages/react-hydration-error\";\n }\n const e = error;\n const componentStackFrames = typeof _hydrationerrorinfo.hydrationErrorState.componentStack === \"string\" ? (0, _parsecomponentstack.parseComponentStack)(_hydrationerrorinfo.hydrationErrorState.componentStack) : undefined;\n // Skip ModuleBuildError and ModuleNotFoundError, as it will be sent through onBuildError callback.\n // This is to avoid same error as different type showing up on client to cause flashing.\n if (e.name !== \"ModuleBuildError\" && e.name !== \"ModuleNotFoundError\") {\n _bus.emit({\n type: _shared.ACTION_UNHANDLED_ERROR,\n reason: error,\n frames: (0, _parseStack.parseStack)(e.stack),\n componentStackFrames\n });\n }\n}\nfunction onUnhandledRejection(ev) {\n const reason = ev == null ? void 0 : ev.reason;\n if (!reason || !(reason instanceof Error) || typeof reason.stack !== \"string\") {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n const e = reason;\n _bus.emit({\n type: _shared.ACTION_UNHANDLED_REJECTION,\n reason: reason,\n frames: (0, _parseStack.parseStack)(e.stack)\n });\n}\nfunction register() {\n if (isRegistered) {\n return;\n }\n isRegistered = true;\n try {\n const limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 50;\n stackTraceLimit = limit;\n } catch (e) {}\n window.addEventListener(\"error\", onUnhandledError);\n window.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n}\nfunction unregister() {\n if (!isRegistered) {\n return;\n }\n isRegistered = false;\n if (stackTraceLimit !== undefined) {\n try {\n Error.stackTraceLimit = stackTraceLimit;\n } catch (e) {}\n stackTraceLimit = undefined;\n }\n window.removeEventListener(\"error\", onUnhandledError);\n window.removeEventListener(\"unhandledrejection\", onUnhandledRejection);\n}\nfunction onBuildOk() {\n _bus.emit({\n type: _shared.ACTION_BUILD_OK\n });\n}\nfunction onBuildError(message) {\n _bus.emit({\n type: _shared.ACTION_BUILD_ERROR,\n message\n });\n}\nfunction onRefresh() {\n _bus.emit({\n type: _shared.ACTION_REFRESH\n });\n}\nfunction onBeforeRefresh() {\n _bus.emit({\n type: _shared.ACTION_BEFORE_REFRESH\n });\n}\nfunction onVersionInfo(versionInfo) {\n _bus.emit({\n type: _shared.ACTION_VERSION_INFO,\n versionInfo\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUEySW9CQSxpQkFBZTtlQUFmQSxpQkFBQUEsT0FBZTs7SUFGMUJDLGdCQUFjO2VBQWRBLGdCQUFBQSxjQUFjOztJQUNkQyxnQkFBYztlQUFkQSxpQkFBQUEsY0FBYzs7SUFUUEMsaUJBQWU7ZUFBZkE7O0lBUkFDLGNBQVk7ZUFBWkE7O0lBSkFDLFdBQVM7ZUFBVEE7O0lBUUFDLFdBQVM7ZUFBVEE7O0lBUUFDLGVBQWE7ZUFBYkE7O0lBakRBQyxVQUFRO2VBQVJBOztJQWdCQUMsWUFBVTtlQUFWQTs7Ozs7MkVBcEdLO3dDQUNNO2lEQUNTO2dEQUk3QjtvQ0FTQTs0Q0EwSHdCOzZDQUNBO3NGQUNZO0FBekgzQyxvRUFBb0U7QUFDcEVDLENBQUFBLEdBQUFBLG9CQUFBQSxpQkFBaUI7QUFFakIsSUFBSUMsZUFBZTtBQUNuQixJQUFJQyxrQkFBc0NDO0FBRTFDLFNBQVNDLGlCQUFpQkMsRUFBYztJQUN0QyxNQUFNQyxRQUFRRCxNQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxHQUFJQyxLQUFLO0lBQ3ZCLElBQUksQ0FBQ0EsU0FBUyxDQUFFQSxDQUFBQSxpQkFBaUJDLEtBQUFBLEtBQVUsT0FBT0QsTUFBTUUsS0FBSyxLQUFLLFVBQVU7UUFDMUUsOERBQThEO1FBQzlEO0lBQ0Y7SUFFQSxJQUNFRixNQUFNRyxPQUFPLENBQUNDLEtBQUssQ0FBQyxzREFDcEI7UUFDQSxJQUFJQyxvQkFBQUEsbUJBQW1CLENBQUNDLE9BQU8sRUFBRTtZQUk3Qk4sTUFBY08sT0FBTyxHQUFHO2dCQUN4QixHQUFHUCxNQUFlTyxPQUFPO2dCQUN6Qix3RUFBd0U7Z0JBQ3hFLEdBQUdGLG9CQUFBQSxtQkFBbUI7WUFDeEI7UUFDRjtRQUNBTCxNQUFNRyxPQUFPLElBQUs7SUFDcEI7SUFFQSxNQUFNSyxJQUFJUjtJQUNWLE1BQU1TLHVCQUNKLE9BQU9KLG9CQUFBQSxtQkFBbUIsQ0FBQ0ssY0FBYyxLQUFLLFdBQzFDQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQW1CLEVBQUNOLG9CQUFBQSxtQkFBbUIsQ0FBQ0ssY0FBYyxJQUN0RGI7SUFFTixtR0FBbUc7SUFDbkcsd0ZBQXdGO0lBQ3hGLElBQUlXLEVBQUVJLElBQUksS0FBSyxzQkFBc0JKLEVBQUVJLElBQUksS0FBSyx1QkFBdUI7UUFDckVDLEtBQUlDLElBQUksQ0FBQztZQUNQQyxNQUFNQyxRQUFBQSxzQkFBc0I7WUFDNUJDLFFBQVFqQjtZQUNSa0IsUUFBUUMsQ0FBQUEsR0FBQUEsWUFBQUEsVUFBVSxFQUFDWCxFQUFFTixLQUFLO1lBQzFCTztRQUNGO0lBQ0Y7QUFDRjtBQUVBLFNBQVNXLHFCQUFxQnJCLEVBQXlCO0lBQ3JELE1BQU1rQixTQUFTbEIsTUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsR0FBSWtCLE1BQU07SUFDekIsSUFDRSxDQUFDQSxVQUNELENBQUVBLENBQUFBLGtCQUFrQmhCLEtBQUFBLEtBQ3BCLE9BQU9nQixPQUFPZixLQUFLLEtBQUssVUFDeEI7UUFDQSw4REFBOEQ7UUFDOUQ7SUFDRjtJQUVBLE1BQU1NLElBQUlTO0lBQ1ZKLEtBQUlDLElBQUksQ0FBQztRQUNQQyxNQUFNTSxRQUFBQSwwQkFBMEI7UUFDaENKLFFBQVFBO1FBQ1JDLFFBQVFDLENBQUFBLEdBQUFBLFlBQUFBLFVBQVUsRUFBQ1gsRUFBRU4sS0FBSztJQUM1QjtBQUNGO0FBRU8sU0FBU1Y7SUFDZCxJQUFJRyxjQUFjO1FBQ2hCO0lBQ0Y7SUFDQUEsZUFBZTtJQUVmLElBQUk7UUFDRixNQUFNMkIsUUFBUXJCLE1BQU1MLGVBQWU7UUFDbkNLLE1BQU1MLGVBQWUsR0FBRztRQUN4QkEsa0JBQWtCMEI7SUFDcEIsRUFBRSxPQUFBZCxHQUFNLENBQUM7SUFFVGUsT0FBT0MsZ0JBQWdCLENBQUMsU0FBUzFCO0lBQ2pDeUIsT0FBT0MsZ0JBQWdCLENBQUMsc0JBQXNCSjtBQUNoRDtBQUVPLFNBQVMzQjtJQUNkLElBQUksQ0FBQ0UsY0FBYztRQUNqQjtJQUNGO0lBQ0FBLGVBQWU7SUFFZixJQUFJQyxvQkFBb0JDLFdBQVc7UUFDakMsSUFBSTtZQUNGSSxNQUFNTCxlQUFlLEdBQUdBO1FBQzFCLEVBQUUsT0FBQVksR0FBTSxDQUFDO1FBQ1RaLGtCQUFrQkM7SUFDcEI7SUFFQTBCLE9BQU9FLG1CQUFtQixDQUFDLFNBQVMzQjtJQUNwQ3lCLE9BQU9FLG1CQUFtQixDQUFDLHNCQUFzQkw7QUFDbkQ7QUFFTyxTQUFTL0I7SUFDZHdCLEtBQUlDLElBQUksQ0FBQztRQUFFQyxNQUFNVyxRQUFBQSxlQUFlO0lBQUM7QUFDbkM7QUFFTyxTQUFTdEMsYUFBYWUsT0FBZTtJQUMxQ1UsS0FBSUMsSUFBSSxDQUFDO1FBQUVDLE1BQU1ZLFFBQUFBLGtCQUFrQjtRQUFFeEI7SUFBUTtBQUMvQztBQUVPLFNBQVNiO0lBQ2R1QixLQUFJQyxJQUFJLENBQUM7UUFBRUMsTUFBTWEsUUFBQUEsY0FBYztJQUFDO0FBQ2xDO0FBRU8sU0FBU3pDO0lBQ2QwQixLQUFJQyxJQUFJLENBQUM7UUFBRUMsTUFBTWMsUUFBQUEscUJBQXFCO0lBQUM7QUFDekM7QUFFTyxTQUFTdEMsY0FBY3VDLFdBQXdCO0lBQ3BEakIsS0FBSUMsSUFBSSxDQUFDO1FBQUVDLE1BQU1nQixRQUFBQSxtQkFBbUI7UUFBRUQ7SUFBWTtBQUNwRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL2NsaWVudC50cz9kYmY3Il0sIm5hbWVzIjpbIlJlYWN0RGV2T3ZlcmxheSIsImdldEVycm9yQnlUeXBlIiwiZ2V0U2VydmVyRXJyb3IiLCJvbkJlZm9yZVJlZnJlc2giLCJvbkJ1aWxkRXJyb3IiLCJvbkJ1aWxkT2siLCJvblJlZnJlc2giLCJvblZlcnNpb25JbmZvIiwicmVnaXN0ZXIiLCJ1bnJlZ2lzdGVyIiwicGF0Y2hDb25zb2xlRXJyb3IiLCJpc1JlZ2lzdGVyZWQiLCJzdGFja1RyYWNlTGltaXQiLCJ1bmRlZmluZWQiLCJvblVuaGFuZGxlZEVycm9yIiwiZXYiLCJlcnJvciIsIkVycm9yIiwic3RhY2siLCJtZXNzYWdlIiwibWF0Y2giLCJoeWRyYXRpb25FcnJvclN0YXRlIiwid2FybmluZyIsImRldGFpbHMiLCJlIiwiY29tcG9uZW50U3RhY2tGcmFtZXMiLCJjb21wb25lbnRTdGFjayIsInBhcnNlQ29tcG9uZW50U3RhY2siLCJuYW1lIiwiQnVzIiwiZW1pdCIsInR5cGUiLCJBQ1RJT05fVU5IQU5ETEVEX0VSUk9SIiwicmVhc29uIiwiZnJhbWVzIiwicGFyc2VTdGFjayIsIm9uVW5oYW5kbGVkUmVqZWN0aW9uIiwiQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT04iLCJsaW1pdCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiQUNUSU9OX0JVSUxEX09LIiwiQUNUSU9OX0JVSUxEX0VSUk9SIiwiQUNUSU9OX1JFRlJFU0giLCJBQ1RJT05fQkVGT1JFX1JFRlJFU0giLCJ2ZXJzaW9uSW5mbyIsIkFDVElPTl9WRVJTSU9OX0lORk8iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/pages/client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/pages/hot-reloader-client.js":
|
||
/*!*************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/pages/hot-reloader-client.js ***!
|
||
\*************************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// TODO: Remove use of `any` type. Fix no-use-before-define violations.\n/* eslint-disable @typescript-eslint/no-use-before-define */ /**\n * MIT License\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */ // This file is a modified version of the Create React App HMR dev client that\n// can be found here:\n// https://github.com/facebook/create-react-app/blob/v3.4.1/packages/react-dev-utils/webpackHotDevClient.js\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return connect;\n },\n performFullReload: function() {\n return performFullReload;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _client = __webpack_require__(/*! ./client */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/client.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _websocket = __webpack_require__(/*! ./websocket */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\");\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../internal/helpers/format-webpack-messages */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/format-webpack-messages.js\"));\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _extractmodulesfromturbopackmessage = __webpack_require__(/*! ../../../../server/dev/extract-modules-from-turbopack-message */ \"./node_modules/next/dist/server/dev/extract-modules-from-turbopack-message.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"./node_modules/next/dist/client/components/react-dev-overlay/shared.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../internal/helpers/runtime-error-handler */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/runtime-error-handler.js\");\nwindow.__nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet customHmrEventHandler;\nlet turbopackMessageListeners = [];\nlet MODE = \"webpack\";\nfunction connect(mode) {\n MODE = mode;\n (0, _client.register)();\n (0, _websocket.addMessageListener)((payload)=>{\n if (!(\"action\" in payload)) {\n return;\n }\n try {\n processMessage(payload);\n } catch (err) {\n var _err_stack;\n console.warn(\"[HMR] Invalid message: \" + payload + \"\\n\" + ((_err_stack = err == null ? void 0 : err.stack) != null ? _err_stack : \"\"));\n }\n });\n return {\n subscribeToHmrEvent (handler) {\n customHmrEventHandler = handler;\n },\n onUnrecoverableError () {\n _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n },\n addTurbopackMessageListener (cb) {\n turbopackMessageListeners.push(cb);\n },\n sendTurbopackMessage (msg) {\n (0, _websocket.sendMessage)(msg);\n },\n handleUpdateError (err) {\n performFullReload(err);\n }\n };\n}\n// Remember some state related to hot module replacement.\nvar isFirstCompilation = true;\nvar mostRecentCompilationHash = null;\nvar hasCompileErrors = false;\nfunction clearOutdatedErrors() {\n // Clean up outdated compile errors, if any.\n if (typeof console !== \"undefined\" && typeof console.clear === \"function\") {\n if (hasCompileErrors) {\n console.clear();\n }\n }\n}\n// Successful compilation.\nfunction handleSuccess() {\n clearOutdatedErrors();\n if (MODE === \"webpack\") {\n const isHotUpdate = !isFirstCompilation || window.__NEXT_DATA__.page !== \"/_error\" && isUpdateAvailable();\n isFirstCompilation = false;\n hasCompileErrors = false;\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdates(onBeforeFastRefresh, onFastRefresh);\n }\n } else {\n (0, _client.onBuildOk)();\n }\n}\n// Compilation with warnings (e.g. ESLint).\nfunction handleWarnings(warnings) {\n clearOutdatedErrors();\n const isHotUpdate = !isFirstCompilation;\n isFirstCompilation = false;\n hasCompileErrors = false;\n function printWarnings() {\n // Print warnings to the console.\n const formatted = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n var _formatted_warnings;\n for(let i = 0; i < ((_formatted_warnings = formatted.warnings) == null ? void 0 : _formatted_warnings.length); i++){\n if (i === 5) {\n console.warn(\"There were more warnings in other files.\\n\" + \"You can find a complete log in the terminal.\");\n break;\n }\n console.warn((0, _stripansi.default)(formatted.warnings[i]));\n }\n }\n }\n printWarnings();\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdates(onBeforeFastRefresh, onFastRefresh);\n }\n}\n// Compilation with errors (e.g. syntax error or missing modules).\nfunction handleErrors(errors) {\n clearOutdatedErrors();\n isFirstCompilation = false;\n hasCompileErrors = true;\n // \"Massage\" webpack messages.\n var formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n (0, _client.onBuildError)(formatted.errors[0]);\n // Also log them to the console.\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n for(var i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n}\nlet startLatency = undefined;\nfunction onBeforeFastRefresh(updatedModules) {\n if (updatedModules.length > 0) {\n // Only trigger a pending state if we have updates to apply\n // (cf. onFastRefresh)\n (0, _client.onBeforeRefresh)();\n }\n}\nfunction onFastRefresh(updatedModules) {\n if (updatedModules === void 0) updatedModules = [];\n (0, _client.onBuildOk)();\n if (updatedModules.length === 0) {\n return;\n }\n (0, _client.onRefresh)();\n reportHmrLatency();\n}\nfunction reportHmrLatency(updatedModules) {\n if (updatedModules === void 0) updatedModules = [];\n if (startLatency) {\n const endLatency = Date.now();\n const latency = endLatency - startLatency;\n console.log(\"[Fast Refresh] done in \" + latency + \"ms\");\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-hmr-latency\",\n id: window.__nextDevClientId,\n startTime: startLatency,\n endTime: endLatency,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === \"hidden\"\n }));\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latency);\n }\n }\n}\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\n/** Handles messages from the sevrer for the Pages Router. */ function processMessage(obj) {\n if (!(\"action\" in obj)) {\n return;\n }\n // Use turbopack message for analytics, (still need built for webpack)\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n startLatency = Date.now();\n console.log(\"[Fast Refresh] rebuilding\");\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n if (obj.hash) handleAvailableHash(obj.hash);\n const { errors, warnings } = obj;\n // Is undefined when it's a 'built' event\n if (\"versionInfo\" in obj) (0, _client.onVersionInfo)(obj.versionInfo);\n const hasErrors = Boolean(errors && errors.length);\n if (hasErrors) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-error\",\n errorCount: errors.length,\n clientId: window.__nextDevClientId\n }));\n return handleErrors(errors);\n }\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-warning\",\n warningCount: warnings.length,\n clientId: window.__nextDevClientId\n }));\n return handleWarnings(warnings);\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-success\",\n clientId: window.__nextDevClientId\n }));\n return handleSuccess();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n window.location.reload();\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = new Error(message);\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED:\n {\n for (const listener of turbopackMessageListeners){\n listener({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED\n });\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE:\n {\n const updatedModules = (0, _extractmodulesfromturbopackmessage.extractModulesFromTurbopackMessage)(obj.data);\n onBeforeFastRefresh(updatedModules);\n for (const listener of turbopackMessageListeners){\n listener({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: obj.data\n });\n }\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n performFullReload(null);\n }\n (0, _client.onRefresh)();\n reportHmrLatency(updatedModules);\n break;\n }\n default:\n {\n if (customHmrEventHandler) {\n customHmrEventHandler(obj);\n break;\n }\n break;\n }\n }\n}\n// Is there a newer version of this code available?\nfunction isUpdateAvailable() {\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n return module.hot.status() === \"idle\";\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === \"idle\") {\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n module.hot.addStatusHandler(handler);\n }\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdates(onBeforeHotUpdate, onHotUpdateSuccess) {\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n if (false) {}\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n (0, _client.onBuildOk)();\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError || !updatedModules) {\n if (err) {\n console.warn(\"[Fast Refresh] performing full reload\\n\\n\" + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + \"You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n\" + \"Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n\" + \"It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n\" + \"Fast Refresh requires at least one parent function component in your React tree.\");\n } else if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(\"[Fast Refresh] performing full reload because your application had an unrecoverable error\");\n }\n performFullReload(err);\n return;\n }\n if (typeof onHotUpdateSuccess === \"function\") {\n // Maybe we want to do something.\n onHotUpdateSuccess(updatedModules);\n }\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n // However, this time, don't trigger a pending refresh state.\n tryApplyUpdates(updatedModules.length > 0 ? undefined : onBeforeHotUpdate, updatedModules.length > 0 ? _client.onBuildOk : onHotUpdateSuccess);\n } else {\n (0, _client.onBuildOk)();\n if (false) {}\n }\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (!updatedModules) {\n return null;\n }\n if (typeof onBeforeHotUpdate === \"function\") {\n onBeforeHotUpdate(updatedModules);\n }\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\nfunction performFullReload(err) {\n const stackTrace = err && (err.stack && err.stack.split(\"\\n\").slice(0, 5).join(\"\\n\") || err.message || err + \"\");\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-full-reload\",\n stackTrace,\n hadRuntimeError: !!_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError,\n dependencyChain: err ? err.dependencyChain : undefined\n }));\n window.location.reload();\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-reloader-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL2hvdC1yZWxvYWRlci1jbGllbnQuanMiLCJtYXBwaW5ncyI6IkFBQUEsdUVBQXVFO0FBQ3ZFLDBEQUEwRCxHQUMxRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXNCQyxHQUVELDhFQUE4RTtBQUM5RSxxQkFBcUI7QUFDckIsMkdBQTJHOzs7Ozs7Ozs7Ozs7O0lBMkMzR0EsU0FtQ0M7ZUFuQ3VCQzs7SUE0WlJDLG1CQUFpQjtlQUFqQkE7Ozs7b0NBOWJUO2dGQUNlO3VDQUMwQjs0RkFDZDs4Q0FDVTtnRUFLTztvQ0FDRTtpREFDakI7QUFrQnBDQyxPQUFPQyxpQkFBaUIsR0FBR0MsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxNQUFNLEtBQUssTUFBTUMsS0FBS0MsR0FBRztBQUVwRSxJQUFJQztBQUNKLElBQUlDLDRCQUFzRSxFQUFFO0FBQzVFLElBQUlDLE9BQWdDO0FBQ3JCLFNBQVNYLFFBQVFZLElBQTZCO0lBQzNERCxPQUFPQztJQUNQQyxDQUFBQSxHQUFBQSxRQUFBQSxRQUFRO0lBRVJDLENBQUFBLEdBQUFBLFdBQUFBLGtCQUFrQixFQUFDLENBQUNDO1FBQ2xCLElBQUksQ0FBRSxhQUFZQSxPQUFBQSxHQUFVO1lBQzFCO1FBQ0Y7UUFFQSxJQUFJO1lBQ0ZDLGVBQWVEO1FBQ2pCLEVBQUUsT0FBT0UsS0FBVTtnQkFFK0JBO1lBRGhEQyxRQUFRQyxJQUFJLENBQ1YsNEJBQTRCSixVQUFVLE9BQVFFLENBQUFBLENBQUFBLGFBQUFBLE9BQUFBLE9BQUFBLEtBQUFBLElBQUFBLElBQUtHLEtBQUssWUFBVkgsYUFBYztRQUVoRTtJQUNGO0lBRUEsT0FBTztRQUNMSSxxQkFBb0JDLE9BQVk7WUFDOUJiLHdCQUF3QmE7UUFDMUI7UUFDQUM7WUFDRUMscUJBQUFBLG1CQUFtQixDQUFDQyxlQUFlLEdBQUc7UUFDeEM7UUFDQUMsNkJBQTRCQyxFQUF3QztZ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O1FBQ1B1RDtRQUNBekcsaUJBQWlCLENBQUMsQ0FBQ0QscUJBQUFBLG1CQUFtQixDQUFDQyxlQUFlO1FBQ3RENkcsaUJBQWlCckgsTUFBTUEsSUFBSXFILGVBQWUsR0FBR3JFO0lBQy9DO0lBR0YvRCxPQUFPNkUsUUFBUSxDQUFDdUIsTUFBTTtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL2hvdC1yZWxvYWRlci1jbGllbnQudHM/YjYzNCJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiY29ubmVjdCIsInBlcmZvcm1GdWxsUmVsb2FkIiwid2luZG93IiwiX19uZXh0RGV2Q2xpZW50SWQiLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJEYXRlIiwibm93IiwiY3VzdG9tSG1yRXZlbnRIYW5kbGVyIiwidHVyYm9wYWNrTWVzc2FnZUxpc3RlbmVycyIsIk1PREUiLCJtb2RlIiwicmVnaXN0ZXIiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJwYXlsb2FkIiwicHJvY2Vzc01lc3NhZ2UiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsInN0YWNrIiwic3Vic2NyaWJlVG9IbXJFdmVudCIsImhhbmRsZXIiLCJvblVucmVjb3ZlcmFibGVFcnJvciIsIlJ1bnRpbWVFcnJvckhhbmRsZXIiLCJoYWRSdW50aW1lRXJyb3IiLCJhZGRUdXJib3BhY2tNZXNzYWdlTGlzdGVuZXIiLCJjYiIsInB1c2giLCJzZW5kVHVyYm9wYWNrTWVzc2FnZSIsIm1zZyIsInNlbmRNZXNzYWdlIiwiaGFuZGxlVXBkYXRlRXJyb3IiLCJpc0ZpcnN0Q29tcGlsYXRpb24iLCJtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoIiwiaGFzQ29tcGlsZUVycm9ycyIsImNsZWFyT3V0ZGF0ZWRFcnJvcnMiLCJjbGVhciIsImhhbmRsZVN1Y2Nlc3MiLCJpc0hvdFVwZGF0ZSIsIl9fTkVYVF9EQVRBX18iLCJwYWdlIiwiaXNVcGRhdGVBdmFpbGFibGUiLCJ0cnlBcHBseVVwZGF0ZXMiLCJvbkJlZm9yZUZhc3RSZWZyZXNoIiwib25GYXN0UmVmcmVzaCIsIm9uQnVpbGRPayIsImhhbmRsZVdhcm5pbmdzIiwid2FybmluZ3MiLCJwcmludFdhcm5pbmdzIiwiZm9ybWF0dGVkIiwiZm9ybWF0V2VicGFja01lc3NhZ2VzIiwiZXJyb3JzIiwiaSIsImxlbmd0aCIsInN0cmlwQW5zaSIsImhhbmRsZUVycm9ycyIsIm9uQnVpbGRFcnJvciIsImVycm9yIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9URVNUX01PREUiLCJzZWxmIiwiX19ORVhUX0hNUl9DQiIsInN0YXJ0TGF0ZW5jeSIsInVuZGVmaW5lZCIsInVwZGF0ZWRNb2R1bGVzIiwib25CZWZvcmVSZWZyZXNoIiwib25SZWZyZXNoIiwicmVwb3J0SG1yTGF0ZW5jeSIsImVuZExhdGVuY3kiLCJsYXRlbmN5IiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaWQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImlzUGFnZUhpZGRlbiIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwiX19ORVhUX0hNUl9MQVRFTkNZX0NCIiwiaGFuZGxlQXZhaWxhYmxlSGFzaCIsImhhc2giLCJvYmoiLCJhY3Rpb24iLCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIiLCJCVUlMRElORyIsIkJVSUxUIiwiU1lOQyIsIm9uVmVyc2lvbkluZm8iLCJ2ZXJzaW9uSW5mbyIsImhhc0Vycm9ycyIsIkJvb2xlYW4iLCJlcnJvckNvdW50IiwiY2xpZW50SWQiLCJoYXNXYXJuaW5ncyIsIndhcm5pbmdDb3VudCIsIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUyIsInJlbG9hZCIsIlNFUlZFUl9FUlJPUiIsImVycm9ySlNPTiIsIm1lc3NhZ2UiLCJwYXJzZSIsIkVycm9yIiwiVFVSQk9QQUNLX0NPTk5FQ1RFRCIsImxpc3RlbmVyIiwidHlwZSIsIlRVUkJPUEFDS19NRVNTQUdFIiwiZXh0cmFjdE1vZHVsZXNGcm9tVHVyYm9wYWNrTWVzc2FnZSIsImRhdGEiLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJfX3dlYnBhY2tfaGFzaF9fIiwiY2FuQXBwbHlVcGRhdGVzIiwibW9kdWxlIiwiaG90Iiwic3RhdHVzIiwiYWZ0ZXJBcHBseVVwZGF0ZXMiLCJmbiIsInJlbW92ZVN0YXR1c0hhbmRsZXIiLCJhZGRTdGF0dXNIYW5kbGVyIiwib25CZWZvcmVIb3RVcGRhdGUiLCJvbkhvdFVwZGF0ZVN1Y2Nlc3MiLCJoYW5kbGVBcHBseVVwZGF0ZXMiLCJjaGVjayIsInRoZW4iLCJhcHBseSIsInN0YWNrVHJhY2UiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsImRlcGVuZGVuY3lDaGFpbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/pages/hot-reloader-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js":
|
||
/*!***************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js ***!
|
||
\***************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n addMessageListener: function() {\n return addMessageListener;\n },\n connectHMR: function() {\n return connectHMR;\n },\n sendMessage: function() {\n return sendMessage;\n }\n});\nconst _getsocketurl = __webpack_require__(/*! ../internal/helpers/get-socket-url */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\");\nlet source;\nconst eventCallbacks = [];\nfunction addMessageListener(callback) {\n eventCallbacks.push(callback);\n}\nfunction sendMessage(data) {\n if (!source || source.readyState !== source.OPEN) return;\n return source.send(data);\n}\nlet reconnections = 0;\nfunction connectHMR(options) {\n function init() {\n if (source) source.close();\n function handleOnline() {\n reconnections = 0;\n window.console.log(\"[HMR] connected\");\n }\n function handleMessage(event) {\n // Coerce into HMR_ACTION_TYPES as that is the format.\n const msg = JSON.parse(event.data);\n for (const eventCallback of eventCallbacks){\n eventCallback(msg);\n }\n }\n let timer;\n function handleDisconnect() {\n source.onerror = null;\n source.onclose = null;\n source.close();\n reconnections++;\n // After 25 reconnects we'll want to reload the page as it indicates the dev server is no longer running.\n if (reconnections > 25) {\n window.location.reload();\n return;\n }\n clearTimeout(timer);\n // Try again after 5 seconds\n timer = setTimeout(init, reconnections > 5 ? 5000 : 1000);\n }\n const url = (0, _getsocketurl.getSocketUrl)(options.assetPrefix);\n source = new window.WebSocket(\"\" + url + options.path);\n source.onopen = handleOnline;\n source.onerror = handleDisconnect;\n source.onclose = handleDisconnect;\n source.onmessage = handleMessage;\n }\n init();\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=websocket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3BhZ2VzL3dlYnNvY2tldC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFTZ0JBLG9CQUFrQjtlQUFsQkE7O0lBV0FDLFlBQVU7ZUFBVkE7O0lBUEFDLGFBQVc7ZUFBWEE7OzswQ0FaYTtBQUU3QixJQUFJQztBQUlKLE1BQU1DLGlCQUF3QyxFQUFFO0FBRXpDLFNBQVNKLG1CQUFtQkssUUFBd0I7SUFDekRELGVBQWVFLElBQUksQ0FBQ0Q7QUFDdEI7QUFFTyxTQUFTSCxZQUFZSyxJQUFZO0lBQ3RDLElBQUksQ0FBQ0osVUFBVUEsT0FBT0ssVUFBVSxLQUFLTCxPQUFPTSxJQUFJLEVBQUU7SUFDbEQsT0FBT04sT0FBT08sSUFBSSxDQUFDSDtBQUNyQjtBQUVBLElBQUlJLGdCQUFnQjtBQUViLFNBQVNWLFdBQVdXLE9BQThDO0lBQ3ZFLFNBQVNDO1FBQ1AsSUFBSVYsUUFBUUEsT0FBT1csS0FBSztRQUV4QixTQUFTQztZQUNQSixnQkFBZ0I7WUFDaEJLLE9BQU9DLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO1FBQ3JCO1FBRUEsU0FBU0MsY0FBY0MsS0FBMkI7WUFDaEQsc0RBQXNEO1lBQ3RELE1BQU1DLE1BQXdCQyxLQUFLQyxLQUFLLENBQUNILE1BQU1iLElBQUk7WUFDbkQsS0FBSyxNQUFNaUIsaUJBQWlCcEIsZUFBZ0I7Z0JBQzFDb0IsY0FBY0g7WUFDaEI7UUFDRjtRQUVBLElBQUlJO1FBQ0osU0FBU0M7WUFDUHZCLE9BQU93QixPQUFPLEdBQUc7WUFDakJ4QixPQUFPeUIsT0FBTyxHQUFHO1lBQ2pCekIsT0FBT1csS0FBSztZQUNaSDtZQUNBLHlHQUF5RztZQUN6RyxJQUFJQSxnQkFBZ0IsSUFBSTtnQkFDdEJLLE9BQU9hLFFBQVEsQ0FBQ0MsTUFBTTtnQkFDdEI7WUFDRjtZQUVBQyxhQUFhTjtZQUNiLDRCQUE0QjtZQUM1QkEsUUFBUU8sV0FBV25CLE1BQU1GLGdCQUFnQixJQUFJLE9BQU87UUFDdEQ7UUFFQSxNQUFNc0IsTUFBTUMsQ0FBQUEsR0FBQUEsY0FBQUEsWUFBWSxFQUFDdEIsUUFBUXVCLFdBQVc7UUFFNUNoQyxTQUFTLElBQUlhLE9BQU9vQixTQUFTLENBQUMsS0FBR0gsTUFBTXJCLFFBQVF5QixJQUFJO1FBQ25EbEMsT0FBT21DLE1BQU0sR0FBR3ZCO1FBQ2hCWixPQUFPd0IsT0FBTyxHQUFHRDtRQUNqQnZCLE9BQU95QixPQUFPLEdBQUdGO1FBQ2pCdkIsT0FBT29DLFNBQVMsR0FBR3BCO0lBQ3JCO0lBRUFOO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9wYWdlcy93ZWJzb2NrZXQudHM/OWFiNSJdLCJuYW1lcyI6WyJhZGRNZXNzYWdlTGlzdGVuZXIiLCJjb25uZWN0SE1SIiwic2VuZE1lc3NhZ2UiLCJzb3VyY2UiLCJldmVudENhbGxiYWNrcyIsImNhbGxiYWNrIiwicHVzaCIsImRhdGEiLCJyZWFkeVN0YXRlIiwiT1BFTiIsInNlbmQiLCJyZWNvbm5lY3Rpb25zIiwib3B0aW9ucyIsImluaXQiLCJjbG9zZSIsImhhbmRsZU9ubGluZSIsIndpbmRvdyIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVNZXNzYWdlIiwiZXZlbnQiLCJtc2ciLCJKU09OIiwicGFyc2UiLCJldmVudENhbGxiYWNrIiwidGltZXIiLCJoYW5kbGVEaXNjb25uZWN0Iiwib25lcnJvciIsIm9uY2xvc2UiLCJsb2NhdGlvbiIsInJlbG9hZCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ1cmwiLCJnZXRTb2NrZXRVcmwiLCJhc3NldFByZWZpeCIsIldlYlNvY2tldCIsInBhdGgiLCJvbm9wZW4iLCJvbm1lc3NhZ2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/components/react-dev-overlay/shared.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/react-dev-overlay/shared.js ***!
|
||
\******************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION_BEFORE_REFRESH: function() {\n return ACTION_BEFORE_REFRESH;\n },\n ACTION_BUILD_ERROR: function() {\n return ACTION_BUILD_ERROR;\n },\n ACTION_BUILD_OK: function() {\n return ACTION_BUILD_OK;\n },\n ACTION_REFRESH: function() {\n return ACTION_REFRESH;\n },\n ACTION_UNHANDLED_ERROR: function() {\n return ACTION_UNHANDLED_ERROR;\n },\n ACTION_UNHANDLED_REJECTION: function() {\n return ACTION_UNHANDLED_REJECTION;\n },\n ACTION_VERSION_INFO: function() {\n return ACTION_VERSION_INFO;\n },\n INITIAL_OVERLAY_STATE: function() {\n return INITIAL_OVERLAY_STATE;\n },\n REACT_REFRESH_FULL_RELOAD_FROM_ERROR: function() {\n return REACT_REFRESH_FULL_RELOAD_FROM_ERROR;\n },\n useErrorOverlayReducer: function() {\n return useErrorOverlayReducer;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst ACTION_BUILD_OK = \"build-ok\";\nconst ACTION_BUILD_ERROR = \"build-error\";\nconst ACTION_BEFORE_REFRESH = \"before-fast-refresh\";\nconst ACTION_REFRESH = \"fast-refresh\";\nconst ACTION_VERSION_INFO = \"version-info\";\nconst ACTION_UNHANDLED_ERROR = \"unhandled-error\";\nconst ACTION_UNHANDLED_REJECTION = \"unhandled-rejection\";\nfunction pushErrorFilterDuplicates(errors, err) {\n return [\n ...errors.filter((e)=>{\n // Filter out duplicate errors\n return e.event.reason !== err.event.reason;\n }),\n err\n ];\n}\nconst INITIAL_OVERLAY_STATE = {\n nextId: 1,\n buildError: null,\n errors: [],\n notFound: false,\n refreshState: {\n type: \"idle\"\n },\n rootLayoutMissingTags: [],\n versionInfo: {\n installed: \"0.0.0\",\n staleness: \"unknown\"\n }\n};\nfunction useErrorOverlayReducer() {\n return (0, _react.useReducer)((_state, action)=>{\n switch(action.type){\n case ACTION_BUILD_OK:\n {\n return {\n ..._state,\n buildError: null\n };\n }\n case ACTION_BUILD_ERROR:\n {\n return {\n ..._state,\n buildError: action.message\n };\n }\n case ACTION_BEFORE_REFRESH:\n {\n return {\n ..._state,\n refreshState: {\n type: \"pending\",\n errors: []\n }\n };\n }\n case ACTION_REFRESH:\n {\n return {\n ..._state,\n buildError: null,\n errors: // and UNHANDLED_REJECTION events might be dispatched between the\n // BEFORE_REFRESH and the REFRESH event. We want to keep those errors\n // around until the next refresh. Otherwise we run into a race\n // condition where those errors would be cleared on refresh completion\n // before they can be displayed.\n _state.refreshState.type === \"pending\" ? _state.refreshState.errors : [],\n refreshState: {\n type: \"idle\"\n }\n };\n }\n case ACTION_UNHANDLED_ERROR:\n case ACTION_UNHANDLED_REJECTION:\n {\n switch(_state.refreshState.type){\n case \"idle\":\n {\n return {\n ..._state,\n nextId: _state.nextId + 1,\n errors: pushErrorFilterDuplicates(_state.errors, {\n id: _state.nextId,\n event: action\n })\n };\n }\n case \"pending\":\n {\n return {\n ..._state,\n nextId: _state.nextId + 1,\n refreshState: {\n ..._state.refreshState,\n errors: pushErrorFilterDuplicates(_state.refreshState.errors, {\n id: _state.nextId,\n event: action\n })\n }\n };\n }\n default:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = _state.refreshState;\n return _state;\n }\n }\n case ACTION_VERSION_INFO:\n {\n return {\n ..._state,\n versionInfo: action.versionInfo\n };\n }\n default:\n {\n return _state;\n }\n }\n }, INITIAL_OVERLAY_STATE);\n}\nconst REACT_REFRESH_FULL_RELOAD_FROM_ERROR = \"[Fast Refresh] performing full reload because your application had an unrecoverable error\";\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=shared.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3NoYXJlZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF5QmFBLHVCQUFxQjtlQUFyQkE7O0lBREFDLG9CQUFrQjtlQUFsQkE7O0lBREFDLGlCQUFlO2VBQWZBOztJQUdBQyxnQkFBYztlQUFkQTs7SUFFQUMsd0JBQXNCO2VBQXRCQTs7SUFDQUMsNEJBQTBCO2VBQTFCQTs7SUFGQUMscUJBQW1CO2VBQW5CQTs7SUEwREFDLHVCQUFxQjtlQUFyQkE7O0lBaUZBQyxzQ0FBb0M7ZUFBcENBOztJQXZFR0Msd0JBQXNCO2VBQXRCQTs7O21DQS9GVztBQXVCcEIsTUFBTVAsa0JBQWtCO0FBQ3hCLE1BQU1ELHFCQUFxQjtBQUMzQixNQUFNRCx3QkFBd0I7QUFDOUIsTUFBTUcsaUJBQWlCO0FBQ3ZCLE1BQU1HLHNCQUFzQjtBQUM1QixNQUFNRix5QkFBeUI7QUFDL0IsTUFBTUMsNkJBQTZCO0FBMkMxQyxTQUFTSywwQkFDUEMsTUFBNkIsRUFDN0JDLEdBQXdCO0lBRXhCLE9BQU87V0FDRkQsT0FBT0UsTUFBTSxDQUFDLENBQUNDO1lBQ2hCLDhCQUE4QjtZQUM5QixPQUFPQSxFQUFFQyxLQUFLLENBQUNDLE1BQU0sS0FBS0osSUFBSUcsS0FBSyxDQUFDQyxNQUFNO1FBQzVDO1FBQ0FKO0tBQ0Q7QUFDSDtBQUVPLE1BQU1MLHdCQUFzQztJQUNqRFUsUUFBUTtJQUNSQyxZQUFZO0lBQ1pQLFFBQVEsRUFBRTtJQUNWUSxVQUFVO0lBQ1ZDLGNBQWM7UUFBRUMsTUFBTTtJQUFPO0lBQzdCQyx1QkFBdUIsRUFBRTtJQUN6QkMsYUFBYTtRQUFFQyxXQUFXO1FBQVNDLFdBQVc7SUFBVTtBQUMxRDtBQUVPLFNBQVNoQjtJQUNkLE9BQU9pQixDQUFBQSxHQUFBQSxPQUFBQSxVQUFVLEVBQXdDLENBQUNDLFFBQVFDO1FBQ2hFLE9BQVFBLE9BQU9QLElBQUk7WUFDakIsS0FBS25CO2dCQUFpQjtvQkFDcEIsT0FBTzt3QkFBRSxHQUFHeUIsTUFBTTt3QkFBRVQsWUFBWTtvQkFBSztnQkFDdkM7WUFDQSxLQUFLakI7Z0JBQW9CO29CQUN2QixPQUFPO3dCQUFFLEdBQUcwQixNQUFNO3dCQUFFVCxZQUFZVSxPQUFPQyxPQUFPO29CQUFDO2dCQUNqRDtZQUNBLEtBQUs3QjtnQkFBdUI7b0JBQzFCLE9BQU87d0JBQUUsR0FBRzJCLE1BQU07d0JBQUVQLGNBQWM7NEJBQUVDLE1BQU07NEJBQVdWLFFBQVEsRUFBRTt3QkFBQztvQkFBRTtnQkFDcEU7WUFDQSxLQUFLUjtnQkFBZ0I7b0JBQ25CLE9BQU87d0JBQ0wsR0FBR3dCLE1BQU07d0JBQ1RULFlBQVk7d0JBQ1pQLFFBRUUsaUVBQWlFO3dCQUNqRSxxRUFBcUU7d0JBQ3JFLDhEQUE4RDt3QkFDOUQsc0VBQXNFO3dCQUN0RSxnQ0FBZ0M7d0JBQ2hDZ0IsT0FBT1AsWUFBWSxDQUFDQyxJQUFJLEtBQUssWUFDekJNLE9BQU9QLFlBQVksQ0FBQ1QsTUFBTSxHQUMxQixFQUFFO3dCQUNSUyxjQUFjOzRCQUFFQyxNQUFNO3dCQUFPO29CQUMvQjtnQkFDRjtZQUNBLEtBQUtqQjtZQUNMLEtBQUtDO2dCQUE0QjtvQkFDL0IsT0FBUXNCLE9BQU9QLFlBQVksQ0FBQ0MsSUFBSTt3QkFDOUIsS0FBSzs0QkFBUTtnQ0FDWCxPQUFPO29DQUNMLEdBQUdNLE1BQU07b0NBQ1RWLFFBQVFVLE9BQU9WLE1BQU0sR0FBRztvQ0FDeEJOLFFBQVFELDBCQUEwQmlCLE9BQU9oQixNQUFNLEVBQUU7d0NBQy9DbUIsSUFBSUgsT0FBT1YsTUFBTTt3Q0FDakJGLE9BQU9hO29DQUNUO2dDQUNGOzRCQUNGO3dCQUNBLEtBQUs7NEJBQVc7Z0NBQ2QsT0FBTztvQ0FDTCxHQUFHRCxNQUFNO29DQUNUVixRQUFRVSxPQUFPVixNQUFNLEdBQUc7b0NBQ3hCRyxjQUFjO3dDQUNaLEdBQUdPLE9BQU9QLFlBQVk7d0NBQ3RCVCxRQUFRRCwwQkFBMEJpQixPQUFPUCxZQUFZLENBQUNULE1BQU0sRUFBRTs0Q0FDNURtQixJQUFJSCxPQUFPVixNQUFNOzRDQUNqQkYsT0FBT2E7d0NBQ1Q7b0NBQ0Y7Z0NBQ0Y7NEJBQ0Y7d0JBQ0E7NEJBQ0UsNkRBQTZEOzRCQUM3RCxNQUFNRyxJQUFXSixPQUFPUCxZQUFZOzRCQUNwQyxPQUFPTztvQkFDWDtnQkFDRjtZQUNBLEtBQUtyQjtnQkFBcUI7b0JBQ3hCLE9BQU87d0JBQUUsR0FBR3FCLE1BQU07d0JBQUVKLGFBQWFLLE9BQU9MLFdBQVc7b0JBQUM7Z0JBQ3REO1lBQ0E7Z0JBQVM7b0JBQ1AsT0FBT0k7Z0JBQ1Q7UUFDRjtJQUNGLEdBQUdwQjtBQUNMO0FBRU8sTUFBTUMsdUNBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9zaGFyZWQudHM/MGNiNyJdLCJuYW1lcyI6WyJBQ1RJT05fQkVGT1JFX1JFRlJFU0giLCJBQ1RJT05fQlVJTERfRVJST1IiLCJBQ1RJT05fQlVJTERfT0siLCJBQ1RJT05fUkVGUkVTSCIsIkFDVElPTl9VTkhBTkRMRURfRVJST1IiLCJBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiIsIkFDVElPTl9WRVJTSU9OX0lORk8iLCJJTklUSUFMX09WRVJMQVlfU1RBVEUiLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJ1c2VFcnJvck92ZXJsYXlSZWR1Y2VyIiwicHVzaEVycm9yRmlsdGVyRHVwbGljYXRlcyIsImVycm9ycyIsImVyciIsImZpbHRlciIsImUiLCJldmVudCIsInJlYXNvbiIsIm5leHRJZCIsImJ1aWxkRXJyb3IiLCJub3RGb3VuZCIsInJlZnJlc2hTdGF0ZSIsInR5cGUiLCJyb290TGF5b3V0TWlzc2luZ1RhZ3MiLCJ2ZXJzaW9uSW5mbyIsImluc3RhbGxlZCIsInN0YWxlbmVzcyIsInVzZVJlZHVjZXIiLCJfc3RhdGUiLCJhY3Rpb24iLCJtZXNzYWdlIiwiaWQiLCJfIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/react-dev-overlay/shared.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/detect-domain-locale.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/detect-domain-locale.js ***!
|
||
\***************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"detectDomainLocale\", ({\n enumerable: true,\n get: function() {\n return detectDomainLocale;\n }\n}));\nconst detectDomainLocale = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (false) {}\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=detect-domain-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXRlY3QtZG9tYWluLWxvY2FsZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUVhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxxQkFBZ0M7cUNBQUlDLE9BQUFBLElBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLE9BQUFBLE1BQUFBLE9BQUFBO1FBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztJQUMvQyxJQUFJQyxLQUErQixFQUFFLEVBSXJDO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvZGV0ZWN0LWRvbWFpbi1sb2NhbGUudHM/NjhmYyJdLCJuYW1lcyI6WyJkZXRlY3REb21haW5Mb2NhbGUiLCJhcmdzIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/detect-domain-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/dev/dev-build-watcher.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/dev-build-watcher.js ***!
|
||
\****************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* eslint-disable @typescript-eslint/no-use-before-define */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return initializeBuildWatcher;\n }\n}));\nconst _hotreloadertypes = __webpack_require__(/*! ../../server/dev/hot-reloader-types */ \"./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _websocket = __webpack_require__(/*! ../components/react-dev-overlay/pages/websocket */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\");\nfunction initializeBuildWatcher(toggleCallback, position) {\n if (position === void 0) position = \"bottom-right\";\n const shadowHost = document.createElement(\"div\");\n const [verticalProperty, horizontalProperty] = position.split(\"-\", 2);\n shadowHost.id = \"__next-build-watcher\";\n // Make sure container is fixed and on a high zIndex so it shows\n shadowHost.style.position = \"fixed\";\n // Ensure container's position to be top or bottom (default)\n shadowHost.style[verticalProperty] = \"10px\";\n // Ensure container's position to be left or right (default)\n shadowHost.style[horizontalProperty] = \"20px\";\n shadowHost.style.width = \"0\";\n shadowHost.style.height = \"0\";\n shadowHost.style.zIndex = \"99999\";\n document.body.appendChild(shadowHost);\n let shadowRoot;\n let prefix = \"\";\n if (shadowHost.attachShadow) {\n shadowRoot = shadowHost.attachShadow({\n mode: \"open\"\n });\n } else {\n // If attachShadow is undefined then the browser does not support\n // the Shadow DOM, we need to prefix all the names so there\n // will be no conflicts\n shadowRoot = shadowHost;\n prefix = \"__next-build-watcher-\";\n }\n // Container\n const container = createContainer(prefix);\n shadowRoot.appendChild(container);\n // CSS\n const css = createCss(prefix, {\n horizontalProperty,\n verticalProperty\n });\n shadowRoot.appendChild(css);\n // State\n let isVisible = false;\n let isBuilding = false;\n let timeoutId = null;\n // Handle events\n (0, _websocket.addMessageListener)((obj)=>{\n try {\n handleMessage(obj);\n } catch (e) {}\n });\n function show() {\n timeoutId && clearTimeout(timeoutId);\n isVisible = true;\n isBuilding = true;\n updateContainer();\n }\n function hide() {\n isBuilding = false;\n // Wait for the fade out transition to complete\n timeoutId = setTimeout(()=>{\n isVisible = false;\n updateContainer();\n }, 100);\n updateContainer();\n }\n function handleMessage(obj) {\n if (!(\"action\" in obj)) {\n return;\n }\n // eslint-disable-next-line default-case\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n show();\n break;\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n hide();\n break;\n }\n }\n toggleCallback({\n show,\n hide\n });\n function updateContainer() {\n if (isBuilding) {\n container.classList.add(\"\" + prefix + \"building\");\n } else {\n container.classList.remove(\"\" + prefix + \"building\");\n }\n if (isVisible) {\n container.classList.add(\"\" + prefix + \"visible\");\n } else {\n container.classList.remove(\"\" + prefix + \"visible\");\n }\n }\n}\nfunction createContainer(prefix) {\n const container = document.createElement(\"div\");\n container.id = \"\" + prefix + \"container\";\n container.innerHTML = '\\n <div id=\"' + prefix + 'icon-wrapper\">\\n <svg viewBox=\"0 0 226 200\">\\n <defs>\\n <linearGradient\\n x1=\"114.720775%\"\\n y1=\"181.283245%\"\\n x2=\"39.5399306%\"\\n y2=\"100%\"\\n id=\"' + prefix + 'linear-gradient\"\\n >\\n <stop stop-color=\"#000000\" offset=\"0%\" />\\n <stop stop-color=\"#FFFFFF\" offset=\"100%\" />\\n </linearGradient>\\n </defs>\\n <g id=\"' + prefix + 'icon-group\" fill=\"none\" stroke=\"url(#' + prefix + 'linear-gradient)\" stroke-width=\"18\">\\n <path d=\"M113,5.08219117 L4.28393801,197.5 L221.716062,197.5 L113,5.08219117 Z\" />\\n </g>\\n </svg>\\n </div>\\n ';\n return container;\n}\nfunction createCss(prefix, param) {\n let { horizontalProperty, verticalProperty } = param;\n const css = document.createElement(\"style\");\n css.textContent = \"\\n #\" + prefix + \"container {\\n position: absolute;\\n \" + verticalProperty + \": 10px;\\n \" + horizontalProperty + \": 30px;\\n\\n border-radius: 3px;\\n background: #000;\\n color: #fff;\\n font: initial;\\n cursor: initial;\\n letter-spacing: initial;\\n text-shadow: initial;\\n text-transform: initial;\\n visibility: initial;\\n\\n padding: 7px 10px 8px 10px;\\n align-items: center;\\n box-shadow: 0 11px 40px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\\n\\n display: none;\\n opacity: 0;\\n transition: opacity 0.1s ease, \" + verticalProperty + \" 0.1s ease;\\n animation: \" + prefix + \"fade-in 0.1s ease-in-out;\\n }\\n\\n #\" + prefix + \"container.\" + prefix + \"visible {\\n display: flex;\\n }\\n\\n #\" + prefix + \"container.\" + prefix + \"building {\\n \" + verticalProperty + \": 20px;\\n opacity: 1;\\n }\\n\\n #\" + prefix + \"icon-wrapper {\\n width: 16px;\\n height: 16px;\\n }\\n\\n #\" + prefix + \"icon-wrapper > svg {\\n width: 100%;\\n height: 100%;\\n }\\n\\n #\" + prefix + \"icon-group {\\n animation: \" + prefix + \"strokedash 1s ease-in-out both infinite;\\n }\\n\\n @keyframes \" + prefix + \"fade-in {\\n from {\\n \" + verticalProperty + \": 10px;\\n opacity: 0;\\n }\\n to {\\n \" + verticalProperty + \": 20px;\\n opacity: 1;\\n }\\n }\\n\\n @keyframes \" + prefix + \"strokedash {\\n 0% {\\n stroke-dasharray: 0 226;\\n }\\n 80%,\\n 100% {\\n stroke-dasharray: 659 226;\\n }\\n }\\n \";\n return css;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=dev-build-watcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZGV2LWJ1aWxkLXdhdGNoZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsMERBQTBEOzs7OzJDQWExRDs7O2VBQXdCQTs7OzhDQVpvQjt1Q0FFVDtBQVVwQixTQUFTQSx1QkFDdEJDLGNBQW1ELEVBQ25EQyxRQUF5QjtJQUF6QkEsSUFBQUEsYUFBQUEsS0FBQUEsR0FBQUEsV0FBVztJQUVYLE1BQU1DLGFBQWFDLFNBQVNDLGFBQWEsQ0FBQztJQUMxQyxNQUFNLENBQUNDLGtCQUFrQkMsbUJBQW1CLEdBQUdMLFNBQVNNLEtBQUssQ0FBQyxLQUFLO0lBSW5FTCxXQUFXTSxFQUFFLEdBQUc7SUFDaEIsZ0VBQWdFO0lBQ2hFTixXQUFXTyxLQUFLLENBQUNSLFFBQVEsR0FBRztJQUM1Qiw0REFBNEQ7SUFDNURDLFdBQVdPLEtBQUssQ0FBQ0osaUJBQWlCLEdBQUc7SUFDckMsNERBQTREO0lBQzVESCxXQUFXTyxLQUFLLENBQUNILG1CQUFtQixHQUFHO0lBQ3ZDSixXQUFXTyxLQUFLLENBQUNDLEtBQUssR0FBRztJQUN6QlIsV0FBV08sS0FBSyxDQUFDRSxNQUFNLEdBQUc7SUFDMUJULFdBQVdPLEtBQUssQ0FBQ0csTUFBTSxHQUFHO0lBQzFCVCxTQUFTVSxJQUFJLENBQUNDLFdBQVcsQ0FBQ1o7SUFFMUIsSUFBSWE7SUFDSixJQUFJQyxTQUFTO0lBRWIsSUFBSWQsV0FBV2UsWUFBWSxFQUFFO1FBQzNCRixhQUFhYixXQUFXZSxZQUFZLENBQUM7WUFBRUMsTUFBTTtRQUFPO0lBQ3RELE9BQU87UUFDTCxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELHVCQUF1QjtRQUN2QkgsYUFBYWI7UUFDYmMsU0FBUztJQUNYO0lBRUEsWUFBWTtJQUNaLE1BQU1HLFlBQVlDLGdCQUFnQko7SUFDbENELFdBQVdELFdBQVcsQ0FBQ0s7SUFFdkIsTUFBTTtJQUNOLE1BQU1FLE1BQU1DLFVBQVVOLFFBQVE7UUFBRVY7UUFBb0JEO0lBQWlCO0lBQ3JFVSxXQUFXRCxXQUFXLENBQUNPO0lBRXZCLFFBQVE7SUFDUixJQUFJRSxZQUFZO0lBQ2hCLElBQUlDLGFBQWE7SUFDakIsSUFBSUMsWUFBa0Q7SUFFdEQsZ0JBQWdCO0lBRWhCQyxDQUFBQSxHQUFBQSxXQUFBQSxrQkFBa0IsRUFBQyxDQUFDQztRQUNsQixJQUFJO1lBQ0ZDLGNBQWNEO1FBQ2hCLEVBQUUsT0FBQUUsR0FBTSxDQUFDO0lBQ1g7SUFFQSxTQUFTQztRQUNQTCxhQUFhTSxhQUFhTjtRQUMxQkYsWUFBWTtRQUNaQyxhQUFhO1FBQ2JRO0lBQ0Y7SUFFQSxTQUFTQztRQUNQVCxhQUFhO1FBQ2IsK0NBQStDO1FBQy9DQyxZQUFZUyxXQUFXO1lBQ3JCWCxZQUFZO1lBQ1pTO1FBQ0YsR0FBRztRQUNIQTtJQUNGO0lBRUEsU0FBU0osY0FBY0QsR0FBcUI7UUFDMUMsSUFBSSxDQUFFLGFBQVlBLEdBQUFBLEdBQU07WUFDdEI7UUFDRjtRQUVBLHdDQUF3QztRQUN4QyxPQUFRQSxJQUFJUSxNQUFNO1lBQ2hCLEtBQUtDLGtCQUFBQSwyQkFBMkIsQ0FBQ0MsUUFBUTtnQkFDdkNQO2dCQUNBO1lBQ0YsS0FBS00sa0JBQUFBLDJCQUEyQixDQUFDRSxLQUFLO1lBQ3RDLEtBQUtGLGtCQUFBQSwyQkFBMkIsQ0FBQ0csSUFBSTtnQkFDbkNOO2dCQUNBO1FBQ0o7SUFDRjtJQUVBakMsZUFBZTtRQUNiOEI7UUFDQUc7SUFDRjtJQUVBLFNBQVNEO1FBQ1AsSUFBSVIsWUFBWTtZQUNkTCxVQUFVcUIsU0FBUyxDQUFDQyxHQUFHLENBQUMsS0FBR3pCLFNBQU87UUFDcEMsT0FBTztZQUNMRyxVQUFVcUIsU0FBUyxDQUFDRSxNQUFNLENBQUMsS0FBRzFCLFNBQU87UUFDdkM7UUFFQSxJQUFJTyxXQUFXO1lBQ2JKLFVBQVVxQixTQUFTLENBQUNDLEdBQUcsQ0FBQyxLQUFHekIsU0FBTztRQUNwQyxPQUFPO1lBQ0xHLFVBQVVxQixTQUFTLENBQUNFLE1BQU0sQ0FBQyxLQUFHMUIsU0FBTztRQUN2QztJQUNGO0FBQ0Y7QUFFQSxTQUFTSSxnQkFBZ0JKLE1BQWM7SUFDckMsTUFBTUcsWUFBWWhCLFNBQVNDLGFBQWEsQ0FBQztJQUN6Q2UsVUFBVVgsRUFBRSxHQUFHLEtBQUdRLFNBQU87SUFDekJHLFVBQVV3QixTQUFTLEdBQUcsb0JBQ1QzQixTQUFPLG9PQVFKQSxTQUFPLGlOQU1SQSxTQUFPLDBDQUF1Q0EsU0FBTztJQU9wRSxPQUFPRztBQUNUO0FBRUEsU0FBU0csVUFDUE4sTUFBYyxFQUNkNEIsS0FHMkQ7SUFIM0QsTUFDRXRDLGtCQUFrQixFQUNsQkQsZ0JBQWdCLEVBQ3lDLEdBSDNEdUM7SUFLQSxNQUFNdkIsTUFBTWxCLFNBQVNDLGFBQWEsQ0FBQztJQUNuQ2lCLElBQUl3QixXQUFXLEdBQUcsWUFDYjdCLFNBQU8sbURBRU5YLG1CQUFpQixvQkFDakJDLHFCQUFtQix3ZUFrQllELG1CQUFpQixtQ0FDckNXLFNBQU8sOENBR25CQSxTQUFPLGVBQVlBLFNBQU8sb0RBSTFCQSxTQUFPLGVBQVlBLFNBQU8sdUJBQ3pCWCxtQkFBaUIsK0NBSWxCVyxTQUFPLDRFQUtQQSxTQUFPLGtGQUtQQSxTQUFPLG9DQUNLQSxTQUFPLHVFQUdUQSxTQUFPLHNDQUVkWCxtQkFBaUIsZ0VBSWpCQSxtQkFBaUIsb0VBS1ZXLFNBQU87SUFXdEIsT0FBT0s7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9kZXYvZGV2LWJ1aWxkLXdhdGNoZXIudHM/YzQ4OSJdLCJuYW1lcyI6WyJpbml0aWFsaXplQnVpbGRXYXRjaGVyIiwidG9nZ2xlQ2FsbGJhY2siLCJwb3NpdGlvbiIsInNoYWRvd0hvc3QiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2ZXJ0aWNhbFByb3BlcnR5IiwiaG9yaXpvbnRhbFByb3BlcnR5Iiwic3BsaXQiLCJpZCIsInN0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ6SW5kZXgiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJzaGFkb3dSb290IiwicHJlZml4IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsImNvbnRhaW5lciIsImNyZWF0ZUNvbnRhaW5lciIsImNzcyIsImNyZWF0ZUNzcyIsImlzVmlzaWJsZSIsImlzQnVpbGRpbmciLCJ0aW1lb3V0SWQiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJvYmoiLCJoYW5kbGVNZXNzYWdlIiwiZSIsInNob3ciLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVDb250YWluZXIiLCJoaWRlIiwic2V0VGltZW91dCIsImFjdGlvbiIsIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiIsIkJVSUxESU5HIiwiQlVJTFQiLCJTWU5DIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiaW5uZXJIVE1MIiwicGFyYW0iLCJ0ZXh0Q29udGVudCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/dev-build-watcher.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/dev/fouc.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/fouc.js ***!
|
||
\***************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This wrapper function is used to safely select the best available function\n// to schedule removal of the no-FOUC styles workaround. requestAnimationFrame\n// is the ideal choice, but when used in iframes, there are no guarantees that\n// the callback will actually be called, which could stall the promise returned\n// from displayContent.\n//\n// See: https://www.vector-logic.com/blog/posts/on-request-animation-frame-and-embedded-iframes\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"displayContent\", ({\n enumerable: true,\n get: function() {\n return displayContent;\n }\n}));\nconst safeCallbackQueue = (callback)=>{\n if (window.requestAnimationFrame && window.self === window.top) {\n window.requestAnimationFrame(callback);\n } else {\n window.setTimeout(callback);\n }\n};\nfunction displayContent() {\n return new Promise((resolve)=>{\n safeCallbackQueue(function() {\n for(var x = document.querySelectorAll(\"[data-next-hide-fouc]\"), i = x.length; i--;){\n x[i].parentNode.removeChild(x[i]);\n }\n resolve();\n });\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fouc.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZm91Yy5qcyIsIm1hcHBpbmdzIjoiQUFBQSw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsdUJBQXVCO0FBQ3ZCLEVBQUU7QUFDRiwrRkFBK0Y7Ozs7O2tEQVkvRUE7OztlQUFBQTs7O0FBWGhCLE1BQU1DLG9CQUFvQixDQUFDQztJQUN6QixJQUFJQyxPQUFPQyxxQkFBcUIsSUFBSUQsT0FBT0UsSUFBSSxLQUFLRixPQUFPRyxHQUFHLEVBQUU7UUFDOURILE9BQU9DLHFCQUFxQixDQUFDRjtJQUMvQixPQUFPO1FBQ0xDLE9BQU9JLFVBQVUsQ0FBQ0w7SUFDcEI7QUFDRjtBQUtPLFNBQVNGO0lBQ2QsT0FBTyxJQUFJUSxRQUFRLENBQUNDO1FBQ2xCUixrQkFBa0I7WUFDaEIsSUFDRSxJQUFJUyxJQUFJQyxTQUFTQyxnQkFBZ0IsQ0FBQywwQkFDaENDLElBQUlILEVBQUVJLE1BQU0sRUFDZEQsS0FFQTtnQkFDQUgsQ0FBQyxDQUFDRyxFQUFFLENBQUNFLFVBQVUsQ0FBRUMsV0FBVyxDQUFDTixDQUFDLENBQUNHLEVBQUU7WUFDbkM7WUFDQUo7UUFDRjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvZGV2L2ZvdWMudHM/MDEyYyJdLCJuYW1lcyI6WyJkaXNwbGF5Q29udGVudCIsInNhZmVDYWxsYmFja1F1ZXVlIiwiY2FsbGJhY2siLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZWxmIiwidG9wIiwic2V0VGltZW91dCIsIlByb21pc2UiLCJyZXNvbHZlIiwieCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImkiLCJsZW5ndGgiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/fouc.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/dev/hot-middleware-client.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-middleware-client.js ***!
|
||
\********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _hotreloaderclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../components/react-dev-overlay/pages/hot-reloader-client */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/hot-reloader-client.js\"));\nconst _websocket = __webpack_require__(/*! ../components/react-dev-overlay/pages/websocket */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\");\nlet reloading = false;\nconst _default = (mode)=>{\n const devClient = (0, _hotreloaderclient.default)(mode);\n devClient.subscribeToHmrEvent((obj)=>{\n if (reloading) return;\n // if we're on an error/404 page, we can't reliably tell if the newly added/removed page\n // matches the current path. In that case, assume any added/removed entries should trigger a reload of the current page\n const isOnErrorPage = window.next.router.pathname === \"/404\" || window.next.router.pathname === \"/_error\";\n switch(obj.action){\n case \"reloadPage\":\n {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-reload-page\",\n clientId: window.__nextDevClientId\n }));\n reloading = true;\n return window.location.reload();\n }\n case \"removedPage\":\n {\n const [page] = obj.data;\n if (page === window.next.router.pathname || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-removed-page\",\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case \"addedPage\":\n {\n const [page] = obj.data;\n if (page === window.next.router.pathname && typeof window.next.router.components[page] === \"undefined\" || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-added-page\",\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case \"serverError\":\n case \"devPagesManifestUpdate\":\n case \"building\":\n case \"finishBuilding\":\n {\n return;\n }\n default:\n {\n throw new Error(\"Unexpected action \" + obj.action);\n }\n }\n });\n return devClient;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-middleware-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvaG90LW1pZGRsZXdhcmUtY2xpZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBS0E7OztlQUFBQTs7Ozt3RkFMb0I7dUNBQ1E7QUFFNUIsSUFBSUMsWUFBWTtNQUVoQkQsV0FBZSxDQUFDRTtJQUNkLE1BQU1DLFlBQVlDLENBQUFBLEdBQUFBLG1CQUFBQSxPQUFPLEVBQUNGO0lBRTFCQyxVQUFVRSxtQkFBbUIsQ0FBQyxDQUFDQztRQUM3QixJQUFJTCxXQUFXO1FBQ2Ysd0ZBQXdGO1FBQ3hGLHVIQUF1SDtRQUN2SCxNQUFNTSxnQkFDSkMsT0FBT0MsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsS0FBSyxVQUNoQ0gsT0FBT0MsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsS0FBSztRQUVsQyxPQUFRTCxJQUFJTSxNQUFNO1lBQ2hCLEtBQUs7Z0JBQWM7b0JBQ2pCQyxDQUFBQSxHQUFBQSxXQUFBQSxXQUFXLEVBQ1RDLEtBQUtDLFNBQVMsQ0FBQzt3QkFDYkMsT0FBTzt3QkFDUEMsVUFBVVQsT0FBT1UsaUJBQWlCO29CQUNwQztvQkFFRmpCLFlBQVk7b0JBQ1osT0FBT08sT0FBT1csUUFBUSxDQUFDQyxNQUFNO2dCQUMvQjtZQUNBLEtBQUs7Z0JBQWU7b0JBQ2xCLE1BQU0sQ0FBQ0MsS0FBSyxHQUFHZixJQUFJZ0IsSUFBSTtvQkFDdkIsSUFBSUQsU0FBU2IsT0FBT0MsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsSUFBSUosZUFBZTt3QkFDekRNLENBQUFBLEdBQUFBLFdBQUFBLFdBQVcsRUFDVEMsS0FBS0MsU0FBUyxDQUFDOzRCQUNiQyxPQUFPOzRCQUNQQyxVQUFVVCxPQUFPVSxpQkFBaUI7NEJBQ2xDRzt3QkFDRjt3QkFFRixPQUFPYixPQUFPVyxRQUFRLENBQUNDLE1BQU07b0JBQy9CO29CQUNBO2dCQUNGO1lBQ0EsS0FBSztnQkFBYTtvQkFDaEIsTUFBTSxDQUFDQyxLQUFLLEdBQUdmLElBQUlnQixJQUFJO29CQUN2QixJQUNFRCxTQUFVYixPQUFPQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxJQUNuQyxPQUFPSCxPQUFPQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ2EsVUFBVSxDQUFDRixLQUFLLEtBQUssZUFDakRkLGVBQ0E7d0JBQ0FNLENBQUFBLEdBQUFBLFdBQUFBLFdBQVcsRUFDVEMsS0FBS0MsU0FBUyxDQUFDOzRCQUNiQyxPQUFPOzRCQUNQQyxVQUFVVCxPQUFPVSxpQkFBaUI7NEJBQ2xDRzt3QkFDRjt3QkFFRixPQUFPYixPQUFPVyxRQUFRLENBQUNDLE1BQU07b0JBQy9CO29CQUNBO2dCQUNGO1lBQ0EsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztnQkFBa0I7b0JBQ3JCO2dCQUNGO1lBQ0E7Z0JBQVM7b0JBQ1AsTUFBTSxJQUFJSSxNQUFNLHVCQUF1QmxCLElBQUlNLE1BQU07Z0JBQ25EO1FBQ0Y7SUFDRjtJQUVBLE9BQU9UO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvZGV2L2hvdC1taWRkbGV3YXJlLWNsaWVudC50cz8xYmI5Il0sIm5hbWVzIjpbIl9kZWZhdWx0IiwicmVsb2FkaW5nIiwibW9kZSIsImRldkNsaWVudCIsImNvbm5lY3QiLCJzdWJzY3JpYmVUb0htckV2ZW50Iiwib2JqIiwiaXNPbkVycm9yUGFnZSIsIndpbmRvdyIsIm5leHQiLCJyb3V0ZXIiLCJwYXRobmFtZSIsImFjdGlvbiIsInNlbmRNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiY2xpZW50SWQiLCJfX25leHREZXZDbGllbnRJZCIsImxvY2F0aW9uIiwicmVsb2FkIiwicGFnZSIsImRhdGEiLCJjb21wb25lbnRzIiwiRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/hot-middleware-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/dev/on-demand-entries-client.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/on-demand-entries-client.js ***!
|
||
\***********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../router */ \"./node_modules/next/dist/client/router.js\"));\nconst _websocket = __webpack_require__(/*! ../components/react-dev-overlay/pages/websocket */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\");\nconst _default = async (page)=>{\n if (page) {\n // in AMP the router isn't initialized on the client and\n // client-transitions don't occur so ping initial page\n setInterval(()=>{\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"ping\",\n page\n }));\n }, 2500);\n } else {\n _router.default.ready(()=>{\n setInterval(()=>{\n // when notFound: true is returned we should use the notFoundPage\n // as the Router.pathname will point to the 404 page but we want\n // to ping the source page that returned notFound: true instead\n const notFoundSrcPage = self.__NEXT_DATA__.notFoundSrcPage;\n const pathname = (_router.default.pathname === \"/404\" || _router.default.pathname === \"/_error\") && notFoundSrcPage ? notFoundSrcPage : _router.default.pathname;\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"ping\",\n page: pathname\n }));\n }, 2500);\n });\n }\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-demand-entries-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBR0E7OztlQUFBQTs7Ozs2RUFIbUI7dUNBQ1M7TUFFNUJBLFdBQWUsT0FBT0M7SUFDcEIsSUFBSUEsTUFBTTtRQUNSLHdEQUF3RDtRQUN4RCxzREFBc0Q7UUFDdERDLFlBQVk7WUFDVkMsQ0FBQUEsR0FBQUEsV0FBQUEsV0FBVyxFQUFDQyxLQUFLQyxTQUFTLENBQUM7Z0JBQUVDLE9BQU87Z0JBQVFMO1lBQUs7UUFDbkQsR0FBRztJQUNMLE9BQU87UUFDTE0sUUFBQUEsT0FBTSxDQUFDQyxLQUFLLENBQUM7WUFDWE4sWUFBWTtnQkFDVixpRUFBaUU7Z0JBQ2pFLGdFQUFnRTtnQkFDaEUsK0RBQStEO2dCQUMvRCxNQUFNTyxrQkFBa0JDLEtBQUtDLGFBQWEsQ0FBQ0YsZUFBZTtnQkFDMUQsTUFBTUcsV0FDSixDQUFDTCxRQUFBQSxPQUFNLENBQUNLLFFBQVEsS0FBSyxVQUFVTCxRQUFBQSxPQUFNLENBQUNLLFFBQVEsS0FBSyxjQUNuREgsa0JBQ0lBLGtCQUNBRixRQUFBQSxPQUFNLENBQUNLLFFBQVE7Z0JBRXJCVCxDQUFBQSxHQUFBQSxXQUFBQSxXQUFXLEVBQUNDLEtBQUtDLFNBQVMsQ0FBQztvQkFBRUMsT0FBTztvQkFBUUwsTUFBTVc7Z0JBQVM7WUFDN0QsR0FBRztRQUNMO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9kZXYvb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LnRzPzQ0YTYiXSwibmFtZXMiOlsiX2RlZmF1bHQiLCJwYWdlIiwic2V0SW50ZXJ2YWwiLCJzZW5kTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsIlJvdXRlciIsInJlYWR5Iiwibm90Rm91bmRTcmNQYWdlIiwic2VsZiIsIl9fTkVYVF9EQVRBX18iLCJwYXRobmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/on-demand-entries-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/has-base-path.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/has-base-path.js ***!
|
||
\********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || \"\";\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oYXMtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7K0NBSWdCQTs7O2VBQUFBOzs7MkNBSmM7QUFFOUIsTUFBTUMsV0FBV0MsTUFBbUMsSUFBZTtBQUU1RCxTQUFTRixZQUFZSyxJQUFZO0lBQ3RDLE9BQU9DLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFBQ0QsTUFBTUo7QUFDN0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvaGFzLWJhc2UtcGF0aC50cz9hMzEyIl0sIm5hbWVzIjpbImhhc0Jhc2VQYXRoIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJwYXRoSGFzUHJlZml4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/has-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/head-manager.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/head-manager.js ***!
|
||
\*******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DOMAttributeNames: function() {\n return DOMAttributeNames;\n },\n default: function() {\n return initHeadManager;\n },\n isEqualNode: function() {\n return isEqualNode;\n }\n});\nconst DOMAttributeNames = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n noModule: \"noModule\"\n};\nfunction reactElementToDOM(param) {\n let { type, props } = param;\n const el = document.createElement(type);\n for(const p in props){\n if (!props.hasOwnProperty(p)) continue;\n if (p === \"children\" || p === \"dangerouslySetInnerHTML\") continue;\n // we don't render undefined props to the DOM\n if (props[p] === undefined) continue;\n const attr = DOMAttributeNames[p] || p.toLowerCase();\n if (type === \"script\" && (attr === \"async\" || attr === \"defer\" || attr === \"noModule\")) {\n el[attr] = !!props[p];\n } else {\n el.setAttribute(attr, props[p]);\n }\n }\n const { children, dangerouslySetInnerHTML } = props;\n if (dangerouslySetInnerHTML) {\n el.innerHTML = dangerouslySetInnerHTML.__html || \"\";\n } else if (children) {\n el.textContent = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n }\n return el;\n}\nfunction isEqualNode(oldTag, newTag) {\n if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {\n const nonce = newTag.getAttribute(\"nonce\");\n // Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not\n // be stripped if there is no content security policy response header that includes a nonce.\n if (nonce && !oldTag.getAttribute(\"nonce\")) {\n const cloneTag = newTag.cloneNode(true);\n cloneTag.setAttribute(\"nonce\", \"\");\n cloneTag.nonce = nonce;\n return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag);\n }\n }\n return oldTag.isEqualNode(newTag);\n}\nlet updateElements;\nif (false) {} else {\n updateElements = (type, components)=>{\n const headEl = document.getElementsByTagName(\"head\")[0];\n const headCountEl = headEl.querySelector(\"meta[name=next-head-count]\");\n if (true) {\n if (!headCountEl) {\n console.error(\"Warning: next-head-count is missing. https://nextjs.org/docs/messages/next-head-count-missing\");\n return;\n }\n }\n const headCount = Number(headCountEl.content);\n const oldTags = [];\n for(let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = (j == null ? void 0 : j.previousElementSibling) || null){\n var _j_tagName;\n if ((j == null ? void 0 : (_j_tagName = j.tagName) == null ? void 0 : _j_tagName.toLowerCase()) === type) {\n oldTags.push(j);\n }\n }\n const newTags = components.map(reactElementToDOM).filter((newTag)=>{\n for(let k = 0, len = oldTags.length; k < len; k++){\n const oldTag = oldTags[k];\n if (isEqualNode(oldTag, newTag)) {\n oldTags.splice(k, 1);\n return false;\n }\n }\n return true;\n });\n oldTags.forEach((t)=>{\n var _t_parentNode;\n return (_t_parentNode = t.parentNode) == null ? void 0 : _t_parentNode.removeChild(t);\n });\n newTags.forEach((t)=>headEl.insertBefore(t, headCountEl));\n headCountEl.content = (headCount - oldTags.length + newTags.length).toString();\n };\n}\nfunction initHeadManager() {\n return {\n mountedInstances: new Set(),\n updateHead: (head)=>{\n const tags = {};\n head.forEach((h)=>{\n if (// it won't be inlined. In this case revert to the original behavior\n h.type === \"link\" && h.props[\"data-optimized-fonts\"]) {\n if (document.querySelector('style[data-href=\"' + h.props[\"data-href\"] + '\"]')) {\n return;\n } else {\n h.props.href = h.props[\"data-href\"];\n h.props[\"data-href\"] = undefined;\n }\n }\n const components = tags[h.type] || [];\n components.push(h);\n tags[h.type] = components;\n });\n const titleComponent = tags.title ? tags.title[0] : null;\n let title = \"\";\n if (titleComponent) {\n const { children } = titleComponent.props;\n title = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n }\n if (title !== document.title) document.title = title;\n [\n \"meta\",\n \"base\",\n \"link\",\n \"style\",\n \"script\"\n ].forEach((type)=>{\n updateElements(type, tags[type] || []);\n });\n }\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head-manager.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oZWFkLW1hbmFnZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLG1CQUFpQjtlQUFqQkE7O0lBbUxiQyxTQWdEQztlQWhEdUJDOztJQTNIUkMsYUFBVztlQUFYQTs7O0FBeERULE1BQU1ILG9CQUE0QztJQUN2REksZUFBZTtJQUNmQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxVQUFVO0FBQ1o7QUFFQSxTQUFTQyxrQkFBa0JDLEtBQTRCO0lBQTVCLE1BQUVDLElBQUksRUFBRUMsS0FBSyxFQUFlLEdBQTVCRjtJQUN6QixNQUFNRyxLQUFrQkMsU0FBU0MsYUFBYSxDQUFDSjtJQUMvQyxJQUFLLE1BQU1LLEtBQUtKLE1BQU87UUFDckIsSUFBSSxDQUFDQSxNQUFNSyxjQUFjLENBQUNELElBQUk7UUFDOUIsSUFBSUEsTUFBTSxjQUFjQSxNQUFNLDJCQUEyQjtRQUV6RCw2Q0FBNkM7UUFDN0MsSUFBSUosS0FBSyxDQUFDSSxFQUFFLEtBQUtFLFdBQVc7UUFFNUIsTUFBTUMsT0FBT25CLGlCQUFpQixDQUFDZ0IsRUFBRSxJQUFJQSxFQUFFSSxXQUFXO1FBQ2xELElBQ0VULFNBQVMsWUFDUlEsQ0FBQUEsU0FBUyxXQUFXQSxTQUFTLFdBQVdBLFNBQVMsYUFDbEQ7WUFDRU4sRUFBd0IsQ0FBQ00sS0FBSyxHQUFHLENBQUMsQ0FBQ1AsS0FBSyxDQUFDSSxFQUFFO1FBQy9DLE9BQU87WUFDTEgsR0FBR1EsWUFBWSxDQUFDRixNQUFNUCxLQUFLLENBQUNJLEVBQUU7UUFDaEM7SUFDRjtJQUVBLE1BQU0sRUFBRU0sUUFBUSxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHWDtJQUM5QyxJQUFJVyx5QkFBeUI7UUFDM0JWLEdBQUdXLFNBQVMsR0FBR0Qsd0JBQXdCRSxNQUFNLElBQUk7SUFDbkQsT0FBTyxJQUFJSCxVQUFVO1FBQ25CVCxHQUFHYSxXQUFXLEdBQ1osT0FBT0osYUFBYSxXQUNoQkEs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Q0YsT0FBTzt3QkFDTHlFLEVBQUV6RSxLQUFLLENBQUMwRSxJQUFJLEdBQUdELEVBQUV6RSxLQUFLLENBQUMsWUFBWTt3QkFDbkN5RSxFQUFFekUsS0FBSyxDQUFDLFlBQVksR0FBR007b0JBQ3pCO2dCQUNGO2dCQUVBLE1BQU11QixhQUFhMkMsSUFBSSxDQUFDQyxFQUFFMUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDckM4QixXQUFXTyxJQUFJLENBQUNxQztnQkFDaEJELElBQUksQ0FBQ0MsRUFBRTFFLElBQUksQ0FBQyxHQUFHOEI7WUFDakI7WUFFQSxNQUFNOEMsaUJBQWlCSCxLQUFLSSxLQUFLLEdBQUdKLEtBQUtJLEtBQUssQ0FBQyxFQUFFLEdBQUc7WUFDcEQsSUFBSUEsUUFBUTtZQUNaLElBQUlELGdCQUFnQjtnQkFDbEIsTUFBTSxFQUFFakUsUUFBUSxFQUFFLEdBQUdpRSxlQUFlM0UsS0FBSztnQkFDekM0RSxRQUNFLE9BQU9sRSxhQUFhLFdBQ2hCQSxXQUNBSyxNQUFNQyxPQUFPLENBQUNOLFlBQ2RBLFNBQVNPLElBQUksQ0FBQyxNQUNkO1lBQ1I7WUFDQSxJQUFJMkQsVUFBVTFFLFNBQVMwRSxLQUFLLEVBQUUxRSxTQUFTMEUsS0FBSyxHQUFHQTtZQUM5QztnQkFBQztnQkFBUTtnQkFBUTtnQkFBUTtnQkFBUzthQUFTLENBQUMzQixPQUFPLENBQUMsQ0FBQ2xEO2dCQUNwRDBCLGVBQWUxQixNQUFNeUUsSUFBSSxDQUFDekUsS0FBSyxJQUFJLEVBQUU7WUFDdkM7UUFDRjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvaGVhZC1tYW5hZ2VyLnRzPzcxMDkiXSwibmFtZXMiOlsiRE9NQXR0cmlidXRlTmFtZXMiLCJkZWZhdWx0IiwiaW5pdEhlYWRNYW5hZ2VyIiwiaXNFcXVhbE5vZGUiLCJhY2NlcHRDaGFyc2V0IiwiY2xhc3NOYW1lIiwiaHRtbEZvciIsImh0dHBFcXVpdiIsIm5vTW9kdWxlIiwicmVhY3RFbGVtZW50VG9ET00iLCJwYXJhbSIsInR5cGUiLCJwcm9wcyIsImVsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicCIsImhhc093blByb3BlcnR5IiwidW5kZWZpbmVkIiwiYXR0ciIsInRvTG93ZXJDYXNlIiwic2V0QXR0cmlidXRlIiwiY2hpbGRyZW4iLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImlubmVySFRNTCIsIl9faHRtbCIsInRleHRDb250ZW50IiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsIm9sZFRhZyIsIm5ld1RhZyIsIkhUTUxFbGVtZW50Iiwibm9uY2UiLCJnZXRBdHRyaWJ1dGUiLCJjbG9uZVRhZyIsImNsb25lTm9kZSIsInVwZGF0ZUVsZW1lbnRzIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9TVFJJQ1RfTkVYVF9IRUFEIiwiY29tcG9uZW50cyIsImhlYWRFbCIsInF1ZXJ5U2VsZWN0b3IiLCJoZWFkTWV0YVRhZ3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwib2xkVGFncyIsIm1ldGFDaGFyc2V0IiwicHVzaCIsImkiLCJsZW5ndGgiLCJoZWFkVGFnIiwibWV0YVRhZyIsIm5leHRTaWJsaW5nIiwidGFnTmFtZSIsIm5ld1RhZ3MiLCJtYXAiLCJmaWx0ZXIiLCJrIiwibGVuIiwic3BsaWNlIiwiZm9yRWFjaCIsInQiLCJwcmV2aW91c1NpYmxpbmciLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJtZXRhIiwibmFtZSIsImNvbnRlbnQiLCJhcHBlbmRDaGlsZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaGVhZENvdW50RWwiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWFkQ291bnQiLCJOdW1iZXIiLCJqIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImluc2VydEJlZm9yZSIsInRvU3RyaW5nIiwibW91bnRlZEluc3RhbmNlcyIsIlNldCIsInVwZGF0ZUhlYWQiLCJoZWFkIiwidGFncyIsImgiLCJocmVmIiwidGl0bGVDb21wb25lbnQiLCJ0aXRsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/head-manager.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/index.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/next/dist/client/index.js ***!
|
||
\************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* global location */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n emitter: function() {\n return emitter;\n },\n hydrate: function() {\n return hydrate;\n },\n initialize: function() {\n return initialize;\n },\n router: function() {\n return router;\n },\n version: function() {\n return version;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"./node_modules/next/dist/build/polyfills/polyfill-module.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"./node_modules/react-dom/client.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ../shared/lib/router/utils/handle-smooth-scroll */ \"./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _runtimeconfigexternal = __webpack_require__(/*! ../shared/lib/runtime-config.external */ \"./node_modules/next/dist/shared/lib/runtime-config.external.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _portal = __webpack_require__(/*! ./portal */ \"./node_modules/next/dist/client/portal/index.js\");\nconst _headmanager = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./head-manager */ \"./node_modules/next/dist/client/head-manager.js\"));\nconst _pageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./page-loader */ \"./node_modules/next/dist/client/page-loader.js\"));\nconst _performancerelayer = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./performance-relayer */ \"./node_modules/next/dist/client/performance-relayer.js\" // TODO: remove in the next major version\n));\nconst _routeannouncer = __webpack_require__(/*! ./route-announcer */ \"./node_modules/next/dist/client/route-announcer.js\");\nconst _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\nconst _iserror = __webpack_require__(/*! ../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\");\nconst _imageconfigcontextsharedruntime = __webpack_require__(/*! ../shared/lib/image-config-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\");\nconst _removebasepath = __webpack_require__(/*! ./remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _adapters = __webpack_require__(/*! ../shared/lib/router/adapters */ \"./node_modules/next/dist/shared/lib/router/adapters.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../shared/lib/hooks-client-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _onrecoverableerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./on-recoverable-error */ \"./node_modules/next/dist/client/on-recoverable-error.js\"));\nconst _tracer = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./tracing/tracer */ \"./node_modules/next/dist/client/tracing/tracer.js\"));\nconst _reporttosocket = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./tracing/report-to-socket */ \"./node_modules/next/dist/client/tracing/report-to-socket.js\"));\nconst version = \"14.2.22\";\nlet router;\nconst emitter = (0, _mitt.default)();\nconst looseToArray = (input)=>[].slice.call(input);\nlet initialData;\nlet defaultLocale = undefined;\nlet asPath;\nlet pageLoader;\nlet appElement;\nlet headManager;\nlet initialMatchesMiddleware = false;\nlet lastAppProps;\nlet lastRenderReject;\nlet devClient;\nlet CachedApp, onPerfEntry;\nlet CachedComponent;\nclass Container extends _react.default.Component {\n componentDidCatch(componentErr, info) {\n this.props.fn(componentErr, info);\n }\n componentDidMount() {\n this.scrollToHash();\n // We need to replace the router state if:\n // - the page was (auto) exported and has a query string or search (hash)\n // - it was auto exported and is a dynamic route (to provide params)\n // - if it is a client-side skeleton (fallback render)\n // - if middleware matches the current page (may have rewrite params)\n // - if rewrites in next.config.js match (may have rewrite params)\n if (router.isSsr && (initialData.isFallback || initialData.nextExport && ((0, _isdynamic.isDynamicRoute)(router.pathname) || location.search || true || 0) || initialData.props && initialData.props.__N_SSG && (location.search || true || 0))) {\n // update query on mount for exported pages\n router.replace(router.pathname + \"?\" + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(router.query), new URLSearchParams(location.search))), asPath, {\n // @ts-ignore\n // WARNING: `_h` is an internal option for handing Next.js\n // client-side hydration. Your app should _never_ use this property.\n // It may change at any time without notice.\n _h: 1,\n // Fallback pages must trigger the data fetch, so the transition is\n // not shallow.\n // Other pages (strictly updating query) happens shallowly, as data\n // requirements would already be present.\n shallow: !initialData.isFallback && !initialMatchesMiddleware\n }).catch((err)=>{\n if (!err.cancelled) throw err;\n });\n }\n }\n componentDidUpdate() {\n this.scrollToHash();\n }\n scrollToHash() {\n let { hash } = location;\n hash = hash && hash.substring(1);\n if (!hash) return;\n const el = document.getElementById(hash);\n if (!el) return;\n // If we call scrollIntoView() in here without a setTimeout\n // it won't scroll properly.\n setTimeout(()=>el.scrollIntoView(), 0);\n }\n render() {\n if (false) {} else {\n const ReactDevOverlay = (__webpack_require__(/*! ./components/react-dev-overlay/pages/client */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/client.js\").ReactDevOverlay);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ReactDevOverlay, {\n children: this.props.children\n });\n }\n }\n}\nasync function initialize(opts) {\n if (opts === void 0) opts = {};\n _tracer.default.onSpanEnd(_reporttosocket.default);\n // This makes sure this specific lines are removed in production\n if (true) {\n devClient = opts.devClient;\n }\n initialData = JSON.parse(document.getElementById(\"__NEXT_DATA__\").textContent);\n window.__NEXT_DATA__ = initialData;\n defaultLocale = initialData.defaultLocale;\n const prefix = initialData.assetPrefix || \"\";\n self.__next_set_public_path__(\"\" + prefix + \"/_next/\") //eslint-disable-line\n ;\n // Initialize next/config with the environment configuration\n (0, _runtimeconfigexternal.setConfig)({\n serverRuntimeConfig: {},\n publicRuntimeConfig: initialData.runtimeConfig || {}\n });\n asPath = (0, _utils.getURL)();\n // make sure not to attempt stripping basePath for 404s\n if ((0, _hasbasepath.hasBasePath)(asPath)) {\n asPath = (0, _removebasepath.removeBasePath)(asPath);\n }\n if (false) {}\n if (initialData.scriptLoader) {\n const { initScriptLoader } = __webpack_require__(/*! ./script */ \"./node_modules/next/dist/client/script.js\");\n initScriptLoader(initialData.scriptLoader);\n }\n pageLoader = new _pageloader.default(initialData.buildId, prefix);\n const register = (param)=>{\n let [r, f] = param;\n return pageLoader.routeLoader.onEntrypoint(r, f);\n };\n if (window.__NEXT_P) {\n // Defer page registration for another tick. This will increase the overall\n // latency in hydrating the page, but reduce the total blocking time.\n window.__NEXT_P.map((p)=>setTimeout(()=>register(p), 0));\n }\n window.__NEXT_P = [];\n window.__NEXT_P.push = register;\n headManager = (0, _headmanager.default)();\n headManager.getIsSsr = ()=>{\n return router.isSsr;\n };\n appElement = document.getElementById(\"__next\");\n return {\n assetPrefix: prefix\n };\n}\nfunction renderApp(App, appProps) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {\n ...appProps\n });\n}\nfunction AppContainer(param) {\n _s();\n let { children } = param;\n // Create a memoized value for next/navigation router context.\n const adaptedForAppRouter = _react.default.useMemo(()=>{\n return (0, _adapters.adaptForAppRouterInstance)(router);\n }, []);\n var _self___NEXT_DATA___autoExport;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Container, {\n fn: (error)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderError({\n App: CachedApp,\n err: error\n }).catch((err)=>console.error(\"Error rendering page: \", err)),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: adaptedForAppRouter,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: (0, _adapters.adaptForSearchParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_adapters.PathnameContextProviderAdapter, {\n router: router,\n isAutoExport: (_self___NEXT_DATA___autoExport = self.__NEXT_DATA__.autoExport) != null ? _self___NEXT_DATA___autoExport : false,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {\n value: (0, _adapters.adaptForPathParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routercontextsharedruntime.RouterContext.Provider, {\n value: (0, _router.makePublicRouterInstance)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n value: headManager,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {\n value: {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image/\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":true,\"domains\":[],\"remotePatterns\":[{\"protocol\":\"https\",\"hostname\":\"**\"}],\"output\":\"standalone\"},\n children: children\n })\n })\n })\n })\n })\n })\n })\n });\n}\n_s(AppContainer, \"F6BSfrFQNeqenuPnUMVY/6gI8uE=\");\n_c = AppContainer;\nconst wrapApp = (App)=>(wrappedAppProps)=>{\n const appProps = {\n ...wrappedAppProps,\n Component: CachedComponent,\n err: initialData.err,\n router\n };\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainer, {\n children: renderApp(App, appProps)\n });\n };\n// This method handles all runtime and debug errors.\n// 404 and 500 errors are special kind of errors\n// and they are still handle via the main render method.\nfunction renderError(renderErrorProps) {\n let { App, err } = renderErrorProps;\n // In development runtime errors are caught by our overlay\n // In production we catch runtime errors using componentDidCatch which will trigger renderError\n if (true) {\n // A Next.js rendering runtime error is always unrecoverable\n // FIXME: let's make this recoverable (error in GIP client-transition)\n devClient.onUnrecoverableError();\n // We need to render an empty <App> so that the `<ReactDevOverlay>` can\n // render itself.\n // TODO: Fix disabled eslint rule\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return doRender({\n App: ()=>null,\n props: {},\n Component: ()=>null,\n styleSheets: []\n });\n }\n // Make sure we log the error to the console, otherwise users can't track down issues.\n console.error(err);\n console.error(\"A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred\");\n return pageLoader.loadPage(\"/_error\").then((param)=>{\n let { page: ErrorComponent, styleSheets } = param;\n return (lastAppProps == null ? void 0 : lastAppProps.Component) === ErrorComponent ? Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../pages/_error */ \"./node_modules/next/dist/pages/_error.js\"))).then((errorModule)=>{\n return Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../pages/_app */ \"./node_modules/next/dist/pages/_app.js\"))).then((appModule)=>{\n App = appModule.default;\n renderErrorProps.App = App;\n return errorModule;\n });\n }).then((m)=>({\n ErrorComponent: m.default,\n styleSheets: []\n })) : {\n ErrorComponent,\n styleSheets\n };\n }).then((param)=>{\n let { ErrorComponent, styleSheets } = param;\n var _renderErrorProps_props;\n // In production we do a normal render with the `ErrorComponent` as component.\n // If we've gotten here upon initial render, we can use the props from the server.\n // Otherwise, we need to call `getInitialProps` on `App` before mounting.\n const AppTree = wrapApp(App);\n const appCtx = {\n Component: ErrorComponent,\n AppTree,\n router,\n ctx: {\n err,\n pathname: initialData.page,\n query: initialData.query,\n asPath,\n AppTree\n }\n };\n return Promise.resolve(((_renderErrorProps_props = renderErrorProps.props) == null ? void 0 : _renderErrorProps_props.err) ? renderErrorProps.props : (0, _utils.loadGetInitialProps)(App, appCtx)).then((initProps)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n doRender({\n ...renderErrorProps,\n err,\n Component: ErrorComponent,\n styleSheets,\n props: initProps\n }));\n });\n}\n// Dummy component that we render as a child of Root so that we can\n// toggle the correct styles before the page is rendered.\nfunction Head(param) {\n _s1();\n let { callback } = param;\n // We use `useLayoutEffect` to guarantee the callback is executed\n // as soon as React flushes the update.\n _react.default.useLayoutEffect(()=>callback(), [\n callback\n ]);\n return null;\n}\n_s1(Head, \"n7/vCynhJvM+pLkyL2DMQUF0odM=\");\n_c1 = Head;\nconst performanceMarks = {\n navigationStart: \"navigationStart\",\n beforeRender: \"beforeRender\",\n afterRender: \"afterRender\",\n afterHydrate: \"afterHydrate\",\n routeChange: \"routeChange\"\n};\nconst performanceMeasures = {\n hydration: \"Next.js-hydration\",\n beforeHydration: \"Next.js-before-hydration\",\n routeChangeToRender: \"Next.js-route-change-to-render\",\n render: \"Next.js-render\"\n};\nlet reactRoot = null;\n// On initial render a hydrate should always happen\nlet shouldHydrate = true;\nfunction clearMarks() {\n [\n performanceMarks.beforeRender,\n performanceMarks.afterHydrate,\n performanceMarks.afterRender,\n performanceMarks.routeChange\n ].forEach((mark)=>performance.clearMarks(mark));\n}\nfunction markHydrateComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterHydrate) // mark end of hydration\n ;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, \"mark\").length;\n if (hasBeforeRenderMark) {\n const beforeHydrationMeasure = performance.measure(performanceMeasures.beforeHydration, performanceMarks.navigationStart, performanceMarks.beforeRender);\n const hydrationMeasure = performance.measure(performanceMeasures.hydration, performanceMarks.beforeRender, performanceMarks.afterHydrate);\n if ( true && // Old versions of Safari don't return `PerformanceMeasure`s from `performance.measure()`\n beforeHydrationMeasure && hydrationMeasure) {\n _tracer.default.startSpan(\"navigation-to-hydration\", {\n startTime: performance.timeOrigin + beforeHydrationMeasure.startTime,\n attributes: {\n pathname: location.pathname,\n query: location.search\n }\n }).end(performance.timeOrigin + hydrationMeasure.startTime + hydrationMeasure.duration);\n }\n }\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.hydration).forEach(onPerfEntry);\n }\n clearMarks();\n}\nfunction markRenderComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterRender) // mark end of render\n ;\n const navStartEntries = performance.getEntriesByName(performanceMarks.routeChange, \"mark\");\n if (!navStartEntries.length) return;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, \"mark\").length;\n if (hasBeforeRenderMark) {\n performance.measure(performanceMeasures.routeChangeToRender, navStartEntries[0].name, performanceMarks.beforeRender);\n performance.measure(performanceMeasures.render, performanceMarks.beforeRender, performanceMarks.afterRender);\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.render).forEach(onPerfEntry);\n performance.getEntriesByName(performanceMeasures.routeChangeToRender).forEach(onPerfEntry);\n }\n }\n clearMarks();\n [\n performanceMeasures.routeChangeToRender,\n performanceMeasures.render\n ].forEach((measure)=>performance.clearMeasures(measure));\n}\nfunction renderReactElement(domEl, fn) {\n // mark start of hydrate/render\n if (_utils.ST) {\n performance.mark(performanceMarks.beforeRender);\n }\n const reactEl = fn(shouldHydrate ? markHydrateComplete : markRenderComplete);\n if (!reactRoot) {\n // Unlike with createRoot, you don't need a separate root.render() call here\n reactRoot = _client.default.hydrateRoot(domEl, reactEl, {\n onRecoverableError: _onrecoverableerror.default\n });\n // TODO: Remove shouldHydrate variable when React 18 is stable as it can depend on `reactRoot` existing\n shouldHydrate = false;\n } else {\n const startTransition = _react.default.startTransition;\n startTransition(()=>{\n reactRoot.render(reactEl);\n });\n }\n}\nfunction Root(param) {\n _s2();\n let { callbacks, children } = param;\n // We use `useLayoutEffect` to guarantee the callbacks are executed\n // as soon as React flushes the update\n _react.default.useLayoutEffect(()=>callbacks.forEach((callback)=>callback()), [\n callbacks\n ]);\n // TODO: remove in the next major version\n // We should ask to measure the Web Vitals after rendering completes so we\n // don't cause any hydration delay:\n _react.default.useEffect(()=>{\n (0, _performancerelayer.default)(onPerfEntry);\n }, []);\n if (false) {}\n return children;\n}\n_s2(Root, \"Gjgl5rfcc2T4sFnfEMfRvL6K4Q4=\");\n_c2 = Root;\nfunction doRender(input) {\n let { App, Component, props, err } = input;\n let styleSheets = \"initial\" in input ? undefined : input.styleSheets;\n Component = Component || lastAppProps.Component;\n props = props || lastAppProps.props;\n const appProps = {\n ...props,\n Component,\n err,\n router\n };\n // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.\n lastAppProps = appProps;\n let canceled = false;\n let resolvePromise;\n const renderPromise = new Promise((resolve, reject)=>{\n if (lastRenderReject) {\n lastRenderReject();\n }\n resolvePromise = ()=>{\n lastRenderReject = null;\n resolve();\n };\n lastRenderReject = ()=>{\n canceled = true;\n lastRenderReject = null;\n const error = new Error(\"Cancel rendering route\");\n error.cancelled = true;\n reject(error);\n };\n });\n // This function has a return type to ensure it doesn't start returning a\n // Promise. It should remain synchronous.\n function onStart() {\n if (!styleSheets || // We use `style-loader` in development, so we don't need to do anything\n // unless we're in production:\n \"development\" !== \"production\") {\n return false;\n }\n const currentStyleTags = looseToArray(document.querySelectorAll(\"style[data-n-href]\"));\n const currentHrefs = new Set(currentStyleTags.map((tag)=>tag.getAttribute(\"data-n-href\")));\n const noscript = document.querySelector(\"noscript[data-n-css]\");\n const nonce = noscript == null ? void 0 : noscript.getAttribute(\"data-n-css\");\n styleSheets.forEach((param)=>{\n let { href, text } = param;\n if (!currentHrefs.has(href)) {\n const styleTag = document.createElement(\"style\");\n styleTag.setAttribute(\"data-n-href\", href);\n styleTag.setAttribute(\"media\", \"x\");\n if (nonce) {\n styleTag.setAttribute(\"nonce\", nonce);\n }\n document.head.appendChild(styleTag);\n styleTag.appendChild(document.createTextNode(text));\n }\n });\n return true;\n }\n function onHeadCommit() {\n if (// unless we're in production:\n false) {}\n if (input.scroll) {\n const { x, y } = input.scroll;\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n window.scrollTo(x, y);\n });\n }\n }\n function onRootCommit() {\n resolvePromise();\n }\n onStart();\n const elem = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n callback: onHeadCommit\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(AppContainer, {\n children: [\n renderApp(App, appProps),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_portal.Portal, {\n type: \"next-route-announcer\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routeannouncer.RouteAnnouncer, {})\n })\n ]\n })\n ]\n });\n // We catch runtime errors using componentDidCatch which will trigger renderError\n renderReactElement(appElement, (callback)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n callbacks: [\n callback,\n onRootCommit\n ],\n children: false ? /*#__PURE__*/ 0 : elem\n }));\n return renderPromise;\n}\nasync function render(renderingProps) {\n // if an error occurs in a server-side page (e.g. in getInitialProps),\n // skip re-rendering the error page client-side as data-fetching operations\n // will already have been done on the server and NEXT_DATA contains the correct\n // data for straight-forward hydration of the error page\n if (renderingProps.err && // renderingProps.Component might be undefined if there is a top/module-level error\n (typeof renderingProps.Component === \"undefined\" || !renderingProps.isHydratePass)) {\n await renderError(renderingProps);\n return;\n }\n try {\n await doRender(renderingProps);\n } catch (err) {\n const renderErr = (0, _iserror.getProperError)(err);\n // bubble up cancelation errors\n if (renderErr.cancelled) {\n throw renderErr;\n }\n if (true) {\n // Ensure this error is displayed in the overlay in development\n setTimeout(()=>{\n throw renderErr;\n });\n }\n await renderError({\n ...renderingProps,\n err: renderErr\n });\n }\n}\nasync function hydrate(opts) {\n let initialErr = initialData.err;\n try {\n const appEntrypoint = await pageLoader.routeLoader.whenEntrypoint(\"/_app\");\n if (\"error\" in appEntrypoint) {\n throw appEntrypoint.error;\n }\n const { component: app, exports: mod } = appEntrypoint;\n CachedApp = app;\n if (mod && mod.reportWebVitals) {\n onPerfEntry = (param)=>{\n let { id, name, startTime, value, duration, entryType, entries, attribution } = param;\n // Combines timestamp with random number for unique ID\n const uniqueID = Date.now() + \"-\" + (Math.floor(Math.random() * (9e12 - 1)) + 1e12);\n let perfStartEntry;\n if (entries && entries.length) {\n perfStartEntry = entries[0].startTime;\n }\n const webVitals = {\n id: id || uniqueID,\n name,\n startTime: startTime || perfStartEntry,\n value: value == null ? duration : value,\n label: entryType === \"mark\" || entryType === \"measure\" ? \"custom\" : \"web-vital\"\n };\n if (attribution) {\n webVitals.attribution = attribution;\n }\n mod.reportWebVitals(webVitals);\n };\n }\n const pageEntrypoint = // error, so we need to skip waiting for the entrypoint.\n true && initialData.err ? {\n error: initialData.err\n } : await pageLoader.routeLoader.whenEntrypoint(initialData.page);\n if (\"error\" in pageEntrypoint) {\n throw pageEntrypoint.error;\n }\n CachedComponent = pageEntrypoint.component;\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(CachedComponent)) {\n throw new Error('The default export is not a React Component in page: \"' + initialData.page + '\"');\n }\n }\n } catch (error) {\n // This catches errors like throwing in the top level of a module\n initialErr = (0, _iserror.getProperError)(error);\n }\n if (true) {\n const getServerError = (__webpack_require__(/*! ./components/react-dev-overlay/pages/client */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/client.js\").getServerError);\n // Server-side runtime errors need to be re-thrown on the client-side so\n // that the overlay is rendered.\n if (initialErr) {\n if (initialErr === initialData.err) {\n setTimeout(()=>{\n let error;\n try {\n // Generate a new error object. We `throw` it because some browsers\n // will set the `stack` when thrown, and we want to ensure ours is\n // not overridden when we re-throw it below.\n throw new Error(initialErr.message);\n } catch (e) {\n error = e;\n }\n error.name = initialErr.name;\n error.stack = initialErr.stack;\n throw getServerError(error, initialErr.source);\n });\n } else {\n setTimeout(()=>{\n throw initialErr;\n });\n }\n }\n }\n if (window.__NEXT_PRELOADREADY) {\n await window.__NEXT_PRELOADREADY(initialData.dynamicIds);\n }\n router = (0, _router.createRouter)(initialData.page, initialData.query, asPath, {\n initialProps: initialData.props,\n pageLoader,\n App: CachedApp,\n Component: CachedComponent,\n wrapApp,\n err: initialErr,\n isFallback: Boolean(initialData.isFallback),\n subscription: (info, App, scroll)=>render(Object.assign({}, info, {\n App,\n scroll\n })),\n locale: initialData.locale,\n locales: initialData.locales,\n defaultLocale,\n domainLocales: initialData.domainLocales,\n isPreview: initialData.isPreview\n });\n initialMatchesMiddleware = await router._initialMatchesMiddlewarePromise;\n const renderCtx = {\n App: CachedApp,\n initial: true,\n Component: CachedComponent,\n props: initialData.props,\n err: initialErr,\n isHydratePass: true\n };\n if (opts == null ? void 0 : opts.beforeRender) {\n await opts.beforeRender();\n }\n render(renderCtx);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"AppContainer\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Root\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUI7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7SUEyRU5BLFNBQU87ZUFBUEE7O0lBOHZCU0MsU0FBTztlQUFQQTs7SUE3b0JBQyxZQUFVO2VBQVZBOztJQWxIWEMsUUFBTTtlQUFOQTs7SUFERUMsU0FBTztlQUFQQTs7Ozs7b0JBeEVOOzRFQVNXOzZFQUNHOzZEQUNjOzJFQUNsQjt3REFFYTtnREFDSzt1Q0FDSjt5Q0FJeEI7bURBQ21CO21DQUNzQjtvQ0FFekI7a0ZBQ0s7aUZBQ0w7eUZBRU0sc0ZBQXdCLHlDQUF5Qzs7NENBQy9EO29DQUN3QjtxQ0FDeEI7NkRBQ0k7NENBRUo7eUNBQ0g7MkRBQ0s7c0NBTTFCOzZEQUlBO3lGQUN3Qjs2RUFDWjtxRkFDUTtBQXVCcEIsTUFBTUEsVUFBVUM7QUFDaEIsSUFBSUY7QUFDSixNQUFNSCxVQUErQk0sQ0FBQUEsR0FBQUEsTUFBQUEsT0FBSTtBQUVoRCxNQUFNQyxlQUFlLENBQWVDLFFBQW9CLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDQyxJQUFJLENBQUNGO0FBRXRFLElBQUlHO0FBQ0osSUFBSUMsZ0JBQW9DQztBQUN4QyxJQUFJQztBQUNKLElBQUlDO0FBQ0osSUFBSUM7QUFDSixJQUFJQztBQUtKLElBQUlDLDJCQUEyQjtBQUMvQixJQUFJQztBQUVKLElBQUlDO0FBQ0osSUFBSUM7QUFFSixJQUFJQyxXQUF5QkM7QUFDN0IsSUFBSUM7QUFFSixNQUFNQyxrQkFBa0JDLE9BQUFBLE9BQUssQ0FBQ0MsU0FBUztJQUlyQ0Msa0JBQWtCQyxZQUFtQixFQUFFQyxJQUFTLEVBQUU7UUFDaEQsSUFBSSxDQUFDQyxLQUFLLENBQUNDLEVBQUUsQ0FBQ0gsY0FBY0M7SUFDOUI7SUFFQUcsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQ0MsWUFBWTtRQUVqQiwwQ0FBMEM7UUFDMUMseUVBQXlFO1FBQ3pFLG9FQUFvRTtRQUNwRSxzREFB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V0g7UUFDWHdIO1FBQ0ExRixLQUFLd047UUFDTDFPLFlBQVkwUSxRQUFRblMsWUFBWXlCLFVBQVU7UUFDMUMyUSxjQUFjLENBQUNqUixNQUFNMEYsS0FBS29JLFNBQ3hCNUwsT0FDRWdQLE9BQU9qUSxNQUFNLENBSVgsQ0FBQyxHQUFHakIsTUFBTTtnQkFDVjBGO2dCQUNBb0k7WUFDRjtRQUVKekosUUFBUXhGLFlBQVl3RixNQUFNO1FBQzFCSixTQUFTcEYsWUFBWW9GLE9BQU87UUFDNUJuRjtRQUNBcVMsZUFBZXRTLFlBQVlzUyxhQUFhO1FBQ3hDQyxXQUFXdlMsWUFBWXVTLFNBQVM7SUFDbEM7SUFFQWhTLDJCQUEyQixNQUFNZixPQUFPZ1QsZ0NBQWdDO0lBRXhFLE1BQU1DLFlBQTZCO1FBQ2pDNUwsS0FBS2xHO1FBQ0wrUixTQUFTO1FBQ1QxUixXQUFXSDtRQUNYTyxPQUFPcEIsWUFBWW9CLEtBQUs7UUFDeEJ1QixLQUFLd047UUFDTEgsZUFBZTtJQUNqQjtJQUVBLElBQUlyTSxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxLQUFNb0csWUFBWSxFQUFFO1FBQ3RCLE1BQU1wRyxLQUFLb0csWUFBWTtJQUN6QjtJQUVBMUcsT0FBT29QO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHN4PzliM2IiXSwibmFtZXMiOlsiZW1pdHRlciIsImh5ZHJhdGUiLCJpbml0aWFsaXplIiwicm91dGVyIiwidmVyc2lvbiIsInByb2Nlc3MiLCJtaXR0IiwibG9vc2VUb0FycmF5IiwiaW5wdXQiLCJzbGljZSIsImNhbGwiLCJpbml0aWFsRGF0YSIsImRlZmF1bHRMb2NhbGUiLCJ1bmRlZmluZWQiLCJhc1BhdGgiLCJwYWdlTG9hZGVyIiwiYXBwRWxlbWVudCIsImhlYWRNYW5hZ2VyIiwiaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlIiwibGFzdEFwcFByb3BzIiwibGFzdFJlbmRlclJlamVjdCIsImRldkNsaWVudCIsIkNhY2hlZEFwcCIsIm9uUGVyZkVudHJ5IiwiQ2FjaGVkQ29tcG9uZW50IiwiQ29udGFpbmVyIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb21wb25lbnREaWRDYXRjaCIsImNvbXBvbmVudEVyciIsImluZm8iLCJwcm9wcyIsImZuIiwiY29tcG9uZW50RGlkTW91bnQiLCJzY3JvbGxUb0hhc2giLCJpc1NzciIsImlzRmFsbGJhY2siLCJuZXh0RXhwb3J0IiwiaXNEeW5hbWljUm91dGUiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwic2VhcmNoIiwiZW52IiwiX19ORVhUX0hBU19SRVdSSVRFUyIsIl9fTl9TU0ciLCJyZXBsYWNlIiwiU3RyaW5nIiwiYXNzaWduIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwiX2giLCJzaGFsbG93IiwiY2F0Y2giLCJlcnIiLCJjYW5jZWxsZWQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJoYXNoIiwic3Vic3RyaW5nIiwiZWwiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2V0VGltZW91dCIsInNjcm9sbEludG9WaWV3IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJSZWFjdERldk92ZXJsYXkiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJvcHRzIiwidHJhY2VyIiwib25TcGFuRW5kIiwicmVwb3J0VG9Tb2NrZXQiLCJKU09OIiwicGFyc2UiLCJ0ZXh0Q29udGVudCIsIndpbmRvdyIsIl9fTkVYVF9EQVRBX18iLCJwcmVmaXgiLCJhc3NldFByZWZpeCIsInNlbGYiLCJfX25leHRfc2V0X3B1YmxpY19wYXRoX18iLCJzZXRDb25maWciLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIiwicHVibGljUnVudGltZUNvbmZpZyIsInJ1bnRpbWVDb25maWciLCJnZXRVUkwiLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJkZXRlY3REb21haW5Mb2NhbGUiLCJwYXJzZVJlbGF0aXZlVXJsIiwiZm9ybWF0VXJsIiwibG9jYWxlcyIsInBhcnNlZEFzIiwibG9jYWxlUGF0aFJlc3VsdCIsImRldGVjdGVkTG9jYWxlIiwibG9jYWxlIiwiZGV0ZWN0ZWREb21haW4iLCJfX05FWFRfSTE4Tl9ET01BSU5TIiwiaG9zdG5hbWUiLCJzY3JpcHRMb2FkZXIiLCJpbml0U2NyaXB0TG9hZGVyIiwiUGFnZUxvYWRlciIsImJ1aWxkSWQiLCJyZWdpc3RlciIsInBhcmFtIiwiciIsImYiLCJyb3V0ZUxvYWRlciIsIm9uRW50cnlwb2ludCIsIl9fTkVYVF9QIiwibWFwIiwicCIsInB1c2giLCJpbml0SGVhZE1hbmFnZXIiLCJnZXRJc1NzciIsInJlbmRlckFwcCIsIkFwcCIsImFwcFByb3BzIiwiQXBwQ29udGFpbmVyIiwiYWRhcHRlZEZvckFwcFJvdXRlciIsInVzZU1lbW8iLCJhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlIiwiZXJyb3IiLCJyZW5kZXJFcnJvciIsImNvbnNvbGUiLCJBcHBSb3V0ZXJDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIlNlYXJjaFBhcmFtc0NvbnRleHQiLCJhZGFwdEZvclNlYXJjaFBhcmFtcyIsIlBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlciIsImlzQXV0b0V4cG9ydCIsImF1dG9FeHBvcnQiLCJQYXRoUGFyYW1zQ29udGV4dCIsImFkYXB0Rm9yUGF0aFBhcmFtcyIsIlJvdXRlckNvbnRleHQiLCJtYWtlUHVibGljUm91dGVySW5zdGFuY2UiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJJbWFnZUNvbmZpZ0NvbnRleHQiLCJfX05FWFRfSU1BR0VfT1BUUyIsIndyYXBBcHAiLCJ3cmFwcGVkQXBwUHJvcHMiLCJyZW5kZXJFcnJvclByb3BzIiwib25VbnJlY292ZXJhYmxlRXJyb3IiLCJkb1JlbmRlciIsInN0eWxlU2hlZXRzIiwibG9hZFBhZ2UiLCJ0aGVuIiwicGFnZSIsIkVycm9yQ29tcG9uZW50IiwiZXJyb3JNb2R1bGUiLCJhcHBNb2R1bGUiLCJkZWZhdWx0IiwibSIsIkFwcFRyZWUiLCJhcHBDdHgiLCJjdHgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJpbml0UHJvcHMiLCJIZWFkIiwiY2FsbGJhY2siLCJ1c2VMYXlvdXRFZmZlY3QiLCJwZXJmb3JtYW5jZU1hcmtzIiwibmF2aWdhdGlvblN0YXJ0IiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJhZnRlckh5ZHJhdGUiLCJyb3V0ZUNoYW5nZSIsInBlcmZvcm1hbmNlTWVhc3VyZXMiLCJoeWRyYXRpb24iLCJiZWZvcmVIeWRyYXRpb24iLCJyb3V0ZUNoYW5nZVRvUmVuZGVyIiwicmVhY3RSb290Iiwic2hvdWxkSHlkcmF0ZSIsImNsZWFyTWFya3MiLCJmb3JFYWNoIiwibWFyayIsInBlcmZvcm1hbmNlIiwibWFya0h5ZHJhdGVDb21wbGV0ZSIsIlNUIiwiaGFzQmVmb3JlUmVuZGVyTWFyayIsImdldEVudHJpZXNCeU5hbWUiLCJsZW5ndGgiLCJiZWZvcmVIeWRyYXRpb25NZWFzdXJlIiwibWVhc3VyZSIsImh5ZHJhdGlvbk1lYXN1cmUiLCJzdGFydFNwYW4iLCJzdGFydFRpbWUiLCJ0aW1lT3JpZ2luIiwiYXR0cmlidXRlcyIsImVuZCIsImR1cmF0aW9uIiwibWFya1JlbmRlckNvbXBsZXRlIiwibmF2U3RhcnRFbnRyaWVzIiwibmFtZSIsImNsZWFyTWVhc3VyZXMiLCJyZW5kZXJSZWFjdEVsZW1lbnQiLCJkb21FbCIsInJlYWN0RWwiLCJSZWFjdERPTSIsImh5ZHJhdGVSb290Iiwib25SZWNvdmVyYWJsZUVycm9yIiwic3RhcnRUcmFuc2l0aW9uIiwiX3JlYWN0IiwiUm9vdCIsImNhbGxiYWNrcyIsInVzZUVmZmVjdCIsIm1lYXN1cmVXZWJWaXRhbHMiLCJfX05FWFRfVEVTVF9NT0RFIiwiX19ORVhUX0hZRFJBVEVEIiwiX19ORVhUX0hZRFJBVEVEX0NCIiwiY2FuY2VsZWQiLCJyZXNvbHZlUHJvbWlzZSIsInJlbmRlclByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsIm9uU3RhcnQiLCJjdXJyZW50U3R5bGVUYWdzIiwicXVlcnlTZWxlY3RvckFsbCIsImN1cnJlbnRIcmVmcyIsIlNldCIsInRhZyIsImdldEF0dHJpYnV0ZSIsIm5vc2NyaXB0IiwicXVlcnlTZWxlY3RvciIsIm5vbmNlIiwiaHJlZiIsInRleHQiLCJoYXMiLCJzdHlsZVRhZyIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIm9uSGVhZENvbW1pdCIsImRlc2lyZWRIcmVmcyIsInMiLCJpZHgiLCJyZW1vdmVBdHRyaWJ1dGUiLCJyZWZlcmVuY2VOb2RlIiwidGFyZ2V0VGFnIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwicmVtb3ZlQ2hpbGQiLCJzY3JvbGwiLCJ4IiwieSIsImhhbmRsZVNtb290aFNjcm9sbCIsInNjcm9sbFRvIiwib25Sb290Q29tbWl0IiwiZWxlbSIsImpzeHMiLCJGcmFnbWVudCIsIlBvcnRhbCIsInR5cGUiLCJSb3V0ZUFubm91bmNlciIsIl9fTkVYVF9TVFJJQ1RfTU9ERSIsIlN0cmljdE1vZGUiLCJyZW5kZXJpbmdQcm9wcyIsImlzSHlkcmF0ZVBhc3MiLCJyZW5kZXJFcnIiLCJnZXRQcm9wZXJFcnJvciIsImluaXRpYWxFcnIiLCJhcHBFbnRyeXBvaW50Iiwid2hlbkVudHJ5cG9pbnQiLCJjb21wb25lbnQiLCJhcHAiLCJleHBvcnRzIiwibW9kIiwicmVwb3J0V2ViVml0YWxzIiwiaWQiLCJlbnRyeVR5cGUiLCJlbnRyaWVzIiwiYXR0cmlidXRpb24iLCJ1bmlxdWVJRCIsIkRhdGUiLCJub3ciLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJwZXJmU3RhcnRFbnRyeSIsIndlYlZpdGFscyIsImxhYmVsIiwicGFnZUVudHJ5cG9pbnQiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJnZXRTZXJ2ZXJFcnJvciIsIm1lc3NhZ2UiLCJlIiwic3RhY2siLCJzb3VyY2UiLCJfX05FWFRfUFJFTE9BRFJFQURZIiwiZHluYW1pY0lkcyIsImNyZWF0ZVJvdXRlciIsImluaXRpYWxQcm9wcyIsIkJvb2xlYW4iLCJzdWJzY3JpcHRpb24iLCJPYmplY3QiLCJkb21haW5Mb2NhbGVzIiwiaXNQcmV2aWV3IiwiX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UiLCJyZW5kZXJDdHgiLCJpbml0aWFsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/next-dev.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/client/next-dev.js ***!
|
||
\***************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// TODO: Remove use of `any` type.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\n__webpack_require__(/*! ./webpack */ \"./node_modules/next/dist/client/webpack.js\");\nconst _ = __webpack_require__(/*! ./ */ \"./node_modules/next/dist/client/index.js\");\nconst _hotmiddlewareclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/hot-middleware-client */ \"./node_modules/next/dist/client/dev/hot-middleware-client.js\"));\nconst _pagebootstrap = __webpack_require__(/*! ./page-bootstrap */ \"./node_modules/next/dist/client/page-bootstrap.js\");\n__webpack_require__(/*! ./setup-hydration-warning */ \"./node_modules/next/dist/client/setup-hydration-warning.js\");\nwindow.next = {\n version: _.version,\n // router is initialized later so it has to be live-binded\n get router () {\n return _.router;\n },\n emitter: _.emitter\n};\nconst devClient = (0, _hotmiddlewareclient.default)(\"webpack\");\n(0, _.initialize)({\n devClient\n}).then((param)=>{\n let { assetPrefix } = param;\n return (0, _pagebootstrap.pageBootrap)(assetPrefix);\n}).catch((err)=>{\n console.error(\"Error was not caught\", err);\n});\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=next-dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9uZXh0LWRldi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7Ozs7OztvQkFDM0I7OEJBQzhDOzBGQUNqQzsyQ0FDUTtvQkFFckI7QUFFUEEsT0FBT0MsSUFBSSxHQUFHO0lBQ1pDLFNBQUFBLEVBQUFBLE9BQU87SUFDUCwwREFBMEQ7SUFDMUQsSUFBSUMsVUFBUztRQUNYLE9BQU9BLEVBQUFBLE1BQU07SUFDZjtJQUNBQyxTQUFBQSxFQUFBQSxPQUFPO0FBQ1Q7QUFFQSxNQUFNQyxZQUFZQyxDQUFBQSxHQUFBQSxxQkFBQUEsT0FBTyxFQUFDO0FBQzFCQyxDQUFBQSxHQUFBQSxFQUFBQSxVQUFVLEVBQUM7SUFBRUY7QUFBVSxHQUNwQkcsSUFBSSxDQUFDLENBQUFDO1FBQUMsRUFBRUMsV0FBVyxFQUFFLEdBQUFEO0lBQ3BCLE9BQU9FLENBQUFBLEdBQUFBLGVBQUFBLFdBQVcsRUFBQ0Q7QUFDckIsR0FDQ0UsS0FBSyxDQUFDLENBQUNDO0lBQ05DLFFBQVFDLEtBQUssQ0FBQyx3QkFBd0JGO0FBQ3hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L25leHQtZGV2LnRzPzExOGYiXSwibmFtZXMiOlsid2luZG93IiwibmV4dCIsInZlcnNpb24iLCJyb3V0ZXIiLCJlbWl0dGVyIiwiZGV2Q2xpZW50IiwiaW5pdEhNUiIsImluaXRpYWxpemUiLCJ0aGVuIiwicGFyYW0iLCJhc3NldFByZWZpeCIsInBhZ2VCb290cmFwIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/next-dev.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/normalize-trailing-slash.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***!
|
||
\*******************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith(\"/\") || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (true) {\n if (/\\.[^/]+\\/?$/.test(pathname)) {\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n } else if (pathname.endsWith(\"/\")) {\n return \"\" + pathname + query + hash;\n } else {\n return pathname + \"/\" + query + hash;\n }\n }\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs4REFPYUE7OztlQUFBQTs7O2lEQVB1Qjt1Q0FDVjtBQU1uQixNQUFNQSw2QkFBNkIsQ0FBQ0M7SUFDekMsSUFBSSxDQUFDQSxLQUFLQyxVQUFVLENBQUMsUUFBUUMsU0FBd0MsRUFBRTtRQUNyRSxPQUFPRjtJQUNUO0lBRUEsTUFBTSxFQUFFSyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQVMsRUFBQ1I7SUFDNUMsSUFBSUUsSUFBaUMsRUFBRTtRQUNyQyxJQUFJLGNBQWNRLElBQUksQ0FBQ0wsV0FBVztZQUNoQyxPQUFPLEtBQUdNLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ04sWUFBWUMsUUFBUUM7UUFDcEQsT0FBTyxJQUFJRixTQUFTTyxRQUFRLENBQUMsTUFBTTtZQUNqQyxPQUFPLEtBQUdQLFdBQVdDLFFBQVFDO1FBQy9CLE9BQU87WUFDTCxPQUFPRixXQUFZLE1BQUdDLFFBQVFDO1FBQ2hDO0lBQ0Y7SUFFQSxPQUFPLEtBQUdJLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ04sWUFBWUMsUUFBUUM7QUFDcEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoLnRzP2JhMDEiXSwibmFtZXMiOlsibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJwYXRoIiwic3RhcnRzV2l0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfTUFOVUFMX1RSQUlMSU5HX1NMQVNIIiwicGF0aG5hbWUiLCJxdWVyeSIsImhhc2giLCJwYXJzZVBhdGgiLCJfX05FWFRfVFJBSUxJTkdfU0xBU0giLCJ0ZXN0IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImVuZHNXaXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/normalize-trailing-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/on-recoverable-error.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/on-recoverable-error.js ***!
|
||
\***************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return onRecoverableError;\n }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../shared/lib/lazy-dynamic/bailout-to-csr */ \"./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nfunction onRecoverableError(err) {\n // Using default react onRecoverableError\n // x-ref: https://github.com/facebook/react/blob/d4bc16a7d69eb2ea38a88c8ac0b461d5f72cdcab/packages/react-dom/src/client/ReactDOMRoot.js#L83\n const defaultOnRecoverableError = typeof reportError === \"function\" ? reportError : (error)=>{\n window.console.error(error);\n };\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(err)) return;\n defaultOnRecoverableError(err);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-recoverable-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9vbi1yZWNvdmVyYWJsZS1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQUVBOzs7ZUFBd0JBOzs7MENBRlk7QUFFckIsU0FBU0EsbUJBQW1CQyxHQUFZO0lBQ3JELHlDQUF5QztJQUN6QywySUFBMkk7SUFDM0ksTUFBTUMsNEJBQ0osT0FBT0MsZ0JBQWdCLGFBR25CQSxjQUNBLENBQUNDO1FBQ0NDLE9BQU9DLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDQTtJQUN2QjtJQUVOLDZFQUE2RTtJQUM3RSxJQUFJRyxDQUFBQSxHQUFBQSxjQUFBQSxtQkFBbUIsRUFBQ04sTUFBTTtJQUU5QkMsMEJBQTBCRDtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9vbi1yZWNvdmVyYWJsZS1lcnJvci50cz8zMTNkIl0sIm5hbWVzIjpbIm9uUmVjb3ZlcmFibGVFcnJvciIsImVyciIsImRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3IiLCJyZXBvcnRFcnJvciIsImVycm9yIiwid2luZG93IiwiY29uc29sZSIsImlzQmFpbG91dFRvQ1NSRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/on-recoverable-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/page-bootstrap.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/page-bootstrap.js ***!
|
||
\*********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pageBootrap\", ({\n enumerable: true,\n get: function() {\n return pageBootrap;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _ = __webpack_require__(/*! ./ */ \"./node_modules/next/dist/client/index.js\");\nconst _ondemandentriesclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/on-demand-entries-client */ \"./node_modules/next/dist/client/dev/on-demand-entries-client.js\"));\nconst _devbuildwatcher = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/dev-build-watcher */ \"./node_modules/next/dist/client/dev/dev-build-watcher.js\"));\nconst _fouc = __webpack_require__(/*! ./dev/fouc */ \"./node_modules/next/dist/client/dev/fouc.js\");\nconst _websocket = __webpack_require__(/*! ./components/react-dev-overlay/pages/websocket */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../server/dev/hot-reloader-types */ \"./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ./components/react-dev-overlay/internal/helpers/runtime-error-handler */ \"./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/runtime-error-handler.js\");\nconst _shared = __webpack_require__(/*! ./components/react-dev-overlay/shared */ \"./node_modules/next/dist/client/components/react-dev-overlay/shared.js\");\nconst _hotreloaderclient = __webpack_require__(/*! ./components/react-dev-overlay/pages/hot-reloader-client */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/hot-reloader-client.js\");\nfunction pageBootrap(assetPrefix) {\n (0, _websocket.connectHMR)({\n assetPrefix,\n path: \"/_next/webpack-hmr\"\n });\n return (0, _.hydrate)({\n beforeRender: _fouc.displayContent\n }).then(()=>{\n (0, _ondemandentriesclient.default)();\n let buildIndicatorHandler;\n if (true) {\n (0, _devbuildwatcher.default)((handler)=>{\n buildIndicatorHandler = handler;\n }, \"bottom-right\");\n }\n let reloading = false;\n (0, _websocket.addMessageListener)((payload)=>{\n if (reloading) return;\n if (\"action\" in payload) {\n switch(payload.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { stack, message } = JSON.parse(payload.errorJSON);\n const error = new Error(message);\n error.stack = stack;\n throw error;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n {\n reloading = true;\n window.location.reload();\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n {\n fetch(\"\" + assetPrefix + \"/_next/static/development/_devPagesManifest.json\").then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest\", err);\n });\n break;\n }\n default:\n break;\n }\n } else if (\"event\" in payload) {\n switch(payload.event){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.MIDDLEWARE_CHANGES:\n {\n return window.location.reload();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES:\n {\n // This is used in `../server/dev/turbopack-utils.ts`.\n const isOnErrorPage = window.next.router.pathname === \"/_error\";\n // On the error page we want to reload the page when a page was changed\n if (isOnErrorPage) {\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n }\n reloading = true;\n (0, _hotreloaderclient.performFullReload)(null);\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ONLY_CHANGES:\n {\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n (0, _hotreloaderclient.performFullReload)(null);\n }\n const { pages } = payload;\n // Make sure to reload when the dev-overlay is showing for an\n // API route\n // TODO: Fix `__NEXT_PAGE` type\n if (pages.includes(_.router.query.__NEXT_PAGE)) {\n return window.location.reload();\n }\n if (!_.router.clc && pages.includes(_.router.pathname)) {\n console.log(\"Refreshing page data due to server-side change\");\n buildIndicatorHandler == null ? void 0 : buildIndicatorHandler.show();\n const clearIndicator = ()=>buildIndicatorHandler == null ? void 0 : buildIndicatorHandler.hide();\n _.router.replace(_.router.pathname + \"?\" + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(_.router.query), new URLSearchParams(location.search))), _.router.asPath, {\n scroll: false\n }).catch(()=>{\n // trigger hard reload when failing to refresh data\n // to show error overlay properly\n location.reload();\n }).finally(clearIndicator);\n }\n break;\n }\n default:\n break;\n }\n }\n });\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=page-bootstrap.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wYWdlLWJvb3RzdHJhcC5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQWtCZ0JBOzs7ZUFBQUE7Ozs7OEJBbEJnQjs0RkFDQTtzRkFDRztrQ0FFSjt1Q0FJeEI7eUNBSUE7OENBQ3FDO2lEQUNSO29DQUNpQjsrQ0FDbkI7QUFFM0IsU0FBU0EsWUFBWUMsV0FBbUI7SUFDN0NDLENBQUFBLEdBQUFBLFdBQUFBLFVBQVUsRUFBQztRQUFFRDtRQUFhRSxNQUFNO0lBQXFCO0lBRXJELE9BQU9DLENBQUFBLEdBQUFBLEVBQUFBLE9BQU8sRUFBQztRQUFFQyxjQUFjQyxNQUFBQSxjQUFjO0lBQUMsR0FBR0MsSUFBSSxDQUFDO1FBQ3BEQyxDQUFBQSxHQUFBQSx1QkFBQUEsT0FBbUI7UUFFbkIsSUFBSUM7UUFFSixJQUFJQyxJQUFrQyxFQUFFO1lBQ3RDRyxDQUFBQSxHQUFBQSxpQkFBQUEsT0FBc0IsRUFBQyxDQUFDQztnQkFDdEJMLHdCQUF3Qks7WUFDMUIsR0FBR0osY0FBMkM7UUFDaEQ7UUFFQSxJQUFJTSxZQUFZO1FBRWhCQyxDQUFBQSxHQUFBQSxXQUFBQSxrQkFBa0IsRUFBQyxDQUFDQztZQUNsQixJQUFJRixXQUFXO1lBQ2YsSUFBSSxZQUFZRSxTQUFTO2dCQUN2QixPQUFRQSxRQUFRQyxNQUFNO29CQUNwQixLQUFLQyxrQkFBQUEsMkJBQTJCLENBQUNDLFlBQVk7d0JBQUU7NEJBQzdDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUUsR0FBR0MsS0FBS0MsS0FBSyxDQUFDUCxRQUFRUSxTQUFTOzRCQUN2RCxNQUFNQyxRQUFRLElBQUlDLE1BQU1MOzRCQUN4QkksTUFBTUwsS0FBSyxHQUFHQTs0QkFDZCxNQUFNSzt3QkFDUjtvQkFDQSxLQUFLUCxrQkFBQUEsMkJBQTJCLENBQUNTLFdBQVc7d0JBQUU7NEJBQzVDYixZQUFZOzRCQUNaYyxPQUFPQyxRQUFRLENBQUNDLE1BQU07NEJBQ3RCO3dCQUNGO29CQUNBLEtBQUtaLGtCQUFBQSwyQkFBMkIsQ0FBQ2EseUJBQXlCO3dCQUFFOzRCQUMxREMsTUFDRSxLQUFHakMsY0FBWSxvREFFZE0sSUFBSSxDQUFDLENBQUM0QixNQUFRQSxJQUFJQyxJQUFJLElBQ3RCN0IsSUFBSSxDQUFDLENBQUM4QjtnQ0FDTFAsT0FBT1Esb0JBQW9CLEdBQUdEOzRCQUNoQyxHQUNDRSxLQUFLLENBQUMsQ0FBQ0M7Z0NBQ05DLFFBQVFDLEdBQUcsQ0FBRSxvQ0FBbUNGOzRCQUNsRDs0QkFDRjt3QkFDRjtvQkFDQTt3QkFDRTtnQkFDSjtZQUNGLE9BQU8sSUFBSSxXQUFXdEIsU0FBUztnQkFDN0IsT0FBUUEsUUFBUXlCLEtBQUs7b0JBQ25CLEtBQUt2QixrQkFBQUEsMkJBQTJCLENBQUN3QixrQkFBa0I7d0JBQUU7NEJBQ25ELE9BQU9kLE9BQU9DLFFBQVEsQ0FBQ0MsTUFBTTt3QkFDL0I7b0JBQ0EsS0FBS1osa0JBQUFBLDJCQUEyQixDQUFDeUIsY0FBYzt3QkFBRTs0QkFDL0Msc0RBQXNEOzRCQUN0RCxNQUFNQyxnQkFBZ0JoQixPQUFPaUIsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsS0FBSzs0QkFDdEQsdUVBQXVFOzRCQUN2RSxJQUFJSCxlQUFlO2dDQUNqQixJQUFJSSxxQkFBQUEsbUJBQW1CLENBQUNDLGVBQWUsRUFBRTtvQ0FDdkNWLFFBQVFXLElBQUksQ0FBQ0MsUUFBQUEsb0NBQW9DO2dDQUNuRDtnQ0FDQXJDLFlBQVk7Z0NBQ1pzQyxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQWlCLEVBQUM7NEJBQ3BCOzRCQUNBO3dCQUNGO29CQUNBLEtBQUtsQyxrQkFBQUEsMkJBQTJCLENBQUNtQyxtQkFBbUI7d0JBQUU7NEJBQ3BELElBQUlMLHFCQUFBQSxtQkFBbUIsQ0FBQ0MsZUFBZSxFQUFFO2dDQUN2Q1YsUUFBUVcsSUFBSSxDQUFDQyxRQUFBQSxvQ0FBb0M7Z0NBQ2pEQyxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQWlCLEVBQUM7NEJBQ3BCOzRCQUVBLE1BQU0sRUFBRUUsS0FBSyxFQUFFLEdBQUd0Qzs0QkFFbEIsNkRBQTZEOzRCQUM3RCxZQUFZOzRCQUNaLCtCQUErQjs0QkFDL0IsSUFBSXNDLE1BQU1DLFFBQVEsQ0FBQ1QsRUFBQUEsTUFBTSxDQUFDVSxLQUFLLENBQUNDLFdBQVcsR0FBYTtnQ0FDdEQsT0FBTzdCLE9BQU9DLFFBQVEsQ0FBQ0MsTUFBTTs0QkFDL0I7NEJBRUEsSUFBSSxDQUFDZ0IsRUFBQUEsTUFBTSxDQUFDWSxHQUFHLElBQUlKLE1BQU1DLFFBQVEsQ0FBQ1QsRUFBQUEsTUFBTSxDQUFDQyxRQUFRLEdBQUc7Z0NBQ2xEUixRQUFRQyxHQUFHLENBQUM7Z0NBRVpqQyx5QkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsc0JBQXVCb0QsSUFBSTtnQ0FFM0IsTUFBTUMsaUJBQWlCLElBQU1yRCx5QkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsc0JBQXVCc0QsSUFBSTtnQ0FFeERmLEVBQUFBLE1BQU0sQ0FDSGdCLE9BQU8sQ0FDTmhCLEVBQUFBLE1BQU0sQ0FBQ0MsUUFBUSxHQUNiLE1BQ0FnQixPQUNFQyxDQUFBQSxHQUFBQSxhQUFBQSxNQUFNLEVBQ0pDLENBQUFBLEdBQUFBLGFBQUFBLHNCQUFzQixFQUFDbkIsRUFBQUEsTUFBTSxDQUFDVSxLQUFLLEdBQ25DLElBQUlVLGdCQUFnQnJDLFNBQVNzQyxNQUFNLEtBR3pDckIsRUFBQUEsTUFBTSxDQUFDc0IsTUFBTSxFQUNiO29DQUFFQyxRQUFRO2dDQUFNLEdBRWpCaEMsS0FBSyxDQUFDO29DQUNMLG1EQUFtRDtvQ0FDbkQsaUNBQWlDO29DQUNqQ1IsU0FBU0MsTUFBTTtnQ0FDakIsR0FDQ3dDLE9BQU8sQ0FBQ1Y7NEJBQ2I7NEJBQ0E7d0JBQ0Y7b0JBQ0E7d0JBQ0U7Z0JBQ0o7WUFDRjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9wYWdlLWJvb3RzdHJhcC50cz8yYTdmIl0sIm5hbWVzIjpbInBhZ2VCb290cmFwIiwiYXNzZXRQcmVmaXgiLCJjb25uZWN0SE1SIiwicGF0aCIsImh5ZHJhdGUiLCJiZWZvcmVSZW5kZXIiLCJkaXNwbGF5Q29udGVudCIsInRoZW4iLCJpbml0T25EZW1hbmRFbnRyaWVzIiwiYnVpbGRJbmRpY2F0b3JIYW5kbGVyIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9CVUlMRF9JTkRJQ0FUT1IiLCJpbml0aWFsaXplQnVpbGRXYXRjaGVyIiwiaGFuZGxlciIsIl9fTkVYVF9CVUlMRF9JTkRJQ0FUT1JfUE9TSVRJT04iLCJyZWxvYWRpbmciLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJwYXlsb2FkIiwiYWN0aW9uIiwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIiwiU0VSVkVSX0VSUk9SIiwic3RhY2siLCJtZXNzYWdlIiwiSlNPTiIsInBhcnNlIiwiZXJyb3JKU09OIiwiZXJyb3IiLCJFcnJvciIsIlJFTE9BRF9QQUdFIiwid2luZG93IiwibG9jYXRpb24iLCJyZWxvYWQiLCJERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFIiwiZmV0Y2giLCJyZXMiLCJqc29uIiwibWFuaWZlc3QiLCJfX0RFVl9QQUdFU19NQU5JRkVTVCIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImxvZyIsImV2ZW50IiwiTUlERExFV0FSRV9DSEFOR0VTIiwiQ0xJRU5UX0NIQU5HRVMiLCJpc09uRXJyb3JQYWdlIiwibmV4dCIsInJvdXRlciIsInBhdGhuYW1lIiwiUnVudGltZUVycm9ySGFuZGxlciIsImhhZFJ1bnRpbWVFcnJvciIsIndhcm4iLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJwZXJmb3JtRnVsbFJlbG9hZCIsIlNFUlZFUl9PTkxZX0NIQU5HRVMiLCJwYWdlcyIsImluY2x1ZGVzIiwicXVlcnkiLCJfX05FWFRfUEFHRSIsImNsYyIsInNob3ciLCJjbGVhckluZGljYXRvciIsImhpZGUiLCJyZXBsYWNlIiwiU3RyaW5nIiwiYXNzaWduIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInNlYXJjaCIsImFzUGF0aCIsInNjcm9sbCIsImZpbmFsbHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/page-bootstrap.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/page-loader.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/page-loader.js ***!
|
||
\******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return PageLoader;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"./node_modules/next/dist/client/add-base-path.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"./node_modules/next/dist/client/add-locale.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ../shared/lib/router/utils/parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ./route-loader */ \"./node_modules/next/dist/client/route-loader.js\");\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"./node_modules/next/dist/shared/lib/constants.js\");\nclass PageLoader {\n getPageList() {\n if (false) {} else {\n if (window.__DEV_PAGES_MANIFEST) {\n return window.__DEV_PAGES_MANIFEST.pages;\n } else {\n this.promisedDevPagesManifest || (this.promisedDevPagesManifest = fetch(this.assetPrefix + \"/_next/static/development/\" + _constants.DEV_CLIENT_PAGES_MANIFEST, {\n credentials: \"same-origin\"\n }).then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n return manifest.pages;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest:\", err);\n throw new Error(\"Failed to fetch _devPagesManifest.json. Is something blocking that network request?\\n\" + \"Read more: https://nextjs.org/docs/messages/failed-to-fetch-devpagesmanifest\");\n }));\n return this.promisedDevPagesManifest;\n }\n }\n }\n getMiddleware() {\n if (false) {} else {\n if (window.__DEV_MIDDLEWARE_MATCHERS) {\n return window.__DEV_MIDDLEWARE_MATCHERS;\n } else {\n if (!this.promisedMiddlewareMatchers) {\n // TODO: Decide what should happen when fetching fails instead of asserting\n // @ts-ignore\n this.promisedMiddlewareMatchers = fetch(this.assetPrefix + \"/_next/static/\" + this.buildId + \"/\" + _constants.DEV_MIDDLEWARE_MANIFEST, {\n credentials: \"same-origin\"\n }).then((res)=>res.json()).then((matchers)=>{\n window.__DEV_MIDDLEWARE_MATCHERS = matchers;\n return matchers;\n }).catch((err)=>{\n console.log(\"Failed to fetch _devMiddlewareManifest\", err);\n });\n }\n // TODO Remove this assertion as this could be undefined\n return this.promisedMiddlewareMatchers;\n }\n }\n }\n getDataHref(params) {\n const { asPath, href, locale } = params;\n const { pathname: hrefPathname, query, search } = (0, _parserelativeurl.parseRelativeUrl)(href);\n const { pathname: asPathname } = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n const route = (0, _removetrailingslash.removeTrailingSlash)(hrefPathname);\n if (route[0] !== \"/\") {\n throw new Error('Route name should start with a \"/\", got \"' + route + '\"');\n }\n const getHrefForSlug = (path)=>{\n const dataRoute = (0, _getassetpathfromroute.default)((0, _removetrailingslash.removeTrailingSlash)((0, _addlocale.addLocale)(path, locale)), \".json\");\n return (0, _addbasepath.addBasePath)(\"/_next/data/\" + this.buildId + dataRoute + search, true);\n };\n return getHrefForSlug(params.skipInterpolation ? asPathname : (0, _isdynamic.isDynamicRoute)(route) ? (0, _interpolateas.interpolateAs)(hrefPathname, asPathname, query).result : route);\n }\n _isSsg(/** the route (file-system path) */ route) {\n return this.promisedSsgManifest.then((manifest)=>manifest.has(route));\n }\n loadPage(route) {\n return this.routeLoader.loadRoute(route).then((res)=>{\n if (\"component\" in res) {\n return {\n page: res.component,\n mod: res.exports,\n styleSheets: res.styles.map((o)=>({\n href: o.href,\n text: o.content\n }))\n };\n }\n throw res.error;\n });\n }\n prefetch(route) {\n return this.routeLoader.prefetch(route);\n }\n constructor(buildId, assetPrefix){\n this.routeLoader = (0, _routeloader.createRouteLoader)(assetPrefix);\n this.buildId = buildId;\n this.assetPrefix = assetPrefix;\n this.promisedSsgManifest = new Promise((resolve)=>{\n if (window.__SSG_MANIFEST) {\n resolve(window.__SSG_MANIFEST);\n } else {\n window.__SSG_MANIFEST_CB = ()=>{\n resolve(window.__SSG_MANIFEST);\n };\n }\n });\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=page-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wYWdlLWxvYWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O2VBZ0NxQkE7Ozs7eUNBN0JPOzJDQUNFOzRGQUNJO3VDQUNSO3VDQUNLOzhDQUNFO2lEQUNHO3lDQUNzQjt1Q0FJbkQ7QUFrQlEsTUFBTUE7SUEwQm5CQyxjQUFjO1FBQ1osSUFBSUMsS0FBeUIsRUFBYyxFQUUzQyxNQUFPO1lBQ0wsSUFBSUssT0FBT0Msb0JBQW9CLEVBQUU7Z0JBQy9CLE9BQU9ELE9BQU9DLG9CQUFvQixDQUFDQyxLQUFLO1lBQzFDLE9BQU87Z0JBQ0wsSUFBSSxDQUFDQyx3QkFBQUEsSUFBTCxLQUFJLENBQUNBLHdCQUFBQSxHQUE2QkMsTUFDaEMsSUFBTyxDQUFDQyxXQUFXLEdBQUMsK0JBQTRCQyxXQUFBQSx5QkFBeUIsRUFDekU7b0JBQUVDLGFBQWE7Z0JBQWMsR0FFNUJWLElBQUksQ0FBQyxDQUFDVyxNQUFRQSxJQUFJQyxJQUFJLElBQ3RCWixJQUFJLENBQUMsQ0FBQ0M7b0JBQ0xFLE9BQU9DLG9CQUFvQixHQUFHSDtvQkFDOUIsT0FBT0EsU0FBU0ksS0FBSztnQkFDdkIsR0FDQ1EsS0FBSyxDQUFDLENBQUNDO29CQUNOQyxRQUFRQyxHQUFHLENBQUUscUNBQW9DRjtvQkFDakQsTUFBTSxJQUFJRyxNQUNSLDBGQUNFO2dCQUVOO2dCQUNGLE9BQU8sSUFBSSxDQUFDWCx3QkFBd0I7WUFDdEM7UUFDRjtJQUNGO0lBRUFZLGdCQUFnQjtRQUNkLElBQUlwQixLQUF5QixFQUFjLEVBTTNDLE1BQU87WUFDTCxJQUFJSyxPQUFPcUIseUJBQXlCLEVBQUU7Z0JBQ3BDLE9BQU9yQixPQUFPcUIseUJBQXlCO1lBQ3pDLE9BQU87Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQ0MsMEJBQTBCLEVBQUU7b0JBQ3BDLDJFQUEyRTtvQkFDM0UsYUFBYTtvQkFDYixJQUFJLENBQUNBLDBCQUEwQixHQUFHbEIsTUFDaEMsSUFBTyxDQUFDQyxX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QztZQUN0QyxJQUFJdEUsT0FBT3VFLGNBQWMsRUFBRTtnQkFDekJELFFBQVF0RSxPQUFPdUUsY0FBYztZQUMvQixPQUFPO2dCQUNMdkUsT0FBT3dFLGlCQUFpQixHQUFHO29CQUN6QkYsUUFBUXRFLE9BQU91RSxjQUFjO2dCQUMvQjtZQUNGO1FBQ0Y7SUFDRjtBQTJIRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9wYWdlLWxvYWRlci50cz8xNDU4Il0sIm5hbWVzIjpbIlBhZ2VMb2FkZXIiLCJnZXRQYWdlTGlzdCIsInByb2Nlc3MiLCJnZXRDbGllbnRCdWlsZE1hbmlmZXN0IiwidGhlbiIsIm1hbmlmZXN0Iiwic29ydGVkUGFnZXMiLCJ3aW5kb3ciLCJfX0RFVl9QQUdFU19NQU5JRkVTVCIsInBhZ2VzIiwicHJvbWlzZWREZXZQYWdlc01hbmlmZXN0IiwiZmV0Y2giLCJhc3NldFByZWZpeCIsIkRFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QiLCJjcmVkZW50aWFscyIsInJlcyIsImpzb24iLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJFcnJvciIsImdldE1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlTWF0Y2hlcnMiLCJlbnYiLCJfX05FWFRfTUlERExFV0FSRV9NQVRDSEVSUyIsIl9fTUlERExFV0FSRV9NQVRDSEVSUyIsInVuZGVmaW5lZCIsIl9fREVWX01JRERMRVdBUkVfTUFUQ0hFUlMiLCJwcm9taXNlZE1pZGRsZXdhcmVNYXRjaGVycyIsImJ1aWxkSWQiLCJERVZfTUlERExFV0FSRV9NQU5JRkVTVCIsIm1hdGNoZXJzIiwiZ2V0RGF0YUhyZWYiLCJwYXJhbXMiLCJhc1BhdGgiLCJocmVmIiwibG9jYWxlIiwicGF0aG5hbWUiLCJocmVmUGF0aG5hbWUiLCJxdWVyeSIsInNlYXJjaCIsInBhcnNlUmVsYXRpdmVVcmwiLCJhc1BhdGhuYW1lIiwicm91dGUiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiZ2V0SHJlZkZvclNsdWciLCJwYXRoIiwiZGF0YVJvdXRlIiwiZ2V0QXNzZXRQYXRoRnJvbVJvdXRlIiwiYWRkTG9jYWxlIiwiYWRkQmFzZVBhdGgiLCJza2lwSW50ZXJwb2xhdGlvbiIsImlzRHluYW1pY1JvdXRlIiwiaW50ZXJwb2xhdGVBcyIsInJlc3VsdCIsIl9pc1NzZyIsInByb21pc2VkU3NnTWFuaWZlc3QiLCJoYXMiLCJsb2FkUGFnZSIsInJvdXRlTG9hZGVyIiwibG9hZFJvdXRlIiwicGFnZSIsImNvbXBvbmVudCIsIm1vZCIsImV4cG9ydHMiLCJzdHlsZVNoZWV0cyIsInN0eWxlcyIsIm1hcCIsIm8iLCJ0ZXh0IiwiY29udGVudCIsImVycm9yIiwicHJlZmV0Y2giLCJjb25zdHJ1Y3RvciIsImNyZWF0ZVJvdXRlTG9hZGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfX1NTR19NQU5JRkVTVCIsIl9fU1NHX01BTklGRVNUX0NCIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/page-loader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/performance-relayer.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/performance-relayer.js ***!
|
||
\**************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// TODO: remove in the next major version\n/* global location */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\n// copied to prevent pulling in un-necessary utils\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nconst initialHref = location.href;\nlet isRegistered = false;\nlet userReportHandler;\nfunction onReport(metric) {\n if (userReportHandler) {\n userReportHandler(metric);\n }\n // This code is not shipped, executed, or present in the client-side\n // JavaScript bundle unless explicitly enabled in your application.\n //\n // When this feature is enabled, we'll make it very clear by printing a\n // message during the build (`next build`).\n if (false) { var _window___NEXT_DATA__; }\n}\nconst _default = (onPerfEntry)=>{\n // Update function if it changes:\n userReportHandler = onPerfEntry;\n // Only register listeners once:\n if (isRegistered) {\n return;\n }\n isRegistered = true;\n const attributions = false;\n for (const webVital of WEB_VITALS){\n try {\n let mod;\n if (false) {}\n if (!mod) {\n mod = __webpack_require__(/*! next/dist/compiled/web-vitals */ \"./node_modules/next/dist/compiled/web-vitals/web-vitals.js\");\n }\n mod[\"on\" + webVital](onReport);\n } catch (err) {\n // Do nothing if the module fails to load\n console.warn(\"Failed to track \" + webVital + \" web-vital\", err);\n }\n }\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=performance-relayer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wZXJmb3JtYW5jZS1yZWxheWVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxtQkFBbUI7Ozs7MkNBcUVuQjs7O2VBQUFBOzs7QUFsRUEsa0RBQWtEO0FBQ2xELE1BQU1DLGFBQWE7SUFBQztJQUFPO0lBQU87SUFBTztJQUFPO0lBQU87Q0FBTztBQUU5RCxNQUFNQyxjQUFjQyxTQUFTQyxJQUFJO0FBQ2pDLElBQUlDLGVBQWU7QUFDbkIsSUFBSUM7QUFHSixTQUFTQyxTQUFTQyxNQUFjO0lBQzlCLElBQUlGLG1CQUFtQjtRQUNyQkEsa0JBQWtCRTtJQUNwQjtJQUVBLG9FQUFvRTtJQUNwRSxtRUFBbUU7SUFDbkUsRUFBRTtJQUNGLHVFQUF1RTtJQUN2RSwyQ0FBMkM7SUFDM0MsSUFDRUMsS0FFK0IsRUFDL0IsOEJBeUNGO0FBQ0Y7TUFFQVQsV0FBZSxDQUFDeUM7SUFDZCxpQ0FBaUM7SUFDakNuQyxvQkFBb0JtQztJQUVwQixnQ0FBZ0M7SUFDaEMsSUFBSXBDLGNBQWM7UUFDaEI7SUFDRjtJQUNBQSxlQUFlO0lBRWYsTUFBTXFDLGVBQTBDakMsS0FDaEI7SUFFaEMsS0FBSyxNQUFNbUMsWUFBWTNDLFdBQVk7UUFDakMsSUFBSTtZQUNGLElBQUk0QztZQUVKLElBQUlwQyxLQUE2QyxFQUFFLEVBSW5EO1lBQ0EsSUFBSSxDQUFDb0MsS0FBSztnQkFDUkEsTUFBTUcsbUJBQUFBLENBQVE7WUFDaEI7WUFDQUgsR0FBRyxDQUFDLE9BQUtELFNBQVcsQ0FBQ3JDO1FBQ3ZCLEVBQUUsT0FBT2lDLEtBQUs7WUFDWix5Q0FBeUM7WUFDekNGLFFBQVFXLElBQUksQ0FBQyxxQkFBbUJMLFdBQVMsY0FBYUo7UUFDeEQ7SUFDRjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3BlcmZvcm1hbmNlLXJlbGF5ZXIudHM/ODMyZSJdLCJuYW1lcyI6WyJfZGVmYXVsdCIsIldFQl9WSVRBTFMiLCJpbml0aWFsSHJlZiIsImxvY2F0aW9uIiwiaHJlZiIsImlzUmVnaXN0ZXJlZCIsInVzZXJSZXBvcnRIYW5kbGVyIiwib25SZXBvcnQiLCJtZXRyaWMiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0FOQUxZVElDU19JRCIsIndpbmRvdyIsImJvZHkiLCJkc24iLCJpZCIsInBhZ2UiLCJfX05FWFRfREFUQV9fIiwiZXZlbnRfbmFtZSIsIm5hbWUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwic3BlZWQiLCJuYXZpZ2F0b3IiLCJibG9iIiwiQmxvYiIsIlVSTFNlYXJjaFBhcmFtcyIsInR5cGUiLCJ2aXRhbHNVcmwiLCJzZW5kIiwic2VuZEJlYWNvbiIsImJpbmQiLCJmYWxsYmFja1NlbmQiLCJmZXRjaCIsIm1ldGhvZCIsImNyZWRlbnRpYWxzIiwia2VlcGFsaXZlIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJlcnIiLCJvblBlcmZFbnRyeSIsImF0dHJpYnV0aW9ucyIsIl9fTkVYVF9XRUJfVklUQUxTX0FUVFJJQlVUSU9OIiwid2ViVml0YWwiLCJtb2QiLCJfX05FWFRfSEFTX1dFQl9WSVRBTFNfQVRUUklCVVRJT04iLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJ3YXJuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/performance-relayer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/portal/index.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/portal/index.js ***!
|
||
\*******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Portal\", ({\n enumerable: true,\n get: function() {\n return Portal;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\nconst Portal = (param)=>{\n let { children, type } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const element = document.createElement(type);\n document.body.appendChild(element);\n setPortalNode(element);\n return ()=>{\n document.body.removeChild(element);\n };\n }, [\n type\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, portalNode) : null;\n};\n_c = Portal;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"Portal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wb3J0YWwvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7OzswQ0FRYUE7OztlQUFBQTs7O21DQVJ1QjtzQ0FDUDtBQU90QixNQUFNQSxTQUFTLENBQUFDO1FBQUMsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQWUsR0FBQUY7SUFDcEQsTUFBTSxDQUFDRyxZQUFZQyxjQUFjLEdBQUdDLENBQUFBLEdBQUFBLE9BQUFBLFFBQVEsRUFBcUI7SUFFakVDLENBQUFBLEdBQUFBLE9BQUFBLFNBQVMsRUFBQztRQUNSLE1BQU1DLFVBQVVDLFNBQVNDLGFBQWEsQ0FBQ1A7UUFDdkNNLFNBQVNFLElBQUksQ0FBQ0MsV0FBVyxDQUFDSjtRQUMxQkgsY0FBY0c7UUFDZCxPQUFPO1lBQ0xDLFNBQVNFLElBQUksQ0FBQ0UsV0FBVyxDQUFDTDtRQUM1QjtJQUNGLEdBQUc7UUFBQ0w7S0FBSztJQUVULE9BQU9DLGFBQWFVLFdBQWJWLEdBQWFVLENBQUFBLEdBQUFBLFVBQUFBLFlBQVksRUFBQ1osVUFBVUUsY0FBYztBQUMzRDtLQWJhSiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9wb3J0YWwvaW5kZXgudHN4P2VjN2UiXSwibmFtZXMiOlsiUG9ydGFsIiwicGFyYW0iLCJjaGlsZHJlbiIsInR5cGUiLCJwb3J0YWxOb2RlIiwic2V0UG9ydGFsTm9kZSIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiZWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlUG9ydGFsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/portal/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/remove-base-path.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/remove-base-path.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || \"\";\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n return path;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZW1vdmUtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBSWdCQTs7O2VBQUFBOzs7eUNBSlk7QUFFNUIsTUFBTUMsV0FBV0MsTUFBbUMsSUFBZTtBQUU1RCxTQUFTRixlQUFlSyxJQUFZO0lBQ3pDLElBQUlILEtBQTBDLEVBQUUsRUFJaEQ7SUFFQSxpREFBaUQ7SUFDakQsSUFBSUQsU0FBU08sTUFBTSxLQUFLLEdBQUcsT0FBT0g7SUFFbENBLE9BQU9BLEtBQUtJLEtBQUssQ0FBQ1IsU0FBU08sTUFBTTtJQUNqQyxJQUFJLENBQUNILEtBQUtLLFVBQVUsQ0FBQyxNQUFNTCxPQUFPLE1BQUlBO0lBQ3RDLE9BQU9BO0FBQ1QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aC50cz9mYTcyIl0sIm5hbWVzIjpbInJlbW92ZUJhc2VQYXRoIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJoYXNCYXNlUGF0aCIsImxlbmd0aCIsInNsaWNlIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/remove-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/remove-locale.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/remove-locale.js ***!
|
||
\********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeLocale\", ({\n enumerable: true,\n get: function() {\n return removeLocale;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction removeLocale(path, locale) {\n if (false) {}\n return path;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZW1vdmUtbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Z0RBRWdCQTs7O2VBQUFBOzs7dUNBRlU7QUFFbkIsU0FBU0EsYUFBYUMsSUFBWSxFQUFFQyxNQUFlO0lBQ3hELElBQUlDLEtBQStCLEVBQUUsRUFZckM7SUFDQSxPQUFPRjtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3JlbW92ZS1sb2NhbGUudHM/YWRkYyJdLCJuYW1lcyI6WyJyZW1vdmVMb2NhbGUiLCJwYXRoIiwibG9jYWxlIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJwYXRobmFtZSIsInBhcnNlUGF0aCIsInBhdGhMb3dlciIsInRvTG93ZXJDYXNlIiwibG9jYWxlTG93ZXIiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/remove-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/request-idle-callback.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/request-idle-callback.js ***!
|
||
\****************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n cancelIdleCallback: function() {\n return cancelIdleCallback;\n },\n requestIdleCallback: function() {\n return requestIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== \"undefined\" && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== \"undefined\" && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=request-idle-callback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZ0JhQSxvQkFBa0I7ZUFBbEJBOztJQWhCQUMscUJBQW1CO2VBQW5CQTs7O0FBQU4sTUFBTUEsc0JBQ1gsT0FBUUMsU0FBUyxlQUNmQSxLQUFLRCxtQkFBbUIsSUFDeEJDLEtBQUtELG1CQUFtQixDQUFDRSxJQUFJLENBQUNDLFdBQ2hDLFNBQVVDLEVBQXVCO0lBQy9CLElBQUlDLFFBQVFDLEtBQUtDLEdBQUc7SUFDcEIsT0FBT04sS0FBS08sVUFBVSxDQUFDO1FBQ3JCSixHQUFHO1lBQ0RLLFlBQVk7WUFDWkMsZUFBZTtnQkFDYixPQUFPQyxLQUFLQyxHQUFHLENBQUMsR0FBRyxLQUFNTixDQUFBQSxLQUFLQyxHQUFHLEtBQUtGLEtBQUFBO1lBQ3hDO1FBQ0Y7SUFDRixHQUFHO0FBQ0w7QUFFSyxNQUFNTixxQkFDWCxPQUFRRSxTQUFTLGVBQ2ZBLEtBQUtGLGtCQUFrQixJQUN2QkUsS0FBS0Ysa0JBQWtCLENBQUNHLElBQUksQ0FBQ0MsV0FDL0IsU0FBVVUsRUFBVTtJQUNsQixPQUFPQyxhQUFhRDtBQUN0QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2sudHM/MDVmNCJdLCJuYW1lcyI6WyJjYW5jZWxJZGxlQ2FsbGJhY2siLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwic2VsZiIsImJpbmQiLCJ3aW5kb3ciLCJjYiIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsInNldFRpbWVvdXQiLCJkaWRUaW1lb3V0IiwidGltZVJlbWFpbmluZyIsIk1hdGgiLCJtYXgiLCJpZCIsImNsZWFyVGltZW91dCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/request-idle-callback.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/resolve-href.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/resolve-href.js ***!
|
||
\*******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === \"string\" ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split(\"?\", 1);\n if ((urlParts[0] || \"\").match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : \"\") + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n base = new URL(urlAsString.startsWith(\"#\") ? router.asPath : router.pathname, \"http://n\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL(\"/\", \"http://n\");\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = \"\";\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=resolve-href.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXNvbHZlLWhyZWYuanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0F5QmdCQTs7O2VBQUFBOzs7eUNBdkJ1Qjt1Q0FDRjtrQ0FDaEI7bUNBQ29CO29EQUNFO3dDQUNoQjtvQ0FDSTsyQ0FDRDtBQWdCdkIsU0FBU0EsWUFDZEMsTUFBa0IsRUFDbEJDLElBQVMsRUFDVEMsU0FBbUI7SUFFbkIsNENBQTRDO0lBQzVDLElBQUlDO0lBQ0osSUFBSUMsY0FBYyxPQUFPSCxTQUFTLFdBQVdBLE9BQU9JLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFvQixFQUFDSjtJQUV6RSw2REFBNkQ7SUFDN0QsbURBQW1EO0lBQ25ELE1BQU1LLGdCQUFnQkYsWUFBWUcsS0FBSyxDQUFDO0lBQ3hDLE1BQU1DLHFCQUFxQkYsZ0JBQ3ZCRixZQUFZSyxLQUFLLENBQUNILGFBQWEsQ0FBQyxFQUFFLENBQUNJLE1BQU0sSUFDekNOO0lBRUosTUFBTU8sV0FBV0gsbUJBQW1CSSxLQUFLLENBQUMsS0FBSztJQUUvQyxJQUFJLENBQUNELFFBQVEsQ0FBQyxFQUFFLElBQUksSUFBSUosS0FBSyxDQUFDLGNBQWM7UUFDMUNNLFFBQVFDLEtBQUssQ0FDWCxtQkFBaUJWLGNBQVksdUNBQW9DSixPQUFPZSxRQUFRLEdBQUM7UUFFbkYsTUFBTUMsZ0JBQWdCQyxDQUFBQSxHQUFBQSxPQUFBQSx3QkFBd0IsRUFBQ1Q7UUFDL0NKLGNBQWMsQ0FBQ0UsZ0JBQWdCQSxhQUFhLENBQUMsRUFBRSxHQUFHLE1BQU1VO0lBQzFEO0lBRUEsMkRBQTJEO0lBQzNELElBQUksQ0FBQ0UsQ0FBQUEsR0FBQUEsWUFBQUEsVUFBVSxFQUFDZCxjQUFjO1FBQzVCLE9BQVFGLFlBQVk7WUFBQ0U7U0FBWSxHQUFHQTtJQUN0QztJQUVBLElBQUk7UUFDRkQsT0FBTyxJQUFJZ0IsSUFDVGYsWUFBWWdCLFVBQVUsQ0FBQyxPQUFPcEIsT0FBT3FCLE1BQU0sR0FBR3JCLE9BQU9lLFFBQVEsRUFDN0Q7SUFFSixFQUFFLE9BQU9PLEdBQUc7UUFDVixrREFBa0Q7UUFDbERuQixPQUFPLElBQUlnQixJQUFJLEtBQUs7SUFDdEI7SUFFQSxJQUFJO1FBQ0YsTUFBTUksV0FBVyxJQUFJSixJQUFJZixhQUFhRDtRQUN0Q29CLFNBQVNSLFFBQVEsR0FBR1MsQ0FBQUEsR0FBQUEsd0JBQUFBLDBCQUEwQixFQUFDRCxTQUFTUixRQUFRO1FBQ2hFLElBQUlVLGlCQUFpQjtRQUVyQixJQUNFQyxDQUFBQSxHQUFBQSxRQUFBQSxjQUFjLEVBQUNILFNBQVNSLFFBQVEsS0FDaENRLFNBQVNJLFlBQVksSUFDckJ6QixXQUNBO1lBQ0EsTUFBTTBCLFFBQVFDLENBQUFBLEdBQUFBLGFBQUFBLHNCQUFzQixFQUFDTixTQUFTSSxZQUFZO1lBRTFELE1BQU0sRUFBRUcsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBYSxFQUN0Q1QsU0FBU1IsUUFBUSxFQUNqQlEsU0FBU1IsUUFBUSxFQUNqQmE7WUFHRixJQUFJRSxRQUFRO2dCQUNWTCxpQkFBaUJwQixDQUFBQSxHQUFBQSxXQUFBQSxvQkFBb0IsRUFBQztvQkFDcENVLFVBQVVlO29CQUNWRyxNQUFNVixTQUFTVSxJQUFJO29CQUNuQkwsT0FBT00sQ0FBQUEsR0FBQUEsTUFBQUEsSUFBSSxFQUFDTixPQUFPRztnQkFDckI7WUFDRjtRQUNGO1FBRUEsb0VBQW9FO1FBQ3BFLE1BQU1JLGVBQ0paLFNBQVNhLE1BQU0sS0FBS2pDLEtBQUtpQyxNQUFNLEdBQzNCYixTQUFTdEIsSUFBSSxDQUFDUSxLQUFLLENBQUNjLFNBQVNhLE1BQU0sQ0FBQzFCLE1BQU0sSUFDMUNhLFNBQVN0QixJQUFJO1FBRW5CLE9BQU9DLFlBQ0g7WUFBQ2lDO1lBQWNWLGtCQUFrQlU7U0FBYSxHQUM5Q0E7SUFDTixFQUFFLE9BQU9iLEdBQUc7UUFDVixPQUFPcEIsWUFBWTtZQUFDRTtTQUFZLEdBQUdBO0lBQ3JDO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvcmVzb2x2ZS1ocmVmLnRzP2U2ZDIiXSwibmFtZXMiOlsicmVzb2x2ZUhyZWYiLCJyb3V0ZXIiLCJocmVmIiwicmVzb2x2ZUFzIiwiYmFzZSIsInVybEFzU3RyaW5nIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJ1cmxQcm90b01hdGNoIiwibWF0Y2giLCJ1cmxBc1N0cmluZ05vUHJvdG8iLCJzbGljZSIsImxlbmd0aCIsInVybFBhcnRzIiwic3BsaXQiLCJjb25zb2xlIiwiZXJyb3IiLCJwYXRobmFtZSIsIm5vcm1hbGl6ZWRVcmwiLCJub3JtYWxpemVSZXBlYXRlZFNsYXNoZXMiLCJpc0xvY2FsVVJMIiwiVVJMIiwic3RhcnRzV2l0aCIsImFzUGF0aCIsIl8iLCJmaW5hbFVybCIsIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIiwiaW50ZXJwb2xhdGVkQXMiLCJpc0R5bmFtaWNSb3V0ZSIsInNlYXJjaFBhcmFtcyIsInF1ZXJ5Iiwic2VhcmNoUGFyYW1zVG9VcmxRdWVyeSIsInJlc3VsdCIsInBhcmFtcyIsImludGVycG9sYXRlQXMiLCJoYXNoIiwib21pdCIsInJlc29sdmVkSHJlZiIsIm9yaWdpbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/resolve-href.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/route-announcer.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/route-announcer.js ***!
|
||
\**********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RouteAnnouncer: function() {\n return RouteAnnouncer;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\nconst nextjsRouteAnnouncerStyles = {\n border: 0,\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n top: 0,\n width: \"1px\",\n // https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n};\nconst RouteAnnouncer = ()=>{\n _s();\n const { asPath } = (0, _router.useRouter)();\n const [routeAnnouncement, setRouteAnnouncement] = _react.default.useState(\"\");\n // Only announce the path change, but not for the first load because screen\n // reader will do that automatically.\n const previouslyLoadedPath = _react.default.useRef(asPath);\n // Every time the path changes, announce the new page’s title following this\n // priority: first the document title (from head), otherwise the first h1, or\n // if none of these exist, then the pathname from the URL. This methodology is\n // inspired by Marcy Sutton’s accessible client routing user testing. More\n // information can be found here:\n // https://www.gatsbyjs.com/blog/2019-07-11-user-testing-accessible-client-routing/\n _react.default.useEffect(()=>{\n // If the path hasn't change, we do nothing.\n if (previouslyLoadedPath.current === asPath) return;\n previouslyLoadedPath.current = asPath;\n if (document.title) {\n setRouteAnnouncement(document.title);\n } else {\n const pageHeader = document.querySelector(\"h1\");\n var _pageHeader_innerText;\n const content = (_pageHeader_innerText = pageHeader == null ? void 0 : pageHeader.innerText) != null ? _pageHeader_innerText : pageHeader == null ? void 0 : pageHeader.textContent;\n setRouteAnnouncement(content || asPath);\n }\n }, [\n asPath\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n \"aria-live\": \"assertive\" // Make the announcement immediately.\n ,\n id: \"__next-route-announcer__\",\n role: \"alert\",\n style: nextjsRouteAnnouncerStyles,\n children: routeAnnouncement\n });\n};\n_s(RouteAnnouncer, \"YC5SCNeVaenA6x7RBk3t0O2D/M8=\");\n_c = RouteAnnouncer;\nconst _default = RouteAnnouncer;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=route-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"RouteAnnouncer\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZS1hbm5vdW5jZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7SUFtQmFBLGdCQUFjO2VBQWRBOztJQTZDYkMsU0FBNkI7ZUFBN0JDOzs7Ozs0RUFoRWtCO29DQUNRO0FBRTFCLE1BQU1DLDZCQUFrRDtJQUN0REMsUUFBUTtJQUNSQyxNQUFNO0lBQ05DLFFBQVE7SUFDUkMsUUFBUTtJQUNSQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsVUFBVTtJQUNWQyxLQUFLO0lBQ0xDLE9BQU87SUFFUCx3RkFBd0Y7SUFDeEZDLFlBQVk7SUFDWkMsVUFBVTtBQUNaO0FBRU8sTUFBTWQsaUJBQWlCOztJQUM1QixNQUFNLEVBQUVlLE1BQU0sRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxRQUFBQSxTQUFTO0lBQzVCLE1BQU0sQ0FBQ0MsbUJBQW1CQyxxQkFBcUIsR0FBR0MsT0FBQUEsT0FBSyxDQUFDQyxRQUFRLENBQUM7SUFFakUsMkVBQTJFO0lBQzNFLHFDQUFxQztJQUNyQyxNQUFNQyx1QkFBdUJGLE9BQUFBLE9BQUssQ0FBQ0csTUFBTSxDQUFDUDtJQUUxQyw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsaUNBQWlDO0lBQ2pDLG1GQUFtRjtJQUNuRkksT0FBQUEsT0FBSyxDQUFDSSxTQUFTLENBQ2I7UUFDRSw0Q0FBNEM7UUFDNUMsSUFBSUYscUJBQXFCRyxPQUFPLEtBQUtULFFBQVE7UUFDN0NNLHFCQUFxQkcsT0FBTyxHQUFHVDtRQUUvQixJQUFJVSxTQUFTQyxLQUFLLEVBQUU7WUFDbEJSLHFCQUFxQk8sU0FBU0MsS0FBSztRQUNyQyxPQUFPO1lBQ0wsTUFBTUMsYUFBYUYsU0FBU0csYUFBYSxDQUFDO2dCQUMxQkQ7WUFBaEIsTUFBTUUsVUFBVUYsQ0FBQUEsd0JBQUFBLGNBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFdBQVlHLFNBQVMsWUFBckJILHdCQUF5QkEsY0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsV0FBWUksV0FBVztZQUVoRWIscUJBQXFCVyxXQUFXZDtRQUNsQztJQUNGLEdBRUE7UUFBQ0E7S0FBTztJQUdWLE9BQ0UsV0FERixHQUNFLElBQUFpQixZQUFBQyxHQUFBLEVBQUNDLEtBQUFBO1FBQ0NDLGFBQVUsWUFBWSxxQ0FBcUM7O1FBQzNEQyxJQUFHO1FBQ0hDLE1BQUs7UUFDTEMsT0FBT25DO2tCQUVOYzs7QUFHUDtHQTNDYWpCO0tBQUFBO01BNkNiRSxXQUFlRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9yb3V0ZS1hbm5vdW5jZXIudHN4PzU5MGEiXSwibmFtZXMiOlsiUm91dGVBbm5vdW5jZXIiLCJkZWZhdWx0IiwiX2RlZmF1bHQiLCJuZXh0anNSb3V0ZUFubm91bmNlclN0eWxlcyIsImJvcmRlciIsImNsaXAiLCJoZWlnaHQiLCJtYXJnaW4iLCJvdmVyZmxvdyIsInBhZGRpbmciLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwid2hpdGVTcGFjZSIsIndvcmRXcmFwIiwiYXNQYXRoIiwidXNlUm91dGVyIiwicm91dGVBbm5vdW5jZW1lbnQiLCJzZXRSb3V0ZUFubm91bmNlbWVudCIsIlJlYWN0IiwidXNlU3RhdGUiLCJwcmV2aW91c2x5TG9hZGVkUGF0aCIsInVzZVJlZiIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJkb2N1bWVudCIsInRpdGxlIiwicGFnZUhlYWRlciIsInF1ZXJ5U2VsZWN0b3IiLCJjb250ZW50IiwiaW5uZXJUZXh0IiwidGV4dENvbnRlbnQiLCJfanN4cnVudGltZSIsImpzeCIsInAiLCJhcmlhLWxpdmUiLCJpZCIsInJvbGUiLCJzdHlsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/route-announcer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/route-loader.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/route-loader.js ***!
|
||
\*******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createRouteLoader: function() {\n return createRouteLoader;\n },\n getClientBuildManifest: function() {\n return getClientBuildManifest;\n },\n isAssetError: function() {\n return isAssetError;\n },\n markAssetError: function() {\n return markAssetError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _trustedtypes = __webpack_require__(/*! ./trusted-types */ \"./node_modules/next/dist/client/trusted-types.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"./node_modules/next/dist/client/request-idle-callback.js\");\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"./node_modules/next/dist/build/deployment-id.js\");\n// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\nconst MS_MAX_IDLE_DELAY = 3800;\nfunction withFuture(key, map, generator) {\n let entry = map.get(key);\n if (entry) {\n if (\"future\" in entry) {\n return entry.future;\n }\n return Promise.resolve(entry);\n }\n let resolver;\n const prom = new Promise((resolve)=>{\n resolver = resolve;\n });\n map.set(key, entry = {\n resolve: resolver,\n future: prom\n });\n return generator ? generator() // eslint-disable-next-line no-sequences\n .then((value)=>(resolver(value), value)).catch((err)=>{\n map.delete(key);\n throw err;\n }) : prom;\n}\nconst ASSET_LOAD_ERROR = Symbol(\"ASSET_LOAD_ERROR\");\nfunction markAssetError(err) {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\nfunction isAssetError(err) {\n return err && ASSET_LOAD_ERROR in err;\n}\nfunction hasPrefetch(link) {\n try {\n link = document.createElement(\"link\");\n return(// with relList.support\n !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports(\"prefetch\"));\n } catch (e) {\n return false;\n }\n}\nconst canPrefetch = hasPrefetch();\nconst getAssetQueryString = ()=>{\n return (0, _deploymentid.getDeploymentIdQueryOrEmptyString)();\n};\nfunction prefetchViaDom(href, as, link) {\n return new Promise((resolve, reject)=>{\n const selector = '\\n link[rel=\"prefetch\"][href^=\"' + href + '\"],\\n link[rel=\"preload\"][href^=\"' + href + '\"],\\n script[src^=\"' + href + '\"]';\n if (document.querySelector(selector)) {\n return resolve();\n }\n link = document.createElement(\"link\");\n // The order of property assignment here is intentional:\n if (as) link.as = as;\n link.rel = \"prefetch\";\n link.crossOrigin = undefined;\n link.onload = resolve;\n link.onerror = ()=>reject(markAssetError(new Error(\"Failed to prefetch: \" + href)));\n // `href` should always be last:\n link.href = href;\n document.head.appendChild(link);\n });\n}\nfunction appendScript(src, script) {\n return new Promise((resolve, reject)=>{\n script = document.createElement(\"script\");\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve;\n script.onerror = ()=>reject(markAssetError(new Error(\"Failed to load script: \" + src)));\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = undefined;\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src;\n document.body.appendChild(script);\n });\n}\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise;\n// Resolve a promise that times out after given amount of milliseconds.\nfunction resolvePromiseWithTimeout(p, ms, err) {\n return new Promise((resolve, reject)=>{\n let cancelled = false;\n p.then((r)=>{\n // Resolved, cancel the timeout\n cancelled = true;\n resolve(r);\n }).catch(reject);\n // We wrap these checks separately for better dead-code elimination in\n // production bundles.\n if (true) {\n (devBuildPromise || Promise.resolve()).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>setTimeout(()=>{\n if (!cancelled) {\n reject(err);\n }\n }, ms));\n });\n }\n if (false) {}\n });\n}\nfunction getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST);\n }\n const onBuildManifest = new Promise((resolve)=>{\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB;\n self.__BUILD_MANIFEST_CB = ()=>{\n resolve(self.__BUILD_MANIFEST);\n cb && cb();\n };\n });\n return resolvePromiseWithTimeout(onBuildManifest, MS_MAX_IDLE_DELAY, markAssetError(new Error(\"Failed to load client build manifest\")));\n}\nfunction getFilesForRoute(assetPrefix, route) {\n if (true) {\n const scriptUrl = assetPrefix + \"/_next/static/chunks/pages\" + encodeURI((0, _getassetpathfromroute.default)(route, \".js\")) + getAssetQueryString();\n return Promise.resolve({\n scripts: [\n (0, _trustedtypes.__unsafeCreateTrustedScriptURL)(scriptUrl)\n ],\n // Styles are handled by `style-loader` in development:\n css: []\n });\n }\n return getClientBuildManifest().then((manifest)=>{\n if (!(route in manifest)) {\n throw markAssetError(new Error(\"Failed to lookup route: \" + route));\n }\n const allFiles = manifest[route].map((entry)=>assetPrefix + \"/_next/\" + encodeURI(entry));\n return {\n scripts: allFiles.filter((v)=>v.endsWith(\".js\")).map((v)=>(0, _trustedtypes.__unsafeCreateTrustedScriptURL)(v) + getAssetQueryString()),\n css: allFiles.filter((v)=>v.endsWith(\".css\")).map((v)=>v + getAssetQueryString())\n };\n });\n}\nfunction createRouteLoader(assetPrefix) {\n const entrypoints = new Map();\n const loadedScripts = new Map();\n const styleSheets = new Map();\n const routes = new Map();\n function maybeExecuteScript(src) {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (false) {} else {\n return appendScript(src);\n }\n }\n function fetchStyleSheet(href) {\n let prom = styleSheets.get(href);\n if (prom) {\n return prom;\n }\n styleSheets.set(href, prom = fetch(href, {\n credentials: \"same-origin\"\n }).then((res)=>{\n if (!res.ok) {\n throw new Error(\"Failed to load stylesheet: \" + href);\n }\n return res.text().then((text)=>({\n href: href,\n content: text\n }));\n }).catch((err)=>{\n throw markAssetError(err);\n }));\n return prom;\n }\n return {\n whenEntrypoint (route) {\n return withFuture(route, entrypoints);\n },\n onEntrypoint (route, execute) {\n (execute ? Promise.resolve().then(()=>execute()).then((exports1)=>({\n component: exports1 && exports1.default || exports1,\n exports: exports1\n }), (err)=>({\n error: err\n })) : Promise.resolve(undefined)).then((input)=>{\n const old = entrypoints.get(route);\n if (old && \"resolve\" in old) {\n if (input) {\n entrypoints.set(route, input);\n old.resolve(input);\n }\n } else {\n if (input) {\n entrypoints.set(route, input);\n } else {\n entrypoints.delete(route);\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route);\n }\n });\n },\n loadRoute (route, prefetch) {\n return withFuture(route, routes, ()=>{\n let devBuildPromiseResolve;\n if (true) {\n devBuildPromise = new Promise((resolve)=>{\n devBuildPromiseResolve = resolve;\n });\n }\n return resolvePromiseWithTimeout(getFilesForRoute(assetPrefix, route).then((param)=>{\n let { scripts, css } = param;\n return Promise.all([\n entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet))\n ]);\n }).then((res)=>{\n return this.whenEntrypoint(route).then((entrypoint)=>({\n entrypoint,\n styles: res[1]\n }));\n }), MS_MAX_IDLE_DELAY, markAssetError(new Error(\"Route did not complete loading: \" + route))).then((param)=>{\n let { entrypoint, styles } = param;\n const res = Object.assign({\n styles: styles\n }, entrypoint);\n return \"error\" in entrypoint ? entrypoint : res;\n }).catch((err)=>{\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err;\n }\n return {\n error: err\n };\n }).finally(()=>devBuildPromiseResolve == null ? void 0 : devBuildPromiseResolve());\n });\n },\n prefetch (route) {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn;\n if (cn = navigator.connection) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n }\n return getFilesForRoute(assetPrefix, route).then((output)=>Promise.all(canPrefetch ? output.scripts.map((script)=>prefetchViaDom(script.toString(), \"script\")) : [])).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>this.loadRoute(route, true).catch(()=>{}));\n }).catch(()=>{});\n }\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=route-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZS1sb2FkZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNlJnQkEsbUJBQWlCO2VBQWpCQTs7SUEzREFDLHdCQUFzQjtlQUF0QkE7O0lBbklBQyxjQUFZO2VBQVpBOztJQUpBQyxnQkFBYztlQUFkQTs7Ozs0RkF6RmtCOzBDQUNhO2lEQUNYOzBDQUNjO0FBRWxELHVFQUF1RTtBQUN2RSx5RUFBeUU7QUFDekUsMkVBQTJFO0FBQzNFLG9DQUFvQztBQUNwQyxNQUFNQyxvQkFBb0I7QUEyQzFCLFNBQVNDLFdBQ1BDLEdBQVcsRUFDWEMsR0FBK0IsRUFDL0JDLFNBQTRCO0lBRTVCLElBQUlDLFFBQVFGLElBQUlHLEdBQUcsQ0FBQ0o7SUFDcEIsSUFBSUcsT0FBTztRQUNULElBQUksWUFBWUEsT0FBTztZQUNyQixPQUFPQSxNQUFNRSxNQUFNO1FBQ3JCO1FBQ0EsT0FBT0MsUUFBUUMsT0FBTyxDQUFDSjtJQUN6QjtJQUNBLElBQUlLO0lBQ0osTUFBTUMsT0FBbUIsSUFBSUgsUUFBVyxDQUFDQztRQUN2Q0MsV0FBV0Q7SUFDYjtJQUNBTixJQUFJUyxHQUFHLENBQUNWLEtBQU1HLFFBQVE7UUFBRUksU0FBU0M7UUFBV0gsUUFBUUk7SUFBSztJQUN6RCxPQUFPUCxZQUNIQSxZQUNFLHdDQUF3QztLQUN2Q1MsSUFBSSxDQUFDLENBQUNDLFFBQVdKLENBQUFBLFNBQVNJLFFBQVFBLEtBQUFBLEdBQ2xDQyxLQUFLLENBQUMsQ0FBQ0M7UUFDTmIsSUFBSWMsTUFBTSxDQUFDZjtRQUNYLE1BQU1jO0lBQ1IsS0FDRkw7QUFDTjtBQVNBLE1BQU1PLG1CQUFtQkMsT0FBTztBQUV6QixTQUFTcEIsZUFBZWlCLEdBQVU7SUFDdkMsT0FBT0ksT0FBT0MsY0FBYyxDQUFDTCxLQUFLRSxrQkFBa0IsQ0FBQztBQUN2RDtBQUVPLFNBQVNwQixhQUFha0IsR0FBVztJQUN0QyxPQUFPQSxPQUFPRSxvQkFBb0JGO0FBQ3BD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QUksQ0FBQzhDLFNBQVMsQ0FBQ3JDLE9BQU8sTUFBTXZELEtBQUssQ0FBQyxLQUFPO1lBQ3JFLEdBQ0NBLEtBQUssQ0FFSixLQUFPO1FBRWI7SUFDRjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3JvdXRlLWxvYWRlci50cz85YTU3Il0sIm5hbWVzIjpbImNyZWF0ZVJvdXRlTG9hZGVyIiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsImlzQXNzZXRFcnJvciIsIm1hcmtBc3NldEVycm9yIiwiTVNfTUFYX0lETEVfREVMQVkiLCJ3aXRoRnV0dXJlIiwia2V5IiwibWFwIiwiZ2VuZXJhdG9yIiwiZW50cnkiLCJnZXQiLCJmdXR1cmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVyIiwicHJvbSIsInNldCIsInRoZW4iLCJ2YWx1ZSIsImNhdGNoIiwiZXJyIiwiZGVsZXRlIiwiQVNTRVRfTE9BRF9FUlJPUiIsIlN5bWJvbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiaGFzUHJlZmV0Y2giLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiTVNJbnB1dE1ldGhvZENvbnRleHQiLCJkb2N1bWVudE1vZGUiLCJyZWxMaXN0Iiwic3VwcG9ydHMiLCJlIiwiY2FuUHJlZmV0Y2giLCJnZXRBc3NldFF1ZXJ5U3RyaW5nIiwiZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nIiwicHJlZmV0Y2hWaWFEb20iLCJocmVmIiwiYXMiLCJyZWplY3QiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJyZWwiLCJjcm9zc09yaWdpbiIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQ1JPU1NfT1JJR0lOIiwib25sb2FkIiwib25lcnJvciIsIkVycm9yIiwiaGVhZCIsImFwcGVuZENoaWxkIiwiYXBwZW5kU2NyaXB0Iiwic3JjIiwic2NyaXB0IiwiYm9keSIsImRldkJ1aWxkUHJvbWlzZSIsInJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQiLCJwIiwibXMiLCJjYW5jZWxsZWQiLCJyIiwicmVxdWVzdElkbGVDYWxsYmFjayIsInNldFRpbWVvdXQiLCJzZWxmIiwiX19CVUlMRF9NQU5JRkVTVCIsIm9uQnVpbGRNYW5pZmVzdCIsImNiIiwiX19CVUlMRF9NQU5JRkVTVF9DQiIsImdldEZpbGVzRm9yUm91dGUiLCJhc3NldFByZWZpeCIsInJvdXRlIiwic2NyaXB0VXJsIiwiZW5jb2RlVVJJIiwiZ2V0QXNzZXRQYXRoRnJvbVJvdXRlIiwic2NyaXB0cyIsIl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCIsImNzcyIsIm1hbmlmZXN0IiwiYWxsRmlsZXMiLCJmaWx0ZXIiLCJ2IiwiZW5kc1dpdGgiLCJlbnRyeXBvaW50cyIsIk1hcCIsImxvYWRlZFNjcmlwdHMiLCJzdHlsZVNoZWV0cyIsInJvdXRlcyIsIm1heWJlRXhlY3V0ZVNjcmlwdCIsInRvU3RyaW5nIiwiZmV0Y2hTdHlsZVNoZWV0IiwiZmV0Y2giLCJjcmVkZW50aWFscyIsInJlcyIsIm9rIiwidGV4dCIsImNvbnRlbnQiLCJ3aGVuRW50cnlwb2ludCIsIm9uRW50cnlwb2ludCIsImV4ZWN1dGUiLCJleHBvcnRzIiwiY29tcG9uZW50IiwiZXhwb3J0czEiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJpbnB1dCIsIm9sZCIsImxvYWRSb3V0ZSIsInByZWZldGNoIiwiZGV2QnVpbGRQcm9taXNlUmVzb2x2ZSIsInBhcmFtIiwiYWxsIiwiaGFzIiwiZW50cnlwb2ludCIsInN0eWxlcyIsImFzc2lnbiIsImZpbmFsbHkiLCJjbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzYXZlRGF0YSIsInRlc3QiLCJlZmZlY3RpdmVUeXBlIiwib3V0cHV0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/route-loader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/router.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/next/dist/client/router.js ***!
|
||
\*************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* global window */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Router: function() {\n return _router.default;\n },\n createRouter: function() {\n return createRouter;\n },\n // Export the singletonRouter and this is the public API.\n default: function() {\n return _default;\n },\n makePublicRouterInstance: function() {\n return makePublicRouterInstance;\n },\n useRouter: function() {\n return useRouter;\n },\n withRouter: function() {\n return _withrouter.default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/router */ \"./node_modules/next/dist/shared/lib/router/router.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _withrouter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./with-router */ \"./node_modules/next/dist/client/with-router.js\"));\nconst singletonRouter = {\n router: null,\n readyCallbacks: [],\n ready (callback) {\n if (this.router) return callback();\n if (true) {\n this.readyCallbacks.push(callback);\n }\n }\n};\n// Create public properties and methods of the router in the singletonRouter\nconst urlPropertyFields = [\n \"pathname\",\n \"route\",\n \"query\",\n \"asPath\",\n \"components\",\n \"isFallback\",\n \"basePath\",\n \"locale\",\n \"locales\",\n \"defaultLocale\",\n \"isReady\",\n \"isPreview\",\n \"isLocaleDomain\",\n \"domainLocales\"\n];\nconst routerEvents = [\n \"routeChangeStart\",\n \"beforeHistoryChange\",\n \"routeChangeComplete\",\n \"routeChangeError\",\n \"hashChangeStart\",\n \"hashChangeComplete\"\n];\nconst coreMethodFields = [\n \"push\",\n \"replace\",\n \"reload\",\n \"back\",\n \"prefetch\",\n \"beforePopState\"\n];\n// Events is a static property on the router, the router doesn't have to be initialized to use it\nObject.defineProperty(singletonRouter, \"events\", {\n get () {\n return _router.default.events;\n }\n});\nfunction getRouter() {\n if (!singletonRouter.router) {\n const message = \"No router instance found.\\n\" + 'You should only use \"next/router\" on the client side of your app.\\n';\n throw new Error(message);\n }\n return singletonRouter.router;\n}\nurlPropertyFields.forEach((field)=>{\n // Here we need to use Object.defineProperty because we need to return\n // the property assigned to the actual router\n // The value might get changed as we change routes and this is the\n // proper way to access it\n Object.defineProperty(singletonRouter, field, {\n get () {\n const router = getRouter();\n return router[field];\n }\n });\n});\ncoreMethodFields.forEach((field)=>{\n singletonRouter[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const router = getRouter();\n return router[field](...args);\n };\n});\nrouterEvents.forEach((event)=>{\n singletonRouter.ready(()=>{\n _router.default.events.on(event, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const eventField = \"on\" + event.charAt(0).toUpperCase() + event.substring(1);\n const _singletonRouter = singletonRouter;\n if (_singletonRouter[eventField]) {\n try {\n _singletonRouter[eventField](...args);\n } catch (err) {\n console.error(\"Error when running the Router event: \" + eventField);\n console.error((0, _iserror.default)(err) ? err.message + \"\\n\" + err.stack : err + \"\");\n }\n }\n });\n });\n});\nconst _default = singletonRouter;\nfunction useRouter() {\n _s();\n const router = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n if (!router) {\n throw new Error(\"NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted\");\n }\n return router;\n}\n_s(useRouter, \"rbAhEc3dLGnVlsHWaSDsgP4MZS0=\");\nfunction createRouter() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n singletonRouter.router = new _router.default(...args);\n singletonRouter.readyCallbacks.forEach((cb)=>cb());\n singletonRouter.readyCallbacks = [];\n return singletonRouter.router;\n}\nfunction makePublicRouterInstance(router) {\n const scopedRouter = router;\n const instance = {};\n for (const property of urlPropertyFields){\n if (typeof scopedRouter[property] === \"object\") {\n instance[property] = Object.assign(Array.isArray(scopedRouter[property]) ? [] : {}, scopedRouter[property]) // makes sure query is not stateful\n ;\n continue;\n }\n instance[property] = scopedRouter[property];\n }\n // Events is a static property on the router, the router doesn't have to be initialized to use it\n instance.events = _router.default.events;\n coreMethodFields.forEach((field)=>{\n instance[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return scopedRouter[field](...args);\n };\n });\n return instance;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUFBOzs7Ozs7Ozs7Ozs7SUFhUkEsUUFBTTtlQUFOQSxRQUFBQSxPQUFNOztJQTZJQ0MsY0FBWTtlQUFaQTs7SUE3QmhCLHlEQUF5RDtJQUN6REMsU0FBaUQ7ZUFBakRDOztJQTBDZ0JDLDBCQUF3QjtlQUF4QkE7O0lBL0JBQyxXQUFTO2VBQVRBOztJQVJJQyxZQUFVO2VBQVZBLFlBQUFBLE9BQVU7Ozs7NEVBaElaOzZFQUNDO3dEQUVXOzhFQUNWO2lGQTRIa0I7QUE5R3RDLE1BQU1DLGtCQUF1QztJQUMzQ0MsUUFBUTtJQUNSQyxnQkFBZ0IsRUFBRTtJQUNsQkMsT0FBTUMsUUFBb0I7UUFDeEIsSUFBSSxJQUFJLENBQUNILE1BQU0sRUFBRSxPQUFPRztRQUN4QixJQUFJLElBQWtCLEVBQWE7WUFDakMsSUFBSSxDQUFDRixjQUFjLENBQUNHLElBQUksQ0FBQ0Q7UUFDM0I7SUFDRjtBQUNGO0FBRUEsNEVBQTRFO0FBQzVFLE1BQU1FLG9CQUFvQjtJQUN4QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFDRCxNQUFNQyxlQUFlO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBR0QsTUFBTUMsbUJBQW1CO0lBQ3ZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQsaUdBQWlHO0FBQ2pHQyxPQUFPQyxjQUFjLENBQUNWLGlCQUFpQixVQUFVO0lBQy9DVztRQUNFLE9BQU9sQixRQUFBQSxPQUFNLENBQUNtQixNQUFNO0lBQ3RCO0FBQ0Y7QUFFQSxTQUFTQztJQUNQLElBQUksQ0FBQ2IsZ0JBQWdCQyxNQUFNLEVBQUU7UUFDM0IsTUFBTWEsVUFDSixnQ0FDQTtRQUNGLE1BQU0sSUFBSUMsTUFBTUQ7SUFDbEI7SUFDQSxPQUFPZCxn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LFlBQVksQ0FBQ0UsU0FBUztJQUM3QztJQUVBLGlHQUFpRztJQUNqR0QsU0FBUzdCLE1BQU0sR0FBR25CLFFBQUFBLE9BQU0sQ0FBQ21CLE1BQU07SUFFL0JKLGlCQUFpQlEsT0FBTyxDQUFDLENBQUNDO1FBQ3hCd0IsUUFBUSxDQUFDeEIsTUFBTSxHQUFHOzZDQUFJQyxPQUFBQSxJQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxPQUFBQTtnQkFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1lBQ3BCLE9BQU9zQixZQUFZLENBQUN2QixNQUFNLElBQUlDO1FBQ2hDO0lBQ0Y7SUFFQSxPQUFPdUI7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC9yb3V0ZXIudHM/NmQ5MyJdLCJuYW1lcyI6WyJSb3V0ZXIiLCJjcmVhdGVSb3V0ZXIiLCJkZWZhdWx0IiwiX2RlZmF1bHQiLCJtYWtlUHVibGljUm91dGVySW5zdGFuY2UiLCJ1c2VSb3V0ZXIiLCJ3aXRoUm91dGVyIiwic2luZ2xldG9uUm91dGVyIiwicm91dGVyIiwicmVhZHlDYWxsYmFja3MiLCJyZWFkeSIsImNhbGxiYWNrIiwicHVzaCIsInVybFByb3BlcnR5RmllbGRzIiwicm91dGVyRXZlbnRzIiwiY29yZU1ldGhvZEZpZWxkcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiZXZlbnRzIiwiZ2V0Um91dGVyIiwibWVzc2FnZSIsIkVycm9yIiwiZm9yRWFjaCIsImZpZWxkIiwiYXJncyIsImV2ZW50Iiwib24iLCJldmVudEZpZWxkIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJfc2luZ2xldG9uUm91dGVyIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiaXNFcnJvciIsInN0YWNrIiwiUmVhY3QiLCJ1c2VDb250ZXh0IiwiUm91dGVyQ29udGV4dCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJBcnJheSIsIl9rZXkiLCJjYiIsInNjb3BlZFJvdXRlciIsImluc3RhbmNlIiwicHJvcGVydHkiLCJhc3NpZ24iLCJpc0FycmF5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/script.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/next/dist/client/script.js ***!
|
||
\*************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n handleClientScriptLoad: function() {\n return handleClientScriptLoad;\n },\n initScriptLoader: function() {\n return initScriptLoader;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _headmanager = __webpack_require__(/*! ./head-manager */ \"./node_modules/next/dist/client/head-manager.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"./node_modules/next/dist/client/request-idle-callback.js\");\nconst ScriptCache = new Map();\nconst LoadCache = new Set();\nconst ignoreProps = [\n \"onLoad\",\n \"onReady\",\n \"dangerouslySetInnerHTML\",\n \"children\",\n \"onError\",\n \"strategy\",\n \"stylesheets\"\n];\nconst insertStylesheets = (stylesheets)=>{\n // Case 1: Styles for afterInteractive/lazyOnload with appDir injected via handleClientScriptLoad\n //\n // Using ReactDOM.preinit to feature detect appDir and inject styles\n // Stylesheets might have already been loaded if initialized with Script component\n // Re-inject styles here to handle scripts loaded via handleClientScriptLoad\n // ReactDOM.preinit handles dedup and ensures the styles are loaded only once\n if (_reactdom.default.preinit) {\n stylesheets.forEach((stylesheet)=>{\n _reactdom.default.preinit(stylesheet, {\n as: \"style\"\n });\n });\n return;\n }\n // Case 2: Styles for afterInteractive/lazyOnload with pages injected via handleClientScriptLoad\n //\n // We use this function to load styles when appdir is not detected\n // TODO: Use React float APIs to load styles once available for pages dir\n if (true) {\n let head = document.head;\n stylesheets.forEach((stylesheet)=>{\n let link = document.createElement(\"link\");\n link.type = \"text/css\";\n link.rel = \"stylesheet\";\n link.href = stylesheet;\n head.appendChild(link);\n });\n }\n};\nconst loadScript = (props)=>{\n const { src, id, onLoad = ()=>{}, onReady = null, dangerouslySetInnerHTML, children = \"\", strategy = \"afterInteractive\", onError, stylesheets } = props;\n const cacheKey = id || src;\n // Script has already loaded\n if (cacheKey && LoadCache.has(cacheKey)) {\n return;\n }\n // Contents of this script are already loading/loaded\n if (ScriptCache.has(src)) {\n LoadCache.add(cacheKey);\n // It is possible that multiple `next/script` components all have same \"src\", but has different \"onLoad\"\n // This is to make sure the same remote script will only load once, but \"onLoad\" are executed in order\n ScriptCache.get(src).then(onLoad, onError);\n return;\n }\n /** Execute after the script first loaded */ const afterLoad = ()=>{\n // Run onReady for the first time after load event\n if (onReady) {\n onReady();\n }\n // add cacheKey to LoadCache when load successfully\n LoadCache.add(cacheKey);\n };\n const el = document.createElement(\"script\");\n const loadPromise = new Promise((resolve, reject)=>{\n el.addEventListener(\"load\", function(e) {\n resolve();\n if (onLoad) {\n onLoad.call(this, e);\n }\n afterLoad();\n });\n el.addEventListener(\"error\", function(e) {\n reject(e);\n });\n }).catch(function(e) {\n if (onError) {\n onError(e);\n }\n });\n if (dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n el.innerHTML = dangerouslySetInnerHTML.__html || \"\";\n afterLoad();\n } else if (children) {\n el.textContent = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n afterLoad();\n } else if (src) {\n el.src = src;\n // do not add cacheKey into LoadCache for remote script here\n // cacheKey will be added to LoadCache when it is actually loaded (see loadPromise above)\n ScriptCache.set(src, loadPromise);\n }\n for (const [k, value] of Object.entries(props)){\n if (value === undefined || ignoreProps.includes(k)) {\n continue;\n }\n const attr = _headmanager.DOMAttributeNames[k] || k.toLowerCase();\n el.setAttribute(attr, value);\n }\n if (strategy === \"worker\") {\n el.setAttribute(\"type\", \"text/partytown\");\n }\n el.setAttribute(\"data-nscript\", strategy);\n // Load styles associated with this script\n if (stylesheets) {\n insertStylesheets(stylesheets);\n }\n document.body.appendChild(el);\n};\nfunction handleClientScriptLoad(props) {\n const { strategy = \"afterInteractive\" } = props;\n if (strategy === \"lazyOnload\") {\n window.addEventListener(\"load\", ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n } else {\n loadScript(props);\n }\n}\nfunction loadLazyScript(props) {\n if (document.readyState === \"complete\") {\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n } else {\n window.addEventListener(\"load\", ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n }\n}\nfunction addBeforeInteractiveToCache() {\n const scripts = [\n ...document.querySelectorAll('[data-nscript=\"beforeInteractive\"]'),\n ...document.querySelectorAll('[data-nscript=\"beforePageRender\"]')\n ];\n scripts.forEach((script)=>{\n const cacheKey = script.id || script.getAttribute(\"src\");\n LoadCache.add(cacheKey);\n });\n}\nfunction initScriptLoader(scriptLoaderItems) {\n scriptLoaderItems.forEach(handleClientScriptLoad);\n addBeforeInteractiveToCache();\n}\n/**\n * Load a third-party scripts in an optimized way.\n *\n * Read more: [Next.js Docs: `next/script`](https://nextjs.org/docs/app/api-reference/components/script)\n */ function Script(props) {\n const { id, src = \"\", onLoad = ()=>{}, onReady = null, strategy = \"afterInteractive\", onError, stylesheets, ...restProps } = props;\n // Context is available only during SSR\n const { updateScripts, scripts, getIsSsr, appDir, nonce } = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n /**\n * - First mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script hasn't loaded yet (not in LoadCache)\n * onReady is skipped, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. hasLoadScriptEffectCalled.current is false, loadScript executes\n * Once the script is loaded, the onLoad and onReady will be called by then\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n *\n * - Second mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script has already loaded (found in LoadCache)\n * onReady is called, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. The script is already loaded, loadScript bails out\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n */ const hasOnReadyEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n const cacheKey = id || src;\n if (!hasOnReadyEffectCalled.current) {\n // Run onReady if script has loaded before but component is re-mounted\n if (onReady && cacheKey && LoadCache.has(cacheKey)) {\n onReady();\n }\n hasOnReadyEffectCalled.current = true;\n }\n }, [\n onReady,\n id,\n src\n ]);\n const hasLoadScriptEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n if (!hasLoadScriptEffectCalled.current) {\n if (strategy === \"afterInteractive\") {\n loadScript(props);\n } else if (strategy === \"lazyOnload\") {\n loadLazyScript(props);\n }\n hasLoadScriptEffectCalled.current = true;\n }\n }, [\n props,\n strategy\n ]);\n if (strategy === \"beforeInteractive\" || strategy === \"worker\") {\n if (updateScripts) {\n scripts[strategy] = (scripts[strategy] || []).concat([\n {\n id,\n src,\n onLoad,\n onReady,\n onError,\n ...restProps\n }\n ]);\n updateScripts(scripts);\n } else if (getIsSsr && getIsSsr()) {\n // Script has already loaded during SSR\n LoadCache.add(id || src);\n } else if (getIsSsr && !getIsSsr()) {\n loadScript(props);\n }\n }\n // For the app directory, we need React Float to preload these scripts.\n if (appDir) {\n // Injecting stylesheets here handles beforeInteractive and worker scripts correctly\n // For other strategies injecting here ensures correct stylesheet order\n // ReactDOM.preinit handles loading the styles in the correct order,\n // also ensures the stylesheet is loaded only once and in a consistent manner\n //\n // Case 1: Styles for beforeInteractive/worker with appDir - handled here\n // Case 2: Styles for beforeInteractive/worker with pages dir - Not handled yet\n // Case 3: Styles for afterInteractive/lazyOnload with appDir - handled here\n // Case 4: Styles for afterInteractive/lazyOnload with pages dir - handled in insertStylesheets function\n if (stylesheets) {\n stylesheets.forEach((styleSrc)=>{\n _reactdom.default.preinit(styleSrc, {\n as: \"style\"\n });\n });\n }\n // Before interactive scripts need to be loaded by Next.js' runtime instead\n // of native <script> tags, because they no longer have `defer`.\n if (strategy === \"beforeInteractive\") {\n if (!src) {\n // For inlined scripts, we put the content in `children`.\n if (restProps.dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n restProps.children = restProps.dangerouslySetInnerHTML.__html;\n delete restProps.dangerouslySetInnerHTML;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n 0,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n } else {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: \"script\",\n integrity: restProps.integrity,\n nonce,\n crossOrigin: restProps.crossOrigin\n } : {\n as: \"script\",\n nonce,\n crossOrigin: restProps.crossOrigin\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n src,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n }\n } else if (strategy === \"afterInteractive\") {\n if (src) {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: \"script\",\n integrity: restProps.integrity,\n nonce,\n crossOrigin: restProps.crossOrigin\n } : {\n as: \"script\",\n nonce,\n crossOrigin: restProps.crossOrigin\n });\n }\n }\n }\n return null;\n}\n_c = Script;\nObject.defineProperty(Script, \"__nextScript\", {\n value: true\n});\nconst _default = Script;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=script.js.map\nvar _c;\n$RefreshReg$(_c, \"Script\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9zY3JpcHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUEwWUFBLFNBQXFCOzs7SUE3TkxDOzRCQUFBQTs7SUFnQ0FDO3NCQUFBQTs7Ozs7OzsrRUExTXFDO3VEQUVsQkMsQ0FBQSxDQUFBQyxtQkFBQUEsQ0FBQTt5Q0FDREEsbUJBQUFBLENBQUE7O0FBR2xDLE1BQU1DLHVCQUFrQkMsbUJBQUFBLENBQUFBLHlGQUFBQTtBQUN4QixNQUFNQyxjQUFZLElBQUlDO0FBaUJ0QixNQUFNQyxZQUFBQSxJQUFjRDtNQUNsQkMsY0FBQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0NBRUQ7TUFDRUMsb0JBQUEsQ0FBQUM7SUFDQSxpR0FBRTtJQUNGO0lBQ0E7SUFDQSxrRkFBNEU7SUFDNUU7SUFDQSw2RUFBc0I7UUFDcEJBLFVBQUFBLE9BQVlDLENBQUFBLE9BQVNDLEVBQUFBO29CQUNuQkMsT0FBQUEsQ0FBQUEsQ0FBUUQ7c0JBQTJCRSxPQUFBLENBQUFDLE9BQUEsQ0FBQUgsWUFBQTtnQkFBUUksSUFBQTtZQUM3QztRQUVBO1FBQ0Y7SUFFQTtJQUNBLGdHQUFFO0lBQ0Y7SUFDQTtJQUNBLHlFQUFtQztRQUNqQyxJQUFXQyxFQUFhO1FBQ3hCUCxJQUFBQSxPQUFBQSxTQUFvQlEsSUFBQ047b0JBQ2ZPLE9BQU9GLENBQUFBLENBQUFBO1lBRVhFLElBQUFBLE9BQVNGLFNBQUdHLGFBQUE7WUFDWkQsS0FBS0UsSUFBRyxHQUFHO1lBQ1hGLEtBQUtHLEdBQUFBLEdBQUk7WUFFVEosS0FBS0ssSUFBQUEsR0FBQUE7WUFDUEwsS0FBQUssV0FBQSxDQUFBSjtRQUNGO0lBQ0Y7QUFFQTtNQUNFSyxhQUVJLENBQUFDO0lBVUosTUFBTUMsRUFBQUEsR0FBQUEsRUFBQUEsRUFBQUEsRUFBV0MsU0FBTUMsS0FBQUEsQ0FBQUEsRUFBQUEsVUFBQUEsSUFBQUEsRUFBQUEsdUJBQUFBLEVBQUFBLFdBQUFBLEVB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QkFFRkEsYUFBQXRCLFVBQUFzQixXQUFBO29CQUFFdkU7b0JBQWNxRCxJQUFBQTtvQkFBT2tCO29CQUFtQ0EsYUFBQXRCLFVBQUFzQixXQUFBO2dCQUVoRTt1QkFFV2xCLFdBQUFBLEdBQUFBLENBQUFBLEdBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLFVBQUFBO29CQUNQdkIsT0FBQUE7NkNBQ1c7Z0NBQ1BsQiw0Q0FBQUEsS0FBQUEsU0FBQUEsQ0FBQUE7NEJBQ0FBOztnQ0FBZ0JELEdBQUFBLFNBQUFBO2dDQUFHQTs0QkFDcEI7eUJBQ0g7O2dCQUdOO1lBQ0Y7ZUFDRSxJQUFJQyxhQUFLO2dCQUNQQSxLQUFBO2dCQUNBZixhQUFBQTswQkFJWUMsT0FBQSxDQUFBdUUsT0FBQSxDQUFBekQsS0FBQXFDLFVBQUFxQixTQUFBO29CQUNKQSxJQUFBQTtvQkFDQWpCLFdBQUFBLFVBQUFBLFNBQUFBO29CQUNBa0I7b0JBRUZBLGFBQUF0QixVQUFBc0IsV0FBQTtvQkFBRXZFO29CQUFjcUQsSUFBQUE7b0JBQU9rQjtvQkFBbUNBLGFBQUF0QixVQUFBc0IsV0FBQTtnQkFFbEU7WUFDRjtRQUNGO0lBRUE7SUFDRjtBQUVBQztLQS9LSTdEO09BK0s0Q3NCLGNBQU8sQ0FBQXdDLFFBQUE7SUFBS3hDLE9BQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvc2NyaXB0LnRzeD80YTM2Il0sIm5hbWVzIjpbImV4cG9ydHMiLCJoYW5kbGVDbGllbnRTY3JpcHRMb2FkIiwiaW5pdFNjcmlwdExvYWRlciIsIl8iLCJyZXF1aXJlIiwiU2NyaXB0Q2FjaGUiLCJNYXAiLCJMb2FkQ2FjaGUiLCJTZXQiLCJpZ25vcmVQcm9wcyIsImluc2VydFN0eWxlc2hlZXRzIiwic3R5bGVzaGVldHMiLCJmb3JFYWNoIiwic3R5bGVzaGVldCIsIlJlYWN0RE9NIiwiZGVmYXVsdCIsInByZWluaXQiLCJhcyIsImRvY3VtZW50IiwiaGVhZCIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwicmVsIiwiaHJlZiIsImFwcGVuZENoaWxkIiwibG9hZFNjcmlwdCIsInByb3BzIiwiY2FjaGVLZXkiLCJpZCIsInNyYyIsImhhcyIsImFkZCIsIm9uRXJyb3IiLCJnZXQiLCJ0aGVuIiwib25Mb2FkIiwiYWZ0ZXJMb2FkIiwib25SZWFkeSIsImxvYWRQcm9taXNlIiwicmVzb2x2ZSIsImVsIiwiYWRkRXZlbnRMaXN0ZW5lciIsIlByb21pc2UiLCJyZWplY3QiLCJjYWxsIiwiZSIsImNhdGNoIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJ0ZXh0Q29udGVudCIsInNldCIsInZhbHVlIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJrIiwic2V0QXR0cmlidXRlIiwiYXR0ciIsInN0cmF0ZWd5IiwiYm9keSIsIndpbmRvdyIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJfcmVxdWVzdGlkbGVjYWxsYmFjayIsInJlYWR5U3RhdGUiLCJhZGRCZWZvcmVJbnRlcmFjdGl2ZVRvQ2FjaGUiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2NyaXB0cyIsInNjcmlwdExvYWRlckl0ZW1zIiwicmVzdFByb3BzIiwiZ2V0SXNTc3IiLCJ1cGRhdGVTY3JpcHRzIiwiYXBwRGlyIiwibm9uY2UiLCJfcmVhY3QiLCJ1c2VDb250ZXh0IiwiX2hlYWRtYW5hZ2VyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJoYXNPblJlYWR5RWZmZWN0Q2FsbGVkIiwiY3VycmVudCIsImhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQiLCJsb2FkTGF6eVNjcmlwdCIsImNvbmNhdCIsInN0eWxlU3JjIiwiX19odG1sIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZWxvYWQiLCJpbnRlZ3JpdHkiLCJjcm9zc09yaWdpbiIsIk9iamVjdCIsIlNjcmlwdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/script.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/setup-hydration-warning.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/setup-hydration-warning.js ***!
|
||
\******************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nif (!window._nextSetupHydrationWarning) {\n const origConsoleError = window.console.error;\n window.console.error = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const isHydrateError = args.some((arg)=>typeof arg === \"string\" && arg.match(/(hydration|content does not match|did not match)/i));\n if (isHydrateError) {\n args = [\n ...args,\n \"\\nSee more info here: https://nextjs.org/docs/messages/react-hydration-error\"\n ];\n }\n origConsoleError.apply(window.console, args);\n };\n window._nextSetupHydrationWarning = true;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=setup-hydration-warning.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9zZXR1cC1oeWRyYXRpb24td2FybmluZy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBTUEsSUFBSSxDQUFDQSxPQUFPQywwQkFBMEIsRUFBRTtJQUN0QyxNQUFNQyxtQkFBbUJGLE9BQU9HLE9BQU8sQ0FBQ0MsS0FBSztJQUM3Q0osT0FBT0csT0FBTyxDQUFDQyxLQUFLLEdBQUc7eUNBQUlDLE9BQUFBLElBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLE9BQUFBLE1BQUFBLE9BQUFBO1lBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztRQUN6QixNQUFNQyxpQkFBaUJELEtBQUtFLElBQUksQ0FDOUIsQ0FBQ0MsTUFDQyxPQUFPQSxRQUFRLFlBQ2ZBLElBQUlDLEtBQUssQ0FBQztRQUVkLElBQUlILGdCQUFnQjtZQUNsQkQsT0FBTzttQkFDRkE7Z0JBQ0Y7YUFDRjtRQUNIO1FBQ0FILGlCQUFpQlEsS0FBSyxDQUFDVixPQUFPRyxPQUFPLEVBQUVFO0lBQ3pDO0lBQ0FMLE9BQU9DLDBCQUEwQixHQUFHO0FBQ3RDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3NldHVwLWh5ZHJhdGlvbi13YXJuaW5nLnRzPzFhYjciXSwibmFtZXMiOlsid2luZG93IiwiX25leHRTZXR1cEh5ZHJhdGlvbldhcm5pbmciLCJvcmlnQ29uc29sZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwiYXJncyIsImlzSHlkcmF0ZUVycm9yIiwic29tZSIsImFyZyIsIm1hdGNoIiwiYXBwbHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/setup-hydration-warning.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/tracing/report-to-socket.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/tracing/report-to-socket.js ***!
|
||
\*******************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportToSocket;\n }\n}));\nconst _websocket = __webpack_require__(/*! ../components/react-dev-overlay/pages/websocket */ \"./node_modules/next/dist/client/components/react-dev-overlay/pages/websocket.js\");\nfunction reportToSocket(span) {\n if (span.state.state !== \"ended\") {\n throw new Error(\"Expected span to be ended\");\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"span-end\",\n startTime: span.startTime,\n endTime: span.state.endTime,\n spanName: span.name,\n attributes: span.attributes\n }));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-to-socket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cmFjaW5nL3JlcG9ydC10by1zb2NrZXQuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FHQTs7O2VBQXdCQTs7O3VDQUhJO0FBR2IsU0FBU0EsZUFBZUMsSUFBVTtJQUMvQyxJQUFJQSxLQUFLQyxLQUFLLENBQUNBLEtBQUssS0FBSyxTQUFTO1FBQ2hDLE1BQU0sSUFBSUMsTUFBTTtJQUNsQjtJQUVBQyxDQUFBQSxHQUFBQSxXQUFBQSxXQUFXLEVBQ1RDLEtBQUtDLFNBQVMsQ0FBQztRQUNiQyxPQUFPO1FBQ1BDLFdBQVdQLEtBQUtPLFNBQVM7UUFDekJDLFNBQVNSLEtBQUtDLEtBQUssQ0FBQ08sT0FBTztRQUMzQkMsVUFBVVQsS0FBS1UsSUFBSTtRQUNuQkMsWUFBWVgsS0FBS1csVUFBVTtJQUM3QjtBQUVKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3RyYWNpbmcvcmVwb3J0LXRvLXNvY2tldC50cz82YjliIl0sIm5hbWVzIjpbInJlcG9ydFRvU29ja2V0Iiwic3BhbiIsInN0YXRlIiwiRXJyb3IiLCJzZW5kTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJzcGFuTmFtZSIsIm5hbWUiLCJhdHRyaWJ1dGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/tracing/report-to-socket.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/tracing/tracer.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/tracing/tracer.js ***!
|
||
\*********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../shared/lib/mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nclass Span {\n end(endTime) {\n if (this.state.state === \"ended\") {\n throw new Error(\"Span has already ended\");\n }\n this.state = {\n state: \"ended\",\n endTime: endTime != null ? endTime : Date.now()\n };\n this.onSpanEnd(this);\n }\n constructor(name, options, onSpanEnd){\n this.name = name;\n var _options_attributes;\n this.attributes = (_options_attributes = options.attributes) != null ? _options_attributes : {};\n var _options_startTime;\n this.startTime = (_options_startTime = options.startTime) != null ? _options_startTime : Date.now();\n this.onSpanEnd = onSpanEnd;\n this.state = {\n state: \"inprogress\"\n };\n }\n}\nclass Tracer {\n startSpan(name, options) {\n return new Span(name, options, this.handleSpanEnd);\n }\n onSpanEnd(cb) {\n this._emitter.on(\"spanend\", cb);\n return ()=>{\n this._emitter.off(\"spanend\", cb);\n };\n }\n constructor(){\n this._emitter = (0, _mitt.default)();\n this.handleSpanEnd = (span)=>{\n this._emitter.emit(\"spanend\", span);\n };\n }\n}\nconst _default = new Tracer();\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=tracer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cmFjaW5nL3RyYWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQThFQTs7O2VBQUFBOzs7OzJFQTlFaUI7QUF5QmpCLE1BQU1DO0lBbUJKQyxJQUFJQyxPQUFnQixFQUFFO1FBQ3BCLElBQUksSUFBSSxDQUFDQyxLQUFLLENBQUNBLEtBQUssS0FBSyxTQUFTO1lBQ2hDLE1BQU0sSUFBSUMsTUFBTTtRQUNsQjtRQUVBLElBQUksQ0FBQ0QsS0FBSyxHQUFHO1lBQ1hBLE9BQU87WUFDUEQsU0FBU0EsV0FBQUEsT0FBQUEsVUFBV0csS0FBS0MsR0FBRztRQUM5QjtRQUVBLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUk7SUFDckI7SUF2QkFDLFlBQ0VDLElBQVksRUFDWkMsT0FBb0IsRUFDcEJILFNBQStCLENBQy9CO1FBQ0EsSUFBSSxDQUFDRSxJQUFJLEdBQUdBO1lBQ01DO1FBQWxCLElBQUksQ0FBQ0MsVUFBVSxHQUFHRCxDQUFBQSxzQkFBQUEsUUFBUUMsVUFBVSxZQUFsQkQsc0JBQXNCLENBQUM7WUFDeEJBO1FBQWpCLElBQUksQ0FBQ0UsU0FBUyxHQUFHRixDQUFBQSxxQkFBQUEsUUFBUUUsU0FBUyxZQUFqQkYscUJBQXFCTCxLQUFLQyxHQUFHO1FBQzlDLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNKLEtBQUssR0FBRztZQUFFQSxPQUFPO1FBQWE7SUFDckM7QUFjRjtBQUVBLE1BQU1VO0lBT0pDLFVBQVVMLElBQVksRUFBRUMsT0FBb0IsRUFBRTtRQUM1QyxPQUFPLElBQUlWLEtBQUtTLE1BQU1DLFNBQVMsSUFBSSxDQUFDSyxhQUFhO0lBQ25EO0lBRUFSLFVBQVVTLEVBQXlCLEVBQWM7UUFDL0MsSUFBSSxDQUFDQyxRQUFRLENBQUNDLEVBQUUsQ0FBQyxXQUFXRjtRQUM1QixPQUFPO1lBQ0wsSUFBSSxDQUFDQyxRQUFRLENBQUNFLEdBQUcsQ0FBQyxXQUFXSDtRQUMvQjtJQUNGOzthQWZBQyxRQUFBQSxHQUFnQ0csQ0FBQUEsR0FBQUEsTUFBQUEsT0FBSTthQUU1QkwsYUFBQUEsR0FBZ0IsQ0FBQ007WUFDdkIsSUFBSSxDQUFDSixRQUFRLENBQUNLLElBQUksQ0FBQyxXQUFXRDtRQUNoQzs7QUFZRjtNQUdBdEIsV0FBZSxJQUFJYyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2NsaWVudC90cmFjaW5nL3RyYWNlci50cz83OTlmIl0sIm5hbWVzIjpbIl9kZWZhdWx0IiwiU3BhbiIsImVuZCIsImVuZFRpbWUiLCJzdGF0ZSIsIkVycm9yIiwiRGF0ZSIsIm5vdyIsIm9uU3BhbkVuZCIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm9wdGlvbnMiLCJhdHRyaWJ1dGVzIiwic3RhcnRUaW1lIiwiVHJhY2VyIiwic3RhcnRTcGFuIiwiaGFuZGxlU3BhbkVuZCIsImNiIiwiX2VtaXR0ZXIiLCJvbiIsIm9mZiIsIm1pdHQiLCJzcGFuIiwiZW1pdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/tracing/tracer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/trusted-types.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/trusted-types.js ***!
|
||
\********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Stores the Trusted Types Policy. Starts as undefined and can be set to null\n * if Trusted Types is not supported in the browser.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"__unsafeCreateTrustedScriptURL\", ({\n enumerable: true,\n get: function() {\n return __unsafeCreateTrustedScriptURL;\n }\n}));\nlet policy;\n/**\n * Getter for the Trusted Types Policy. If it is undefined, it is instantiated\n * here or set to null if Trusted Types is not supported in the browser.\n */ function getPolicy() {\n if (typeof policy === \"undefined\" && \"object\" !== \"undefined\") {\n var _window_trustedTypes;\n policy = ((_window_trustedTypes = window.trustedTypes) == null ? void 0 : _window_trustedTypes.createPolicy(\"nextjs\", {\n createHTML: (input)=>input,\n createScript: (input)=>input,\n createScriptURL: (input)=>input\n })) || null;\n }\n return policy;\n}\nfunction __unsafeCreateTrustedScriptURL(url) {\n var _getPolicy;\n return ((_getPolicy = getPolicy()) == null ? void 0 : _getPolicy.createScriptURL(url)) || url;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=trusted-types.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cnVzdGVkLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQzs7OztrRUE2QmVBOzs7ZUFBQUE7OztBQTVCaEIsSUFBSUM7QUFFSjs7O0NBR0MsR0FDRCxTQUFTQztJQUNQLElBQUksT0FBT0QsV0FBVyxlQUFlLGFBQWtCLGFBQWE7WUFFaEVFO1FBREZGLFNBQ0VFLENBQUFBLENBQUFBLHVCQUFBQSxPQUFPQyxZQUFZLHFCQUFuQkQscUJBQXFCRSxZQUFZLENBQUMsVUFBVTtZQUMxQ0MsWUFBWSxDQUFDQyxRQUFVQTtZQUN2QkMsY0FBYyxDQUFDRCxRQUFVQTtZQUN6QkUsaUJBQWlCLENBQUNGLFFBQVVBO1FBQzlCLE9BQU07SUFDVjtJQUVBLE9BQU9OO0FBQ1Q7QUFXTyxTQUFTRCwrQkFDZFUsR0FBVztRQUVKUjtJQUFQLE9BQU9BLENBQUFBLENBQUFBLGFBQUFBLFdBQUFBLEtBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFdBQWFPLGVBQWUsQ0FBQ0MsSUFBQUEsS0FBUUE7QUFDOUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvdHJ1c3RlZC10eXBlcy50cz82ZThmIl0sIm5hbWVzIjpbIl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCIsInBvbGljeSIsImdldFBvbGljeSIsIndpbmRvdyIsInRydXN0ZWRUeXBlcyIsImNyZWF0ZVBvbGljeSIsImNyZWF0ZUhUTUwiLCJpbnB1dCIsImNyZWF0ZVNjcmlwdCIsImNyZWF0ZVNjcmlwdFVSTCIsInVybCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/trusted-types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/webpack.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/next/dist/client/webpack.js ***!
|
||
\**************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"./node_modules/next/dist/build/deployment-id.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {}\nself.__next_set_public_path__ = (path)=>{\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n __webpack_require__.p = path;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=webpack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC93ZWJwYWNrLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDs7Ozs7MENBS1g7QUFFbEQsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxJQUFJQSxLQUE4QixFQUFFLEVBcUJwQztBQUdFYSxLQUFhQyx3QkFBd0IsR0FBRyxDQUFDQztJQUN6Qyw2REFBNkQ7SUFDN0RDLHFCQUFBQSxHQUEwQkQ7QUFDNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9jbGllbnQvd2VicGFjay50cz82Yzg1Il0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJzdWZmaXgiLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJnZXRDaHVua1NjcmlwdEZpbGVuYW1lIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsInUiLCJhcmdzIiwiZ2V0Q2h1bmtDc3NGaWxlbmFtZSIsImsiLCJnZXRNaW5pQ3NzRmlsZW5hbWUiLCJtaW5pQ3NzRiIsInNlbGYiLCJfX25leHRfc2V0X3B1YmxpY19wYXRoX18iLCJwYXRoIiwiX193ZWJwYWNrX3B1YmxpY19wYXRoX18iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/webpack.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/client/with-router.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/with-router.js ***!
|
||
\******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return withRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\nfunction withRouter(ComposedComponent) {\n function WithRouterWrapper(props) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ComposedComponent, {\n router: (0, _router.useRouter)(),\n ...props\n });\n }\n WithRouterWrapper.getInitialProps = ComposedComponent.getInitialProps;\n WithRouterWrapper.origGetInitialProps = ComposedComponent.origGetInitialProps;\n if (true) {\n const name = ComposedComponent.displayName || ComposedComponent.name || \"Unknown\";\n WithRouterWrapper.displayName = \"withRouter(\" + name + \")\";\n }\n return WithRouterWrapper;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=with-router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC93aXRoLXJvdXRlci5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQWtCQTs7O2VBQXdCQTs7Ozs7NEVBbEJOO29DQU9RO0FBV1gsU0FBU0EsV0FJdEJDLGlCQUErQztJQUUvQyxTQUFTQyxrQkFBa0JDLEtBQVU7UUFDbkMsT0FBTyxXQUFQLEdBQU8sSUFBQUMsWUFBQUMsR0FBQSxFQUFDSixtQkFBQUE7WUFBa0JLLFFBQVFDLENBQUFBLEdBQUFBLFFBQUFBLFNBQVM7WUFBSyxHQUFHSixLQUFLOztJQUMxRDtJQUVBRCxrQkFBa0JNLGVBQWUsR0FBR1Asa0JBQWtCTyxlQUFlO0lBRW5FTixrQkFBMEJPLG1CQUFtQixHQUFHUixrQkFFaERRLG1CQUFtQjtJQUNyQixJQUFJQyxJQUF5QixFQUFjO1FBQ3pDLE1BQU1DLE9BQ0pWLGtCQUFrQlcsV0FBVyxJQUFJWCxrQkFBa0JVLElBQUksSUFBSTtRQUM3RFQsa0JBQWtCVSxXQUFXLEdBQUcsZ0JBQWNELE9BQUs7SUFDckQ7SUFFQSxPQUFPVDtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY2xpZW50L3dpdGgtcm91dGVyLnRzeD8zNjIyIl0sIm5hbWVzIjpbIndpdGhSb3V0ZXIiLCJDb21wb3NlZENvbXBvbmVudCIsIldpdGhSb3V0ZXJXcmFwcGVyIiwicHJvcHMiLCJfanN4cnVudGltZSIsImpzeCIsInJvdXRlciIsInVzZVJvdXRlciIsImdldEluaXRpYWxQcm9wcyIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJwcm9jZXNzIiwibmFtZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/with-router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/strip-ansi/index.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/strip-ansi/index.js ***!
|
||
\*************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = function() {\n let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2kvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7QUFBQztJQUFLO0lBQWEsSUFBSUEsSUFBRTtRQUFDLEtBQUlBLENBQUFBO1lBQUlBLEVBQUVDLE9BQU8sR0FBQztvQkFBQyxFQUFDQyxXQUFVRixJQUFFLEtBQUssRUFBQyxvRUFBQyxDQUFDO2dCQUFLLE1BQU1HLElBQUU7b0JBQUM7b0JBQStIO2lCQUEyRCxDQUFDQyxJQUFJLENBQUM7Z0JBQUssT0FBTyxJQUFJQyxPQUFPRixHQUFFSCxJQUFFTSxZQUFVO1lBQUk7UUFBQztRQUFFLEtBQUksQ0FBQ04sR0FBRUcsR0FBRUk7WUFBSyxNQUFNQyxJQUFFRCxFQUFFO1lBQUtQLEVBQUVDLE9BQU8sR0FBQ0QsQ0FBQUEsSUFBRyxPQUFPQSxNQUFJLFdBQVNBLEVBQUVTLE9BQU8sQ0FBQ0QsS0FBSSxNQUFJUjtRQUFDO0lBQUM7SUFBRSxJQUFJRyxJQUFFLENBQUM7SUFBRSxTQUFTTyxvQkFBb0JILENBQUM7UUFBRSxJQUFJQyxJQUFFTCxDQUFDLENBQUNJLEVBQUU7UUFBQyxJQUFHQyxNQUFJRixXQUFVO1lBQUMsT0FBT0UsRUFBRVAsT0FBTztRQUFBO1FBQUMsSUFBSVUsSUFBRVIsQ0FBQyxDQUFDSSxFQUFFLEdBQUM7WUFBQ04sU0FBUSxDQUFDO1FBQUM7UUFBRSxJQUFJVyxJQUFFO1FBQUssSUFBRztZQUFDWixDQUFDLENBQUNPLEVBQUUsQ0FBQ0ksR0FBRUEsRUFBRVYsT0FBTyxFQUFDUztZQUFxQkUsSUFBRTtRQUFLLFNBQVE7WUFBQyxJQUFHQSxHQUFFLE9BQU9ULENBQUMsQ0FBQ0ksRUFBRTtRQUFBO1FBQUMsT0FBT0ksRUFBRVYsT0FBTztJQUFBO0lBQUMsSUFBRyxPQUFPUyx3QkFBc0IsYUFBWUEsb0JBQW9CRyxFQUFFLEdBQUNDLFNBQVNBLEdBQUM7SUFBSSxJQUFJUCxJQUFFRyxvQkFBb0I7SUFBS0ssT0FBT2QsT0FBTyxHQUFDTTtBQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcz8xMWZhIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPWZhbHNlfT17fSk9Pntjb25zdCByPVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHIsZT91bmRlZmluZWQ6XCJnXCIpfX0sNTMyOihlLHIsXyk9Pntjb25zdCB0PV8oNTExKTtlLmV4cG9ydHM9ZT0+dHlwZW9mIGU9PT1cInN0cmluZ1wiP2UucmVwbGFjZSh0KCksXCJcIik6ZX19O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18oXyl7dmFyIHQ9cltfXTtpZih0IT09dW5kZWZpbmVkKXtyZXR1cm4gdC5leHBvcnRzfXZhciBhPXJbX109e2V4cG9ydHM6e319O3ZhciBuPXRydWU7dHJ5e2VbX10oYSxhLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7bj1mYWxzZX1maW5hbGx5e2lmKG4pZGVsZXRlIHJbX119cmV0dXJuIGEuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIF89X19uY2N3cGNrX3JlcXVpcmVfXyg1MzIpO21vZHVsZS5leHBvcnRzPV99KSgpOyJdLCJuYW1lcyI6WyJlIiwiZXhwb3J0cyIsIm9ubHlGaXJzdCIsInIiLCJqb2luIiwiUmVnRXhwIiwidW5kZWZpbmVkIiwiXyIsInQiLCJyZXBsYWNlIiwiX19uY2N3cGNrX3JlcXVpcmVfXyIsImEiLCJuIiwiYWIiLCJfX2Rpcm5hbWUiLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/strip-ansi/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/pages/_app.js":
|
||
/*!**********************************************!*\
|
||
!*** ./node_modules/next/dist/pages/_app.js ***!
|
||
\**********************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return App;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\n/**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */ async function appGetInitialProps(param) {\n let { Component, ctx } = param;\n const pageProps = await (0, _utils.loadGetInitialProps)(Component, ctx);\n return {\n pageProps\n };\n}\nclass App extends _react.default.Component {\n render() {\n const { Component, pageProps } = this.props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...pageProps\n });\n }\n}\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_app.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19hcHAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztlQWlDcUJBOzs7Ozs0RUFqQ0g7bUNBV2tCO0FBVXBDOzs7Q0FHQyxHQUNELGVBQWVDLG1CQUFtQkMsS0FHckI7SUFIcUIsTUFDaENDLFNBQVMsRUFDVEMsR0FBRyxFQUNRLEdBSHFCRjtJQUloQyxNQUFNRyxZQUFZLE1BQU1DLENBQUFBLEdBQUFBLE9BQUFBLG1CQUFtQixFQUFDSCxXQUFXQztJQUN2RCxPQUFPO1FBQUVDO0lBQVU7QUFDckI7QUFFZSxNQUFNTCxZQUFzQ08sT0FBQUEsT0FBSyxDQUFDSixTQUFTO0lBT3hFSyxTQUFTO1FBQ1AsTUFBTSxFQUFFTCxTQUFTLEVBQUVFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQ0ksS0FBSztRQUUzQyxPQUFPLFdBQVAsR0FBTyxJQUFBQyxZQUFBQyxHQUFBLEVBQUNSLFdBQUFBO1lBQVcsR0FBR0UsU0FBUzs7SUFDakM7QUFDRjtBQVpxQkwsSUFJWlksbUJBQUFBLEdBQXNCWDtBQUpWRCxJQUtaYSxlQUFBQSxHQUFrQloiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9wYWdlcy9fYXBwLnRzeD83YzZhIl0sIm5hbWVzIjpbIkFwcCIsImFwcEdldEluaXRpYWxQcm9wcyIsInBhcmFtIiwiQ29tcG9uZW50IiwiY3R4IiwicGFnZVByb3BzIiwibG9hZEdldEluaXRpYWxQcm9wcyIsIlJlYWN0IiwicmVuZGVyIiwicHJvcHMiLCJfanN4cnVudGltZSIsImpzeCIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJnZXRJbml0aWFsUHJvcHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_app.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/pages/_error.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/next/dist/pages/_error.js ***!
|
||
\************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return Error;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"./node_modules/next/dist/shared/lib/head.js\"));\nconst statusCodes = {\n 400: \"Bad Request\",\n 404: \"This page could not be found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\"\n};\nfunction _getInitialProps(param) {\n let { res, err } = param;\n const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n return {\n statusCode\n };\n}\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n lineHeight: \"48px\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n paddingRight: 23,\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"28px\"\n },\n wrap: {\n display: \"inline-block\"\n }\n};\nclass Error extends _react.default.Component {\n render() {\n const { statusCode, withDarkMode = true } = this.props;\n const title = this.props.title || statusCodes[statusCode] || \"An unexpected error has occurred\";\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.error,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: statusCode ? statusCode + \": \" + title : \"Application error: a client-side exception has occurred\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.desc,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* CSS minified from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n ${\n withDarkMode\n ? `@media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }`\n : ''\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\" + (withDarkMode ? \"@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\" : \"\")\n }\n }),\n statusCode ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: statusCode\n }) : null,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.wrap,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n style: styles.h2,\n children: [\n this.props.title || statusCode ? title : /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: \"Application error: a client-side exception has occurred (see the browser console for more information)\"\n }),\n \".\"\n ]\n })\n })\n ]\n })\n ]\n });\n }\n}\nError.displayName = \"ErrorPage\";\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O2VBOERxQkE7Ozs7OzRFQTlESDsyRUFDRDtBQUdqQixNQUFNQyxjQUEwQztJQUM5QyxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ1A7QUFRQSxTQUFTQyxpQkFBaUJDLEtBR1I7SUFIUSxNQUN4QkMsR0FBRyxFQUNIQyxHQUFHLEVBQ2EsR0FIUUY7SUFJeEIsTUFBTUcsYUFDSkYsT0FBT0EsSUFBSUUsVUFBVSxHQUFHRixJQUFJRSxVQUFVLEdBQUdELE1BQU1BLElBQUlDLFVBQVUsR0FBSTtJQUNuRSxPQUFPO1FBQUVBO0lBQVc7QUFDdEI7QUFFQSxNQUFNQyxTQUE4QztJQUNsREMsT0FBTztRQUNMLDBGQUEwRjtRQUMxRkMsWUFDRTtRQUNGQyxRQUFRO1FBQ1JDLFdBQVc7UUFDWEMsU0FBUztRQUNUQyxlQUFlO1FBQ2ZDLFlBQVk7UUFDWkMsZ0JBQWdCO0lBQ2xCO0lBQ0FDLE1BQU07UUFDSkMsWUFBWTtJQUNkO0lBQ0FDLElBQUk7UUFDRk4sU0FBUztRQUNUTyxRQUFRO1FBQ1JDLGNBQWM7UUFDZEMsVUFBVTtRQUNWQyxZQUFZO1FBQ1pDLGVBQWU7SUFDakI7SUFDQUMsSUFBSTtRQUNGSCxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkwsWUFBWTtJQUNkO0lBQ0FRLE1BQU07UUFDSmIsU0FBUztJQUNYO0FBQ0Y7QUFLZSxNQUFNWixjQUFzQjBCLE9BQUFBLE9BQUssQ0FBQ0MsU0FBUztJQU14REMsU0FBUztRQUNQLE1BQU0sRUFBRXRCLFVBQVUsRUFBRXVCLGVBQWUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDQyxLQUFLO1FBQ3RELE1BQU1DLFFBQ0osSUFBSSxDQUFDRCxLQUFLLENBQUNDLEtBQUssSUFDaEI5QixXQUFXLENBQUNLLFdBQVcsSUFDdkI7UUFFRixPQUNFLFdBREYsR0FDRSxJQUFBMEIsWUFBQUMsSUFBQSxFQUFDQyxPQUFBQTtZQUFJQyxPQUFPNUIsT0FBT0MsS0FBSzs7OEJBQ3RCLElBQUF3QixZQUFBSSxHQUFBLEVBQUNDLE1BQUFBLE9BQUk7OEJBQ0gsa0JBQUFMLFlBQUFJLEdBQUEsRUFBQ0wsU0FBQUE7a0NBQ0V6QixhQUNHQSxhQUFjLE9BQUl5QixRQUNsQjs7OzhCQUdSLElBQUFDLFlBQUFDLElBQUEsRUFBQ0MsT0FBQUE7b0JBQUlDLE9BQU81QixPQUFPUyxJQUFJOztzQ0FDckIsSUFBQWdCLFlBQUFJLEdBQUEsRUFBQ0QsU0FBQUE7NEJBQ0NHLHlCQUF5QjtnQ0FDdkI7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFnQkMsR0FDREMsUUFBUSxtR0FDTlYsQ0FBQUEsZUFDSSxvSUFDQTs0QkFFUjs7d0JBR0R2QixhQUNDLFdBRERBLEdBQ0MsSUFBQTBCLFlBQUFJLEdBQUEsRUFBQ2xCLE1BQUFBOzRCQUFHc0IsV0FBVTs0QkFBZ0JMLE9BQU81QixPQUFPVyxFQUFFO3NDQUMzQ1o7NkJBRUQ7c0NBQ0osSUFBQTBCLFlBQUFJLEdBQUEsRUFBQ0YsT0FBQUE7NEJBQUlDLE9BQU81QixPQUFPa0IsSUFBSTtzQ0FDckIsa0JBQUFPLFlBQUFDLElBQUEsRUFBQ1QsTUFBQUE7Z0NBQUdXLE9BQU81QixPQUFPaUIsRUFBRTs7b0NBQ2pCLElBQUksQ0FBQ00sS0FBSyxDQUFDQyxLQUFLLElBQUl6QixhQUNuQnlCLFFBRUEsV0FGQUEsR0FFQSxJQUFBQyxZQUFBSSxHQUFBLEVBQUFKLFlBQUFTLFFBQUE7a0RBQUU7O29DQUlGOzs7Ozs7OztJQU9kO0FBQ0Y7QUF4RXFCekMsTUFDWjBDLFdBQUFBLEdBQWM7QUFERjFDLE1BR1oyQyxlQUFBQSxHQUFrQnpDO0FBSE5GLE1BSVo0QyxtQkFBQUEsR0FBc0IxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3BhZ2VzL19lcnJvci50c3g/NDg3ZSJdLCJuYW1lcyI6WyJFcnJvciIsInN0YXR1c0NvZGVzIiwiX2dldEluaXRpYWxQcm9wcyIsInBhcmFtIiwicmVzIiwiZXJyIiwic3RhdHVzQ29kZSIsInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZGVzYyIsImxpbmVIZWlnaHQiLCJoMSIsIm1hcmdpbiIsInBhZGRpbmdSaWdodCIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJoMiIsIndyYXAiLCJSZWFjdCIsIkNvbXBvbmVudCIsInJlbmRlciIsIndpdGhEYXJrTW9kZSIsInByb3BzIiwidGl0bGUiLCJfanN4cnVudGltZSIsImpzeHMiLCJkaXYiLCJzdHlsZSIsImpzeCIsIkhlYWQiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImNsYXNzTmFtZSIsIkZyYWdtZW50IiwiZGlzcGxheU5hbWUiLCJnZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js ***!
|
||
\*************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AmpStateContext\", ({\n enumerable: true,\n get: function() {\n return AmpStateContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst AmpStateContext = _react.default.createContext({});\nif (true) {\n AmpStateContext.displayName = \"AmpStateContext\";\n} //# sourceMappingURL=amp-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFFYUE7OztlQUFBQTs7Ozs0RUFGSztBQUVYLE1BQU1BLGtCQUFzQ0MsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQUMsQ0FBQztBQUV4RSxJQUFJQyxJQUF5QixFQUFjO0lBQ3pDSCxnQkFBZ0JJLFdBQVcsR0FBRztBQUNoQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHM/ZjgyOCJdLCJuYW1lcyI6WyJBbXBTdGF0ZUNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/amp-mode.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/amp-mode.js ***!
|
||
\*******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst = false, hybrid = false, hasQuery = false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLW1vZGUuanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLFlBQVlDLEtBQUE7SUFBQSxNQUMxQkMsV0FBVyxLQUFLLEVBQ2hCQyxTQUFTLEtBQUssRUFDZEMsV0FBVyxLQUFLLEVBQ2pCLEdBSjJCSCxVQUFBLFNBSXhCLENBQUMsSUFKdUJBO0lBSzFCLE9BQU9DLFlBQWFDLFVBQVVDO0FBQ2hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9hbXAtbW9kZS50cz9hYWM3Il0sIm5hbWVzIjpbImlzSW5BbXBNb2RlIiwicGFyYW0iLCJhbXBGaXJzdCIsImh5YnJpZCIsImhhc1F1ZXJ5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/amp-mode.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js ***!
|
||
\********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n AppRouterContext: function() {\n return AppRouterContext;\n },\n GlobalLayoutRouterContext: function() {\n return GlobalLayoutRouterContext;\n },\n LayoutRouterContext: function() {\n return LayoutRouterContext;\n },\n MissingSlotContext: function() {\n return MissingSlotContext;\n },\n TemplateContext: function() {\n return TemplateContext;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n AppRouterContext.displayName = \"AppRouterContext\";\n LayoutRouterContext.displayName = \"LayoutRouterContext\";\n GlobalLayoutRouterContext.displayName = \"GlobalLayoutRouterContext\";\n TemplateContext.displayName = \"TemplateContext\";\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBMEphQSxTQUFBQTtzQkFBQUE7O0lBVUFDOytCQUFBQTs7SUFQQUM7eUJBQUFBOztJQXdCQUM7d0JBQUFBOztJQVRBQztxQkFBQUE7Ozs7O0FBbEJOLE1BQU1KLFNBQUFBLFdBQW1CSyxHQUFBQSx5QkFDOUJDLENBQUEsQ0FBQUMsbUJBQUFBLENBQUE7QUFFSyxNQUFNTCxtQkFBQUEsT0FBc0JHLE9BQUFBLENBQUFBLGFBQU1HLENBQUFBO0FBT2xDLE1BQU1QLHNCQUFBQSxPQUE0QkksT0FBQUEsQ0FBQUEsYUFBTUcsQ0FBQUE7QUFReEMsTUFBTUosNEJBQWtCQyxPQUFNRyxPQUFBQSxDQUFBQSxhQUErQjtBQUVwRSxNQUFJQyxrQkFBb0JDLE9BQUtDLE9BQUEsQ0FBQUgsYUFBYztJQUN6Q1IsSUFBaUJZLEVBQWM7SUFDL0JWLGlCQUFBQSxXQUFvQlUsR0FBVztJQUMvQlgsb0JBQUFBLFdBQTBCVyxHQUFBQTtJQUMxQlIsMEJBQWdCUSxXQUFjO0lBQ2hDUixnQkFBQVEsV0FBQTtBQUVPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHM/YjExMCJdLCJuYW1lcyI6WyJBcHBSb3V0ZXJDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIkxheW91dFJvdXRlckNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJUZW1wbGF0ZUNvbnRleHQiLCJSZWFjdCIsIl8iLCJyZXF1aXJlIiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJfcmVhY3QiLCJkZWZhdWx0IiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/bloom-filter.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/bloom-filter.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// minimal implementation MurmurHash2 hash function\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"BloomFilter\", ({\n enumerable: true,\n get: function() {\n return BloomFilter;\n }\n}));\nfunction murmurhash2(str) {\n let h = 0;\n for(let i = 0; i < str.length; i++){\n const c = str.charCodeAt(i);\n h = Math.imul(h ^ c, 0x5bd1e995);\n h ^= h >>> 13;\n h = Math.imul(h, 0x5bd1e995);\n }\n return h >>> 0;\n}\n// default to 0.01% error rate as the filter compresses very well\nconst DEFAULT_ERROR_RATE = 0.0001;\nclass BloomFilter {\n static from(items, errorRate) {\n if (errorRate === void 0) errorRate = DEFAULT_ERROR_RATE;\n const filter = new BloomFilter(items.length, errorRate);\n for (const item of items){\n filter.add(item);\n }\n return filter;\n }\n export() {\n const data = {\n numItems: this.numItems,\n errorRate: this.errorRate,\n numBits: this.numBits,\n numHashes: this.numHashes,\n bitArray: this.bitArray\n };\n if (false) {}\n return data;\n }\n import(data) {\n this.numItems = data.numItems;\n this.errorRate = data.errorRate;\n this.numBits = data.numBits;\n this.numHashes = data.numHashes;\n this.bitArray = data.bitArray;\n }\n add(item) {\n const hashValues = this.getHashValues(item);\n hashValues.forEach((hash)=>{\n this.bitArray[hash] = 1;\n });\n }\n contains(item) {\n const hashValues = this.getHashValues(item);\n return hashValues.every((hash)=>this.bitArray[hash]);\n }\n getHashValues(item) {\n const hashValues = [];\n for(let i = 1; i <= this.numHashes; i++){\n const hash = murmurhash2(\"\" + item + i) % this.numBits;\n hashValues.push(hash);\n }\n return hashValues;\n }\n constructor(numItems, errorRate = DEFAULT_ERROR_RATE){\n this.numItems = numItems;\n this.errorRate = errorRate;\n this.numBits = Math.ceil(-(numItems * Math.log(errorRate)) / (Math.log(2) * Math.log(2)));\n this.numHashes = Math.ceil(this.numBits / numItems * Math.log(2));\n this.bitArray = new Array(this.numBits).fill(0);\n }\n} //# sourceMappingURL=bloom-filter.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYmxvb20tZmlsdGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLG1EQUFtRDs7Ozs7K0NBZXRDQTs7O2VBQUFBOzs7QUFkYixTQUFTQyxZQUFZQyxHQUFXO0lBQzlCLElBQUlDLElBQUk7SUFDUixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUYsSUFBSUcsTUFBTSxFQUFFRCxJQUFLO1FBQ25DLE1BQU1FLElBQUlKLElBQUlLLFVBQVUsQ0FBQ0g7UUFDekJELElBQUlLLEtBQUtDLElBQUksQ0FBQ04sSUFBSUcsR0FBRztRQUNyQkgsS0FBS0EsTUFBTTtRQUNYQSxJQUFJSyxLQUFLQyxJQUFJLENBQUNOLEdBQUc7SUFDbkI7SUFDQSxPQUFPQSxNQUFNO0FBQ2Y7QUFFQSxpRUFBaUU7QUFDakUsTUFBTU8scUJBQXFCO0FBRXBCLE1BQU1WO0lBaUJYLE9BQU9XLEtBQUtDLEtBQWUsRUFBRUMsU0FBOEIsRUFBRTtRQUFoQ0EsSUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsWUFBWUg7UUFDdkMsTUFBTUksU0FBUyxJQUFJZCxZQUFZWSxNQUFNUCxNQUFNLEVBQUVRO1FBRTdDLEtBQUssTUFBTUUsUUFBUUgsTUFBTztZQUN4QkUsT0FBT0UsR0FBRyxDQUFDRDtRQUNiO1FBQ0EsT0FBT0Q7SUFDVDtJQUVBRyxTQUFTO1FBQ1AsTUFBTUMsT0FBTztZQUNYQyxVQUFVLElBQUksQ0FBQ0EsUUFBUTtZQUN2Qk4sV0FBVyxJQUFJLENBQUNBLFNBQVM7WUFDekJPLFNBQVMsSUFBSSxDQUFDQSxPQUFPO1lBQ3JCQyxXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6QkMsVUFBVSxJQUFJLENBQUNBLFFBQVE7UUFDekI7UUFFQSxJQUFJQyxLQUE2QixFQUFVLEVBYTNDO1FBRUEsT0FBT0w7SUFDVDtJQUVBZ0IsT0FBT2hCLElBQXlDLEVBQUU7UUFDaEQsSUFBSSxDQUFDQyxRQUFRLEdBQUdELEtBQUtDLFFBQVE7UUFDN0IsSUFBSSxDQUFDTixTQUFTLEdBQUdLLEtBQUtMLFNBQVM7UUFDL0IsSUFBSSxDQUFDTyxPQUFPLEdBQUdGLEtBQUtFLE9BQU87UUFDM0IsSUFBSSxDQUFDQyxTQUFTLEdBQUdILEtBQUtHLFNBQVM7UUFDL0IsSUFBSSxDQUFDQyxRQUFRLEdBQUdKLEtBQUtJLFFBQVE7SUFDL0I7SUFFQU4sSUFBSUQsSUFBWSxFQUFFO1FBQ2hCLE1BQU1vQixhQUFhLElBQUksQ0FBQ0MsYUFBYSxDQUFDckI7UUFDdENvQixXQUFXRSxPQUFPLENBQUMsQ0FBQ0M7WUFDbEIsSUFBSSxDQUFDaEIsUUFBUSxDQUFDZ0IsS0FBSyxHQUFHO1FBQ3hCO0lBQ0Y7SUFFQUMsU0FBU3hCLElBQVksRUFBRTtRQUNyQixNQUFNb0IsYUFBYSxJQUFJLENBQUNDLGFBQWEsQ0FBQ3JCO1FBQ3RDLE9BQU9vQixXQUFXSyxLQUFLLENBQUMsQ0FBQ0YsT0FBUyxJQUFJLENBQUNoQixRQUFRLENBQUNnQixLQUFLO0lBQ3ZEO0lBRUFGLGNBQWNyQixJQUFZLEVBQUU7UUFDMUIsTUFBTW9CLGFBQWEsRUFBRTtRQUNyQixJQUFLLElBQUkvQixJQUFJLEdBQUdBLEtBQUssSUFBSSxDQUFDaUIsU0FBUyxFQUFFakIsSUFBSztZQUN4QyxNQUFNa0MsT0FBT3JDLFlBQVksS0FBR2MsT0FBT1gsS0FBTyxJQUFJLENBQUNnQixPQUFPO1lBQ3REZSxXQUFXTSxJQUFJLENBQUNIO1FBQ2xCO1FBQ0EsT0FBT0g7SUFDVDtJQXpFQU8sWUFBWXZCLFFBQWdCLEVBQUVOLFlBQW9CSCxrQkFBa0IsQ0FBRTtRQUNwRSxJQUFJLENBQUNTLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDTixTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ08sT0FBTyxHQUFHWixLQUFLbUMsSUFBSSxDQUN0QixDQUFFeEIsQ0FBQUEsV0FBV1gsS0FBS29DLEdBQUcsQ0FBQy9CLFVBQUFBLElBQWVMLENBQUFBLEtBQUtvQyxHQUFHLENBQUMsS0FBS3BDLEtBQUtvQyxHQUFHLENBQUM7UUFFOUQsSUFBSSxDQUFDdkIsU0FBUyxHQUFHYixLQUFLbUMsSUFBSSxDQUFDLElBQUssQ0FBQ3ZCLE9BQU8sR0FBR0QsV0FBWVgsS0FBS29DLEdBQUcsQ0FBQztRQUNoRSxJQUFJLENBQUN0QixRQUFRLEdBQUcsSUFBSXVCLE1BQU0sSUFBSSxDQUFDekIsT0FBTyxFQUFFMEIsSUFBSSxDQUFDO0lBQy9DO0FBa0VGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9ibG9vbS1maWx0ZXIudHM/ZWM0MCJdLCJuYW1lcyI6WyJCbG9vbUZpbHRlciIsIm11cm11cmhhc2gyIiwic3RyIiwiaCIsImkiLCJsZW5ndGgiLCJjIiwiY2hhckNvZGVBdCIsIk1hdGgiLCJpbXVsIiwiREVGQVVMVF9FUlJPUl9SQVRFIiwiZnJvbSIsIml0ZW1zIiwiZXJyb3JSYXRlIiwiZmlsdGVyIiwiaXRlbSIsImFkZCIsImV4cG9ydCIsImRhdGEiLCJudW1JdGVtcyIsIm51bUJpdHMiLCJudW1IYXNoZXMiLCJiaXRBcnJheSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJmaWx0ZXJEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImd6aXBTaXplIiwicmVxdWlyZSIsInN5bmMiLCJjb25zb2xlIiwid2FybiIsImltcG9ydCIsImhhc2hWYWx1ZXMiLCJnZXRIYXNoVmFsdWVzIiwiZm9yRWFjaCIsImhhc2giLCJjb250YWlucyIsImV2ZXJ5IiwicHVzaCIsImNvbnN0cnVjdG9yIiwiY2VpbCIsImxvZyIsIkFycmF5IiwiZmlsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/bloom-filter.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/constants.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/constants.js ***!
|
||
\********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n APP_BUILD_MANIFEST: function() {\n return APP_BUILD_MANIFEST;\n },\n APP_CLIENT_INTERNALS: function() {\n return APP_CLIENT_INTERNALS;\n },\n APP_PATHS_MANIFEST: function() {\n return APP_PATHS_MANIFEST;\n },\n APP_PATH_ROUTES_MANIFEST: function() {\n return APP_PATH_ROUTES_MANIFEST;\n },\n AUTOMATIC_FONT_OPTIMIZATION_MANIFEST: function() {\n return AUTOMATIC_FONT_OPTIMIZATION_MANIFEST;\n },\n BARREL_OPTIMIZATION_PREFIX: function() {\n return BARREL_OPTIMIZATION_PREFIX;\n },\n BLOCKED_PAGES: function() {\n return BLOCKED_PAGES;\n },\n BUILD_ID_FILE: function() {\n return BUILD_ID_FILE;\n },\n BUILD_MANIFEST: function() {\n return BUILD_MANIFEST;\n },\n CLIENT_PUBLIC_FILES_PATH: function() {\n return CLIENT_PUBLIC_FILES_PATH;\n },\n CLIENT_REFERENCE_MANIFEST: function() {\n return CLIENT_REFERENCE_MANIFEST;\n },\n CLIENT_STATIC_FILES_PATH: function() {\n return CLIENT_STATIC_FILES_PATH;\n },\n CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_AMP;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n },\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n },\n CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n },\n COMPILER_INDEXES: function() {\n return COMPILER_INDEXES;\n },\n COMPILER_NAMES: function() {\n return COMPILER_NAMES;\n },\n CONFIG_FILES: function() {\n return CONFIG_FILES;\n },\n DEFAULT_RUNTIME_WEBPACK: function() {\n return DEFAULT_RUNTIME_WEBPACK;\n },\n DEFAULT_SANS_SERIF_FONT: function() {\n return DEFAULT_SANS_SERIF_FONT;\n },\n DEFAULT_SERIF_FONT: function() {\n return DEFAULT_SERIF_FONT;\n },\n DEV_CLIENT_PAGES_MANIFEST: function() {\n return DEV_CLIENT_PAGES_MANIFEST;\n },\n DEV_MIDDLEWARE_MANIFEST: function() {\n return DEV_MIDDLEWARE_MANIFEST;\n },\n EDGE_RUNTIME_WEBPACK: function() {\n return EDGE_RUNTIME_WEBPACK;\n },\n EDGE_UNSUPPORTED_NODE_APIS: function() {\n return EDGE_UNSUPPORTED_NODE_APIS;\n },\n EXPORT_DETAIL: function() {\n return EXPORT_DETAIL;\n },\n EXPORT_MARKER: function() {\n return EXPORT_MARKER;\n },\n FUNCTIONS_CONFIG_MANIFEST: function() {\n return FUNCTIONS_CONFIG_MANIFEST;\n },\n GOOGLE_FONT_PROVIDER: function() {\n return GOOGLE_FONT_PROVIDER;\n },\n IMAGES_MANIFEST: function() {\n return IMAGES_MANIFEST;\n },\n INTERCEPTION_ROUTE_REWRITE_MANIFEST: function() {\n return INTERCEPTION_ROUTE_REWRITE_MANIFEST;\n },\n MIDDLEWARE_BUILD_MANIFEST: function() {\n return MIDDLEWARE_BUILD_MANIFEST;\n },\n MIDDLEWARE_MANIFEST: function() {\n return MIDDLEWARE_MANIFEST;\n },\n MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n },\n MODERN_BROWSERSLIST_TARGET: function() {\n return _modernbrowserslisttarget.default;\n },\n NEXT_BUILTIN_DOCUMENT: function() {\n return NEXT_BUILTIN_DOCUMENT;\n },\n NEXT_FONT_MANIFEST: function() {\n return NEXT_FONT_MANIFEST;\n },\n OPTIMIZED_FONT_PROVIDERS: function() {\n return OPTIMIZED_FONT_PROVIDERS;\n },\n PAGES_MANIFEST: function() {\n return PAGES_MANIFEST;\n },\n PHASE_DEVELOPMENT_SERVER: function() {\n return PHASE_DEVELOPMENT_SERVER;\n },\n PHASE_EXPORT: function() {\n return PHASE_EXPORT;\n },\n PHASE_INFO: function() {\n return PHASE_INFO;\n },\n PHASE_PRODUCTION_BUILD: function() {\n return PHASE_PRODUCTION_BUILD;\n },\n PHASE_PRODUCTION_SERVER: function() {\n return PHASE_PRODUCTION_SERVER;\n },\n PHASE_TEST: function() {\n return PHASE_TEST;\n },\n PRERENDER_MANIFEST: function() {\n return PRERENDER_MANIFEST;\n },\n REACT_LOADABLE_MANIFEST: function() {\n return REACT_LOADABLE_MANIFEST;\n },\n ROUTES_MANIFEST: function() {\n return ROUTES_MANIFEST;\n },\n RSC_MODULE_TYPES: function() {\n return RSC_MODULE_TYPES;\n },\n SERVER_DIRECTORY: function() {\n return SERVER_DIRECTORY;\n },\n SERVER_FILES_MANIFEST: function() {\n return SERVER_FILES_MANIFEST;\n },\n SERVER_PROPS_ID: function() {\n return SERVER_PROPS_ID;\n },\n SERVER_REFERENCE_MANIFEST: function() {\n return SERVER_REFERENCE_MANIFEST;\n },\n STATIC_PROPS_ID: function() {\n return STATIC_PROPS_ID;\n },\n STATIC_STATUS_PAGES: function() {\n return STATIC_STATUS_PAGES;\n },\n STRING_LITERAL_DROP_BUNDLE: function() {\n return STRING_LITERAL_DROP_BUNDLE;\n },\n SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n return SUBRESOURCE_INTEGRITY_MANIFEST;\n },\n SYSTEM_ENTRYPOINTS: function() {\n return SYSTEM_ENTRYPOINTS;\n },\n TRACE_OUTPUT_VERSION: function() {\n return TRACE_OUTPUT_VERSION;\n },\n TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n },\n UNDERSCORE_NOT_FOUND_ROUTE: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE;\n },\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE_ENTRY;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"./node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n client: \"client\",\n server: \"server\",\n edgeServer: \"edge-server\"\n};\nconst COMPILER_INDEXES = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2\n};\nconst UNDERSCORE_NOT_FOUND_ROUTE = \"/_not-found\";\nconst UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = \"\" + UNDERSCORE_NOT_FOUND_ROUTE + \"/page\";\nconst PHASE_EXPORT = \"phase-export\";\nconst PHASE_PRODUCTION_BUILD = \"phase-production-build\";\nconst PHASE_PRODUCTION_SERVER = \"phase-production-server\";\nconst PHASE_DEVELOPMENT_SERVER = \"phase-development-server\";\nconst PHASE_TEST = \"phase-test\";\nconst PHASE_INFO = \"phase-info\";\nconst PAGES_MANIFEST = \"pages-manifest.json\";\nconst APP_PATHS_MANIFEST = \"app-paths-manifest.json\";\nconst APP_PATH_ROUTES_MANIFEST = \"app-path-routes-manifest.json\";\nconst BUILD_MANIFEST = \"build-manifest.json\";\nconst APP_BUILD_MANIFEST = \"app-build-manifest.json\";\nconst FUNCTIONS_CONFIG_MANIFEST = \"functions-config-manifest.json\";\nconst SUBRESOURCE_INTEGRITY_MANIFEST = \"subresource-integrity-manifest\";\nconst NEXT_FONT_MANIFEST = \"next-font-manifest\";\nconst EXPORT_MARKER = \"export-marker.json\";\nconst EXPORT_DETAIL = \"export-detail.json\";\nconst PRERENDER_MANIFEST = \"prerender-manifest.json\";\nconst ROUTES_MANIFEST = \"routes-manifest.json\";\nconst IMAGES_MANIFEST = \"images-manifest.json\";\nconst SERVER_FILES_MANIFEST = \"required-server-files.json\";\nconst DEV_CLIENT_PAGES_MANIFEST = \"_devPagesManifest.json\";\nconst MIDDLEWARE_MANIFEST = \"middleware-manifest.json\";\nconst DEV_MIDDLEWARE_MANIFEST = \"_devMiddlewareManifest.json\";\nconst REACT_LOADABLE_MANIFEST = \"react-loadable-manifest.json\";\nconst AUTOMATIC_FONT_OPTIMIZATION_MANIFEST = \"font-manifest.json\";\nconst SERVER_DIRECTORY = \"server\";\nconst CONFIG_FILES = [\n \"next.config.js\",\n \"next.config.mjs\"\n];\nconst BUILD_ID_FILE = \"BUILD_ID\";\nconst BLOCKED_PAGES = [\n \"/_document\",\n \"/_app\",\n \"/_error\"\n];\nconst CLIENT_PUBLIC_FILES_PATH = \"public\";\nconst CLIENT_STATIC_FILES_PATH = \"static\";\nconst STRING_LITERAL_DROP_BUNDLE = \"__NEXT_DROP_CLIENT_FILE__\";\nconst NEXT_BUILTIN_DOCUMENT = \"__NEXT_BUILTIN_DOCUMENT__\";\nconst BARREL_OPTIMIZATION_PREFIX = \"__barrel_optimize__\";\nconst CLIENT_REFERENCE_MANIFEST = \"client-reference-manifest\";\nconst SERVER_REFERENCE_MANIFEST = \"server-reference-manifest\";\nconst MIDDLEWARE_BUILD_MANIFEST = \"middleware-build-manifest\";\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = \"middleware-react-loadable-manifest\";\nconst INTERCEPTION_ROUTE_REWRITE_MANIFEST = \"interception-route-rewrite-manifest\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = \"app-pages-internals\";\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = \"polyfills\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\n_c = CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\nconst DEFAULT_RUNTIME_WEBPACK = \"webpack-runtime\";\nconst EDGE_RUNTIME_WEBPACK = \"edge-runtime-webpack\";\nconst STATIC_PROPS_ID = \"__N_SSG\";\nconst SERVER_PROPS_ID = \"__N_SSP\";\nconst GOOGLE_FONT_PROVIDER = \"https://fonts.googleapis.com/\";\nconst OPTIMIZED_FONT_PROVIDERS = [\n {\n url: GOOGLE_FONT_PROVIDER,\n preconnect: \"https://fonts.gstatic.com\"\n },\n {\n url: \"https://use.typekit.net\",\n preconnect: \"https://use.typekit.net\"\n }\n];\nconst DEFAULT_SERIF_FONT = {\n name: \"Times New Roman\",\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n name: \"Arial\",\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n \"/500\"\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n client: \"client\",\n server: \"server\"\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n \"clearImmediate\",\n \"setImmediate\",\n \"BroadcastChannel\",\n \"ByteLengthQueuingStrategy\",\n \"CompressionStream\",\n \"CountQueuingStrategy\",\n \"DecompressionStream\",\n \"DomException\",\n \"MessageChannel\",\n \"MessageEvent\",\n \"MessagePort\",\n \"ReadableByteStreamController\",\n \"ReadableStreamBYOBRequest\",\n \"ReadableStreamDefaultController\",\n \"TransformStreamDefaultController\",\n \"WritableStreamDefaultController\"\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\n]);\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\nvar _c;\n$RefreshReg$(_c, \"CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWtDYUEsb0JBQWtCO2VBQWxCQTs7SUEwQ0FDLHNCQUFvQjtlQUFwQkE7O0lBN0NBQyxvQkFBa0I7ZUFBbEJBOztJQUNBQywwQkFBd0I7ZUFBeEJBOztJQWdCQUMsc0NBQW9DO2VBQXBDQTs7SUFTQUMsNEJBQTBCO2VBQTFCQTs7SUFMQUMsZUFBYTtlQUFiQTs7SUFEQUMsZUFBYTtlQUFiQTs7SUFsQkFDLGdCQUFjO2VBQWRBOztJQW9CQUMsMEJBQXdCO2VBQXhCQTs7SUFPQUMsMkJBQXlCO2VBQXpCQTs7SUFOQUMsMEJBQXdCO2VBQXhCQTs7SUEwQkFDLGlDQUErQjtlQUEvQkE7O0lBUEFDLGtDQUFnQztlQUFoQ0E7O0lBQ0FDLHNDQUFvQztlQUFwQ0E7O0lBVUFDLHVDQUFxQztlQUFyQ0E7O0lBQ0FDLDhDQUE0QztlQUE1Q0E7O0lBUEFDLDJDQUF5QztlQUF6Q0E7O0lBSUFDLHFDQUFtQztlQUFuQ0E7O0lBcEVBQyxrQkFBZ0I7ZUFBaEJBOztJQVJBQyxnQkFBYztlQUFkQTs7SUE0Q0FDLGNBQVk7ZUFBWkE7O0lBc0NBQyx5QkFBdUI7ZUFBdkJBOztJQWVBQyx5QkFBdUI7ZUFBdkJBOztJQU5BQyxvQkFBa0I7ZUFBbEJBOztJQXJEQUMsMkJBQXlCO2VBQXpCQTs7SUFFQUMseUJBQXVCO2VBQXZCQTs7SUEyQ0FDLHNCQUFvQjtlQUFwQkE7O0lBa0NBQyw0QkFBMEI7ZUFBMUJBOztJQXBGQUMsZUFBYTtlQUFiQTs7SUFEQUMsZUFBYTtlQUFiQTs7SUFIQUMsMkJBQXlCO2VBQXpCQTs7SUF5REFDLHNCQUFvQjtlQUFwQkE7O0lBbERBQyxpQkFBZTtlQUFmQTs7SUEyQkFDLHFDQUFtQztlQUFuQ0E7O0lBTEFDLDJCQUF5QjtlQUF6QkE7O0lBbkJBQyxxQkFBbUI7ZUFBbkJBOztJQXFCQUMsb0NBQWtDO2VBQWxDQTs7SUFoRUpDLDRC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O0FBRUssTUFBTU8sMEJBQTBCO0FBQ2hDLE1BQU1LLHVCQUF1QjtBQUM3QixNQUFNOEIsa0JBQWtCO0FBQ3hCLE1BQU1GLGtCQUFrQjtBQUN4QixNQUFNdkIsdUJBQXVCO0FBQzdCLE1BQU1TLDJCQUEyQjtJQUN0QztRQUFFNkIsS0FBS3RDO1FBQXNCdUMsWUFBWTtJQUE0QjtJQUNyRTtRQUFFRCxLQUFLO1FBQTJCQyxZQUFZO0lBQTBCO0NBQ3pFO0FBQ00sTUFBTS9DLHFCQUFxQjtJQUNoQ2dELE1BQU07SUFDTkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFlBQVk7QUFDZDtBQUNPLE1BQU1wRCwwQkFBMEI7SUFDckNpRCxNQUFNO0lBQ05DLGVBQWU7SUFDZkMsWUFBWTtJQUNaQyxZQUFZO0FBQ2Q7QUFDTyxNQUFNakIsc0JBQXNCO0lBQUM7Q0FBTztBQUNwQyxNQUFNSSx1QkFBdUI7QUFFN0IsTUFBTUMsbUNBQW1DO0FBRXpDLE1BQU1YLG1CQUFtQjtJQUM5QmMsUUFBUTtJQUNSQyxRQUFRO0FBQ1Y7QUFNTyxNQUFNdkMsNkJBQTZCO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxNQUFNaUMscUJBQXFCLElBQUllLElBQVk7SUFDaEQvRDtJQUNBSTtJQUNBTDtJQUNBRTtDQUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9jb25zdGFudHMudHM/ZjA0ZiJdLCJuYW1lcyI6WyJBUFBfQlVJTERfTUFOSUZFU1QiLCJBUFBfQ0xJRU5UX0lOVEVSTkFMUyIsIkFQUF9QQVRIU19NQU5JRkVTVCIsIkFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVCIsIkFVVE9NQVRJQ19GT05UX09QVElNSVpBVElPTl9NQU5JRkVTVCIsIkJBUlJFTF9PUFRJTUlaQVRJT05fUFJFRklYIiwiQkxPQ0tFRF9QQUdFUyIsIkJVSUxEX0lEX0ZJTEUiLCJCVUlMRF9NQU5JRkVTVCIsIkNMSUVOVF9QVUJMSUNfRklMRVNfUEFUSCIsIkNMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1QiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEgiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4iLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFAiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLIiwiQ09NUElMRVJfSU5ERVhFUyIsIkNPTVBJTEVSX05BTUVTIiwiQ09ORklHX0ZJTEVTIiwiREVGQVVMVF9SVU5USU1FX1dFQlBBQ0siLCJERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCIsIkRFRkFVTFRfU0VSSUZfRk9OVCIsIkRFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QiLCJERVZfTUlERExFV0FSRV9NQU5JRkVTVCIsIkVER0VfUlVOVElNRV9XRUJQQUNLIiwiRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMiLCJFWFBPUlRfREVUQUlMIiwiRVhQT1JUX01BUktFUiIsIkZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1QiLCJHT09HTEVfRk9OVF9QUk9WSURFUiIsIklNQUdFU19NQU5JRkVTVCIsIklOVEVSQ0VQVElPTl9ST1VURV9SRVdSSVRFX01BTklGRVNUIiwiTUlERExFV0FSRV9CVUlMRF9NQU5JRkVTVCIsIk1JRERMRVdBUkVfTUFOSUZFU1QiLCJNSURETEVXQVJFX1JFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJORVhUX0JVSUxUSU5fRE9DVU1FTlQiLCJORVhUX0ZPTlRfTUFOSUZFU1QiLCJPUFRJTUlaRURfRk9OVF9QUk9WSURFUlMiLCJQQUdFU19NQU5JRkVTVCIsIlBIQVNFX0RFVkVMT1BNRU5UX1NFUlZFUiIsIlBIQVNFX0VYUE9SVCIsIlBIQVNFX0lORk8iLCJQSEFTRV9QUk9EVUNUSU9OX0JVSUxEIiwiUEhBU0VfUFJPRFVDVElPTl9TRVJWRVIiLCJQSEFTRV9URVNUIiwiUFJFUkVOREVSX01BTklGRVNUIiwiUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1QiLCJST1VURVNfTUFOSUZFU1QiLCJSU0NfTU9EVUxFX1RZUEVTIiwiU0VSVkVSX0RJUkVDVE9SWSIsIlNFUlZFUl9GSUxFU19NQU5JRkVTVCIsIlNFUlZFUl9QUk9QU19JRCIsIlNFUlZFUl9SRUZFUkVOQ0VfTUFOSUZFU1QiLCJTVEFUSUNfUFJPUFNfSUQiLCJTVEFUSUNfU1RBVFVTX1BBR0VTIiwiU1RSSU5HX0xJVEVSQUxfRFJPUF9CVU5ETEUiLCJTVUJSRVNPVVJDRV9JTlRFR1JJVFlfTUFOSUZFU1QiLCJTWVNURU1fRU5UUllQT0lOVFMiLCJUUkFDRV9PVVRQVVRfVkVSU0lPTiIsIlRVUkJPX1RSQUNFX0RFRkFVTFRfTUVNT1JZX0xJTUlUIiwiVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEUiLCJVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURV9FTlRSWSIsImNsaWVudCIsInNlcnZlciIsImVkZ2VTZXJ2ZXIiLCJTeW1ib2wiLCJ1cmwiLCJwcmVjb25uZWN0IiwibmFtZSIsInhBdmdDaGFyV2lkdGgiLCJhekF2Z1dpZHRoIiwidW5pdHNQZXJFbSIsIlNldCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/error-source.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/error-source.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n decorateServerError: function() {\n return decorateServerError;\n },\n getErrorSource: function() {\n return getErrorSource;\n }\n});\nconst symbolError = Symbol.for(\"NextjsError\");\nfunction getErrorSource(error) {\n return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n Object.defineProperty(error, symbolError, {\n writable: false,\n enumerable: false,\n configurable: false,\n value: type\n });\n} //# sourceMappingURL=error-source.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvZXJyb3Itc291cmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVFnQkEscUJBQW1CO2VBQW5CQTs7SUFOQUMsZ0JBQWM7ZUFBZEE7OztBQUZoQixNQUFNQyxjQUFjQyxPQUFPQyxHQUFHLENBQUM7QUFFeEIsU0FBU0gsZUFBZUksS0FBWTtJQUN6QyxPQUFPQSxLQUFjLENBQUNILFlBQVksSUFBSTtBQUN4QztBQUlPLFNBQVNGLG9CQUFvQkssS0FBWSxFQUFFQyxJQUFxQjtJQUNyRUMsT0FBT0MsY0FBYyxDQUFDSCxPQUFPSCxhQUFhO1FBQ3hDTyxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkMsY0FBYztRQUNkQyxPQUFPTjtJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL2Vycm9yLXNvdXJjZS50cz84NzBmIl0sIm5hbWVzIjpbImRlY29yYXRlU2VydmVyRXJyb3IiLCJnZXRFcnJvclNvdXJjZSIsInN5bWJvbEVycm9yIiwiU3ltYm9sIiwiZm9yIiwiZXJyb3IiLCJ0eXBlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ2YWx1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/error-source.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/escape-regexp.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/escape-regexp.js ***!
|
||
\************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, \"\\\\$&\");\n }\n return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvZXNjYXBlLXJlZ2V4cC5qcyIsIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7Ozs7O3NEQUkxREE7OztlQUFBQTs7O0FBSGhCLE1BQU1DLGNBQWM7QUFDcEIsTUFBTUMsa0JBQWtCO0FBRWpCLFNBQVNGLG1CQUFtQkcsR0FBVztJQUM1QywrR0FBK0c7SUFDL0csSUFBSUYsWUFBWUcsSUFBSSxDQUFDRCxNQUFNO1FBQ3pCLE9BQU9BLElBQUlFLE9BQU8sQ0FBQ0gsaUJBQWlCO0lBQ3RDO0lBQ0EsT0FBT0M7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvZXNjYXBlLXJlZ2V4cC50cz80YTZmIl0sIm5hbWVzIjpbImVzY2FwZVN0cmluZ1JlZ2V4cCIsInJlSGFzUmVnRXhwIiwicmVSZXBsYWNlUmVnRXhwIiwic3RyIiwidGVzdCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/escape-regexp.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n enumerable: true,\n get: function() {\n return HeadManagerContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n HeadManagerContext.displayName = \"HeadManagerContext\";\n} //# sourceMappingURL=head-manager-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFFYUE7OztlQUFBQTs7Ozs0RUFGSztBQUVYLE1BQU1BLHFCQVVSQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0FBRTFCLElBQUlDLElBQXlCLEVBQWM7SUFDekNILG1CQUFtQkksV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS50cz9jMDRjIl0sIm5hbWVzIjpbIkhlYWRNYW5hZ2VyQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/head.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/head.js ***!
|
||
\***************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n defaultHead: function() {\n return defaultHead;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"./node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontextsharedruntime = __webpack_require__(/*! ./amp-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ./head-manager-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"./node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n charSet: \"utf-8\"\n })\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === \"string\" || typeof child === \"number\") {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === \"string\" || typeof fragmentChild === \"number\") {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n \"name\",\n \"httpEquiv\",\n \"charSet\",\n \"itemProp\"\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== \"number\" && h.key.indexOf(\"$\") > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf(\"$\") + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case \"title\":\n case \"base\":\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case \"meta\":\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === \"charSet\") {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== \"name\" || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (false) {}\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === \"script\" && c.props[\"type\"] !== \"application/ld+json\") {\n const srcMessage = c.props[\"src\"] ? '<script> tag with src=\"' + c.props[\"src\"] + '\"' : \"inline <script>\";\n (0, _warnonce.warnOnce)(\"Do not add <script> tags using next/head (see \" + srcMessage + \"). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component\");\n } else if (c.type === \"link\" && c.props[\"rel\"] === \"stylesheet\") {\n (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"' + c.props[\"href\"] + '\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');\n }\n }\n return /*#__PURE__*/ _react.default.cloneElement(c, {\n key\n });\n });\n}\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */ function Head(param) {\n let { children } = param;\n const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);\n const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _ampmode.isInAmpMode)(ampState),\n children: children\n });\n}\n_c = Head;\nconst _default = Head;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head.js.map\nvar _c;\n$RefreshReg$(_c, \"Head\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQXFNQUEsU0FBbUI7OztJQXhMSEM7aUJBQUFBOzs7Ozs7OzsyREFUZ0JDLENBQUEsQ0FBQUMsbUJBQUFBLENBQUE7O3lDQUVKQSxtQkFBQUEsQ0FBQTs7QUFPckIsTUFBQUMsWUFBU0gsbUJBQUFBLENBQVlJLGlGQUFBQTtTQUFBQSxZQUFBQSxTQUFBQTtJQUMxQixJQUFBQSxjQUFhLFFBQUFBLFlBQUE7O21CQUFPQyxHQUFRLElBQUFDLFlBQUFDLEdBQUE7O1FBQVc7S0FDdkM7UUFDRUMsQ0FBQUEsV0FBUzthQUFPQyxJQUFBQSxDQUFLLGtCQUFBSCxZQUFBQyxHQUFBO1lBQVdHLE1BQUFBOztRQUNsQztJQUNBO0lBQ0YsT0FBQUY7QUFFQTtTQUlFRyxpQkFBQUMsSUFBQSxFQUFBQyxLQUFBO0lBQ0EsOEZBQTREO1FBQzFELE9BQU9ELFVBQUFBLFlBQUFBLE9BQUFBLFVBQUFBLFVBQUFBO1FBQ1QsT0FBQUE7SUFDQTtJQUNBLGtDQUF5QkU7UUFDdkJELE1BQUFFLElBQU9ILEtBQUtJLE9BQ1ZDLE9BQUEsQ0FBQUgsUUFBQTtRQUNBSSxPQUFBQSxLQUFBQSxNQUFNQyxDQUVKQyxPQUNFQyxPQUFBQSxDQUNBQyxRQUFBQSxDQUFBQSxPQUFBQSxDQUFBQSxNQUFBQSxLQUFBQSxDQUFBQSxRQUFBQSxFQUFBQSxNQUFBQSxnQkFHU0E7Z0JBR1AsT0FBT0Qsa0JBQUFBLFlBQUFBLE9BQUFBLGtCQUFBQSxVQUFBQTtnQkFDVCxPQUFBQTtZQUNBO1lBRUYsT0FBRUEsYUFBQUwsTUFBQSxDQUFBTTtRQUdSO0lBQ0E7SUFDRixPQUFBVixLQUFBSSxNQUFBLENBQUFIO0FBRUE7TUFBbUJVLFlBQUE7SUFBUTtJQUFhO0lBQVc7SUFBVztDQUU5RDs7Ozs7WUFNUUM7SUFDTixNQUFNQyxPQUFPLElBQUlDO0lBQ2pCLE1BQU1DLE9BQUFBLElBQUFBO0lBQ04s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LFVBQUEsRUFBQ0csaUNBQU1ELGtCQUFBO1dBQ0xFLFdBQUFBLEdBQUFBLENBQUFBLEdBQUFBLFlBQXlCQyxHQUFBQSxFQUFBQSxZQUFBQSxPQUFBQSxFQUFBQTtRQUN6QkoseUJBQWFBO1FBQ2J6RCxhQUFXOEQ7bUJBRVZULENBQUFBLEdBQUFBLFNBQUFBLFdBQUFBLEVBQUFBOztJQUdQOztLQVpnQkEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL2hlYWQudHN4PzM4ODkiXSwibmFtZXMiOlsiZXhwb3J0cyIsImRlZmF1bHRIZWFkIiwiXyIsInJlcXVpcmUiLCJfd2Fybm9uY2UiLCJpbkFtcE1vZGUiLCJjaGFyU2V0IiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJoZWFkIiwibmFtZSIsImNvbnRlbnQiLCJvbmx5UmVhY3RFbGVtZW50IiwibGlzdCIsImNoaWxkIiwiRnJhZ21lbnQiLCJ0eXBlIiwiY29uY2F0IiwiZGVmYXVsdCIsIlJlYWN0IiwiQ2hpbGRyZW4iLCJfcmVhY3QiLCJmcmFnbWVudExpc3QiLCJmcmFnbWVudENoaWxkIiwiTUVUQVRZUEVTIiwia2V5cyIsInRhZ3MiLCJTZXQiLCJtZXRhVHlwZXMiLCJtZXRhQ2F0ZWdvcmllcyIsImgiLCJpc1VuaXF1ZSIsImhhc0tleSIsImtleSIsImluZGV4T2YiLCJhZGQiLCJpIiwibWV0YXR5cGUiLCJsZW4iLCJoYXNPd25Qcm9wZXJ0eSIsImNhdGVnb3JpZXMiLCJoYXMiLCJjYXRlZ29yeSIsInByb3BzIiwiaGVhZENoaWxkcmVuRWxlbWVudHMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjIiwiX19ORVhUX09QVElNSVpFX0ZPTlRTIiwic29tZSIsInVybCIsIm5ld1Byb3BzIiwic3RhcnRzV2l0aCIsInVuZGVmaW5lZCIsImNsb25lRWxlbWVudCIsInNyY01lc3NhZ2UiLCJ3YXJuT25jZSIsImNoaWxkcmVuIiwicGFyYW0iLCJhbXBTdGF0ZSIsInVzZUNvbnRleHQiLCJoZWFkTWFuYWdlciIsIkhlYWRNYW5hZ2VyQ29udGV4dCIsIkVmZmVjdCIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwicmVkdWNlQ29tcG9uZW50cyIsImlzSW5BbXBNb2RlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/head.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PathParamsContext: function() {\n return PathParamsContext;\n },\n PathnameContext: function() {\n return PathnameContext;\n },\n SearchParamsContext: function() {\n return SearchParamsContext;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n SearchParamsContext.displayName = \"SearchParamsContext\";\n PathnameContext.displayName = \"PathnameContext\";\n PathParamsContext.displayName = \"PathParamsContext\";\n} //# sourceMappingURL=hooks-client-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFPYUEsU0FBQUE7dUJBQUFBOztJQURBQztxQkFBQUE7O0lBREFDO3lCQUFBQTs7OztBQUFOLE1BQU1BLFNBQUFBLG1CQUFBQSxDQUFBQSw0Q0FBQUE7QUFDTixNQUFNRCxzQkFBa0JFLENBQUFBLEdBQUFBLE9BQUFBLGFBQTZCO0FBQ3JELE1BQU1ILGtCQUFBQSxDQUFBQSxHQUFvQkcsT0FBQUEsYUFBQUEsRUFBYTtBQUU5QyxNQUFJQyxvQkFBb0IsSUFBS0MsT0FBQUYsYUFBYztJQUN6Q0QsSUFBb0JJLEVBQWM7SUFDbENMLG9CQUFnQkssV0FBYztJQUM5Qk4sZ0JBQUFBLFdBQWtCTSxHQUFXO0lBQy9CTixrQkFBQU0sV0FBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHM/ZTU5NyJdLCJuYW1lcyI6WyJQYXRoUGFyYW1zQ29udGV4dCIsIlBhdGhuYW1lQ29udGV4dCIsIlNlYXJjaFBhcmFtc0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsIl9yZWFjdCIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js ***!
|
||
\*************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizeLocalePath\", ({\n enumerable: true,\n get: function() {\n return normalizeLocalePath;\n }\n}));\nfunction normalizeLocalePath(pathname, locales) {\n let detectedLocale;\n // first item will be empty string from splitting at first char\n const pathnameParts = pathname.split(\"/\");\n (locales || []).some((locale)=>{\n if (pathnameParts[1] && pathnameParts[1].toLowerCase() === locale.toLowerCase()) {\n detectedLocale = locale;\n pathnameParts.splice(1, 1);\n pathname = pathnameParts.join(\"/\") || \"/\";\n return true;\n }\n return false;\n });\n return {\n pathname,\n detectedLocale\n };\n} //# sourceMappingURL=normalize-locale-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaTE4bi9ub3JtYWxpemUtbG9jYWxlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFjZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLG9CQUNkQyxRQUFnQixFQUNoQkMsT0FBa0I7SUFFbEIsSUFBSUM7SUFDSiwrREFBK0Q7SUFDL0QsTUFBTUMsZ0JBQWdCSCxTQUFTSSxLQUFLLENBQUM7SUFFbkNILENBQUFBLFdBQVcsRUFBRSxFQUFFSSxJQUFJLENBQUMsQ0FBQ0M7UUFDckIsSUFDRUgsYUFBYSxDQUFDLEVBQUUsSUFDaEJBLGFBQWEsQ0FBQyxFQUFFLENBQUNJLFdBQVcsT0FBT0QsT0FBT0MsV0FBVyxJQUNyRDtZQUNBTCxpQkFBaUJJO1lBQ2pCSCxjQUFjSyxNQUFNLENBQUMsR0FBRztZQUN4QlIsV0FBV0csY0FBY00sSUFBSSxDQUFDLFFBQVE7WUFDdEMsT0FBTztRQUNUO1FBQ0EsT0FBTztJQUNUO0lBRUEsT0FBTztRQUNMVDtRQUNBRTtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoLnRzP2M0OWUiXSwibmFtZXMiOlsibm9ybWFsaXplTG9jYWxlUGF0aCIsInBhdGhuYW1lIiwibG9jYWxlcyIsImRldGVjdGVkTG9jYWxlIiwicGF0aG5hbWVQYXJ0cyIsInNwbGl0Iiwic29tZSIsImxvY2FsZSIsInRvTG93ZXJDYXNlIiwic3BsaWNlIiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ImageConfigContext\", ({\n enumerable: true,\n get: function() {\n return ImageConfigContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _imageconfig = __webpack_require__(/*! ./image-config */ \"./node_modules/next/dist/shared/lib/image-config.js\");\nconst ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault);\nif (true) {\n ImageConfigContext.displayName = \"ImageConfigContext\";\n} //# sourceMappingURL=image-config-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFJYUE7OztlQUFBQTs7Ozs0RUFKSzt5Q0FFaUI7QUFFNUIsTUFBTUEscUJBQ1hDLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUFzQkMsYUFBQUEsa0JBQWtCO0FBRTdELElBQUlDLElBQXlCLEVBQWM7SUFDekNKLG1CQUFtQkssV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZS50cz8yZWRhIl0sIm5hbWVzIjpbIkltYWdlQ29uZmlnQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsImltYWdlQ29uZmlnRGVmYXVsdCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/image-config.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-config.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n VALID_LOADERS: function() {\n return VALID_LOADERS;\n },\n imageConfigDefault: function() {\n return imageConfigDefault;\n }\n});\nconst VALID_LOADERS = [\n \"default\",\n \"imgix\",\n \"cloudinary\",\n \"akamai\",\n \"custom\"\n];\nconst imageConfigDefault = {\n deviceSizes: [\n 640,\n 750,\n 828,\n 1080,\n 1200,\n 1920,\n 2048,\n 3840\n ],\n imageSizes: [\n 16,\n 32,\n 48,\n 64,\n 96,\n 128,\n 256,\n 384\n ],\n path: \"/_next/image\",\n loader: \"default\",\n loaderFile: \"\",\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 60,\n formats: [\n \"image/webp\"\n ],\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: \"script-src 'none'; frame-src 'none'; sandbox;\",\n contentDispositionType: \"inline\",\n localPatterns: undefined,\n remotePatterns: [],\n unoptimized: false\n}; //# sourceMappingURL=image-config.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFhQSxlQUFhO2VBQWJBOztJQThIQUMsb0JBQWtCO2VBQWxCQTs7O0FBOUhOLE1BQU1ELGdCQUFnQjtJQUMzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUF3SE0sTUFBTUMscUJBQTBDO0lBQ3JEQyxhQUFhO1FBQUM7UUFBSztRQUFLO1FBQUs7UUFBTTtRQUFNO1FBQU07UUFBTTtLQUFLO0lBQzFEQyxZQUFZO1FBQUM7UUFBSTtRQUFJO1FBQUk7UUFBSTtRQUFJO1FBQUs7UUFBSztLQUFJO0lBQy9DQyxNQUFNO0lBQ05DLFFBQVE7SUFDUkMsWUFBWTtJQUNaQyxTQUFTLEVBQUU7SUFDWEMscUJBQXFCO0lBQ3JCQyxpQkFBaUI7SUFDakJDLFNBQVM7UUFBQztLQUFhO0lBQ3ZCQyxxQkFBcUI7SUFDckJDLHVCQUF3QjtJQUN4QkMsd0JBQXdCO0lBQ3hCQyxlQUFlQztJQUNmQyxnQkFBZ0IsRUFBRTtJQUNsQkMsYUFBYTtBQUNmIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcudHM/MDEyOCJdLCJuYW1lcyI6WyJWQUxJRF9MT0FERVJTIiwiaW1hZ2VDb25maWdEZWZhdWx0IiwiZGV2aWNlU2l6ZXMiLCJpbWFnZVNpemVzIiwicGF0aCIsImxvYWRlciIsImxvYWRlckZpbGUiLCJkb21haW5zIiwiZGlzYWJsZVN0YXRpY0ltYWdlcyIsIm1pbmltdW1DYWNoZVRUTCIsImZvcm1hdHMiLCJkYW5nZXJvdXNseUFsbG93U1ZHIiwiY29udGVudFNlY3VyaXR5UG9saWN5IiwiY29udGVudERpc3Bvc2l0aW9uVHlwZSIsImxvY2FsUGF0dGVybnMiLCJ1bmRlZmluZWQiLCJyZW1vdGVQYXR0ZXJucyIsInVub3B0aW1pemVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/image-config.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/is-plain-object.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/is-plain-object.js ***!
|
||
\**************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== \"[object Object]\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty(\"isPrototypeOf\");\n} //# sourceMappingURL=is-plain-object.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFnQkEscUJBQW1CO2VBQW5CQTs7SUFJQUMsZUFBYTtlQUFiQTs7O0FBSlQsU0FBU0Qsb0JBQW9CRSxLQUFVO0lBQzVDLE9BQU9DLE9BQU9DLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUNKO0FBQ3hDO0FBRU8sU0FBU0QsY0FBY0MsS0FBVTtJQUN0QyxJQUFJRixvQkFBb0JFLFdBQVcsbUJBQW1CO1FBQ3BELE9BQU87SUFDVDtJQUVBLE1BQU1FLFlBQVlELE9BQU9JLGNBQWMsQ0FBQ0w7SUFFeEM7Ozs7Ozs7O0dBUUMsR0FDRCxPQUFPRSxjQUFjLFFBQVFBLFVBQVVJLGNBQWMsQ0FBQztBQUN4RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0LnRzPzllNTEiXSwibmFtZXMiOlsiZ2V0T2JqZWN0Q2xhc3NMYWJlbCIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImdldFByb3RvdHlwZU9mIiwiaGFzT3duUHJvcGVydHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/is-plain-object.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***!
|
||
\**************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = \"BAILOUT_TO_CLIENT_SIDE_RENDERING\";\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason);\n this.reason = reason;\n this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyLmpzIiwibWFwcGluZ3MiOiJBQUFBLCtHQUErRzs7Ozs7Ozs7Ozs7OztJQUlsR0EsbUJBQWlCO2VBQWpCQTs7SUFTR0MscUJBQW1CO2VBQW5CQTs7O0FBWmhCLE1BQU1DLGlCQUFpQjtBQUdoQixNQUFNRiwwQkFBMEJHO0lBR3JDQyxZQUFZQyxNQUE4QixDQUFFO1FBQzFDLEtBQUssQ0FBQyx3Q0FBc0NBO2FBRGxCQSxNQUFBQSxHQUFBQTthQUZaQyxNQUFBQSxHQUFTSjtJQUl6QjtBQUNGO0FBR08sU0FBU0Qsb0JBQW9CTSxHQUFZO0lBQzlDLElBQUksT0FBT0EsUUFBUSxZQUFZQSxRQUFRLFFBQVEsQ0FBRSxhQUFZQSxHQUFBQSxHQUFNO1FBQ2pFLE9BQU87SUFDVDtJQUVBLE9BQU9BLElBQUlELE1BQU0sS0FBS0o7QUFDeEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzci50cz8xMjM4Il0sIm5hbWVzIjpbIkJhaWxvdXRUb0NTUkVycm9yIiwiaXNCYWlsb3V0VG9DU1JFcnJvciIsIkJBSUxPVVRfVE9fQ1NSIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsInJlYXNvbiIsImRpZ2VzdCIsImVyciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/magic-identifier.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/magic-identifier.js ***!
|
||
\***************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n MAGIC_IDENTIFIER_REGEX: function() {\n return MAGIC_IDENTIFIER_REGEX;\n },\n decodeMagicIdentifier: function() {\n return decodeMagicIdentifier;\n }\n});\nfunction decodeHex(hexStr) {\n if (hexStr.trim() === \"\") {\n throw new Error(\"can't decode empty hex\");\n }\n const num = parseInt(hexStr, 16);\n if (isNaN(num)) {\n throw new Error(\"invalid hex: `\" + hexStr + \"`\");\n }\n return String.fromCodePoint(num);\n}\nvar Mode;\nconst DECODE_REGEX = /^__TURBOPACK__([a-zA-Z0-9_$]+)__$/;\nfunction decodeMagicIdentifier(identifier) {\n const matches = identifier.match(DECODE_REGEX);\n if (!matches) {\n return identifier;\n }\n const inner = matches[1];\n let output = \"\";\n let mode = 0;\n let buffer = \"\";\n for(let i = 0; i < inner.length; i++){\n const char = inner[i];\n if (mode === 0) {\n if (char === \"_\") {\n mode = 1;\n } else if (char === \"$\") {\n mode = 2;\n } else {\n output += char;\n }\n } else if (mode === 1) {\n if (char === \"_\") {\n output += \" \";\n mode = 0;\n } else if (char === \"$\") {\n output += \"_\";\n mode = 2;\n } else {\n output += char;\n mode = 0;\n }\n } else if (mode === 2) {\n if (buffer.length === 2) {\n output += decodeHex(buffer);\n buffer = \"\";\n }\n if (char === \"_\") {\n if (buffer !== \"\") {\n throw new Error(\"invalid hex: `\" + buffer + \"`\");\n }\n mode = 3;\n } else if (char === \"$\") {\n if (buffer !== \"\") {\n throw new Error(\"invalid hex: `\" + buffer + \"`\");\n }\n mode = 0;\n } else {\n buffer += char;\n }\n } else if (mode === 3) {\n if (char === \"_\") {\n throw new Error(\"invalid hex: `\" + (buffer + char) + \"`\");\n } else if (char === \"$\") {\n output += decodeHex(buffer);\n buffer = \"\";\n mode = 0;\n } else {\n buffer += char;\n }\n }\n }\n return output;\n}\nconst MAGIC_IDENTIFIER_REGEX = /__TURBOPACK__[a-zA-Z0-9_$]+__/g; //# sourceMappingURL=magic-identifier.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbWFnaWMtaWRlbnRpZmllci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUE4RmFBLHdCQUFzQjtlQUF0QkE7O0lBeEVHQyx1QkFBcUI7ZUFBckJBOzs7QUF0QmhCLFNBQVNDLFVBQVVDLE1BQWM7SUFDL0IsSUFBSUEsT0FBT0MsSUFBSSxPQUFPLElBQUk7UUFDeEIsTUFBTSxJQUFJQyxNQUFNO0lBQ2xCO0lBRUEsTUFBTUMsTUFBTUMsU0FBU0osUUFBUTtJQUM3QixJQUFJSyxNQUFNRixNQUFNO1FBQ2QsTUFBTSxJQUFJRCxNQUFNLG1CQUFrQkYsU0FBTztJQUMzQztJQUVBLE9BQU9NLE9BQU9DLGFBQWEsQ0FBQ0o7QUFDOUI7O0FBU0EsTUFBTUssZUFBZTtBQUVkLFNBQVNWLHNCQUFzQlcsVUFBa0I7SUFDdEQsTUFBTUMsVUFBVUQsV0FBV0UsS0FBSyxDQUFDSDtJQUNqQyxJQUFJLENBQUNFLFNBQVM7UUFDWixPQUFPRDtJQUNUO0lBRUEsTUFBTUcsUUFBUUYsT0FBTyxDQUFDLEVBQUU7SUFFeEIsSUFBSUcsU0FBUztJQUViLElBQUlDLE9BQUFBO0lBQ0osSUFBSUMsU0FBUztJQUNiLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJSixNQUFNSyxNQUFNLEVBQUVELElBQUs7UUFDckMsTUFBTUUsT0FBT04sS0FBSyxDQUFDSSxFQUFFO1FBRXJCLElBQUlGLFNBQUFBLEdBQW9CO1lBQ3RCLElBQUlJLFNBQVMsS0FBSztnQkFDaEJKLE9BQUFBO1lBQ0YsT0FBTyxJQUFJSSxTQUFTLEtBQUs7Z0JBQ3ZCSixPQUFBQTtZQUNGLE9BQU87Z0JBQ0xELFVBQVVLO1lBQ1o7UUFDRixPQUFPLElBQUlKLFNBQUFBLEdBQTBCO1lBQ25DLElBQUlJLFNBQVMsS0FBSztnQkFDaEJMLFVBQVU7Z0JBQ1ZDLE9BQUFBO1lBQ0YsT0FBTyxJQUFJSSxTQUFTLEtBQUs7Z0JBQ3ZCTCxVQUFVO2dCQUNWQyxPQUFBQTtZQUNGLE9BQU87Z0JBQ0xELFVBQVVLO2dCQUNWSixPQUFBQTtZQUNGO1FBQ0YsT0FBTyxJQUFJQSxTQUFBQSxHQUFtQjtZQUM1QixJQUFJQyxPQUFPRSxNQUFNLEtBQUssR0FBRztnQkFDdkJKLFVBQVVkLFVBQVVnQjtnQkFDcEJBLFNBQVM7WUFDWDtZQUVBLElBQUlHLFNBQVMsS0FBSztnQkFDaEIsSUFBSUgsV0FBVyxJQUFJO29CQUNqQixNQUFNLElBQUliLE1BQU0sbUJBQWtCYSxTQUFPO2dCQUMzQztnQkFFQUQsT0FBQUE7WUFDRixPQUFPLElBQUlJLFNBQVMsS0FBSztnQkFDdkIsSUFBSUgsV0FBVyxJQUFJO29CQUNqQixNQUFNLElBQUliLE1BQU0sbUJBQWtCYSxTQUFPO2dCQUMzQztnQkFFQUQsT0FBQUE7WUFDRixPQUFPO2dCQUNMQyxVQUFVRztZQUNaO1FBQ0YsT0FBTyxJQUFJSixTQUFBQSxHQUF1QjtZQUNoQyxJQUFJSSxTQUFTLEtBQUs7Z0JBQ2hCLE1BQU0sSUFBSWhCLE1BQU0sbUJBQWtCYSxDQUFBQSxTQUFTRyxJQUFBQSxJQUFLO1lBQ2xELE9BQU8sSUFBSUEsU0FBUyxLQUFLO2dCQUN2QkwsVUFBVWQsVUFBVWdCO2dCQUNwQkEsU0FBUztnQkFFVEQsT0FBQUE7WUFDRixPQUFPO2dCQUNMQyxVQUFVRztZQUNaO1FBQ0Y7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFTyxNQUFNaEIseUJBQXlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9tYWdpYy1pZGVudGlmaWVyLnRzP2FkNzMiXSwibmFtZXMiOlsiTUFHSUNfSURFTlRJRklFUl9SRUdFWCIsImRlY29kZU1hZ2ljSWRlbnRpZmllciIsImRlY29kZUhleCIsImhleFN0ciIsInRyaW0iLCJFcnJvciIsIm51bSIsInBhcnNlSW50IiwiaXNOYU4iLCJTdHJpbmciLCJmcm9tQ29kZVBvaW50IiwiREVDT0RFX1JFR0VYIiwiaWRlbnRpZmllciIsIm1hdGNoZXMiLCJtYXRjaCIsImlubmVyIiwib3V0cHV0IiwibW9kZSIsImJ1ZmZlciIsImkiLCJsZW5ndGgiLCJjaGFyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/magic-identifier.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/mitt.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/mitt.js ***!
|
||
\***************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/*\nMIT License\n\nCopyright (c) Jason Miller (https://jasonformat.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/ // This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js\n// It's been edited for the needs of this script\n// See the LICENSE at the top of the file\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return mitt;\n }\n}));\nfunction mitt() {\n const all = Object.create(null);\n return {\n on (type, handler) {\n (all[type] || (all[type] = [])).push(handler);\n },\n off (type, handler) {\n if (all[type]) {\n all[type].splice(all[type].indexOf(handler) >>> 0, 1);\n }\n },\n emit (type) {\n for(var _len = arguments.length, evts = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n evts[_key - 1] = arguments[_key];\n }\n (all[type] || []).slice().map((handler)=>{\n handler(...evts);\n });\n }\n };\n} //# sourceMappingURL=mitt.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbWl0dC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQVVBLEdBRUEsbUZBQW1GO0FBQ25GLGdEQUFnRDtBQUNoRCx5Q0FBeUM7Ozs7OzJDQVV6Qzs7O2VBQXdCQTs7O0FBQVQsU0FBU0E7SUFDdEIsTUFBTUMsTUFBa0NDLE9BQU9DLE1BQU0sQ0FBQztJQUV0RCxPQUFPO1FBQ0xDLElBQUdDLElBQVksRUFBRUMsT0FBZ0I7WUFDN0JMLENBQUFBLEdBQUcsQ0FBQ0ksS0FBSyxJQUFLSixDQUFBQSxHQUFHLENBQUNJLEtBQUssR0FBRyxFQUFFLEdBQUdFLElBQUksQ0FBQ0Q7UUFDeEM7UUFFQUUsS0FBSUgsSUFBWSxFQUFFQyxPQUFnQjtZQUNoQyxJQUFJTCxHQUFHLENBQUNJLEtBQUssRUFBRTtnQkFDYkosR0FBRyxDQUFDSSxLQUFLLENBQUNJLE1BQU0sQ0FBQ1IsR0FBRyxDQUFDSSxLQUFLLENBQUNLLE9BQU8sQ0FBQ0osYUFBYSxHQUFHO1lBQ3JEO1FBQ0Y7UUFFQUssTUFBS04sSUFBWTtZQUFFLFFBQUFPLE9BQUFDLFVBQUFDLE1BQUEsRUFBQUMsT0FBQSxJQUFBQyxNQUFBSixPQUFBLElBQUFBLE9BQUEsUUFBQUssT0FBQSxHQUFBQSxPQUFBTCxNQUFBSyxPQUFBO2dCQUFHRixJQUFBQSxDQUFIRSxPQUFBLEtBQUFKLFNBQUEsQ0FBQUksS0FBYzs7WUFFN0JoQixDQUFBQSxHQUFHLENBQUNJLEtBQUssSUFBSSxFQUFFLEVBQUVhLEtBQUssR0FBR0MsR0FBRyxDQUFDLENBQUNiO2dCQUM5QkEsV0FBV1M7WUFDYjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvbWl0dC50cz81MTQzIl0sIm5hbWVzIjpbIm1pdHQiLCJhbGwiLCJPYmplY3QiLCJjcmVhdGUiLCJvbiIsInR5cGUiLCJoYW5kbGVyIiwicHVzaCIsIm9mZiIsInNwbGljZSIsImluZGV4T2YiLCJlbWl0IiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImV2dHMiLCJBcnJheSIsIl9rZXkiLCJzbGljZSIsIm1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/mitt.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/modern-browserslist-target.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/modern-browserslist-target.js ***!
|
||
\*************************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n \"chrome 64\",\n \"edge 79\",\n \"firefox 67\",\n \"opera 51\",\n \"safari 12\"\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiLCJtYXBwaW5ncyI6IkFBQUEsb0ZBQW9GO0FBQ3BGLGtFQUFrRTtBQUNsRTs7Ozs7Q0FLQztBQUNELE1BQU1BLDZCQUE2QjtJQUNqQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFREMsT0FBT0MsT0FBTyxHQUFHRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanM/NDVjNyJdLCJuYW1lcyI6WyJNT0RFUk5fQlJPV1NFUlNMSVNUX1RBUkdFVCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/modern-browserslist-target.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/normalized-asset-prefix.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/normalized-asset-prefix.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizedAssetPrefix\", ({\n enumerable: true,\n get: function() {\n return normalizedAssetPrefix;\n }\n}));\nfunction normalizedAssetPrefix(assetPrefix) {\n // remove all leading slashes and trailing slashes\n const escapedAssetPrefix = (assetPrefix == null ? void 0 : assetPrefix.replace(/^\\/+|\\/+$/g, \"\")) || false;\n // if an assetPrefix was '/', we return empty string\n // because it could be an unnecessary trailing slash\n if (!escapedAssetPrefix) {\n return \"\";\n }\n if (URL.canParse(escapedAssetPrefix)) {\n const url = new URL(escapedAssetPrefix).toString();\n return url.endsWith(\"/\") ? url.slice(0, -1) : url;\n }\n // assuming assetPrefix here is a pathname-style,\n // restore the leading slash\n return \"/\" + escapedAssetPrefix;\n} //# sourceMappingURL=normalized-asset-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbm9ybWFsaXplZC1hc3NldC1wcmVmaXguanMiLCJtYXBwaW5ncyI6Ijs7Ozt5REFBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLHNCQUFzQkMsV0FBK0I7SUFDbkUsa0RBQWtEO0lBQ2xELE1BQU1DLHFCQUFxQkQsQ0FBQUEsZUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsWUFBYUUsT0FBTyxDQUFDLGNBQWMsUUFBTztJQUVyRSxvREFBb0Q7SUFDcEQsb0RBQW9EO0lBQ3BELElBQUksQ0FBQ0Qsb0JBQW9CO1FBQ3ZCLE9BQU87SUFDVDtJQUVBLElBQUlFLElBQUlDLFFBQVEsQ0FBQ0gscUJBQXFCO1FBQ3BDLE1BQU1JLE1BQU0sSUFBSUYsSUFBSUYsb0JBQW9CSyxRQUFRO1FBQ2hELE9BQU9ELElBQUlFLFFBQVEsQ0FBQyxPQUFPRixJQUFJRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUtIO0lBQ2hEO0lBRUEsaURBQWlEO0lBQ2pELDRCQUE0QjtJQUM1QixPQUFPLE1BQUlKO0FBQ2IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL25vcm1hbGl6ZWQtYXNzZXQtcHJlZml4LnRzPzM0YmMiXSwibmFtZXMiOlsibm9ybWFsaXplZEFzc2V0UHJlZml4IiwiYXNzZXRQcmVmaXgiLCJlc2NhcGVkQXNzZXRQcmVmaXgiLCJyZXBsYWNlIiwiVVJMIiwiY2FuUGFyc2UiLCJ1cmwiLCJ0b1N0cmluZyIsImVuZHNXaXRoIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/normalized-asset-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***!
|
||
\******************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n enumerable: true,\n get: function() {\n return denormalizePagePath;\n }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n let _page = (0, _normalizepathsep.normalizePathSep)(page);\n return _page.startsWith(\"/index/\") && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== \"/index\" ? _page : \"/\";\n} //# sourceMappingURL=denormalize-page-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQVdnQkE7OztlQUFBQTs7O21DQVhlOzhDQUNFO0FBVTFCLFNBQVNBLG9CQUFvQkMsSUFBWTtJQUM5QyxJQUFJQyxRQUFRQyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQWdCLEVBQUNGO0lBQzdCLE9BQU9DLE1BQU1FLFVBQVUsQ0FBQyxjQUFjLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGNBQWMsRUFBQ0gsU0FDbERBLE1BQU1JLEtBQUssQ0FBQyxLQUNaSixVQUFVLFdBQ1ZBLFFBQ0E7QUFDTiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC50cz9mZDMxIl0sIm5hbWVzIjpbImRlbm9ybWFsaXplUGFnZVBhdGgiLCJwYWdlIiwiX3BhZ2UiLCJub3JtYWxpemVQYXRoU2VwIiwic3RhcnRzV2l0aCIsImlzRHluYW1pY1JvdXRlIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***!
|
||
\*****************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith(\"/\") ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQzs7OztzREFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsbUJBQW1CQyxJQUFZO0lBQzdDLE9BQU9BLEtBQUtDLFVBQVUsQ0FBQyxPQUFPRCxPQUFPLE1BQUlBO0FBQzNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2gudHM/NWY4NSJdLCJuYW1lcyI6WyJlbnN1cmVMZWFkaW5nU2xhc2giLCJwYXRoIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***!
|
||
\***************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n enumerable: true,\n get: function() {\n return normalizePathSep;\n }\n}));\nfunction normalizePathSep(path) {\n return path.replace(/\\\\/g, \"/\");\n} //# sourceMappingURL=normalize-path-sep.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYXRoLXNlcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDOzs7O29EQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxpQkFBaUJDLElBQVk7SUFDM0MsT0FBT0EsS0FBS0MsT0FBTyxDQUFDLE9BQU87QUFDN0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3BhZ2UtcGF0aC9ub3JtYWxpemUtcGF0aC1zZXAudHM/MDk4NyJdLCJuYW1lcyI6WyJub3JtYWxpemVQYXRoU2VwIiwicGF0aCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router-context.shared-runtime.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***!
|
||
\****************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = \"RouterContext\";\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFHYUE7OztlQUFBQTs7Ozs0RUFISztBQUdYLE1BQU1BLGdCQUFnQkMsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQW9CO0FBRXBFLElBQUlDLElBQXlCLEVBQWM7SUFDekNILGNBQWNJLFdBQVcsR0FBRztBQUM5QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHM/OTdhNiJdLCJuYW1lcyI6WyJSb3V0ZXJDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/adapters.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/adapters.js ***!
|
||
\**************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PathnameContextProviderAdapter: function() {\n return PathnameContextProviderAdapter;\n },\n adaptForAppRouterInstance: function() {\n return adaptForAppRouterInstance;\n },\n adaptForPathParams: function() {\n return adaptForPathParams;\n },\n adaptForSearchParams: function() {\n return adaptForSearchParams;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../hooks-client-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _utils = __webpack_require__(/*! ./utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _aspathtosearchparams = __webpack_require__(/*! ./utils/as-path-to-search-params */ \"./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction adaptForAppRouterInstance(pagesRouter) {\n return {\n back () {\n pagesRouter.back();\n },\n forward () {\n pagesRouter.forward();\n },\n refresh () {\n pagesRouter.reload();\n },\n fastRefresh () {},\n push (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void pagesRouter.push(href, undefined, {\n scroll\n });\n },\n replace (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void pagesRouter.replace(href, undefined, {\n scroll\n });\n },\n prefetch (href) {\n void pagesRouter.prefetch(href);\n }\n };\n}\nfunction adaptForSearchParams(router) {\n if (!router.isReady || !router.query) {\n return new URLSearchParams();\n }\n return (0, _aspathtosearchparams.asPathToSearchParams)(router.asPath);\n}\nfunction adaptForPathParams(router) {\n if (!router.isReady || !router.query) {\n return null;\n }\n const pathParams = {};\n const routeRegex = (0, _routeregex.getRouteRegex)(router.pathname);\n const keys = Object.keys(routeRegex.groups);\n for (const key of keys){\n pathParams[key] = router.query[key];\n }\n return pathParams;\n}\nfunction PathnameContextProviderAdapter(param) {\n let { children, router, ...props } = param;\n const ref = (0, _react.useRef)(props.isAutoExport);\n const value = (0, _react.useMemo)(()=>{\n // isAutoExport is only ever `true` on the first render from the server,\n // so reset it to `false` after we read it for the first time as `true`. If\n // we don't use the value, then we don't need it.\n const isAutoExport = ref.current;\n if (isAutoExport) {\n ref.current = false;\n }\n // When the route is a dynamic route, we need to do more processing to\n // determine if we need to stop showing the pathname.\n if ((0, _utils.isDynamicRoute)(router.pathname)) {\n // When the router is rendering the fallback page, it can't possibly know\n // the path, so return `null` here. Read more about fallback pages over\n // at:\n // https://nextjs.org/docs/api-reference/data-fetching/get-static-paths#fallback-pages\n if (router.isFallback) {\n return null;\n }\n // When `isAutoExport` is true, meaning this is a page page has been\n // automatically statically optimized, and the router is not ready, then\n // we can't know the pathname yet. Read more about automatic static\n // optimization at:\n // https://nextjs.org/docs/advanced-features/automatic-static-optimization\n if (isAutoExport && !router.isReady) {\n return null;\n }\n }\n // The `router.asPath` contains the pathname seen by the browser (including\n // any query strings), so it should have that stripped. Read more about the\n // `asPath` option over at:\n // https://nextjs.org/docs/api-reference/next/router#router-object\n let url;\n try {\n url = new URL(router.asPath, \"http://f\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n return \"/\";\n }\n return url.pathname;\n }, [\n router.asPath,\n router.isFallback,\n router.isReady,\n router.pathname\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: value,\n children: children\n });\n} //# sourceMappingURL=adapters.js.map\n_c = PathnameContextProviderAdapter;\nvar _c;\n$RefreshReg$(_c, \"PathnameContextProviderAdapter\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL2FkYXB0ZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQW9FZ0JBLGdDQUE4QjtlQUE5QkE7O0lBekRBQywyQkFBeUI7ZUFBekJBOztJQTBDQUMsb0JBQWtCO2VBQWxCQTs7SUFWQUMsc0JBQW9CO2VBQXBCQTs7Ozs7NkVBdkN1Qjs2REFDUDttQ0FDRDtrREFDTTt3Q0FDUDtBQUd2QixTQUFTRiwwQkFDZEcsV0FBdUI7SUFFdkIsT0FBTztRQUNMQztZQUNFRCxZQUFZQyxJQUFJO1FBQ2xCO1FBQ0FDO1lBQ0VGLFlBQVlFLE9BQU87UUFDckI7UUFDQUM7WUFDRUgsWUFBWUksTUFBTTtRQUNwQjtRQUNBQyxnQkFBZTtRQUNmQyxNQUFLQyxJQUFJLEVBQUVDLEtBQUE7WUFBQSxNQUFFQyxNQUFNLEVBQUUsR0FBVkQsVUFBQSxTQUFhLENBQUMsSUFBZEE7WUFDVCxLQUFLUixZQUFZTSxJQUFJLENBQUNDLE1BQU1HLFdBQVc7Z0JBQUVEO1lBQU87UUFDbEQ7UUFDQUUsU0FBUUosSUFBSSxFQUFFQyxLQUFBO1lBQUEsTUFBRUMsTUFBTSxFQUFFLEdBQVZELFVBQUEsU0FBYSxDQUFDLElBQWRBO1lBQ1osS0FBS1IsWUFBWVcsT0FBTyxDQUFDSixNQUFNRyxXQUFXO2dCQUFFRDtZQUFPO1FBQ3JEO1FBQ0FHLFVBQVNMLElBQUk7WUFDWCxLQUFLUCxZQUFZWSxRQUFRLENBQUNMO1FBQzVCO0lBQ0Y7QUFDRjtBQVFPLFNBQVNSLHFCQUNkYyxNQUF3RDtJQUV4RCxJQUFJLENBQUNBLE9BQU9DLE9BQU8sSUFBSSxDQUFDRCxPQUFPRSxLQUFLLEVBQUU7UUFDcEMsT0FBTyxJQUFJQztJQUNiO0lBRUEsT0FBT0MsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFvQixFQUFDSixPQUFPSyxNQUFNO0FBQzNDO0FBRU8sU0FBU3BCLG1CQUNkZSxNQUFxRTtJQUVyRSxJQUFJLENBQUNBLE9BQU9DLE9BQU8sSUFBSSxDQUFDRCxPQUFPRSxLQUFLLEVBQUU7UUFDcEMsT0FBTztJQUNUO0lBQ0EsTUFBTUksYUFBcUIsQ0FBQztJQUM1QixNQUFNQyxhQUFhQyxDQUFBQSxHQUFBQSxZQUFBQSxhQUFhLEVBQUNSLE9BQU9TLFFBQVE7SUFDaEQsTUFBTUMsT0FBT0MsT0FBT0QsSUFBSSxDQUFDSCxXQUFXSyxNQUFNO0lBQzFDLEtBQUssTUFBTUMsT0FBT0gsS0FBTTtRQUN0QkosVUFBVSxDQUFDTyxJQUFJLEdBQUdiLE9BQU9FLEtBQUssQ0FBQ1csSUFBSTtJQUNyQztJQUNBLE9BQU9QO0FBQ1Q7QUFFTyxTQUFTdkIsK0JBQStCWSxLQU83QztJQVA2QyxNQUM3Q21CLFFBQVEsRUFDUmQsTUFBTSxFQUNOLEdBQUdlLE9BSUgsR0FQNkNwQjtJQVE3QyxNQUFNcUIsTUFBTUMsQ0FBQUEsR0FBQUEsT0FBQUEsTUFBTSxFQUFDRixNQUFNRyxZQUFZO0lBQ3JDLE1BQU1DLFFBQVFDLENBQUFBLEdBQUFBLE9BQUFBLE9BQU8sRUFBQztRQUNwQix3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLGlEQUFpRDtRQUNqRCxNQUFNRixlQUFlRixJQUFJSyxPQUFPO1FBQ2hDLElBQUlILGNBQWM7WUFDaEJGLElBQUlLLE9BQU8sR0FBRztRQUNoQjtRQUVBLHNFQUFzRTtRQUN0RSxxREFBcUQ7UUFDckQsSUFBSUMsQ0FBQUEsR0FBQUEsT0FBQUEsY0FBYyxFQUFDdEIsT0FBT1MsUUFBUSxHQUFHO1lBQ25DLHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUsTUFBTTtZQUNOLHNGQUFzRjtZQUN0RixJQUFJVCxPQUFPdUIsVUFBVSxFQUFFO2dCQUNyQixPQUFPO1lBQ1Q7WUFFQSxvRUFBb0U7WUFDcEUsd0VBQXdFO1lBQ3hFLG1FQUFtRTtZQUNuRSxtQkFBbUI7WUFDbkIsMEVBQTBFO1lBQzFFLElBQUlMLGdCQUFnQixDQUFDbEIsT0FBT0MsT0FBTyxFQUFFO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRjtRQUVBLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsMkJBQTJCO1FBQzNCLGtFQUFrRTtRQUNsRSxJQUFJdUI7UUFDSixJQUFJO1lBQ0ZBLE1BQU0sSUFBSUMsSUFBSXpCLE9BQU9LLE1BQU0sRUFBRTtRQUMvQixFQUFFLE9BQU9xQixHQUFHO1lBQ1Ysa0RBQWtEO1lBQ2xELE9BQU87UUFDVDtRQUVBLE9BQU9GLElBQUlmLFFBQVE7SUFDckIsR0FBRztRQUFDVCxPQUFPSyxNQUFNO1FBQUVMLE9BQU91QixVQUFVO1FBQUV2QixPQUFPQyxPQUFPO1FBQUVELE9BQU9TLFFBQVE7S0FBQztJQUV0RSxPQUNFLFdBREYsR0FDRSxJQUFBa0IsWUFBQUMsR0FBQSxFQUFDQyxpQ0FBQUEsZUFBZSxDQUFDQyxRQUFRO1FBQUNYLE9BQU9BO2tCQUM5Qkw7O0FBR1A7S0EzRGdCL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci9hZGFwdGVycy50c3g/ZDk4MiJdLCJuYW1lcyI6WyJQYXRobmFtZUNvbnRleHRQcm92aWRlckFkYXB0ZXIiLCJhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlIiwiYWRhcHRGb3JQYXRoUGFyYW1zIiwiYWRhcHRGb3JTZWFyY2hQYXJhbXMiLCJwYWdlc1JvdXRlciIsImJhY2siLCJmb3J3YXJkIiwicmVmcmVzaCIsInJlbG9hZCIsImZhc3RSZWZyZXNoIiwicHVzaCIsImhyZWYiLCJwYXJhbSIsInNjcm9sbCIsInVuZGVmaW5lZCIsInJlcGxhY2UiLCJwcmVmZXRjaCIsInJvdXRlciIsImlzUmVhZHkiLCJxdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsImFzUGF0aFRvU2VhcmNoUGFyYW1zIiwiYXNQYXRoIiwicGF0aFBhcmFtcyIsInJvdXRlUmVnZXgiLCJnZXRSb3V0ZVJlZ2V4IiwicGF0aG5hbWUiLCJrZXlzIiwiT2JqZWN0IiwiZ3JvdXBzIiwia2V5IiwiY2hpbGRyZW4iLCJwcm9wcyIsInJlZiIsInVzZVJlZiIsImlzQXV0b0V4cG9ydCIsInZhbHVlIiwidXNlTWVtbyIsImN1cnJlbnQiLCJpc0R5bmFtaWNSb3V0ZSIsImlzRmFsbGJhY2siLCJ1cmwiLCJVUkwiLCJfIiwiX2pzeHJ1bnRpbWUiLCJqc3giLCJQYXRobmFtZUNvbnRleHQiLCJQcm92aWRlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/adapters.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/router.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/router.js ***!
|
||
\************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// tslint:disable:no-console\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createKey: function() {\n return createKey;\n },\n default: function() {\n return Router;\n },\n matchesMiddleware: function() {\n return matchesMiddleware;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ../../../client/route-loader */ \"./node_modules/next/dist/client/route-loader.js\");\nconst _script = __webpack_require__(/*! ../../../client/script */ \"./node_modules/next/dist/client/script.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../../../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _denormalizepagepath = __webpack_require__(/*! ../page-path/denormalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _utils = __webpack_require__(/*! ../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _isdynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./utils/parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _resolverewrites = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./utils/resolve-rewrites */ \"./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js\"));\nconst _routematcher = __webpack_require__(/*! ./utils/route-matcher */ \"./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _formaturl = __webpack_require__(/*! ./utils/format-url */ \"./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _detectdomainlocale = __webpack_require__(/*! ../../../client/detect-domain-locale */ \"./node_modules/next/dist/client/detect-domain-locale.js\");\nconst _parsepath = __webpack_require__(/*! ./utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst _addlocale = __webpack_require__(/*! ../../../client/add-locale */ \"./node_modules/next/dist/client/add-locale.js\");\nconst _removelocale = __webpack_require__(/*! ../../../client/remove-locale */ \"./node_modules/next/dist/client/remove-locale.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../client/remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../client/add-base-path */ \"./node_modules/next/dist/client/add-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../client/has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst _resolvehref = __webpack_require__(/*! ../../../client/resolve-href */ \"./node_modules/next/dist/client/resolve-href.js\");\nconst _isapiroute = __webpack_require__(/*! ../../../lib/is-api-route */ \"./node_modules/next/dist/lib/is-api-route.js\");\nconst _getnextpathnameinfo = __webpack_require__(/*! ./utils/get-next-pathname-info */ \"./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\");\nconst _formatnextpathnameinfo = __webpack_require__(/*! ./utils/format-next-pathname-info */ \"./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\");\nconst _comparestates = __webpack_require__(/*! ./utils/compare-states */ \"./node_modules/next/dist/shared/lib/router/utils/compare-states.js\");\nconst _islocalurl = __webpack_require__(/*! ./utils/is-local-url */ \"./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _isbot = __webpack_require__(/*! ./utils/is-bot */ \"./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _omit = __webpack_require__(/*! ./utils/omit */ \"./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _interpolateas = __webpack_require__(/*! ./utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ./utils/handle-smooth-scroll */ \"./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nfunction buildCancellationError() {\n return Object.assign(new Error(\"Route Cancelled\"), {\n cancelled: true\n });\n}\nasync function matchesMiddleware(options) {\n const matchers = await Promise.resolve(options.router.pageLoader.getMiddleware());\n if (!matchers) return false;\n const { pathname: asPathname } = (0, _parsepath.parsePath)(options.asPath);\n // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n const cleanedAs = (0, _hasbasepath.hasBasePath)(asPathname) ? (0, _removebasepath.removeBasePath)(asPathname) : asPathname;\n const asWithBasePathAndLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, options.locale));\n // Check only path match on client. Matching \"has\" should be done on server\n // where we can access more info such as headers, HttpOnly cookie, etc.\n return matchers.some((m)=>new RegExp(m.regexp).test(asWithBasePathAndLocale));\n}\nfunction stripOrigin(url) {\n const origin = (0, _utils.getLocationOrigin)();\n return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\nfunction prepareUrlAs(router, url, as) {\n // If url and as provided as an object representation,\n // we'll format them into the string version here.\n let [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(router, url, true);\n const origin = (0, _utils.getLocationOrigin)();\n const hrefWasAbsolute = resolvedHref.startsWith(origin);\n const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin);\n resolvedHref = stripOrigin(resolvedHref);\n resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n const preparedUrl = hrefWasAbsolute ? resolvedHref : (0, _addbasepath.addBasePath)(resolvedHref);\n const preparedAs = as ? stripOrigin((0, _resolvehref.resolveHref)(router, as)) : resolvedAs || resolvedHref;\n return {\n url: preparedUrl,\n as: asWasAbsolute ? preparedAs : (0, _addbasepath.addBasePath)(preparedAs)\n };\n}\nfunction resolveDynamicRoute(pathname, pages) {\n const cleanPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _denormalizepagepath.denormalizePagePath)(pathname));\n if (cleanPathname === \"/404\" || cleanPathname === \"/_error\") {\n return pathname;\n }\n // handle resolving href for dynamic routes\n if (!pages.includes(cleanPathname)) {\n // eslint-disable-next-line array-callback-return\n pages.some((page)=>{\n if ((0, _isdynamic.isDynamicRoute)(page) && (0, _routeregex.getRouteRegex)(page).re.test(cleanPathname)) {\n pathname = page;\n return true;\n }\n });\n }\n return (0, _removetrailingslash.removeTrailingSlash)(pathname);\n}\nfunction getMiddlewareData(source, response, options) {\n const nextConfig = {\n basePath: options.router.basePath,\n i18n: {\n locales: options.router.locales\n },\n trailingSlash: Boolean(true)\n };\n const rewriteHeader = response.headers.get(\"x-nextjs-rewrite\");\n let rewriteTarget = rewriteHeader || response.headers.get(\"x-nextjs-matched-path\");\n const matchedPath = response.headers.get(\"x-matched-path\");\n if (matchedPath && !rewriteTarget && !matchedPath.includes(\"__next_data_catchall\") && !matchedPath.includes(\"/_error\") && !matchedPath.includes(\"/404\")) {\n // leverage x-matched-path to detect next.config.js rewrites\n rewriteTarget = matchedPath;\n }\n if (rewriteTarget) {\n if (rewriteTarget.startsWith(\"/\") || false) {\n const parsedRewriteTarget = (0, _parserelativeurl.parseRelativeUrl)(rewriteTarget);\n const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedRewriteTarget.pathname, {\n nextConfig,\n parseData: true\n });\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)(pathnameInfo.pathname);\n return Promise.all([\n options.router.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)()\n ]).then((param)=>{\n let [pages, { __rewrites: rewrites }] = param;\n let as = (0, _addlocale.addLocale)(pathnameInfo.pathname, pathnameInfo.locale);\n if ((0, _isdynamic.isDynamicRoute)(as) || !rewriteHeader && pages.includes((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(as), options.router.locales).pathname)) {\n const parsedSource = (0, _getnextpathnameinfo.getNextPathnameInfo)((0, _parserelativeurl.parseRelativeUrl)(source).pathname, {\n nextConfig: true ? undefined : 0,\n parseData: true\n });\n as = (0, _addbasepath.addBasePath)(parsedSource.pathname);\n parsedRewriteTarget.pathname = as;\n }\n if (true) {\n const result = (0, _resolverewrites.default)(as, pages, rewrites, parsedRewriteTarget.query, (path)=>resolveDynamicRoute(path, pages), options.router.locales);\n if (result.matchedPage) {\n parsedRewriteTarget.pathname = result.parsedAs.pathname;\n as = parsedRewriteTarget.pathname;\n Object.assign(parsedRewriteTarget.query, result.parsedAs.query);\n }\n } else {}\n const resolvedHref = !pages.includes(fsPathname) ? resolveDynamicRoute((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedRewriteTarget.pathname), options.router.locales).pathname, pages) : fsPathname;\n if ((0, _isdynamic.isDynamicRoute)(resolvedHref)) {\n const matches = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(resolvedHref))(as);\n Object.assign(parsedRewriteTarget.query, matches || {});\n }\n return {\n type: \"rewrite\",\n parsedAs: parsedRewriteTarget,\n resolvedHref\n };\n });\n }\n const src = (0, _parsepath.parsePath)(source);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: \"\"\n });\n return Promise.resolve({\n type: \"redirect-external\",\n destination: \"\" + pathname + src.query + src.hash\n });\n }\n const redirectTarget = response.headers.get(\"x-nextjs-redirect\");\n if (redirectTarget) {\n if (redirectTarget.startsWith(\"/\")) {\n const src = (0, _parsepath.parsePath)(redirectTarget);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: \"\"\n });\n return Promise.resolve({\n type: \"redirect-internal\",\n newAs: \"\" + pathname + src.query + src.hash,\n newUrl: \"\" + pathname + src.query + src.hash\n });\n }\n return Promise.resolve({\n type: \"redirect-external\",\n destination: redirectTarget\n });\n }\n return Promise.resolve({\n type: \"next\"\n });\n}\nasync function withMiddlewareEffects(options) {\n const matches = await matchesMiddleware(options);\n if (!matches || !options.fetchData) {\n return null;\n }\n const data = await options.fetchData();\n const effect = await getMiddlewareData(data.dataHref, data.response, options);\n return {\n dataHref: data.dataHref,\n json: data.json,\n response: data.response,\n text: data.text,\n cacheKey: data.cacheKey,\n effect\n };\n}\nconst manualScrollRestoration = false && 0;\nconst SSG_DATA_NOT_FOUND = Symbol(\"SSG_DATA_NOT_FOUND\");\nfunction fetchRetry(url, attempts, options) {\n return fetch(url, {\n // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n // Cookies may also be required for `getServerSideProps`.\n //\n // > `fetch` won’t send cookies, unless you set the credentials init\n // > option.\n // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n //\n // > For maximum browser compatibility when it comes to sending &\n // > receiving cookies, always supply the `credentials: 'same-origin'`\n // > option instead of relying on the default.\n // https://github.com/github/fetch#caveats\n credentials: \"same-origin\",\n method: options.method || \"GET\",\n headers: Object.assign({}, options.headers, {\n \"x-nextjs-data\": \"1\"\n })\n }).then((response)=>{\n return !response.ok && attempts > 1 && response.status >= 500 ? fetchRetry(url, attempts - 1, options) : response;\n });\n}\nfunction tryToParseAsJSON(text) {\n try {\n return JSON.parse(text);\n } catch (error) {\n return null;\n }\n}\nfunction fetchNextData(param) {\n let { dataHref, inflightCache, isPrefetch, hasMiddleware, isServerRender, parseJSON, persistCache, isBackground, unstable_skipClientCache } = param;\n const { href: cacheKey } = new URL(dataHref, window.location.href);\n const getData = (params)=>{\n var _params_method;\n return fetchRetry(dataHref, isServerRender ? 3 : 1, {\n headers: Object.assign({}, isPrefetch ? {\n purpose: \"prefetch\"\n } : {}, isPrefetch && hasMiddleware ? {\n \"x-middleware-prefetch\": \"1\"\n } : {}),\n method: (_params_method = params == null ? void 0 : params.method) != null ? _params_method : \"GET\"\n }).then((response)=>{\n if (response.ok && (params == null ? void 0 : params.method) === \"HEAD\") {\n return {\n dataHref,\n response,\n text: \"\",\n json: {},\n cacheKey\n };\n }\n return response.text().then((text)=>{\n if (!response.ok) {\n /**\n * When the data response is a redirect because of a middleware\n * we do not consider it an error. The headers must bring the\n * mapped location.\n * TODO: Change the status code in the handler.\n */ if (hasMiddleware && [\n 301,\n 302,\n 307,\n 308\n ].includes(response.status)) {\n return {\n dataHref,\n response,\n text,\n json: {},\n cacheKey\n };\n }\n if (response.status === 404) {\n var _tryToParseAsJSON;\n if ((_tryToParseAsJSON = tryToParseAsJSON(text)) == null ? void 0 : _tryToParseAsJSON.notFound) {\n return {\n dataHref,\n json: {\n notFound: SSG_DATA_NOT_FOUND\n },\n response,\n text,\n cacheKey\n };\n }\n }\n const error = new Error(\"Failed to load static props\");\n /**\n * We should only trigger a server-side transition if this was\n * caused on a client-side transition. Otherwise, we'd get into\n * an infinite loop.\n */ if (!isServerRender) {\n (0, _routeloader.markAssetError)(error);\n }\n throw error;\n }\n return {\n dataHref,\n json: parseJSON ? tryToParseAsJSON(text) : null,\n response,\n text,\n cacheKey\n };\n });\n }).then((data)=>{\n if (!persistCache || \"development\" !== \"production\" || 0) {\n delete inflightCache[cacheKey];\n }\n return data;\n }).catch((err)=>{\n if (!unstable_skipClientCache) {\n delete inflightCache[cacheKey];\n }\n if (err.message === \"Failed to fetch\" || // firefox\n err.message === \"NetworkError when attempting to fetch resource.\" || // safari\n err.message === \"Load failed\") {\n (0, _routeloader.markAssetError)(err);\n }\n throw err;\n });\n };\n // when skipping client cache we wait to update\n // inflight cache until successful data response\n // this allows racing click event with fetching newer data\n // without blocking navigation when stale data is available\n if (unstable_skipClientCache && persistCache) {\n return getData({}).then((data)=>{\n if (data.response.headers.get(\"x-middleware-cache\") !== \"no-cache\") {\n // only update cache if not marked as no-cache\n inflightCache[cacheKey] = Promise.resolve(data);\n }\n return data;\n });\n }\n if (inflightCache[cacheKey] !== undefined) {\n return inflightCache[cacheKey];\n }\n return inflightCache[cacheKey] = getData(isBackground ? {\n method: \"HEAD\"\n } : {});\n}\nfunction createKey() {\n return Math.random().toString(36).slice(2, 10);\n}\nfunction handleHardNavigation(param) {\n let { url, router } = param;\n // ensure we don't trigger a hard navigation to the same\n // URL as this can end up with an infinite refresh\n if (url === (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(router.asPath, router.locale))) {\n throw new Error(\"Invariant: attempted to hard navigate to the same URL \" + url + \" \" + location.href);\n }\n window.location.href = url;\n}\nconst getCancelledHandler = (param)=>{\n let { route, router } = param;\n let cancelled = false;\n const cancel = router.clc = ()=>{\n cancelled = true;\n };\n const handleCancelled = ()=>{\n if (cancelled) {\n const error = new Error('Abort fetching component for route: \"' + route + '\"');\n error.cancelled = true;\n throw error;\n }\n if (cancel === router.clc) {\n router.clc = null;\n }\n };\n return handleCancelled;\n};\nclass Router {\n reload() {\n window.location.reload();\n }\n /**\n * Go back in history\n */ back() {\n window.history.back();\n }\n /**\n * Go forward in history\n */ forward() {\n window.history.forward();\n }\n /**\n * Performs a `pushState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ push(url, as, options) {\n if (options === void 0) options = {};\n if (false) {}\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change(\"pushState\", url, as, options);\n }\n /**\n * Performs a `replaceState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ replace(url, as, options) {\n if (options === void 0) options = {};\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change(\"replaceState\", url, as, options);\n }\n async _bfl(as, resolvedAs, locale, skipNavigate) {\n if (true) {\n let matchesBflStatic = false;\n let matchesBflDynamic = false;\n for (const curAs of [\n as,\n resolvedAs\n ]){\n if (curAs) {\n const asNoSlash = (0, _removetrailingslash.removeTrailingSlash)(new URL(curAs, \"http://n\").pathname);\n const asNoSlashLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asNoSlash, locale || this.locale));\n if (asNoSlash !== (0, _removetrailingslash.removeTrailingSlash)(new URL(this.asPath, \"http://n\").pathname)) {\n var _this__bfl_s, _this__bfl_s1;\n matchesBflStatic = matchesBflStatic || !!((_this__bfl_s = this._bfl_s) == null ? void 0 : _this__bfl_s.contains(asNoSlash)) || !!((_this__bfl_s1 = this._bfl_s) == null ? void 0 : _this__bfl_s1.contains(asNoSlashLocale));\n for (const normalizedAS of [\n asNoSlash,\n asNoSlashLocale\n ]){\n // if any sub-path of as matches a dynamic filter path\n // it should be hard navigated\n const curAsParts = normalizedAS.split(\"/\");\n for(let i = 0; !matchesBflDynamic && i < curAsParts.length + 1; i++){\n var _this__bfl_d;\n const currentPart = curAsParts.slice(0, i).join(\"/\");\n if (currentPart && ((_this__bfl_d = this._bfl_d) == null ? void 0 : _this__bfl_d.contains(currentPart))) {\n matchesBflDynamic = true;\n break;\n }\n }\n }\n // if the client router filter is matched then we trigger\n // a hard navigation\n if (matchesBflStatic || matchesBflDynamic) {\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n }\n }\n }\n }\n return false;\n }\n async change(method, url, as, options, forcedScroll) {\n var _this_components_pathname;\n if (!(0, _islocalurl.isLocalURL)(url)) {\n handleHardNavigation({\n url,\n router: this\n });\n return false;\n }\n // WARNING: `_h` is an internal option for handing Next.js client-side\n // hydration. Your app should _never_ use this property. It may change at\n // any time without notice.\n const isQueryUpdating = options._h === 1;\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, undefined, options.locale);\n }\n let shouldResolveHref = isQueryUpdating || options._shouldResolveHref || (0, _parsepath.parsePath)(url).pathname === (0, _parsepath.parsePath)(as).pathname;\n const nextState = {\n ...this.state\n };\n // for static pages with query params in the URL we delay\n // marking the router ready until after the query is updated\n // or a navigation has occurred\n const readyStateChange = this.isReady !== true;\n this.isReady = true;\n const isSsr = this.isSsr;\n if (!isQueryUpdating) {\n this.isSsr = false;\n }\n // if a route transition is already in progress before\n // the query updating is triggered ignore query updating\n if (isQueryUpdating && this.clc) {\n return false;\n }\n const prevLocale = nextState.locale;\n if (false) { var _this_locales; }\n // marking route changes as a navigation start entry\n if (_utils.ST) {\n performance.mark(\"routeChange\");\n }\n const { shallow = false, scroll = true } = options;\n const routeProps = {\n shallow\n };\n if (this._inFlightRoute && this.clc) {\n if (!isSsr) {\n Router.events.emit(\"routeChangeError\", buildCancellationError(), this._inFlightRoute, routeProps);\n }\n this.clc();\n this.clc = null;\n }\n as = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, options.locale, this.defaultLocale));\n const cleanedAs = (0, _removelocale.removeLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, nextState.locale);\n this._inFlightRoute = as;\n const localeChange = prevLocale !== nextState.locale;\n // If the url change is only related to a hash change\n // We should not proceed. We should only change the state.\n if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n nextState.asPath = cleanedAs;\n Router.events.emit(\"hashChangeStart\", as, routeProps);\n // TODO: do we need the resolved href when only a hash change?\n this.changeState(method, url, as, {\n ...options,\n scroll: false\n });\n if (scroll) {\n this.scrollToHash(cleanedAs);\n }\n try {\n await this.set(nextState, this.components[nextState.route], null);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit(\"routeChangeError\", err, cleanedAs, routeProps);\n }\n throw err;\n }\n Router.events.emit(\"hashChangeComplete\", as, routeProps);\n return true;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n let { pathname, query } = parsed;\n // The build manifest needs to be loaded before auto-static dynamic pages\n // get their query parameters to allow ensuring they can be parsed properly\n // when rewritten to\n let pages, rewrites;\n try {\n [pages, { __rewrites: rewrites }] = await Promise.all([\n this.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)(),\n this.pageLoader.getMiddleware()\n ]);\n } catch (err) {\n // If we fail to resolve the page list or client-build manifest, we must\n // do a server-side transition:\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n // If asked to change the current URL we should reload the current page\n // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n // We also need to set the method = replaceState always\n // as this should not go into the history (That's how browsers work)\n // We should compare the new asPath to the current asPath, not the url\n if (!this.urlIsNew(cleanedAs) && !localeChange) {\n method = \"replaceState\";\n }\n // we need to resolve the as value using rewrites for dynamic SSG\n // pages to allow building the data URL correctly\n let resolvedAs = as;\n // url and as should always be prefixed with basePath by this\n // point by either next/link or router.push/replace so strip the\n // basePath from the pathname to match the pages dir 1-to-1\n pathname = pathname ? (0, _removetrailingslash.removeTrailingSlash)((0, _removebasepath.removeBasePath)(pathname)) : pathname;\n let route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n const parsedAsPathname = as.startsWith(\"/\") && (0, _parserelativeurl.parseRelativeUrl)(as).pathname;\n // if we detected the path as app route during prefetching\n // trigger hard navigation\n if ((_this_components_pathname = this.components[pathname]) == null ? void 0 : _this_components_pathname.__appRouter) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const isMiddlewareRewrite = !!(parsedAsPathname && route !== parsedAsPathname && (!(0, _isdynamic.isDynamicRoute)(route) || !(0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route))(parsedAsPathname)));\n // we don't attempt resolve asPath when we need to execute\n // middleware as the resolving will occur server-side\n const isMiddlewareMatch = !options.shallow && await matchesMiddleware({\n asPath: as,\n locale: nextState.locale,\n router: this\n });\n if (isQueryUpdating && isMiddlewareMatch) {\n shouldResolveHref = false;\n }\n if (shouldResolveHref && pathname !== \"/_error\") {\n options._shouldResolveHref = true;\n if ( true && as.startsWith(\"/\")) {\n const rewritesResult = (0, _resolverewrites.default)((0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, nextState.locale), true), pages, rewrites, query, (p)=>resolveDynamicRoute(p, pages), this.locales);\n if (rewritesResult.externalDest) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return true;\n }\n if (!isMiddlewareMatch) {\n resolvedAs = rewritesResult.asPath;\n }\n if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n // if this directly matches a page we need to update the href to\n // allow the correct page chunk to be loaded\n pathname = rewritesResult.resolvedHref;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n } else {\n parsed.pathname = resolveDynamicRoute(pathname, pages);\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n }\n if (!(0, _islocalurl.isLocalURL)(as)) {\n if (true) {\n throw new Error('Invalid href: \"' + url + '\" and as: \"' + as + '\", received relative href and external as' + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\");\n }\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(resolvedAs), nextState.locale);\n route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n let routeMatch = false;\n if ((0, _isdynamic.isDynamicRoute)(route)) {\n const parsedAs = (0, _parserelativeurl.parseRelativeUrl)(resolvedAs);\n const asPathname = parsedAs.pathname;\n const routeRegex = (0, _routeregex.getRouteRegex)(route);\n routeMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(asPathname);\n const shouldInterpolate = route === asPathname;\n const interpolatedAs = shouldInterpolate ? (0, _interpolateas.interpolateAs)(route, asPathname, query) : {};\n if (!routeMatch || shouldInterpolate && !interpolatedAs.result) {\n const missingParams = Object.keys(routeRegex.groups).filter((param)=>!query[param] && !routeRegex.groups[param].optional);\n if (missingParams.length > 0 && !isMiddlewareMatch) {\n if (true) {\n console.warn(\"\" + (shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\") + \" failed to manually provide \" + (\"the params: \" + missingParams.join(\", \") + \" in the `href`'s `query`\"));\n }\n throw new Error((shouldInterpolate ? \"The provided `href` (\" + url + \") value is missing query values (\" + missingParams.join(\", \") + \") to be interpolated properly. \" : \"The provided `as` value (\" + asPathname + \") is incompatible with the `href` value (\" + route + \"). \") + (\"Read more: https://nextjs.org/docs/messages/\" + (shouldInterpolate ? \"href-interpolation-failed\" : \"incompatible-href-as\")));\n }\n } else if (shouldInterpolate) {\n as = (0, _formaturl.formatWithValidation)(Object.assign({}, parsedAs, {\n pathname: interpolatedAs.result,\n query: (0, _omit.omit)(query, interpolatedAs.params)\n }));\n } else {\n // Merge params into `query`, overwriting any specified in search\n Object.assign(query, routeMatch);\n }\n }\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeStart\", as, routeProps);\n }\n const isErrorRoute = this.pathname === \"/404\" || this.pathname === \"/_error\";\n try {\n var _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _routeInfo_props;\n let routeInfo = await this.getRouteInfo({\n route,\n pathname,\n query,\n as,\n resolvedAs,\n routeProps,\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n hasMiddleware: isMiddlewareMatch,\n unstable_skipClientCache: options.unstable_skipClientCache,\n isQueryUpdating: isQueryUpdating && !this.isFallback,\n isMiddlewareRewrite\n });\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, \"resolvedAs\" in routeInfo ? routeInfo.resolvedAs : undefined, nextState.locale);\n }\n if (\"route\" in routeInfo && isMiddlewareMatch) {\n pathname = routeInfo.route || route;\n route = pathname;\n if (!routeProps.shallow) {\n query = Object.assign({}, routeInfo.query || {}, query);\n }\n const cleanedParsedPathname = (0, _hasbasepath.hasBasePath)(parsed.pathname) ? (0, _removebasepath.removeBasePath)(parsed.pathname) : parsed.pathname;\n if (routeMatch && pathname !== cleanedParsedPathname) {\n Object.keys(routeMatch).forEach((key)=>{\n if (routeMatch && query[key] === routeMatch[key]) {\n delete query[key];\n }\n });\n }\n if ((0, _isdynamic.isDynamicRoute)(pathname)) {\n const prefixedAs = !routeProps.shallow && routeInfo.resolvedAs ? routeInfo.resolvedAs : (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(new URL(as, location.href).pathname, nextState.locale), true);\n let rewriteAs = prefixedAs;\n if ((0, _hasbasepath.hasBasePath)(rewriteAs)) {\n rewriteAs = (0, _removebasepath.removeBasePath)(rewriteAs);\n }\n if (false) {}\n const routeRegex = (0, _routeregex.getRouteRegex)(pathname);\n const curRouteMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(new URL(rewriteAs, location.href).pathname);\n if (curRouteMatch) {\n Object.assign(query, curRouteMatch);\n }\n }\n }\n // If the routeInfo brings a redirect we simply apply it.\n if (\"type\" in routeInfo) {\n if (routeInfo.type === \"redirect-internal\") {\n return this.change(method, routeInfo.newUrl, routeInfo.newAs, options);\n } else {\n handleHardNavigation({\n url: routeInfo.destination,\n router: this\n });\n return new Promise(()=>{});\n }\n }\n const component = routeInfo.Component;\n if (component && component.unstable_scriptLoader) {\n const scripts = [].concat(component.unstable_scriptLoader());\n scripts.forEach((script)=>{\n (0, _script.handleClientScriptLoad)(script.props);\n });\n }\n // handle redirect on client-transition\n if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n if (routeInfo.props.pageProps && routeInfo.props.pageProps.__N_REDIRECT) {\n // Use the destination from redirect without adding locale\n options.locale = false;\n const destination = routeInfo.props.pageProps.__N_REDIRECT;\n // check if destination is internal (resolves to a page) and attempt\n // client-navigation if it is falling back to hard navigation if\n // it's not\n if (destination.startsWith(\"/\") && routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false) {\n const parsedHref = (0, _parserelativeurl.parseRelativeUrl)(destination);\n parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n const { url: newUrl, as: newAs } = prepareUrlAs(this, destination, destination);\n return this.change(method, newUrl, newAs, options);\n }\n handleHardNavigation({\n url: destination,\n router: this\n });\n return new Promise(()=>{});\n }\n nextState.isPreview = !!routeInfo.props.__N_PREVIEW;\n // handle SSG data 404\n if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n let notFoundRoute;\n try {\n await this.fetchComponent(\"/404\");\n notFoundRoute = \"/404\";\n } catch (_) {\n notFoundRoute = \"/_error\";\n }\n routeInfo = await this.getRouteInfo({\n route: notFoundRoute,\n pathname: notFoundRoute,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isNotFound: true\n });\n if (\"type\" in routeInfo) {\n throw new Error(\"Unexpected middleware effect on /404\");\n }\n }\n }\n if (isQueryUpdating && this.pathname === \"/_error\" && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_routeInfo_props = routeInfo.props) == null ? void 0 : _routeInfo_props.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n var _routeInfo_route;\n // shallow routing is only allowed for same page URL changes.\n const isValidShallowRoute = options.shallow && nextState.route === ((_routeInfo_route = routeInfo.route) != null ? _routeInfo_route : route);\n var _options_scroll;\n const shouldScroll = (_options_scroll = options.scroll) != null ? _options_scroll : !isQueryUpdating && !isValidShallowRoute;\n const resetScroll = shouldScroll ? {\n x: 0,\n y: 0\n } : null;\n const upcomingScrollState = forcedScroll != null ? forcedScroll : resetScroll;\n // the new state that the router gonna set\n const upcomingRouterState = {\n ...nextState,\n route,\n pathname,\n query,\n asPath: cleanedAs,\n isFallback: false\n };\n // When the page being rendered is the 404 page, we should only update the\n // query parameters. Route changes here might add the basePath when it\n // wasn't originally present. This is also why this block is before the\n // below `changeState` call which updates the browser's history (changing\n // the URL).\n if (isQueryUpdating && isErrorRoute) {\n var _self___NEXT_DATA___props_pageProps1, _self___NEXT_DATA___props1, _routeInfo_props1;\n routeInfo = await this.getRouteInfo({\n route: this.pathname,\n pathname: this.pathname,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isQueryUpdating: isQueryUpdating && !this.isFallback\n });\n if (\"type\" in routeInfo) {\n throw new Error(\"Unexpected middleware effect on \" + this.pathname);\n }\n if (this.pathname === \"/_error\" && ((_self___NEXT_DATA___props1 = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps1 = _self___NEXT_DATA___props1.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps1.statusCode) === 500 && ((_routeInfo_props1 = routeInfo.props) == null ? void 0 : _routeInfo_props1.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit(\"routeChangeError\", err, cleanedAs, routeProps);\n }\n throw err;\n }\n return true;\n }\n Router.events.emit(\"beforeHistoryChange\", as, routeProps);\n this.changeState(method, url, as, options);\n // for query updates we can skip it if the state is unchanged and we don't\n // need to scroll\n // https://github.com/vercel/next.js/issues/37139\n const canSkipUpdating = isQueryUpdating && !upcomingScrollState && !readyStateChange && !localeChange && (0, _comparestates.compareRouterStates)(upcomingRouterState, this.state);\n if (!canSkipUpdating) {\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (e) {\n if (e.cancelled) routeInfo.error = routeInfo.error || e;\n else throw e;\n }\n if (routeInfo.error) {\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeError\", routeInfo.error, cleanedAs, routeProps);\n }\n throw routeInfo.error;\n }\n if (false) {}\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeComplete\", as, routeProps);\n }\n // A hash mark # is the optional last part of a URL\n const hashRegex = /#.+$/;\n if (shouldScroll && hashRegex.test(as)) {\n this.scrollToHash(as);\n }\n }\n return true;\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n return false;\n }\n throw err;\n }\n }\n changeState(method, url, as, options) {\n if (options === void 0) options = {};\n if (true) {\n if (typeof window.history === \"undefined\") {\n console.error(\"Warning: window.history is not available.\");\n return;\n }\n if (typeof window.history[method] === \"undefined\") {\n console.error(\"Warning: window.history.\" + method + \" is not available\");\n return;\n }\n }\n if (method !== \"pushState\" || (0, _utils.getURL)() !== as) {\n this._shallow = options.shallow;\n window.history[method]({\n url,\n as,\n options,\n __N: true,\n key: this._key = method !== \"pushState\" ? this._key : createKey()\n }, // Passing the empty string here should be safe against future changes to the method.\n // https://developer.mozilla.org/docs/Web/API/History/replaceState\n \"\", as);\n }\n }\n async handleRouteInfoError(err, pathname, query, as, routeProps, loadErrorFail) {\n console.error(err);\n if (err.cancelled) {\n // bubble up cancellation errors\n throw err;\n }\n if ((0, _routeloader.isAssetError)(err) || loadErrorFail) {\n Router.events.emit(\"routeChangeError\", err, as, routeProps);\n // If we can't load the page it could be one of following reasons\n // 1. Page doesn't exists\n // 2. Page does exist in a different zone\n // 3. Internal error while loading the page\n // So, doing a hard reload is the proper way to deal with this.\n handleHardNavigation({\n url: as,\n router: this\n });\n // Changing the URL doesn't block executing the current code path.\n // So let's throw a cancellation error stop the routing logic.\n throw buildCancellationError();\n }\n try {\n let props;\n const { page: Component, styleSheets } = await this.fetchComponent(\"/_error\");\n const routeInfo = {\n props,\n Component,\n styleSheets,\n err,\n error: err\n };\n if (!routeInfo.props) {\n try {\n routeInfo.props = await this.getInitialProps(Component, {\n err,\n pathname,\n query\n });\n } catch (gipErr) {\n console.error(\"Error in error page `getInitialProps`: \", gipErr);\n routeInfo.props = {};\n }\n }\n return routeInfo;\n } catch (routeInfoErr) {\n return this.handleRouteInfoError((0, _iserror.default)(routeInfoErr) ? routeInfoErr : new Error(routeInfoErr + \"\"), pathname, query, as, routeProps, true);\n }\n }\n async getRouteInfo(param) {\n let { route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound } = param;\n /**\n * This `route` binding can change if there's a rewrite\n * so we keep a reference to the original requested route\n * so we can store the cache for it and avoid re-requesting every time\n * for shallow routing purposes.\n */ let route = requestedRoute;\n try {\n var _data_effect, _data_effect1, _data_effect2, _data_response;\n let existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route) {\n return existingInfo;\n }\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n if (hasMiddleware) {\n existingInfo = undefined;\n }\n let cachedRouteInfo = existingInfo && !(\"initial\" in existingInfo) && \"development\" !== \"development\" ? 0 : undefined;\n const isBackground = isQueryUpdating;\n const fetchNextDataParams = {\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n skipInterpolation: true,\n asPath: isNotFound ? \"/404\" : resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: isBackground ? this.sbc : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache,\n isBackground\n };\n let data = isQueryUpdating && !isMiddlewareRewrite ? null : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData(fetchNextDataParams),\n asPath: isNotFound ? \"/404\" : resolvedAs,\n locale: locale,\n router: this\n }).catch((err)=>{\n // we don't hard error during query updating\n // as it's un-necessary and doesn't need to be fatal\n // unless it is a fallback route and the props can't\n // be loaded\n if (isQueryUpdating) {\n return null;\n }\n throw err;\n });\n // when rendering error routes we don't apply middleware\n // effects\n if (data && (pathname === \"/_error\" || pathname === \"/404\")) {\n data.effect = undefined;\n }\n if (isQueryUpdating) {\n if (!data) {\n data = {\n json: self.__NEXT_DATA__.props\n };\n } else {\n data.json = self.__NEXT_DATA__.props;\n }\n }\n handleCancelled();\n if ((data == null ? void 0 : (_data_effect = data.effect) == null ? void 0 : _data_effect.type) === \"redirect-internal\" || (data == null ? void 0 : (_data_effect1 = data.effect) == null ? void 0 : _data_effect1.type) === \"redirect-external\") {\n return data.effect;\n }\n if ((data == null ? void 0 : (_data_effect2 = data.effect) == null ? void 0 : _data_effect2.type) === \"rewrite\") {\n const resolvedRoute = (0, _removetrailingslash.removeTrailingSlash)(data.effect.resolvedHref);\n const pages = await this.pageLoader.getPageList();\n // during query updating the page must match although during\n // client-transition a redirect that doesn't match a page\n // can be returned and this should trigger a hard navigation\n // which is valid for incremental migration\n if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n route = resolvedRoute;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = (0, _removebasepath.removeBasePath)((0, _normalizelocalepath.normalizeLocalePath)(data.effect.parsedAs.pathname, this.locales).pathname);\n // Check again the cache with the new destination.\n existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route && !hasMiddleware) {\n // If we have a match with the current route due to rewrite,\n // we can copy the existing information to the rewritten one.\n // Then, we return the information along with the matched route.\n return {\n ...existingInfo,\n route\n };\n }\n }\n }\n if ((0, _isapiroute.isAPIRoute)(route)) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const routeInfo = cachedRouteInfo || await this.fetchComponent(route).then((res)=>({\n Component: res.page,\n styleSheets: res.styleSheets,\n __N_SSG: res.mod.__N_SSG,\n __N_SSP: res.mod.__N_SSP\n }));\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(routeInfo.Component)) {\n throw new Error('The default export is not a React Component in page: \"' + pathname + '\"');\n }\n }\n const wasBailedPrefetch = data == null ? void 0 : (_data_response = data.response) == null ? void 0 : _data_response.headers.get(\"x-middleware-skip\");\n const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP;\n // For non-SSG prefetches that bailed before sending data\n // we clear the cache to fetch full response\n if (wasBailedPrefetch && (data == null ? void 0 : data.dataHref)) {\n delete this.sdc[data.dataHref];\n }\n const { props, cacheKey } = await this._getData(async ()=>{\n if (shouldFetchData) {\n if ((data == null ? void 0 : data.json) && !wasBailedPrefetch) {\n return {\n cacheKey: data.cacheKey,\n props: data.json\n };\n }\n const dataHref = (data == null ? void 0 : data.dataHref) ? data.dataHref : this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n asPath: resolvedAs,\n locale\n });\n const fetched = await fetchNextData({\n dataHref,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: wasBailedPrefetch ? {} : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache\n });\n return {\n cacheKey: fetched.cacheKey,\n props: fetched.json || {}\n };\n }\n return {\n headers: {},\n props: await this.getInitialProps(routeInfo.Component, {\n pathname,\n query,\n asPath: as,\n locale,\n locales: this.locales,\n defaultLocale: this.defaultLocale\n })\n };\n });\n // Only bust the data cache for SSP routes although\n // middleware can skip cache per request with\n // x-middleware-cache: no-cache as well\n if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n delete this.sdc[cacheKey];\n }\n // we kick off a HEAD request in the background\n // when a non-prefetch request is made to signal revalidation\n if (!this.isPreview && routeInfo.__N_SSG && \"development\" !== \"development\" && 0) {}\n props.pageProps = Object.assign({}, props.pageProps);\n routeInfo.props = props;\n routeInfo.route = route;\n routeInfo.query = query;\n routeInfo.resolvedAs = resolvedAs;\n this.components[route] = routeInfo;\n return routeInfo;\n } catch (err) {\n return this.handleRouteInfoError((0, _iserror.getProperError)(err), pathname, query, as, routeProps);\n }\n }\n set(state, data, resetScroll) {\n this.state = state;\n return this.sub(data, this.components[\"/_app\"].Component, resetScroll);\n }\n /**\n * Callback to execute before replacing router state\n * @param cb callback to be executed\n */ beforePopState(cb) {\n this._bps = cb;\n }\n onlyAHashChange(as) {\n if (!this.asPath) return false;\n const [oldUrlNoHash, oldHash] = this.asPath.split(\"#\", 2);\n const [newUrlNoHash, newHash] = as.split(\"#\", 2);\n // Makes sure we scroll to the provided hash if the url/hash are the same\n if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n return true;\n }\n // If the urls are change, there's more than a hash change\n if (oldUrlNoHash !== newUrlNoHash) {\n return false;\n }\n // If the hash has changed, then it's a hash only change.\n // This check is necessary to handle both the enter and\n // leave hash === '' cases. The identity case falls through\n // and is treated as a next reload.\n return oldHash !== newHash;\n }\n scrollToHash(as) {\n const [, hash = \"\"] = as.split(\"#\", 2);\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // Scroll to top if the hash is just `#` with no value or `#top`\n // To mirror browsers\n if (hash === \"\" || hash === \"top\") {\n window.scrollTo(0, 0);\n return;\n }\n // Decode hash to make non-latin anchor works.\n const rawHash = decodeURIComponent(hash);\n // First we check if the element by id is found\n const idEl = document.getElementById(rawHash);\n if (idEl) {\n idEl.scrollIntoView();\n return;\n }\n // If there's no element with the id, we check the `name` property\n // To mirror browsers\n const nameEl = document.getElementsByName(rawHash)[0];\n if (nameEl) {\n nameEl.scrollIntoView();\n }\n }, {\n onlyHashChange: this.onlyAHashChange(as)\n });\n }\n urlIsNew(asPath) {\n return this.asPath !== asPath;\n }\n /**\n * Prefetch page code, you may wait for the data during page rendering.\n * This feature only works in production!\n * @param url the href of prefetched page\n * @param asPath the as path of the prefetched page\n */ async prefetch(url, asPath, options) {\n if (asPath === void 0) asPath = url;\n if (options === void 0) options = {};\n // Prefetch is not supported in development mode because it would trigger on-demand-entries\n if (true) {\n return;\n }\n if ( true && (0, _isbot.isBot)(window.navigator.userAgent)) {\n // No prefetches for bots that render the link since they are typically navigating\n // links via the equivalent of a hard navigation and hence never utilize these\n // prefetches.\n return;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n const urlPathname = parsed.pathname;\n let { pathname, query } = parsed;\n const originalPathname = pathname;\n if (false) {}\n const pages = await this.pageLoader.getPageList();\n let resolvedAs = asPath;\n const locale = typeof options.locale !== \"undefined\" ? options.locale || undefined : this.locale;\n const isMiddlewareMatch = await matchesMiddleware({\n asPath: asPath,\n locale: locale,\n router: this\n });\n if ( true && asPath.startsWith(\"/\")) {\n let rewrites;\n ({ __rewrites: rewrites } = await (0, _routeloader.getClientBuildManifest)());\n const rewritesResult = (0, _resolverewrites.default)((0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asPath, this.locale), true), pages, rewrites, parsed.query, (p)=>resolveDynamicRoute(p, pages), this.locales);\n if (rewritesResult.externalDest) {\n return;\n }\n if (!isMiddlewareMatch) {\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(rewritesResult.asPath), this.locale);\n }\n if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n // if this directly matches a page we need to update the href to\n // allow the correct page chunk to be loaded\n pathname = rewritesResult.resolvedHref;\n parsed.pathname = pathname;\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n if ((0, _isdynamic.isDynamicRoute)(parsed.pathname)) {\n pathname = parsed.pathname;\n parsed.pathname = pathname;\n Object.assign(query, (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(parsed.pathname))((0, _parsepath.parsePath)(asPath).pathname) || {});\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n const data = false ? 0 : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData({\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname: originalPathname,\n query\n }),\n skipInterpolation: true,\n asPath: resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true\n }),\n asPath: asPath,\n locale: locale,\n router: this\n });\n /**\n * If there was a rewrite we apply the effects of the rewrite on the\n * current parameters for the prefetch.\n */ if ((data == null ? void 0 : data.effect.type) === \"rewrite\") {\n parsed.pathname = data.effect.resolvedHref;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = data.effect.parsedAs.pathname;\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n /**\n * If there is a redirect to an external destination then we don't have\n * to prefetch content as it will be unused.\n */ if ((data == null ? void 0 : data.effect.type) === \"redirect-external\") {\n return;\n }\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n this.components[urlPathname] = {\n __appRouter: true\n };\n }\n await Promise.all([\n this.pageLoader._isSsg(route).then((isSsg)=>{\n return isSsg ? fetchNextData({\n dataHref: (data == null ? void 0 : data.json) ? data == null ? void 0 : data.dataHref : this.pageLoader.getDataHref({\n href: url,\n asPath: resolvedAs,\n locale: locale\n }),\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true,\n unstable_skipClientCache: options.unstable_skipClientCache || options.priority && !!true\n }).then(()=>false).catch(()=>false) : false;\n }),\n this.pageLoader[options.priority ? \"loadPage\" : \"prefetch\"](route)\n ]);\n }\n async fetchComponent(route) {\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n try {\n const componentResult = await this.pageLoader.loadPage(route);\n handleCancelled();\n return componentResult;\n } catch (err) {\n handleCancelled();\n throw err;\n }\n }\n _getData(fn) {\n let cancelled = false;\n const cancel = ()=>{\n cancelled = true;\n };\n this.clc = cancel;\n return fn().then((data)=>{\n if (cancel === this.clc) {\n this.clc = null;\n }\n if (cancelled) {\n const err = new Error(\"Loading initial props cancelled\");\n err.cancelled = true;\n throw err;\n }\n return data;\n });\n }\n _getFlightData(dataHref) {\n // Do not cache RSC flight response since it's not a static resource\n return fetchNextData({\n dataHref,\n isServerRender: true,\n parseJSON: false,\n inflightCache: this.sdc,\n persistCache: false,\n isPrefetch: false\n }).then((param)=>{\n let { text } = param;\n return {\n data: text\n };\n });\n }\n getInitialProps(Component, ctx) {\n const { Component: App } = this.components[\"/_app\"];\n const AppTree = this._wrapApp(App);\n ctx.AppTree = AppTree;\n return (0, _utils.loadGetInitialProps)(App, {\n AppTree,\n Component,\n router: this,\n ctx\n });\n }\n get route() {\n return this.state.route;\n }\n get pathname() {\n return this.state.pathname;\n }\n get query() {\n return this.state.query;\n }\n get asPath() {\n return this.state.asPath;\n }\n get locale() {\n return this.state.locale;\n }\n get isFallback() {\n return this.state.isFallback;\n }\n get isPreview() {\n return this.state.isPreview;\n }\n constructor(pathname, query, as, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview }){\n // Server Data Cache (full data requests)\n this.sdc = {};\n // Server Background Cache (HEAD requests)\n this.sbc = {};\n this.isFirstPopStateEvent = true;\n this._key = createKey();\n this.onPopState = (e)=>{\n const { isFirstPopStateEvent } = this;\n this.isFirstPopStateEvent = false;\n const state = e.state;\n if (!state) {\n // We get state as undefined for two reasons.\n // 1. With older safari (< 8) and older chrome (< 34)\n // 2. When the URL changed with #\n //\n // In the both cases, we don't need to proceed and change the route.\n // (as it's already changed)\n // But we can simply replace the state with the new changes.\n // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n // So, doing the following for (1) does no harm.\n const { pathname, query } = this;\n this.changeState(\"replaceState\", (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), (0, _utils.getURL)());\n return;\n }\n // __NA is used to identify if the history entry can be handled by the app-router.\n if (state.__NA) {\n window.location.reload();\n return;\n }\n if (!state.__N) {\n return;\n }\n // Safari fires popstateevent when reopening the browser.\n if (isFirstPopStateEvent && this.locale === state.options.locale && state.as === this.asPath) {\n return;\n }\n let forcedScroll;\n const { url, as, options, key } = state;\n if (false) {}\n this._key = key;\n const { pathname } = (0, _parserelativeurl.parseRelativeUrl)(url);\n // Make sure we don't re-render on initial load,\n // can be caused by navigating back from an external site\n if (this.isSsr && as === (0, _addbasepath.addBasePath)(this.asPath) && pathname === (0, _addbasepath.addBasePath)(this.pathname)) {\n return;\n }\n // If the downstream application returns falsy, return.\n // They will then be responsible for handling the event.\n if (this._bps && !this._bps(state)) {\n return;\n }\n this.change(\"replaceState\", url, as, Object.assign({}, options, {\n shallow: options.shallow && this._shallow,\n locale: options.locale || this.defaultLocale,\n // @ts-ignore internal value not exposed on types\n _h: 0\n }), forcedScroll);\n };\n // represents the current component key\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n // set up the component cache (by route keys)\n this.components = {};\n // We should not keep the cache, if there's an error\n // Otherwise, this cause issues when when going back and\n // come again to the errored page.\n if (pathname !== \"/_error\") {\n this.components[route] = {\n Component,\n initial: true,\n props: initialProps,\n err,\n __N_SSG: initialProps && initialProps.__N_SSG,\n __N_SSP: initialProps && initialProps.__N_SSP\n };\n }\n this.components[\"/_app\"] = {\n Component: App,\n styleSheets: []\n };\n if (true) {\n const { BloomFilter } = __webpack_require__(/*! ../../lib/bloom-filter */ \"./node_modules/next/dist/shared/lib/bloom-filter.js\");\n const routerFilterSValue = {\"numItems\":0,\"errorRate\":0.0001,\"numBits\":0,\"numHashes\":null,\"bitArray\":[]};\n const staticFilterData = routerFilterSValue ? routerFilterSValue : undefined;\n const routerFilterDValue = {\"numItems\":0,\"errorRate\":0.0001,\"numBits\":0,\"numHashes\":null,\"bitArray\":[]};\n const dynamicFilterData = routerFilterDValue ? routerFilterDValue : undefined;\n if (staticFilterData == null ? void 0 : staticFilterData.numHashes) {\n this._bfl_s = new BloomFilter(staticFilterData.numItems, staticFilterData.errorRate);\n this._bfl_s.import(staticFilterData);\n }\n if (dynamicFilterData == null ? void 0 : dynamicFilterData.numHashes) {\n this._bfl_d = new BloomFilter(dynamicFilterData.numItems, dynamicFilterData.errorRate);\n this._bfl_d.import(dynamicFilterData);\n }\n }\n // Backwards compat for Router.router.events\n // TODO: Should be remove the following major version as it was never documented\n this.events = Router.events;\n this.pageLoader = pageLoader;\n // if auto prerendered and dynamic route wait to update asPath\n // until after mount to prevent hydration mismatch\n const autoExportDynamic = (0, _isdynamic.isDynamicRoute)(pathname) && self.__NEXT_DATA__.autoExport;\n this.basePath = false || \"\";\n this.sub = subscription;\n this.clc = null;\n this._wrapApp = wrapApp;\n // make sure to ignore extra popState in safari on navigating\n // back from external site\n this.isSsr = true;\n this.isLocaleDomain = false;\n this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || self.__NEXT_DATA__.isExperimentalCompile || self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp || !autoExportDynamic && !self.location.search && !true);\n if (false) {}\n this.state = {\n route,\n pathname,\n query,\n asPath: autoExportDynamic ? pathname : as,\n isPreview: !!isPreview,\n locale: false ? 0 : undefined,\n isFallback\n };\n this._initialMatchesMiddlewarePromise = Promise.resolve(false);\n if (true) {\n // make sure \"as\" doesn't start with double slashes or else it can\n // throw an error as it's considered invalid\n if (!as.startsWith(\"//\")) {\n // in order for `e.state` to work on the `onpopstate` event\n // we have to register the initial route upon initialization\n const options = {\n locale\n };\n const asPath = (0, _utils.getURL)();\n this._initialMatchesMiddlewarePromise = matchesMiddleware({\n router: this,\n locale,\n asPath\n }).then((matches)=>{\n options._shouldResolveHref = as !== pathname;\n this.changeState(\"replaceState\", matches ? asPath : (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), asPath, options);\n return matches;\n });\n }\n window.addEventListener(\"popstate\", this.onPopState);\n // enable custom scroll restoration handling when available\n // otherwise fallback to browser's default handling\n if (false) {}\n }\n }\n}\nRouter.events = (0, _mitt.default)(); //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3JvdXRlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7Ozs7Ozs7Ozs7Ozs7SUFtbUJaQSxXQUFTO2VBQVRBOzs7ZUFpREtDOztJQTNqQkNDLG1CQUFpQjtlQUFqQkE7Ozs7O2lEQS9FYzt5Q0FLN0I7b0NBQ2dDOytFQUNDO2lEQUNKO2lEQUNBOzJFQUNuQjttQ0FDa0Q7dUNBQ3BDOzhDQUNFO3NGQUNMOzBDQUNJO3dDQUNGO3VDQUNPO2dEQUNGO3VDQUNUO3VDQUNBOzBDQUNHOzRDQUNFO3lDQUNIO3lDQUNBO3lDQUNBO3dDQUNEO2lEQUNTO29EQUNHOzJDQUNIO3dDQUNUO21DQUNMO2tDQUNEOzJDQUNTO2dEQUNLO0FBZ0NuQyxTQUFTQztJQUNQLE9BQU9DLE9BQU9DLE1BQU0sQ0FBQyxJQUFJQyxNQUFNLG9CQUFvQjtRQUNqREMsV0FBVztJQUNiO0FBQ0Y7QUFTTyxlQUFlTCxrQkFDcEJNLE9BQWtDO0lBRWxDLE1BQU1DLFdBQVcsTUFBTUMsUUFBUUMsT0FBTyxDQUNwQ0gsUUFBUUksTUFBTSxDQUFDQyxVQUFVLENBQUNDLGFBQWE7SUFFekMsSUFBSSxDQUFDTCxVQUFVLE9BQU87SUFFdEIsTUFBTSxFQUFFTSxVQUFVQyxVQUFVLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBUyxFQUFDVCxRQUFRVSxNQUFNO0lBQ3pELDZGQUE2RjtJQUM3RixNQUFNQyxZQUFZQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFXLEVBQUNKLGNBQzFCSyxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBYyxFQUFDTCxjQUNmQTtJQUNKLE1BQU1NLDBCQUEwQkMsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBVyxFQUN6Q0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBUyxFQUFDTCxXQUFXWCxRQUFRaUIsTUFBTTtJQUdyQywyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLE9BQU9oQixTQUFTaUIsSUFBSSxDQUFDLENB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Q0FBQ0E7WUFDYnpQLFFBQVF5QyxNQUErQixHQUFHekMsQ0FBQUEsR0FBU2tFO1lBQ25Ed0w7UUFDRjtRQUVBLElBQUksQ0FBQ3dJLGdDQUFnQyxHQUFHalosUUFBUUMsT0FBTyxDQUFDO1FBRXhELElBQUksSUFBa0IsRUFBYTtZQUNqQyxrRUFBa0U7WUFDbEUsNENBQTRDO1lBQzVDLElBQUksQ0FBQzRCLEdBQUdKLFVBQVUsQ0FBQyxPQUFPO2dCQUN4QiwyREFBMkQ7Z0JBQzNELDREQUE0RDtnQkFDNUQsTUFBTTNCLFVBQTZCO29CQUFFaUI7Z0JBQU87Z0JBQzVDLE1BQU1QLFNBQVN5UyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFNO2dCQUVyQixJQUFJLENBQUNnRyxnQ0FBZ0MsR0FBR3paLGtCQUFrQjtvQkFDeERVLFFBQVEsSUFBSTtvQkFDWmE7b0JBQ0FQO2dCQUNGLEdBQUdrRSxJQUFJLENBQUMsQ0FBQ2U7b0JBR0wzRixRQUFnQjRNLGtCQUFrQixHQUFHN0ssT0FBT3hCO29CQUU5QyxJQUFJLENBQUNxTyxXQUFXLENBQ2QsZ0JBQ0FqSixVQUNJakYsU0FDQTRNLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFvQixFQUFDO3dCQUNuQi9NLFVBQVVRLENBQUFBLEdBQUFBLGFBQUFBLFdBQVcsRUFBQ1I7d0JBQ3RCK0U7b0JBQ0YsSUFDSjVFLFFBQ0FWO29CQUVGLE9BQU8yRjtnQkFDVDtZQUNGO1lBRUFzQixPQUFPbVMsZ0JBQWdCLENBQUMsWUFBWSxJQUFJLENBQUN6QixVQUFVO1lBRW5ELDJEQUEyRDtZQUMzRCxtREFBbUQ7WUFDbkQsSUFBSWpVLEtBQXFDLEVBQUUsRUFJM0M7UUFDRjtJQUNGO0FBK25ERjtBQTkyRHFCakUsT0E2Q1o4TyxNQUFBQSxHQUFtQytLLENBQUFBLEdBQUFBLE1BQUFBLE9BQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyLnRzPzIxMDAiXSwibmFtZXMiOlsiY3JlYXRlS2V5IiwiUm91dGVyIiwibWF0Y2hlc01pZGRsZXdhcmUiLCJidWlsZENhbmNlbGxhdGlvbkVycm9yIiwiT2JqZWN0IiwiYXNzaWduIiwiRXJyb3IiLCJjYW5jZWxsZWQiLCJvcHRpb25zIiwibWF0Y2hlcnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJvdXRlciIsInBhZ2VMb2FkZXIiLCJnZXRNaWRkbGV3YXJlIiwicGF0aG5hbWUiLCJhc1BhdGhuYW1lIiwicGFyc2VQYXRoIiwiYXNQYXRoIiwiY2xlYW5lZEFzIiwiaGFzQmFzZVBhdGgiLCJyZW1vdmVCYXNlUGF0aCIsImFzV2l0aEJhc2VQYXRoQW5kTG9jYWxlIiwiYWRkQmFzZVBhdGgiLCJhZGRMb2NhbGUiLCJsb2NhbGUiLCJzb21lIiwibSIsIlJlZ0V4cCIsInJlZ2V4cCIsInRlc3QiLCJzdHJpcE9yaWdpbiIsInVybCIsIm9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsInByZXBhcmVVcmxBcyIsImFzIiwicmVzb2x2ZWRIcmVmIiwicmVzb2x2ZWRBcyIsInJlc29sdmVIcmVmIiwiaHJlZldhc0Fic29sdXRlIiwiYXNXYXNBYnNvbHV0ZSIsInByZXBhcmVkVXJsIiwicHJlcGFyZWRBcyIsInJlc29sdmVEeW5hbWljUm91dGUiLCJwYWdlcyIsImNsZWFuUGF0aG5hbWUiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiZGVub3JtYWxpemVQYWdlUGF0aCIsImluY2x1ZGVzIiwicGFnZSIsImlzRHluYW1pY1JvdXRlIiwiZ2V0Um91dGVSZWdleCIsInJlIiwiZ2V0TWlkZGxld2FyZURhdGEiLCJzb3VyY2UiLCJyZXNwb25zZSIsIm5leHRDb25maWciLCJiYXNlUGF0aCIsImkxOG4iLCJsb2NhbGVzIiwidHJhaWxpbmdTbGFzaCIsIkJvb2xlYW4iLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwicmV3cml0ZUhlYWRlciIsImhlYWRlcnMiLCJnZXQiLCJyZXdyaXRlVGFyZ2V0IiwibWF0Y2hlZFBhdGgiLCJfX05FWFRfRVhURVJOQUxfTUlERExFV0FSRV9SRVdSSVRFX1JFU09MVkUiLCJwYXJzZWRSZXdyaXRlVGFyZ2V0IiwicGFyc2VSZWxhdGl2ZVVybCIsInBhdGhuYW1lSW5mbyIsImdldE5leHRQYXRobmFtZUluZm8iLCJwYXJzZURhdGEiLCJmc1BhdGhuYW1lIiwiYWxsIiwiZ2V0UGFnZUxpc3QiLCJnZXRDbGllbnRCdWlsZE1hbmlmZXN0IiwidGhlbiIsInBhcmFtIiwiX19yZXdyaXRlcyIsInJld3JpdGVzIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsInBhcnNlZFNvdXJjZSIsIl9fTkVYVF9IQVNfUkVXUklURVMiLCJ1bmRlZmluZWQiLCJyZXN1bHQiLCJyZXNvbHZlUmV3cml0ZXMiLCJxdWVyeSIsInBhdGgiLCJtYXRjaGVkUGFnZSIsInBhcnNlZEFzIiwicmVzb2x2ZWRQYXRobmFtZSIsIm1hdGNoZXMiLCJnZXRSb3V0ZU1hdGNoZXIiLCJ0eXBlIiwic3JjIiwiZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyIsImRlZmF1bHRMb2NhbGUiLCJidWlsZElkIiwiZGVzdGluYXRpb24iLCJoYXNoIiwicmVkaXJlY3RUYXJnZXQiLCJuZXdBcyIsIm5ld1VybCIsIndpdGhNaWRkbGV3YXJlRWZmZWN0cyIsImZldGNoRGF0YSIsImRhdGEiLCJlZmZlY3QiLCJkYXRhSHJlZiIsImpzb24iLCJ0ZXh0IiwiY2FjaGVLZXkiLCJtYW51YWxTY3JvbGxSZXN0b3JhdGlvbiIsIl9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04iLCJ3aW5kb3ciLCJoaXN0b3J5IiwidiIsInNlc3Npb25TdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJuIiwiU1NHX0RBVEFfTk9UX0ZPVU5EIiwiU3ltYm9sIiwiZmV0Y2hSZXRyeSIsImF0dGVtcHRzIiwiZmV0Y2giLCJjcmVkZW50aWFscyIsIm1ldGhvZCIsIm9rIiwic3RhdHVzIiwidHJ5VG9QYXJzZUFzSlNPTiIsIkpTT04iLCJwYXJzZSIsImVycm9yIiwiZmV0Y2hOZXh0RGF0YSIsImluZmxpZ2h0Q2FjaGUiLCJpc1ByZWZldGNoIiwiaGFzTWlkZGxld2FyZSIsImlzU2VydmVyUmVuZGVyIiwicGFyc2VKU09OIiwicGVyc2lzdENhY2hlIiwiaXNCYWNrZ3JvdW5kIiwidW5zdGFibGVfc2tpcENsaWVudENhY2hlIiwiaHJlZiIsIlVSTCIsImxvY2F0aW9uIiwiZ2V0RGF0YSIsInBhcmFtcyIsInB1cnBvc2UiLCJub3RGb3VuZCIsIm1hcmtBc3NldEVycm9yIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJoYW5kbGVIYXJkTmF2aWdhdGlvbiIsImdldENhbmNlbGxlZEhhbmRsZXIiLCJyb3V0ZSIsImNhbmNlbCIsImNsYyIsImhhbmRsZUNhbmNlbGxlZCIsInJlbG9hZCIsImJhY2siLCJmb3J3YXJkIiwicHVzaCIsIl9rZXkiLCJzdHJpbmdpZnkiLCJ4Iiwic2VsZiIsInBhZ2VYT2Zmc2V0IiwieSIsInBhZ2VZT2Zmc2V0IiwiZSIsImNoYW5nZSIsInJlcGxhY2UiLCJfYmZsIiwic2tpcE5hdmlnYXRlIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfRklMVEVSX0VOQUJMRUQiLCJtYXRjaGVzQmZsU3RhdGljIiwibWF0Y2hlc0JmbER5bmFtaWMiLCJjdXJBcyIsImFzTm9TbGFzaCIsImFzTm9TbGFzaExvY2FsZSIsIl90aGlzX19iZmxfcyIsIl90aGlzX19iZmxfczEiLCJfYmZsX3MiLCJjb250YWlucyIsIm5vcm1hbGl6ZWRBUyIsImN1ckFzUGFydHMiLCJzcGxpdCIsImkiLCJfdGhpc19fYmZsX2QiLCJjdXJyZW50UGFydCIsImpvaW4iLCJfYmZsX2QiLCJmb3JjZWRTY3JvbGwiLCJfdGhpc19jb21wb25lbnRzX3BhdGhuYW1lIiwiaXNMb2NhbFVSTCIsImlzUXVlcnlVcGRhdGluZyIsIl9oIiwic2hhbGxvdyIsInNob3VsZFJlc29sdmVIcmVmIiwiX3Nob3VsZFJlc29sdmVIcmVmIiwibmV4dFN0YXRlIiwic3RhdGUiLCJyZWFkeVN0YXRlQ2hhbmdlIiwiaXNSZWFkeSIsImlzU3NyIiwicHJldkxvY2FsZSIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJsb2NhbGVQYXRoUmVzdWx0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsImRpZE5hdmlnYXRlIiwiX3RoaXNfbG9jYWxlcyIsImRldGVjdGVkRG9tYWluIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwiZG9tYWluTG9jYWxlcyIsImlzTG9jYWxlRG9tYWluIiwiaG9zdG5hbWUiLCJkb21haW4iLCJhc05vQmFzZVBhdGgiLCJodHRwIiwiU1QiLCJwZXJmb3JtYW5jZSIsIm1hcmsiLCJzY3JvbGwiLCJyb3V0ZVByb3BzIiwiX2luRmxpZ2h0Um91dGUiLCJldmVudHMiLCJlbWl0IiwicmVtb3ZlTG9jYWxlIiwibG9jYWxlQ2hhbmdlIiwib25seUFIYXNoQ2hhbmdlIiwiY2hhbmdlU3RhdGUiLCJzY3JvbGxUb0hhc2giLCJzZXQiLCJjb21wb25lbnRzIiwiaXNFcnJvciIsInBhcnNlZCIsInVybElzTmV3IiwicGFyc2VkQXNQYXRobmFtZSIsIl9fYXBwUm91dGVyIiwiaXNNaWRkbGV3YXJlUmV3cml0ZSIsImlzTWlkZGxld2FyZU1hdGNoIiwicmV3cml0ZXNSZXN1bHQiLCJwIiwiZXh0ZXJuYWxEZXN0Iiwicm91dGVNYXRjaCIsInJvdXRlUmVnZXgiLCJzaG91bGRJbnRlcnBvbGF0ZSIsImludGVycG9sYXRlZEFzIiwiaW50ZXJwb2xhdGVBcyIsIm1pc3NpbmdQYXJhbXMiLCJrZXlzIiwiZ3JvdXBzIiwiZmlsdGVyIiwib3B0aW9uYWwiLCJjb25zb2xlIiwid2FybiIsIm9taXQiLCJpc0Vycm9yUm91dGUiLCJyb3V0ZUluZm8iLCJnZXRSb3V0ZUluZm8iLCJpc1ByZXZpZXciLCJpc0ZhbGxiYWNrIiwiY2xlYW5lZFBhcnNlZFBhdGhuYW1lIiwiZm9yRWFjaCIsImtleSIsInByZWZpeGVkQXMiLCJyZXdyaXRlQXMiLCJsb2NhbGVSZXN1bHQiLCJjdXJSb3V0ZU1hdGNoIiwiY29tcG9uZW50IiwiQ29tcG9uZW50IiwidW5zdGFibGVfc2NyaXB0TG9hZGVyIiwic2NyaXB0cyIsImNvbmNhdCIsInNjcmlwdCIsImhhbmRsZUNsaWVudFNjcmlwdExvYWQiLCJwcm9wcyIsIl9fTl9TU0ciLCJfX05fU1NQIiwicGFnZVByb3BzIiwiX19OX1JFRElSRUNUIiwiX19OX1JFRElSRUNUX0JBU0VfUEFUSCIsInBhcnNlZEhyZWYiLCJfX05fUFJFVklFVyIsIm5vdEZvdW5kUm91dGUiLCJmZXRjaENvbXBvbmVudCIsIl8iLCJpc05vdEZvdW5kIiwiX19ORVhUX0RBVEFfXyIsInN0YXR1c0NvZGUiLCJpc1ZhbGlkU2hhbGxvd1JvdXRlIiwic2hvdWxkU2Nyb2xsIiwicmVzZXRTY3JvbGwiLCJ1cGNvbWluZ1Njcm9sbFN0YXRlIiwidXBjb21pbmdSb3V0ZXJTdGF0ZSIsImNhblNraXBVcGRhdGluZyIsImNvbXBhcmVSb3V0ZXJTdGF0ZXMiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImxhbmciLCJoYXNoUmVnZXgiLCJnZXRVUkwiLCJfc2hhbGxvdyIsIl9fTiIsImhhbmRsZVJvdXRlSW5mb0Vycm9yIiwibG9hZEVycm9yRmFpbCIsImlzQXNzZXRFcnJvciIsInN0eWxlU2hlZXRzIiwiZ2V0SW5pdGlhbFByb3BzIiwiZ2lwRXJyIiwicm91dGVJbmZvRXJyIiwicmVxdWVzdGVkUm91dGUiLCJleGlzdGluZ0luZm8iLCJjYWNoZWRSb3V0ZUluZm8iLCJmZXRjaE5leHREYXRhUGFyYW1zIiwiZ2V0RGF0YUhyZWYiLCJza2lwSW50ZXJwb2xhdGlvbiIsInNiYyIsInNkYyIsInJlc29sdmVkUm91dGUiLCJpc0FQSVJvdXRlIiwicmVzIiwibW9kIiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwicmVxdWlyZSIsIndhc0JhaWxlZFByZWZldGNoIiwic2hvdWxkRmV0Y2hEYXRhIiwiX2dldERhdGEiLCJmZXRjaGVkIiwiZ2V0UHJvcGVyRXJyb3IiLCJzdWIiLCJiZWZvcmVQb3BTdGF0ZSIsImNiIiwiX2JwcyIsIm9sZFVybE5vSGFzaCIsIm9sZEhhc2giLCJuZXdVcmxOb0hhc2giLCJuZXdIYXNoIiwiaGFuZGxlU21vb3RoU2Nyb2xsIiwic2Nyb2xsVG8iLCJyYXdIYXNoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaWRFbCIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsSW50b1ZpZXciLCJuYW1lRWwiLCJnZXRFbGVtZW50c0J5TmFtZSIsIm9ubHlIYXNoQ2hhbmdlIiwicHJlZmV0Y2giLCJpc0JvdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhdGhuYW1lIiwib3JpZ2luYWxQYXRobmFtZSIsIl9fTkVYVF9NSURETEVXQVJFX1BSRUZFVENIIiwiX2lzU3NnIiwiaXNTc2ciLCJwcmlvcml0eSIsIl9fTkVYVF9PUFRJTUlTVElDX0NMSUVOVF9DQUNIRSIsImNvbXBvbmVudFJlc3VsdCIsImxvYWRQYWdlIiwiZm4iLCJfZ2V0RmxpZ2h0RGF0YSIsImN0eCIsIkFwcCIsIkFwcFRyZWUiLCJfd3JhcEFwcCIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxQcm9wcyIsIndyYXBBcHAiLCJzdWJzY3JpcHRpb24iLCJpc0ZpcnN0UG9wU3RhdGVFdmVudCIsIm9uUG9wU3RhdGUiLCJfX05BIiwiZ2V0SXRlbSIsImluaXRpYWwiLCJCbG9vbUZpbHRlciIsInJvdXRlckZpbHRlclNWYWx1ZSIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX1NfRklMVEVSIiwic3RhdGljRmlsdGVyRGF0YSIsInJvdXRlckZpbHRlckRWYWx1ZSIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX0RfRklMVEVSIiwiZHluYW1pY0ZpbHRlckRhdGEiLCJudW1IYXNoZXMiLCJudW1JdGVtcyIsImVycm9yUmF0ZSIsImltcG9ydCIsImF1dG9FeHBvcnREeW5hbWljIiwiYXV0b0V4cG9ydCIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJnc3NwIiwiZ2lwIiwiaXNFeHBlcmltZW50YWxDb21waWxlIiwiYXBwR2lwIiwiZ3NwIiwic2VhcmNoIiwiX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UiLCJhZGRFdmVudExpc3RlbmVyIiwic2Nyb2xsUmVzdG9yYXRpb24iLCJtaXR0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/add-locale.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-locale.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction addLocale(path, locale, defaultLocale, ignorePrefix) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path;\n const lower = path.toLowerCase();\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/api\")) return path;\n if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/\" + locale.toLowerCase())) return path;\n }\n // Add the locale prefix to the path.\n return (0, _addpathprefix.addPathPrefix)(path, \"/\" + locale);\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FRZ0JBOzs7ZUFBQUE7OzsyQ0FSYzsyQ0FDQTtBQU92QixTQUFTQSxVQUNkQyxJQUFZLEVBQ1pDLE1BQXVCLEVBQ3ZCQyxhQUFzQixFQUN0QkMsWUFBc0I7SUFFdEIsNEVBQTRFO0lBQzVFLHNCQUFzQjtJQUN0QixJQUFJLENBQUNGLFVBQVVBLFdBQVdDLGVBQWUsT0FBT0Y7SUFFaEQsTUFBTUksUUFBUUosS0FBS0ssV0FBVztJQUU5QiwyRUFBMkU7SUFDM0UsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQ0YsY0FBYztRQUNqQixJQUFJRyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQUNGLE9BQU8sU0FBUyxPQUFPSjtRQUN6QyxJQUFJTSxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQUNGLE9BQU8sTUFBSUgsT0FBT0ksV0FBVyxLQUFPLE9BQU9MO0lBQy9EO0lBRUEscUNBQXFDO0lBQ3JDLE9BQU9PLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFBQ1AsTUFBTSxNQUFJQztBQUNqQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGUudHM/MDI0OSJdLCJuYW1lcyI6WyJhZGRMb2NhbGUiLCJwYXRoIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsImlnbm9yZVByZWZpeCIsImxvd2VyIiwidG9Mb3dlckNhc2UiLCJwYXRoSGFzUHJlZml4IiwiYWRkUGF0aFByZWZpeCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/add-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***!
|
||
\***************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith(\"/\") || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQU1nQkE7OztlQUFBQTs7O3VDQU5VO0FBTW5CLFNBQVNBLGNBQWNDLElBQVksRUFBRUMsTUFBZTtJQUN6RCxJQUFJLENBQUNELEtBQUtFLFVBQVUsQ0FBQyxRQUFRLENBQUNELFFBQVE7UUFDcEMsT0FBT0Q7SUFDVDtJQUVBLE1BQU0sRUFBRUcsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFTLEVBQUNOO0lBQzVDLE9BQU8sS0FBR0MsU0FBU0UsV0FBV0MsUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXgudHM/ZmM5YyJdLCJuYW1lcyI6WyJhZGRQYXRoUHJlZml4IiwicGF0aCIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js ***!
|
||
\***************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathSuffix\", ({\n enumerable: true,\n get: function() {\n return addPathSuffix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathSuffix(path, suffix) {\n if (!path.startsWith(\"/\") || !suffix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + pathname + suffix + query + hash;\n} //# sourceMappingURL=add-path-suffix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXN1ZmZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQU9nQkE7OztlQUFBQTs7O3VDQVBVO0FBT25CLFNBQVNBLGNBQWNDLElBQVksRUFBRUMsTUFBZTtJQUN6RCxJQUFJLENBQUNELEtBQUtFLFVBQVUsQ0FBQyxRQUFRLENBQUNELFFBQVE7UUFDcEMsT0FBT0Q7SUFDVDtJQUVBLE1BQU0sRUFBRUcsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFTLEVBQUNOO0lBQzVDLE9BQU8sS0FBR0csV0FBV0YsU0FBU0csUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1zdWZmaXgudHM/YWM3OSJdLCJuYW1lcyI6WyJhZGRQYXRoU3VmZml4IiwicGF0aCIsInN1ZmZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/app-paths.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***!
|
||
\*********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split(\"/\").reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === \"@\") {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === \"page\" || segment === \"route\") && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, \"\"));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, \"$1\");\n} //# sourceMappingURL=app-paths.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFzQmdCQSxrQkFBZ0I7ZUFBaEJBOztJQW1DQUMsaUJBQWU7ZUFBZkE7OztnREF6RG1CO3FDQUNKO0FBcUJ4QixTQUFTRCxpQkFBaUJFLEtBQWE7SUFDNUMsT0FBT0MsQ0FBQUEsR0FBQUEsb0JBQUFBLGtCQUFrQixFQUN2QkQsTUFBTUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQyxDQUFDQyxVQUFVQyxTQUFTQyxPQUFPQztRQUNqRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDRixTQUFTO1lBQ1osT0FBT0Q7UUFDVDtRQUVBLHNCQUFzQjtRQUN0QixJQUFJSSxDQUFBQSxHQUFBQSxTQUFBQSxjQUFjLEVBQUNILFVBQVU7WUFDM0IsT0FBT0Q7UUFDVDtRQUVBLGlDQUFpQztRQUNqQyxJQUFJQyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUs7WUFDdEIsT0FBT0Q7UUFDVDtRQUVBLHVEQUF1RDtRQUN2RCxJQUNFLENBQUNDLFlBQVksVUFBVUEsWUFBWSxZQUNuQ0MsVUFBVUMsU0FBU0UsTUFBTSxHQUFHLEdBQzVCO1lBQ0EsT0FBT0w7UUFDVDtRQUVBLE9BQU9BLFdBQVksTUFBR0M7SUFDeEIsR0FBRztBQUVQO0FBTU8sU0FBU04sZ0JBQWdCVyxHQUFXO0lBQ3pDLE9BQU9BLElBQUlDLE9BQU8sQ0FDaEIsZUFFQTtBQUVKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXBwLXBhdGhzLnRzPzI0MWUiXSwibmFtZXMiOlsibm9ybWFsaXplQXBwUGF0aCIsIm5vcm1hbGl6ZVJzY1VSTCIsInJvdXRlIiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwic3BsaXQiLCJyZWR1Y2UiLCJwYXRobmFtZSIsInNlZ21lbnQiLCJpbmRleCIsInNlZ21lbnRzIiwiaXNHcm91cFNlZ21lbnQiLCJsZW5ndGgiLCJ1cmwiLCJyZXBsYWNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js ***!
|
||
\************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Convert router.asPath to a URLSearchParams object\n// example: /dynamic/[slug]?foo=bar -> { foo: 'bar' }\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"asPathToSearchParams\", ({\n enumerable: true,\n get: function() {\n return asPathToSearchParams;\n }\n}));\nfunction asPathToSearchParams(asPath) {\n return new URL(asPath, \"http://n\").searchParams;\n} //# sourceMappingURL=as-path-to-search-params.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FzLXBhdGgtdG8tc2VhcmNoLXBhcmFtcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQscURBQXFEOzs7Ozt3REFDckNBOzs7ZUFBQUE7OztBQUFULFNBQVNBLHFCQUFxQkMsTUFBYztJQUNqRCxPQUFPLElBQUlDLElBQUlELFFBQVEsWUFBWUUsWUFBWTtBQUNqRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FzLXBhdGgtdG8tc2VhcmNoLXBhcmFtcy50cz9hODc3Il0sIm5hbWVzIjpbImFzUGF0aFRvU2VhcmNoUGFyYW1zIiwiYXNQYXRoIiwiVVJMIiwic2VhcmNoUGFyYW1zIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/compare-states.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/compare-states.js ***!
|
||
\**************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"compareRouterStates\", ({\n enumerable: true,\n get: function() {\n return compareRouterStates;\n }\n}));\nfunction compareRouterStates(a, b) {\n const stateKeys = Object.keys(a);\n if (stateKeys.length !== Object.keys(b).length) return false;\n for(let i = stateKeys.length; i--;){\n const key = stateKeys[i];\n if (key === \"query\") {\n const queryKeys = Object.keys(a.query);\n if (queryKeys.length !== Object.keys(b.query).length) {\n return false;\n }\n for(let j = queryKeys.length; j--;){\n const queryKey = queryKeys[j];\n if (!b.query.hasOwnProperty(queryKey) || a.query[queryKey] !== b.query[queryKey]) {\n return false;\n }\n }\n } else if (!b.hasOwnProperty(key) || a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n} //# sourceMappingURL=compare-states.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2NvbXBhcmUtc3RhdGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBRWdCQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxvQkFBb0JDLENBQWtCLEVBQUVDLENBQWtCO0lBQ3hFLE1BQU1DLFlBQVlDLE9BQU9DLElBQUksQ0FBQ0o7SUFDOUIsSUFBSUUsVUFBVUcsTUFBTSxLQUFLRixPQUFPQyxJQUFJLENBQUNILEdBQUdJLE1BQU0sRUFBRSxPQUFPO0lBRXZELElBQUssSUFBSUMsSUFBSUosVUFBVUcsTUFBTSxFQUFFQyxLQUFPO1FBQ3BDLE1BQU1DLE1BQU1MLFNBQVMsQ0FBQ0ksRUFBRTtRQUN4QixJQUFJQyxRQUFRLFNBQVM7WUFDbkIsTUFBTUMsWUFBWUwsT0FBT0MsSUFBSSxDQUFDSixFQUFFUyxLQUFLO1lBQ3JDLElBQUlELFVBQVVILE1BQU0sS0FBS0YsT0FBT0MsSUFBSSxDQUFDSCxFQUFFUSxLQUFLLEVBQUVKLE1BQU0sRUFBRTtnQkFDcEQsT0FBTztZQUNUO1lBQ0EsSUFBSyxJQUFJSyxJQUFJRixVQUFVSCxNQUFNLEVBQUVLLEtBQU87Z0JBQ3BDLE1BQU1DLFdBQVdILFNBQVMsQ0FBQ0UsRUFBRTtnQkFDN0IsSUFDRSxDQUFDVCxFQUFFUSxLQUFLLENBQUNHLGNBQWMsQ0FBQ0QsYUFDeEJYLEVBQUVTLEtBQUssQ0FBQ0UsU0FBUyxLQUFLVixFQUFFUSxLQUFLLENBQUNFLFNBQVMsRUFDdkM7b0JBQ0EsT0FBTztnQkFDVDtZQUNGO1FBQ0YsT0FBTyxJQUNMLENBQUNWLEVBQUVXLGNBQWMsQ0FBQ0wsUUFDbEJQLENBQUMsQ0FBQ08sSUFBNkIsS0FBS04sQ0FBQyxDQUFDTSxJQUE2QixFQUNuRTtZQUNBLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBTztBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY29tcGFyZS1zdGF0ZXMudHM/OGU5NiJdLCJuYW1lcyI6WyJjb21wYXJlUm91dGVyU3RhdGVzIiwiYSIsImIiLCJzdGF0ZUtleXMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiaSIsImtleSIsInF1ZXJ5S2V5cyIsInF1ZXJ5IiwiaiIsInF1ZXJ5S2V5IiwiaGFzT3duUHJvcGVydHkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/compare-states.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js ***!
|
||
\*************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"formatNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return formatNextPathnameInfo;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _addpathsuffix = __webpack_require__(/*! ./add-path-suffix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"./node_modules/next/dist/shared/lib/router/utils/add-locale.js\");\nfunction formatNextPathnameInfo(info) {\n let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);\n if (info.buildId || !info.trailingSlash) {\n pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n }\n if (info.buildId) {\n pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, \"/_next/data/\" + info.buildId), info.pathname === \"/\" ? \"index.json\" : \".json\");\n }\n pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath);\n return !info.buildId && info.trailingSlash ? !pathname.endsWith(\"/\") ? (0, _addpathsuffix.addPathSuffix)(pathname, \"/\") : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname);\n} //# sourceMappingURL=format-next-pathname-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8uanMiLCJtYXBwaW5ncyI6Ijs7OzswREFXZ0JBOzs7ZUFBQUE7OztpREFWb0I7MkNBQ047MkNBQ0E7dUNBQ0o7QUFPbkIsU0FBU0EsdUJBQXVCQyxJQUFrQjtJQUN2RCxJQUFJQyxXQUFXQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFTLEVBQ3RCRixLQUFLQyxRQUFRLEVBQ2JELEtBQUtHLE1BQU0sRUFDWEgsS0FBS0ksT0FBTyxHQUFHQyxZQUFZTCxLQUFLTSxhQUFhLEVBQzdDTixLQUFLTyxZQUFZO0lBR25CLElBQUlQLEtBQUtJLE9BQU8sSUFBSSxDQUFDSixLQUFLUSxhQUFhLEVBQUU7UUFDdkNQLFdBQVdRLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ1I7SUFDakM7SUFFQSxJQUFJRCxLQUFLSSxPQUFPLEVBQUU7UUFDaEJILFdBQVdTLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFDdEJDLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFBQ1YsVUFBVSxpQkFBZUQsS0FBS0ksT0FBTyxHQUNuREosS0FBS0MsUUFBUSxLQUFLLE1BQU0sZUFBZTtJQUUzQztJQUVBQSxXQUFXVSxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQUNWLFVBQVVELEtBQUtZLFFBQVE7SUFDaEQsT0FBTyxDQUFDWixLQUFLSSxPQUFPLElBQUlKLEtBQUtRLGFBQWEsR0FDdEMsQ0FBQ1AsU0FBU1ksUUFBUSxDQUFDLE9BQ2pCSCxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQUNULFVBQVUsT0FDeEJBLFdBQ0ZRLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ1I7QUFDMUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtbmV4dC1wYXRobmFtZS1pbmZvLnRzP2RlNzIiXSwibmFtZXMiOlsiZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyIsImluZm8iLCJwYXRobmFtZSIsImFkZExvY2FsZSIsImxvY2FsZSIsImJ1aWxkSWQiLCJ1bmRlZmluZWQiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwidHJhaWxpbmdTbGFzaCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJhZGRQYXRoU3VmZml4IiwiYWRkUGF0aFByZWZpeCIsImJhc2VQYXRoIiwiZW5kc1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/format-url.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || \"\";\n let pathname = urlObj.pathname || \"\";\n let hash = urlObj.hash || \"\";\n let query = urlObj.query || \"\";\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, \":\") + \"@\" : \"\";\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(\":\") ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += \":\" + urlObj.port;\n }\n }\n if (query && typeof query === \"object\") {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || \"\";\n if (protocol && !protocol.endsWith(\":\")) protocol += \":\";\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = \"//\" + (host || \"\");\n if (pathname && pathname[0] !== \"/\") pathname = \"/\" + pathname;\n } else if (!host) {\n host = \"\";\n }\n if (hash && hash[0] !== \"#\") hash = \"#\" + hash;\n if (search && search[0] !== \"?\") search = \"?\" + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace(\"#\", \"%23\");\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n \"auth\",\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"slashes\"\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === \"object\") {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwuanMiLCJtYXBwaW5ncyI6IkFBQUEsdUNBQXVDO0FBQ3ZDLHNEQUFzRDtBQUN0RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLGdFQUFnRTtBQUNoRSxzRUFBc0U7QUFDdEUsc0VBQXNFO0FBQ3RFLDRFQUE0RTtBQUM1RSxxRUFBcUU7QUFDckUsd0JBQXdCO0FBQ3hCLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsNkRBQTZEO0FBQzdELDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0Usd0VBQXdFO0FBQ3hFLDRFQUE0RTtBQUM1RSx5Q0FBeUM7Ozs7Ozs7Ozs7Ozs7SUFRekJBLFdBQVM7ZUFBVEE7O0lBNkRBQyxzQkFBb0I7ZUFBcEJBOztJQWZIQyxlQUFhO2VBQWJBOzs7O21GQWxEZ0I7QUFFN0IsTUFBTUMsbUJBQW1CO0FBRWxCLFNBQVNILFVBQVVJLE1BQWlCO0lBQ3pDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUUsR0FBR0Y7SUFDekIsSUFBSUcsV0FBV0gsT0FBT0csUUFBUSxJQUFJO0lBQ2xDLElBQUlDLFdBQVdKLE9BQU9JLFFBQVEsSUFBSTtJQUNsQyxJQUFJQyxPQUFPTCxPQUFPSyxJQUFJLElBQUk7SUFDMUIsSUFBSUMsUUFBUU4sT0FBT00sS0FBSyxJQUFJO0lBQzVCLElBQUlDLE9BQXVCO0lBRTNCTixPQUFPQSxPQUFPTyxtQkFBbUJQLE1BQU1RLE9BQU8sQ0FBQyxRQUFRLE9BQU8sTUFBTTtJQUVwRSxJQUFJVCxPQUFPTyxJQUFJLEVBQUU7UUFDZkEsT0FBT04sT0FBT0QsT0FBT08sSUFBSTtJQUMzQixPQUFPLElBQUlMLFVBQVU7UUFDbkJLLE9BQU9OLE9BQVEsRUFBQ0MsU0FBU1EsT0FBTyxDQUFDLE9BQU8sTUFBSVIsV0FBUyxNQUFLQSxRQUFBQTtRQUMxRCxJQUFJRixPQUFPVyxJQUFJLEVBQUU7WUFDZkosUUFBUSxNQUFNUCxPQUFPVyxJQUFJO1FBQzNCO0lBQ0Y7SUFFQSxJQUFJTCxTQUFTLE9BQU9BLFVBQVUsVUFBVTtRQUN0Q0EsUUFBUU0sT0FBT0MsYUFBWUMsc0JBQXNCLENBQUNSO0lBQ3BEO0lBRUEsSUFBSVMsU0FBU2YsT0FBT2UsTUFBTSxJQUFLVCxTQUFTLE1BQUlBLFNBQVk7SUFFeEQsSUFBSUgsWUFBWSxDQUFDQSxTQUFTYSxRQUFRLENBQUMsTUFBTWIsWUFBWTtJQUVyRCxJQUNFSCxPQUFPaUIsT0FBTyxJQUNiLENBQUMsQ0FBQ2QsWUFBWUosaUJBQWlCbUIsSUFBSSxDQUFDZixTQUFBQSxLQUFjSSxTQUFTLE9BQzVEO1FBQ0FBLE9BQU8sT0FBUUEsQ0FBQUEsUUFBUTtRQUN2QixJQUFJSCxZQUFZQSxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUtBLFdBQVcsTUFBTUE7SUFDeEQsT0FBTyxJQUFJLENBQUNHLE1BQU07UUFDaEJBLE9BQU87SUFDVDtJQUVBLElBQUlGLFFBQVFBLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBS0EsT0FBTyxNQUFNQTtJQUMxQyxJQUFJVSxVQUFVQSxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUtBLFNBQVMsTUFBTUE7SUFFaERYLFdBQVdBLFNBQVNLLE9BQU8sQ0FBQyxTQUFTRDtJQUNyQ08sU0FBU0EsT0FBT04sT0FBTyxDQUFDLEtBQUs7SUFFN0IsT0FBTyxLQUFHTixXQUFXSSxPQUFPSCxXQUFXVyxTQUFTVjtBQUNsRDtBQUVPLE1BQU1QLGdCQUFnQjtJQUMzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLFNBQVNELHFCQUFxQnNCLEdBQWM7SUFDakQsSUFBSUMsSUFBeUIsRUFBZTtRQUMxQyxJQUFJRCxRQUFRLFFBQVEsT0FBT0EsUUFBUSxVQUFVO1lBQzNDRSxPQUFPQyxJQUFJLENBQUNILEtBQUtJLE9BQU8sQ0FBQyxDQUFDQztnQkFDeEIsSUFBSSxDQUFDMUIsY0FBYzJCLFFBQVEsQ0FBQ0QsTUFBTTtvQkFDaENFLFFBQVFDLElBQUksQ0FDVix1REFBcURIO2dCQUV6RDtZQUNGO1FBQ0Y7SUFDRjtJQUVBLE9BQU81QixVQUFVdUI7QUFDbkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsLnRzPzQ1NWYiXSwibmFtZXMiOlsiZm9ybWF0VXJsIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJ1cmxPYmplY3RLZXlzIiwic2xhc2hlZFByb3RvY29scyIsInVybE9iaiIsImF1dGgiLCJob3N0bmFtZSIsInByb3RvY29sIiwicGF0aG5hbWUiLCJoYXNoIiwicXVlcnkiLCJob3N0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImluZGV4T2YiLCJwb3J0IiwiU3RyaW5nIiwicXVlcnlzdHJpbmciLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiZW5kc1dpdGgiLCJzbGFzaGVzIiwidGVzdCIsInVybCIsInByb2Nlc3MiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIiwiY29uc29sZSIsIndhcm4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/format-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js ***!
|
||
\*************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Translates a logical route into its pages asset path (relative from a common prefix)\n// \"asset path\" being its javascript file, data file, prerendered html,...\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return getAssetPathFromRoute;\n }\n}));\nfunction getAssetPathFromRoute(route, ext) {\n if (ext === void 0) ext = \"\";\n const path = route === \"/\" ? \"/index\" : /^\\/index(\\/|$)/.test(route) ? \"/index\" + route : route;\n return path + ext;\n} //# sourceMappingURL=get-asset-path-from-route.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsdUZBQXVGO0FBQ3ZGLDBFQUEwRTs7Ozs7MkNBQzFFOzs7ZUFBd0JBOzs7QUFBVCxTQUFTQSxzQkFDdEJDLEtBQWEsRUFDYkMsR0FBZ0I7SUFBaEJBLElBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLE1BQWM7SUFFZCxNQUFNQyxPQUNKRixVQUFVLE1BQ04sV0FDQSxpQkFBaUJHLElBQUksQ0FBQ0gsU0FDdEIsV0FBU0EsUUFDVEE7SUFDTixPQUFPRSxPQUFPRDtBQUNoQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGUudHM/ODAzYiJdLCJuYW1lcyI6WyJnZXRBc3NldFBhdGhGcm9tUm91dGUiLCJyb3V0ZSIsImV4dCIsInBhdGgiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js ***!
|
||
\**********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return getNextPathnameInfo;\n }\n}));\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removepathprefix = __webpack_require__(/*! ./remove-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction getNextPathnameInfo(pathname, options) {\n var _options_nextConfig;\n const { basePath, i18n, trailingSlash } = (_options_nextConfig = options.nextConfig) != null ? _options_nextConfig : {};\n const info = {\n pathname,\n trailingSlash: pathname !== \"/\" ? pathname.endsWith(\"/\") : trailingSlash\n };\n if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) {\n info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath);\n info.basePath = basePath;\n }\n let pathnameNoDataPrefix = info.pathname;\n if (info.pathname.startsWith(\"/_next/data/\") && info.pathname.endsWith(\".json\")) {\n const paths = info.pathname.replace(/^\\/_next\\/data\\//, \"\").replace(/\\.json$/, \"\").split(\"/\");\n const buildId = paths[0];\n info.buildId = buildId;\n pathnameNoDataPrefix = paths[1] !== \"index\" ? \"/\" + paths.slice(1).join(\"/\") : \"/\";\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix;\n }\n }\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales);\n info.locale = result.detectedLocale;\n var _result_pathname;\n info.pathname = (_result_pathname = result.pathname) != null ? _result_pathname : info.pathname;\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales);\n if (result.detectedLocale) {\n info.locale = result.detectedLocale;\n }\n }\n }\n return info;\n} //# sourceMappingURL=get-next-pathname-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1uZXh0LXBhdGhuYW1lLWluZm8uanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFvRGdCQTs7O2VBQUFBOzs7aURBcERvQjs4Q0FDSDsyQ0FDSDtBQWtEdkIsU0FBU0Esb0JBQ2RDLFFBQWdCLEVBQ2hCQyxPQUFnQjtRQUUwQkE7SUFBMUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsYUFBYSxFQUFFLEdBQUdILENBQUFBLHNCQUFBQSxRQUFRSSxVQUFVLFlBQWxCSixzQkFBc0IsQ0FBQztJQUNqRSxNQUFNSyxPQUF5QjtRQUM3Qk47UUFDQUksZUFBZUosYUFBYSxNQUFNQSxTQUFTTyxRQUFRLENBQUMsT0FBT0g7SUFDN0Q7SUFFQSxJQUFJRixZQUFZTSxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQUNGLEtBQUtOLFFBQVEsRUFBRUUsV0FBVztRQUN0REksS0FBS04sUUFBUSxHQUFHUyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQWdCLEVBQUNILEtBQUtOLFFBQVEsRUFBRUU7UUFDaERJLEtBQUtKLFFBQVEsR0FBR0E7SUFDbEI7SUFDQSxJQUFJUSx1QkFBdUJKLEtBQUtOLFFBQVE7SUFFeEMsSUFDRU0sS0FBS04sUUFBUSxDQUFDVyxVQUFVLENBQUMsbUJBQ3pCTCxLQUFLTixRQUFRLENBQUNPLFFBQVEsQ0FBQyxVQUN2QjtRQUNBLE1BQU1LLFFBQVFOLEtBQUtOLFFBQVEsQ0FDeEJhLE9BQU8sQ0FBQyxvQkFBb0IsSUFDNUJBLE9BQU8sQ0FBQyxXQUFXLElBQ25CQyxLQUFLLENBQUM7UUFFVCxNQUFNQyxVQUFVSCxLQUFLLENBQUMsRUFBRTtRQUN4Qk4sS0FBS1MsT0FBTyxHQUFHQTtRQUNmTCx1QkFDRUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxVQUFVLE1BQUlBLE1BQU1JLEtBQUssQ0FBQyxHQUFHQyxJQUFJLENBQUMsT0FBUztRQUUxRCxzREFBc0Q7UUFDdEQsa0RBQWtEO1FBQ2xELElBQUloQixRQUFRaUIsU0FBUyxLQUFLLE1BQU07WUFDOUJaLEtBQUtOLFFBQVEsR0FBR1U7UUFDbEI7SUFDRjtJQUVBLDRFQUE0RTtJQUM1RSx5QkFBeUI7SUFDekIsSUFBSVAsTUFBTTtRQUNSLElBQUlnQixTQUFTbEIsUUFBUW1CLFlBQVksR0FDN0JuQixRQUFRbUIsWUFBWSxDQUFDQyxPQUFPLENBQUNmLEtBQUtOLFFBQVEsSUFDMUNzQixDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQW1CLEVBQUNoQixLQUFLTixRQUFRLEVBQUVHLEtBQUtvQixPQUFPO1FBRW5EakIsS0FBS2tCLE1BQU0sR0FBR0wsT0FBT00sY0FBYztZQUNuQk47UUFBaEJiLEtBQUtOLFFBQVEsR0FBR21CLENBQUFBLG1CQUFBQSxPQUFPbkIsUUFBUSxZQUFmbUIsbUJBQW1CYixLQUFLTixRQUFRO1FBRWhELElBQUksQ0FBQ21CLE9BQU9NLGNBQWMsSUFBSW5CLEtBQUtTLE9BQU8sRUFBRTtZQUMxQ0ksU0FBU2xCLFFBQVFtQixZQUFZLEdBQ3pCbkIsUUFBUW1CLFlBQVksQ0FBQ0MsT0FBTyxDQUFDWCx3QkFDN0JZLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ1osc0JBQXNCUCxLQUFLb0IsT0FBTztZQUUxRCxJQUFJSixPQUFPTSxjQUFjLEVBQUU7Z0JBQ3pCbkIsS0FBS2tCLE1BQU0sR0FBR0wsT0FBT00sY0FBYztZQUNyQztRQUNGO0lBQ0Y7SUFDQSxPQUFPbkI7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1uZXh0LXBhdGhuYW1lLWluZm8udHM/ZGY0MyJdLCJuYW1lcyI6WyJnZXROZXh0UGF0aG5hbWVJbmZvIiwicGF0aG5hbWUiLCJvcHRpb25zIiwiYmFzZVBhdGgiLCJpMThuIiwidHJhaWxpbmdTbGFzaCIsIm5leHRDb25maWciLCJpbmZvIiwiZW5kc1dpdGgiLCJwYXRoSGFzUHJlZml4IiwicmVtb3ZlUGF0aFByZWZpeCIsInBhdGhuYW1lTm9EYXRhUHJlZml4Iiwic3RhcnRzV2l0aCIsInBhdGhzIiwicmVwbGFjZSIsInNwbGl0IiwiYnVpbGRJZCIsInNsaWNlIiwiam9pbiIsInBhcnNlRGF0YSIsInJlc3VsdCIsImkxOG5Qcm92aWRlciIsImFuYWx5emUiLCJub3JtYWxpemVMb2NhbGVQYXRoIiwibG9jYWxlcyIsImxvY2FsZSIsImRldGVjdGVkTG9jYWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js ***!
|
||
\********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Run function with `scroll-behavior: auto` applied to `<html/>`.\n * This css change will be reverted after the function finishes.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSmoothScroll\", ({\n enumerable: true,\n get: function() {\n return handleSmoothScroll;\n }\n}));\nfunction handleSmoothScroll(fn, options) {\n if (options === void 0) options = {};\n // if only the hash is changed, we don't need to disable smooth scrolling\n // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n if (options.onlyHashChange) {\n fn();\n return;\n }\n const htmlElement = document.documentElement;\n const existing = htmlElement.style.scrollBehavior;\n htmlElement.style.scrollBehavior = \"auto\";\n if (!options.dontForceLayout) {\n // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n // Otherwise it will not pickup the change in scrollBehavior\n // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n htmlElement.getClientRects();\n }\n fn();\n htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=handle-smooth-scroll.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQzs7OztzREFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsbUJBQ2RDLEVBQWMsRUFDZEMsT0FBcUU7SUFBckVBLElBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLFVBQW1FLENBQUM7SUFFcEUseUVBQXlFO0lBQ3pFLDZGQUE2RjtJQUM3RixJQUFJQSxRQUFRQyxjQUFjLEVBQUU7UUFDMUJGO1FBQ0E7SUFDRjtJQUNBLE1BQU1HLGNBQWNDLFNBQVNDLGVBQWU7SUFDNUMsTUFBTUMsV0FBV0gsWUFBWUksS0FBSyxDQUFDQyxjQUFjO0lBQ2pETCxZQUFZSSxLQUFLLENBQUNDLGNBQWMsR0FBRztJQUNuQyxJQUFJLENBQUNQLFFBQVFRLGVBQWUsRUFBRTtRQUM1Qiw4RUFBOEU7UUFDOUUsNERBQTREO1FBQzVELHlGQUF5RjtRQUN6Rk4sWUFBWU8sY0FBYztJQUM1QjtJQUNBVjtJQUNBRyxZQUFZSSxLQUFLLENBQUNDLGNBQWMsR0FBR0Y7QUFDckMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9oYW5kbGUtc21vb3RoLXNjcm9sbC50cz8xOTI2Il0sIm5hbWVzIjpbImhhbmRsZVNtb290aFNjcm9sbCIsImZuIiwib3B0aW9ucyIsIm9ubHlIYXNoQ2hhbmdlIiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImV4aXN0aW5nIiwic3R5bGUiLCJzY3JvbGxCZWhhdmlvciIsImRvbnRGb3JjZUxheW91dCIsImdldENsaWVudFJlY3RzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/index.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***!
|
||
\*****************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFTQSxpQkFBZTtlQUFmQSxjQUFBQSxlQUFlOztJQUNmQyxnQkFBYztlQUFkQSxXQUFBQSxjQUFjOzs7MENBRFM7dUNBQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbmRleC50cz9jY2E1Il0sIm5hbWVzIjpbImdldFNvcnRlZFJvdXRlcyIsImlzRHluYW1pY1JvdXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***!
|
||
\**************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = \"\";\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : \"\") || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || \"\";\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? \"...\" : \"\") + param + \"]\";\n if (optional) {\n replaced = (!value ? \"/\" : \"\") + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join(\"/\") : encodeURIComponent(value)) || \"/\");\n })) {\n interpolatedRoute = \"\" // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVycG9sYXRlLWFzLmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBS2dCQTs7O2VBQUFBOzs7MENBSGdCO3dDQUNGO0FBRXZCLFNBQVNBLGNBQ2RDLEtBQWEsRUFDYkMsVUFBa0IsRUFDbEJDLEtBQXFCO0lBRXJCLElBQUlDLG9CQUFvQjtJQUV4QixNQUFNQyxlQUFlQyxDQUFBQSxHQUFBQSxZQUFBQSxhQUFhLEVBQUNMO0lBQ25DLE1BQU1NLGdCQUFnQkYsYUFBYUcsTUFBTTtJQUN6QyxNQUFNQyxpQkFFSFAsQ0FBQUEsZUFBZUQsUUFBUVMsQ0FBQUEsR0FBQUEsY0FBQUEsZUFBZSxFQUFDTCxjQUFjSCxjQUFjLE9BQ3BFLGdEQUFnRDtJQUNoRCxzRUFBc0U7SUFDdEVDO0lBRUZDLG9CQUFvQkg7SUFDcEIsTUFBTVUsU0FBU0MsT0FBT0MsSUFBSSxDQUFDTjtJQUUzQixJQUNFLENBQUNJLE9BQU9HLEtBQUssQ0FBQyxDQUFDQztRQUNiLElBQUlDLFFBQVFQLGNBQWMsQ0FBQ00sTUFBTSxJQUFJO1FBQ3JDLE1BQU0sRUFBRUUsTUFBTSxFQUFFQyxRQUFRLEVBQUUsR0FBR1gsYUFBYSxDQUFDUSxNQUFNO1FBRWpELGlDQUFpQztRQUNqQywwREFBMEQ7UUFDMUQsSUFBSUksV0FBVyxNQUFJRixDQUFBQSxTQUFTLFFBQVEsTUFBS0YsUUFBTTtRQUMvQyxJQUFJRyxVQUFVO1lBQ1pDLFdBQVcsQ0FBRyxDQUFDSCxRQUFRLE1BQU0sTUFBRyxNQUFHRyxXQUFTO1FBQzlDO1FBQ0EsSUFBSUYsVUFBVSxDQUFDRyxNQUFNQyxPQUFPLENBQUNMLFFBQVFBLFFBQVE7WUFBQ0E7U0FBTTtRQUVwRCxPQUNFLENBQUNFLFlBQVlILFNBQVNOLGNBQUFBLEtBQ3RCLDZDQUE2QztRQUM1Q0wsQ0FBQUEsb0JBQ0NBLGtCQUFtQmtCLE9BQU8sQ0FDeEJILFVBQ0FGLFNBQ0lELE1BQ0dPLEdBQUcsQ0FFRix1REFBdUQ7UUFDdkQsa0RBQWtEO1FBQ2xELG9DQUFvQztRQUNwQyxDQUFDQyxVQUFZQyxtQkFBbUJELFVBRWpDRSxJQUFJLENBQUMsT0FDUkQsbUJBQW1CVCxXQUNwQjtJQUVYLElBQ0E7UUFDQVosb0JBQW9CLEdBQUcsbUNBQW1DOztJQUUxRCx1RUFBdUU7SUFDdkUsa0RBQWtEO0lBQ3BEO0lBQ0EsT0FBTztRQUNMTztRQUNBZ0IsUUFBUXZCO0lBQ1Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVycG9sYXRlLWFzLnRzPzAzMjMiXSwibmFtZXMiOlsiaW50ZXJwb2xhdGVBcyIsInJvdXRlIiwiYXNQYXRobmFtZSIsInF1ZXJ5IiwiaW50ZXJwb2xhdGVkUm91dGUiLCJkeW5hbWljUmVnZXgiLCJnZXRSb3V0ZVJlZ2V4IiwiZHluYW1pY0dyb3VwcyIsImdyb3VwcyIsImR5bmFtaWNNYXRjaGVzIiwiZ2V0Um91dGVNYXRjaGVyIiwicGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5IiwicGFyYW0iLCJ2YWx1ZSIsInJlcGVhdCIsIm9wdGlvbmFsIiwicmVwbGFjZWQiLCJBcnJheSIsImlzQXJyYXkiLCJyZXBsYWNlIiwibWFwIiwic2VnbWVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsImpvaW4iLCJyZXN1bHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/is-bot.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-bot.js ***!
|
||
\******************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isBot\", ({\n enumerable: true,\n get: function() {\n return isBot;\n }\n}));\nfunction isBot(userAgent) {\n return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(userAgent);\n} //# sourceMappingURL=is-bot.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsTUFBTUMsU0FBaUI7SUFDckMsT0FBTyxvVkFBb1ZDLElBQUksQ0FDN1ZEO0FBRUoiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3QudHM/NGUzMyJdLCJuYW1lcyI6WyJpc0JvdCIsInVzZXJBZ2VudCIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-bot.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\n// Identify /[param]/ in route string\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMuanMiLCJtYXBwaW5ncyI6Ijs7OztrREFRZ0JBOzs7ZUFBQUE7OztnREFMVDtBQUVQLHFDQUFxQztBQUNyQyxNQUFNQyxhQUFhO0FBRVosU0FBU0QsZUFBZUUsS0FBYTtJQUMxQyxJQUFJQyxDQUFBQSxHQUFBQSxvQkFBQUEsMEJBQTBCLEVBQUNELFFBQVE7UUFDckNBLFFBQVFFLENBQUFBLEdBQUFBLG9CQUFBQSxtQ0FBbUMsRUFBQ0YsT0FBT0csZ0JBQWdCO0lBQ3JFO0lBRUEsT0FBT0osV0FBV0ssSUFBSSxDQUFDSjtBQUN6QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMudHM/YzgwNiJdLCJuYW1lcyI6WyJpc0R5bmFtaWNSb3V0ZSIsIlRFU1RfUk9VVEUiLCJyb3V0ZSIsImlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoIiwiZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24iLCJpbnRlcmNlcHRlZFJvdXRlIiwidGVzdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/is-local-url.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***!
|
||
\************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWxvY2FsLXVybC5qcyIsIm1hcHBpbmdzIjoiOzs7OzhDQU1nQkE7OztlQUFBQTs7O21DQU5pQzt5Q0FDckI7QUFLckIsU0FBU0EsV0FBV0MsR0FBVztJQUNwQyxnRUFBZ0U7SUFDaEUsSUFBSSxDQUFDQyxDQUFBQSxHQUFBQSxPQUFBQSxhQUFhLEVBQUNELE1BQU0sT0FBTztJQUNoQyxJQUFJO1FBQ0YsNERBQTREO1FBQzVELE1BQU1FLGlCQUFpQkMsQ0FBQUEsR0FBQUEsT0FBQUEsaUJBQWlCO1FBQ3hDLE1BQU1DLFdBQVcsSUFBSUMsSUFBSUwsS0FBS0U7UUFDOUIsT0FBT0UsU0FBU0UsTUFBTSxLQUFLSixrQkFBa0JLLENBQUFBLEdBQUFBLGFBQUFBLFdBQVcsRUFBQ0gsU0FBU0ksUUFBUTtJQUM1RSxFQUFFLE9BQU9DLEdBQUc7UUFDVixPQUFPO0lBQ1Q7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWxvY2FsLXVybC50cz81ZmM0Il0sIm5hbWVzIjpbImlzTG9jYWxVUkwiLCJ1cmwiLCJpc0Fic29sdXRlVXJsIiwibG9jYXRpb25PcmlnaW4iLCJnZXRMb2NhdGlvbk9yaWdpbiIsInJlc29sdmVkIiwiVVJMIiwib3JpZ2luIiwiaGFzQmFzZVBhdGgiLCJwYXRobmFtZSIsIl8iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/omit.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/omit.js ***!
|
||
\****************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL29taXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozt3Q0FBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLEtBQ2RDLE1BQVMsRUFDVEMsSUFBUztJQUVULE1BQU1DLFVBQXNDLENBQUM7SUFDN0NDLE9BQU9GLElBQUksQ0FBQ0QsUUFBUUksT0FBTyxDQUFDLENBQUNDO1FBQzNCLElBQUksQ0FBQ0osS0FBS0ssUUFBUSxDQUFDRCxNQUFXO1lBQzVCSCxPQUFPLENBQUNHLElBQUksR0FBR0wsTUFBTSxDQUFDSyxJQUFJO1FBQzVCO0lBQ0Y7SUFDQSxPQUFPSDtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC50cz9iNzI5Il0sIm5hbWVzIjpbIm9taXQiLCJvYmplY3QiLCJrZXlzIiwib21pdHRlZCIsIk9iamVjdCIsImZvckVhY2giLCJrZXkiLCJpbmNsdWRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/omit.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/parse-path.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/parse-path.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf(\"#\");\n const queryIndex = path.indexOf(\"?\");\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : \"\",\n hash: hashIndex > -1 ? path.slice(hashIndex) : \"\"\n };\n }\n return {\n pathname: path,\n query: \"\",\n hash: \"\"\n };\n} //# sourceMappingURL=parse-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Q0FJQzs7Ozs2Q0FDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsVUFBVUMsSUFBWTtJQUNwQyxNQUFNQyxZQUFZRCxLQUFLRSxPQUFPLENBQUM7SUFDL0IsTUFBTUMsYUFBYUgsS0FBS0UsT0FBTyxDQUFDO0lBQ2hDLE1BQU1FLFdBQVdELGFBQWEsQ0FBQyxLQUFNRixDQUFBQSxZQUFZLEtBQUtFLGFBQWFGLFNBQUFBO0lBRW5FLElBQUlHLFlBQVlILFlBQVksQ0FBQyxHQUFHO1FBQzlCLE9BQU87WUFDTEksVUFBVUwsS0FBS00sU0FBUyxDQUFDLEdBQUdGLFdBQVdELGFBQWFGO1lBQ3BETSxPQUFPSCxXQUNISixLQUFLTSxTQUFTLENBQUNILFlBQVlGLFlBQVksQ0FBQyxJQUFJQSxZQUFZTyxhQUN4RDtZQUNKQyxNQUFNUixZQUFZLENBQUMsSUFBSUQsS0FBS1UsS0FBSyxDQUFDVCxhQUFhO1FBQ2pEO0lBQ0Y7SUFFQSxPQUFPO1FBQUVJLFVBQVVMO1FBQU1PLE9BQU87UUFBSUUsTUFBTTtJQUFHO0FBQy9DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aC50cz80MjkyIl0sIm5hbWVzIjpbInBhcnNlUGF0aCIsInBhdGgiLCJoYXNoSW5kZXgiLCJpbmRleE9mIiwicXVlcnlJbmRleCIsImhhc1F1ZXJ5IiwicGF0aG5hbWUiLCJzdWJzdHJpbmciLCJxdWVyeSIsInVuZGVmaW5lZCIsImhhc2giLCJzbGljZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/parse-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js ***!
|
||
\******************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseRelativeUrl\", ({\n enumerable: true,\n get: function() {\n return parseRelativeUrl;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _querystring = __webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nfunction parseRelativeUrl(url, base) {\n const globalBase = new URL( false ? 0 : (0, _utils.getLocationOrigin)());\n const resolvedBase = base ? new URL(base, globalBase) : url.startsWith(\".\") ? new URL( false ? 0 : window.location.href) : globalBase;\n const { pathname, searchParams, search, hash, href, origin } = new URL(url, resolvedBase);\n if (origin !== globalBase.origin) {\n throw new Error(\"invariant: invalid relative URL, router received \" + url);\n }\n return {\n pathname,\n query: (0, _querystring.searchParamsToUrlQuery)(searchParams),\n search,\n hash,\n href: href.slice(globalBase.origin.length)\n };\n} //# sourceMappingURL=parse-relative-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybC5qcyIsIm1hcHBpbmdzIjoiOzs7O29EQWtCZ0JBOzs7ZUFBQUE7OzttQ0FqQmtCO3lDQUNLO0FBZ0JoQyxTQUFTQSxpQkFDZEMsR0FBVyxFQUNYQyxJQUFhO0lBRWIsTUFBTUMsYUFBYSxJQUFJQyxJQUNyQixNQUFrQixHQUFjLElBQWFDLENBQUFBLEdBQUFBLE9BQUFBLGlCQUFpQjtJQUdoRSxNQUFNQyxlQUFlSixPQUNqQixJQUFJRSxJQUFJRixNQUFNQyxjQUNkRixJQUFJTSxVQUFVLENBQUMsT0FDZixJQUFJSCxJQUFJLE1BQWtCLEdBQWMsSUFBYUksT0FBT0MsUUFBUSxDQUFDQyxJQUFJLElBQ3pFUDtJQUVKLE1BQU0sRUFBRVEsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFSixJQUFJLEVBQUVLLE1BQU0sRUFBRSxHQUFHLElBQUlYLElBQ2pFSCxLQUNBSztJQUVGLElBQUlTLFdBQVdaLFdBQVdZLE1BQU0sRUFBRTtRQUNoQyxNQUFNLElBQUlDLE1BQU0sc0RBQW9EZjtJQUN0RTtJQUNBLE9BQU87UUFDTFU7UUFDQU0sT0FBT0MsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQXNCLEVBQUNOO1FBQzlCQztRQUNBQztRQUNBSixNQUFNQSxLQUFLUyxLQUFLLENBQUNoQixXQUFXWSxNQUFNLENBQUNLLE1BQU07SUFDM0M7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybC50cz8zMmI3Il0sIm5hbWVzIjpbInBhcnNlUmVsYXRpdmVVcmwiLCJ1cmwiLCJiYXNlIiwiZ2xvYmFsQmFzZSIsIlVSTCIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWRCYXNlIiwic3RhcnRzV2l0aCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiaGFzaCIsIm9yaWdpbiIsIkVycm9yIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5Iiwic2xpY2UiLCJsZW5ndGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/parse-url.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/parse-url.js ***!
|
||
\*********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseUrl\", ({\n enumerable: true,\n get: function() {\n return parseUrl;\n }\n}));\nconst _querystring = __webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nfunction parseUrl(url) {\n if (url.startsWith(\"/\")) {\n return (0, _parserelativeurl.parseRelativeUrl)(url);\n }\n const parsedURL = new URL(url);\n return {\n hash: parsedURL.hash,\n hostname: parsedURL.hostname,\n href: parsedURL.href,\n pathname: parsedURL.pathname,\n port: parsedURL.port,\n protocol: parsedURL.protocol,\n query: (0, _querystring.searchParamsToUrlQuery)(parsedURL.searchParams),\n search: parsedURL.search\n };\n} //# sourceMappingURL=parse-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXVybC5qcyIsIm1hcHBpbmdzIjoiOzs7OzRDQWdCZ0JBOzs7ZUFBQUE7Ozt5Q0FkdUI7OENBQ047QUFhMUIsU0FBU0EsU0FBU0MsR0FBVztJQUNsQyxJQUFJQSxJQUFJQyxVQUFVLENBQUMsTUFBTTtRQUN2QixPQUFPQyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQWdCLEVBQUNGO0lBQzFCO0lBRUEsTUFBTUcsWUFBWSxJQUFJQyxJQUFJSjtJQUMxQixPQUFPO1FBQ0xLLE1BQU1GLFVBQVVFLElBQUk7UUFDcEJDLFVBQVVILFVBQVVHLFFBQVE7UUFDNUJDLE1BQU1KLFVBQVVJLElBQUk7UUFDcEJDLFVBQVVMLFVBQVVLLFFBQVE7UUFDNUJDLE1BQU1OLFVBQVVNLElBQUk7UUFDcEJDLFVBQVVQLFVBQVVPLFFBQVE7UUFDNUJDLE9BQU9DLENBQUFBLEdBQUFBLGFBQUFBLHNCQUFzQixFQUFDVCxVQUFVVSxZQUFZO1FBQ3BEQyxRQUFRWCxVQUFVVyxNQUFNO0lBQzFCO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS11cmwudHM/YzEzNCJdLCJuYW1lcyI6WyJwYXJzZVVybCIsInVybCIsInN0YXJ0c1dpdGgiLCJwYXJzZVJlbGF0aXZlVXJsIiwicGFyc2VkVVJMIiwiVVJMIiwiaGFzaCIsImhvc3RuYW1lIiwiaHJlZiIsInBhdGhuYW1lIiwicG9ydCIsInByb3RvY29sIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5Iiwic2VhcmNoUGFyYW1zIiwic2VhcmNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/parse-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***!
|
||
\***************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== \"string\") {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + \"/\");\n} //# sourceMappingURL=path-has-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQVNnQkE7OztlQUFBQTs7O3VDQVRVO0FBU25CLFNBQVNBLGNBQWNDLElBQVksRUFBRUMsTUFBYztJQUN4RCxJQUFJLE9BQU9ELFNBQVMsVUFBVTtRQUM1QixPQUFPO0lBQ1Q7SUFFQSxNQUFNLEVBQUVFLFFBQVEsRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFTLEVBQUNIO0lBQy9CLE9BQU9FLGFBQWFELFVBQVVDLFNBQVNFLFVBQVUsQ0FBQ0gsU0FBUztBQUM3RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC50cz85NWQxIl0sIm5hbWVzIjpbInBhdGhIYXNQcmVmaXgiLCJwYXRoIiwicHJlZml4IiwicGF0aG5hbWUiLCJwYXJzZVBhdGgiLCJzdGFydHNXaXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/path-match.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/path-match.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getPathMatch\", ({\n enumerable: true,\n get: function() {\n return getPathMatch;\n }\n}));\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"./node_modules/next/dist/compiled/path-to-regexp/index.js\");\nfunction getPathMatch(path, options) {\n const keys = [];\n const regexp = (0, _pathtoregexp.pathToRegexp)(path, keys, {\n delimiter: \"/\",\n sensitive: typeof (options == null ? void 0 : options.sensitive) === \"boolean\" ? options.sensitive : false,\n strict: options == null ? void 0 : options.strict\n });\n const matcher = (0, _pathtoregexp.regexpToFunction)((options == null ? void 0 : options.regexModifier) ? new RegExp(options.regexModifier(regexp.source), regexp.flags) : regexp, keys);\n /**\n * A matcher function that will check if a given pathname matches the path\n * given in the builder function. When the path does not match it will return\n * `false` but if it does it will return an object with the matched params\n * merged with the params provided in the second argument.\n */ return (pathname, params)=>{\n // If no pathname is provided it's not a match.\n if (typeof pathname !== \"string\") return false;\n const match = matcher(pathname);\n // If the path did not match `false` will be returned.\n if (!match) return false;\n /**\n * If unnamed params are not allowed they must be removed from\n * the matched parameters. path-to-regexp uses \"string\" for named and\n * \"number\" for unnamed parameters.\n */ if (options == null ? void 0 : options.removeUnnamedParams) {\n for (const key of keys){\n if (typeof key.name === \"number\") {\n delete match.params[key.name];\n }\n }\n }\n return {\n ...params,\n ...match.params\n };\n };\n} //# sourceMappingURL=path-match.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtbWF0Y2guanMiLCJtYXBwaW5ncyI6Ijs7OztnREFxQ2dCQTs7O2VBQUFBOzs7MENBcENhO0FBb0N0QixTQUFTQSxhQUFhQyxJQUFZLEVBQUVDLE9BQWlCO0lBQzFELE1BQU1DLE9BQWMsRUFBRTtJQUN0QixNQUFNQyxTQUFTQyxDQUFBQSxHQUFBQSxjQUFBQSxZQUFZLEVBQUNKLE1BQU1FLE1BQU07UUFDdENHLFdBQVc7UUFDWEMsV0FDRSxPQUFPTCxDQUFBQSxXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxRQUFTSyxTQUFTLE1BQUssWUFBWUwsUUFBUUssU0FBUyxHQUFHO1FBQ2hFQyxRQUFRTixXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxRQUFTTSxNQUFNO0lBQ3pCO0lBRUEsTUFBTUMsVUFBVUMsQ0FBQUEsR0FBQUEsY0FBQUEsZ0JBQWdCLEVBQzlCUixDQUFBQSxXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxRQUFTUyxhQUFhLElBQ2xCLElBQUlDLE9BQU9WLFFBQVFTLGFBQWEsQ0FBQ1AsT0FBT1MsTUFBTSxHQUFHVCxPQUFPVSxLQUFLLElBQzdEVixRQUNKRDtJQUdGOzs7OztHQUtDLEdBQ0QsT0FBTyxDQUFDWSxVQUFVQztRQUNoQiwrQ0FBK0M7UUFDL0MsSUFBSSxPQUFPRCxhQUFhLFVBQVUsT0FBTztRQUV6QyxNQUFNRSxRQUFRUixRQUFRTTtRQUV0QixzREFBc0Q7UUFDdEQsSUFBSSxDQUFDRSxPQUFPLE9BQU87UUFFbkI7Ozs7S0FJQyxHQUNELElBQUlmLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFFBQVNnQixtQkFBbUIsRUFBRTtZQUNoQyxLQUFLLE1BQU1DLE9BQU9oQixLQUFNO2dCQUN0QixJQUFJLE9BQU9nQixJQUFJQyxJQUFJLEtBQUssVUFBVTtvQkFDaEMsT0FBT0gsTUFBTUQsTUFBTSxDQUFDRyxJQUFJQyxJQUFJLENBQUM7Z0JBQy9CO1lBQ0Y7UUFDRjtRQUVBLE9BQU87WUFBRSxHQUFHSixNQUFNO1lBQUUsR0FBR0MsTUFBTUQsTUFBTTtRQUFDO0lBQ3RDO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLW1hdGNoLnRzPzA3Y2EiXSwibmFtZXMiOlsiZ2V0UGF0aE1hdGNoIiwicGF0aCIsIm9wdGlvbnMiLCJrZXlzIiwicmVnZXhwIiwicGF0aFRvUmVnZXhwIiwiZGVsaW1pdGVyIiwic2Vuc2l0aXZlIiwic3RyaWN0IiwibWF0Y2hlciIsInJlZ2V4cFRvRnVuY3Rpb24iLCJyZWdleE1vZGlmaWVyIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJwYXRobmFtZSIsInBhcmFtcyIsIm1hdGNoIiwicmVtb3ZlVW5uYW1lZFBhcmFtcyIsImtleSIsIm5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/path-match.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js ***!
|
||
\*******************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n compileNonPath: function() {\n return compileNonPath;\n },\n matchHas: function() {\n return matchHas;\n },\n prepareDestination: function() {\n return prepareDestination;\n }\n});\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"./node_modules/next/dist/compiled/path-to-regexp/index.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _parseurl = __webpack_require__(/*! ./parse-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-url.js\");\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../../../client/components/app-router-headers */ \"./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _getcookieparser = __webpack_require__(/*! ../../../../server/api-utils/get-cookie-parser */ \"./node_modules/next/dist/server/api-utils/get-cookie-parser.js\");\n/**\n * Ensure only a-zA-Z are used for param names for proper interpolating\n * with path-to-regexp\n */ function getSafeParamName(paramName) {\n let newParamName = \"\";\n for(let i = 0; i < paramName.length; i++){\n const charCode = paramName.charCodeAt(i);\n if (charCode > 64 && charCode < 91 || // A-Z\n charCode > 96 && charCode < 123 // a-z\n ) {\n newParamName += paramName[i];\n }\n }\n return newParamName;\n}\nfunction escapeSegment(str, segmentName) {\n return str.replace(new RegExp(\":\" + (0, _escaperegexp.escapeStringRegexp)(segmentName), \"g\"), \"__ESC_COLON_\" + segmentName);\n}\nfunction unescapeSegments(str) {\n return str.replace(/__ESC_COLON_/gi, \":\");\n}\nfunction matchHas(req, query, has, missing) {\n if (has === void 0) has = [];\n if (missing === void 0) missing = [];\n const params = {};\n const hasMatch = (hasItem)=>{\n let value;\n let key = hasItem.key;\n switch(hasItem.type){\n case \"header\":\n {\n key = key.toLowerCase();\n value = req.headers[key];\n break;\n }\n case \"cookie\":\n {\n if (\"cookies\" in req) {\n value = req.cookies[hasItem.key];\n } else {\n const cookies = (0, _getcookieparser.getCookieParser)(req.headers)();\n value = cookies[hasItem.key];\n }\n break;\n }\n case \"query\":\n {\n value = query[key];\n break;\n }\n case \"host\":\n {\n const { host } = (req == null ? void 0 : req.headers) || {};\n // remove port from host if present\n const hostname = host == null ? void 0 : host.split(\":\", 1)[0].toLowerCase();\n value = hostname;\n break;\n }\n default:\n {\n break;\n }\n }\n if (!hasItem.value && value) {\n params[getSafeParamName(key)] = value;\n return true;\n } else if (value) {\n const matcher = new RegExp(\"^\" + hasItem.value + \"$\");\n const matches = Array.isArray(value) ? value.slice(-1)[0].match(matcher) : value.match(matcher);\n if (matches) {\n if (Array.isArray(matches)) {\n if (matches.groups) {\n Object.keys(matches.groups).forEach((groupKey)=>{\n params[groupKey] = matches.groups[groupKey];\n });\n } else if (hasItem.type === \"host\" && matches[0]) {\n params.host = matches[0];\n }\n }\n return true;\n }\n }\n return false;\n };\n const allMatch = has.every((item)=>hasMatch(item)) && !missing.some((item)=>hasMatch(item));\n if (allMatch) {\n return params;\n }\n return false;\n}\nfunction compileNonPath(value, params) {\n if (!value.includes(\":\")) {\n return value;\n }\n for (const key of Object.keys(params)){\n if (value.includes(\":\" + key)) {\n value = value.replace(new RegExp(\":\" + key + \"\\\\*\", \"g\"), \":\" + key + \"--ESCAPED_PARAM_ASTERISKS\").replace(new RegExp(\":\" + key + \"\\\\?\", \"g\"), \":\" + key + \"--ESCAPED_PARAM_QUESTION\").replace(new RegExp(\":\" + key + \"\\\\+\", \"g\"), \":\" + key + \"--ESCAPED_PARAM_PLUS\").replace(new RegExp(\":\" + key + \"(?!\\\\w)\", \"g\"), \"--ESCAPED_PARAM_COLON\" + key);\n }\n }\n value = value.replace(/(:|\\*|\\?|\\+|\\(|\\)|\\{|\\})/g, \"\\\\$1\").replace(/--ESCAPED_PARAM_PLUS/g, \"+\").replace(/--ESCAPED_PARAM_COLON/g, \":\").replace(/--ESCAPED_PARAM_QUESTION/g, \"?\").replace(/--ESCAPED_PARAM_ASTERISKS/g, \"*\");\n // the value needs to start with a forward-slash to be compiled\n // correctly\n return (0, _pathtoregexp.compile)(\"/\" + value, {\n validate: false\n })(params).slice(1);\n}\nfunction prepareDestination(args) {\n const query = Object.assign({}, args.query);\n delete query.__nextLocale;\n delete query.__nextDefaultLocale;\n delete query.__nextDataReq;\n delete query.__nextInferredLocaleFromDefault;\n delete query[_approuterheaders.NEXT_RSC_UNION_QUERY];\n let escapedDestination = args.destination;\n for (const param of Object.keys({\n ...args.params,\n ...query\n })){\n escapedDestination = escapeSegment(escapedDestination, param);\n }\n const parsedDestination = (0, _parseurl.parseUrl)(escapedDestination);\n const destQuery = parsedDestination.query;\n const destPath = unescapeSegments(\"\" + parsedDestination.pathname + (parsedDestination.hash || \"\"));\n const destHostname = unescapeSegments(parsedDestination.hostname || \"\");\n const destPathParamKeys = [];\n const destHostnameParamKeys = [];\n (0, _pathtoregexp.pathToRegexp)(destPath, destPathParamKeys);\n (0, _pathtoregexp.pathToRegexp)(destHostname, destHostnameParamKeys);\n const destParams = [];\n destPathParamKeys.forEach((key)=>destParams.push(key.name));\n destHostnameParamKeys.forEach((key)=>destParams.push(key.name));\n const destPathCompiler = (0, _pathtoregexp.compile)(destPath, // have already validated before we got to this point and validating\n // breaks compiling destinations with named pattern params from the source\n // e.g. /something:hello(.*) -> /another/:hello is broken with validation\n // since compile validation is meant for reversing and not for inserting\n // params from a separate path-regex into another\n {\n validate: false\n });\n const destHostnameCompiler = (0, _pathtoregexp.compile)(destHostname, {\n validate: false\n });\n // update any params in query values\n for (const [key, strOrArray] of Object.entries(destQuery)){\n // the value needs to start with a forward-slash to be compiled\n // correctly\n if (Array.isArray(strOrArray)) {\n destQuery[key] = strOrArray.map((value)=>compileNonPath(unescapeSegments(value), args.params));\n } else if (typeof strOrArray === \"string\") {\n destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params);\n }\n }\n // add path params to query if it's not a redirect and not\n // already defined in destination query or path\n let paramKeys = Object.keys(args.params).filter((name)=>name !== \"nextInternalLocale\");\n if (args.appendParamsToQuery && !paramKeys.some((key)=>destParams.includes(key))) {\n for (const key of paramKeys){\n if (!(key in destQuery)) {\n destQuery[key] = args.params[key];\n }\n }\n }\n let newUrl;\n // The compiler also that the interception route marker is an unnamed param, hence '0',\n // so we need to add it to the params object.\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(destPath)) {\n for (const segment of destPath.split(\"/\")){\n const marker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n args.params[\"0\"] = marker;\n break;\n }\n }\n }\n try {\n newUrl = destPathCompiler(args.params);\n const [pathname, hash] = newUrl.split(\"#\", 2);\n parsedDestination.hostname = destHostnameCompiler(args.params);\n parsedDestination.pathname = pathname;\n parsedDestination.hash = \"\" + (hash ? \"#\" : \"\") + (hash || \"\");\n delete parsedDestination.search;\n } catch (err) {\n if (err.message.match(/Expected .*? to not repeat, but got an array/)) {\n throw new Error(\"To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match\");\n }\n throw err;\n }\n // Query merge order lowest priority to highest\n // 1. initial URL query values\n // 2. path segment values\n // 3. destination specified query values\n parsedDestination.query = {\n ...query,\n ...parsedDestination.query\n };\n return {\n newUrl,\n destQuery,\n parsedDestination\n };\n} //# sourceMappingURL=prepare-destination.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3ByZXBhcmUtZGVzdGluYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBK0hnQkEsZ0JBQWM7ZUFBZEE7O0lBL0VBQyxVQUFRO2VBQVJBOztJQWtIQUMsb0JBQWtCO2VBQWxCQTs7OzBDQTNKc0I7MENBQ0g7c0NBQ1Y7Z0RBSWxCOzhDQUM4Qjs2Q0FDTDtBQUVoQzs7O0NBR0MsR0FDRCxTQUFTQyxpQkFBaUJDLFNBQWlCO0lBQ3pDLElBQUlDLGVBQWU7SUFFbkIsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlGLFVBQVVHLE1BQU0sRUFBRUQsSUFBSztRQUN6QyxNQUFNRSxXQUFXSixVQUFVSyxVQUFVLENBQUNIO1FBRXRDLElBQ0VFLFdBQVksTUFBTUEsV0FBVyxNQUFPLE1BQU07UUFDekNBLFdBQVcsTUFBTUEsV0FBVyxJQUFLLE1BQU07VUFDeEM7WUFDQUgsZ0JBQWdCRCxTQUFTLENBQUNFLEVBQUU7UUFDOUI7SUFDRjtJQUNBLE9BQU9EO0FBQ1Q7QUFFQSxTQUFTSyxjQUFjQyxHQUFXLEVBQUVDLFdBQW1CO0lBQ3JELE9BQU9ELElBQUlFLE9BQU8sQ0FDaEIsSUFBSUMsT0FBTyxNQUFJQyxDQUFBQSxHQUFBQSxjQUFBQSxrQkFBa0IsRUFBQ0gsY0FBZ0IsTUFDbEQsaUJBQWVBO0FBRW5CO0FBRUEsU0FBU0ksaUJBQWlCTCxHQUFXO0lBQ25DLE9BQU9BLElBQUlFLE9BQU8sQ0FBQyxrQkFBa0I7QUFDdkM7QUFFTyxTQUFTWixTQUNkZ0IsR0FBc0MsRUFDdENDLEtBQWEsRUFDYkMsR0FBb0IsRUFDcEJDLE9BQXdCO0lBRHhCRCxJQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxNQUFrQixFQUFFO0lBQ3BCQyxJQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxVQUFzQixFQUFFO0lBRXhCLE1BQU1DLFNBQWlCLENBQUM7SUFFeEIsTUFBTUMsV0FBVyxDQUFDQztRQUNoQixJ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O0lBQzFDLEVBQUUsT0FBT0MsS0FBVTtRQUNqQixJQUFJQSxJQUFJQyxPQUFPLENBQUN0RCxLQUFLLENBQUMsaURBQWlEO1lBQ3JFLE1BQU0sSUFBSXVELE1BQ1A7UUFFTDtRQUNBLE1BQU1GO0lBQ1I7SUFFQSwrQ0FBK0M7SUFDL0MsOEJBQThCO0lBQzlCLHlCQUF5QjtJQUN6Qix3Q0FBd0M7SUFDeEM5QixrQkFBa0I1QyxLQUFLLEdBQUc7UUFDeEIsR0FBR0EsS0FBSztRQUNSLEdBQUc0QyxrQkFBa0I1QyxLQUFLO0lBQzVCO0lBRUEsT0FBTztRQUNMaUU7UUFDQW5CO1FBQ0FGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3ByZXBhcmUtZGVzdGluYXRpb24udHM/YmFlOCJdLCJuYW1lcyI6WyJjb21waWxlTm9uUGF0aCIsIm1hdGNoSGFzIiwicHJlcGFyZURlc3RpbmF0aW9uIiwiZ2V0U2FmZVBhcmFtTmFtZSIsInBhcmFtTmFtZSIsIm5ld1BhcmFtTmFtZSIsImkiLCJsZW5ndGgiLCJjaGFyQ29kZSIsImNoYXJDb2RlQXQiLCJlc2NhcGVTZWdtZW50Iiwic3RyIiwic2VnbWVudE5hbWUiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZXNjYXBlU3RyaW5nUmVnZXhwIiwidW5lc2NhcGVTZWdtZW50cyIsInJlcSIsInF1ZXJ5IiwiaGFzIiwibWlzc2luZyIsInBhcmFtcyIsImhhc01hdGNoIiwiaGFzSXRlbSIsInZhbHVlIiwia2V5IiwidHlwZSIsInRvTG93ZXJDYXNlIiwiaGVhZGVycyIsImNvb2tpZXMiLCJnZXRDb29raWVQYXJzZXIiLCJob3N0IiwiaG9zdG5hbWUiLCJzcGxpdCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiQXJyYXkiLCJpc0FycmF5Iiwic2xpY2UiLCJtYXRjaCIsImdyb3VwcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiZ3JvdXBLZXkiLCJhbGxNYXRjaCIsImV2ZXJ5IiwiaXRlbSIsInNvbWUiLCJpbmNsdWRlcyIsImNvbXBpbGUiLCJ2YWxpZGF0ZSIsImFyZ3MiLCJhc3NpZ24iLCJfX25leHRMb2NhbGUiLCJfX25leHREZWZhdWx0TG9jYWxlIiwiX19uZXh0RGF0YVJlcSIsIl9fbmV4dEluZmVycmVkTG9jYWxlRnJvbURlZmF1bHQiLCJORVhUX1JTQ19VTklPTl9RVUVSWSIsImVzY2FwZWREZXN0aW5hdGlvbiIsImRlc3RpbmF0aW9uIiwicGFyYW0iLCJwYXJzZWREZXN0aW5hdGlvbiIsInBhcnNlVXJsIiwiZGVzdFF1ZXJ5IiwiZGVzdFBhdGgiLCJwYXRobmFtZSIsImhhc2giLCJkZXN0SG9zdG5hbWUiLCJkZXN0UGF0aFBhcmFtS2V5cyIsImRlc3RIb3N0bmFtZVBhcmFtS2V5cyIsInBhdGhUb1JlZ2V4cCIsImRlc3RQYXJhbXMiLCJwdXNoIiwibmFtZSIsImRlc3RQYXRoQ29tcGlsZXIiLCJkZXN0SG9zdG5hbWVDb21waWxlciIsInN0ck9yQXJyYXkiLCJlbnRyaWVzIiwibWFwIiwicGFyYW1LZXlzIiwiZmlsdGVyIiwiYXBwZW5kUGFyYW1zVG9RdWVyeSIsIm5ld1VybCIsImlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoIiwic2VnbWVudCIsIm1hcmtlciIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZmluZCIsIm0iLCJzdGFydHNXaXRoIiwic2VhcmNoIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/querystring.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***!
|
||
\***********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n assign: function() {\n return assign;\n },\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n searchParams.forEach((value, key)=>{\n if (typeof query[key] === \"undefined\") {\n query[key] = value;\n } else if (Array.isArray(query[key])) {\n query[key].push(value);\n } else {\n query[key] = [\n query[key],\n value\n ];\n }\n });\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === \"string\" || typeof param === \"number\" && !isNaN(param) || typeof param === \"boolean\") {\n return String(param);\n } else {\n return \"\";\n }\n}\nfunction urlQueryToSearchParams(urlQuery) {\n const result = new URLSearchParams();\n Object.entries(urlQuery).forEach((param)=>{\n let [key, value] = param;\n if (Array.isArray(value)) {\n value.forEach((item)=>result.append(key, stringifyUrlQueryParam(item)));\n } else {\n result.set(key, stringifyUrlQueryParam(value));\n }\n });\n return result;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n searchParamsList.forEach((searchParams)=>{\n Array.from(searchParams.keys()).forEach((key)=>target.delete(key));\n searchParams.forEach((value, key)=>target.append(key, value));\n });\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTRDZ0JBLFFBQU07ZUFBTkE7O0lBMUNBQyx3QkFBc0I7ZUFBdEJBOztJQTRCQUMsd0JBQXNCO2VBQXRCQTs7O0FBNUJULFNBQVNELHVCQUNkRSxZQUE2QjtJQUU3QixNQUFNQyxRQUF3QixDQUFDO0lBQy9CRCxhQUFhRSxPQUFPLENBQUMsQ0FBQ0MsT0FBT0M7UUFDM0IsSUFBSSxPQUFPSCxLQUFLLENBQUNHLElBQUksS0FBSyxhQUFhO1lBQ3JDSCxLQUFLLENBQUNHLElBQUksR0FBR0Q7UUFDZixPQUFPLElBQUlFLE1BQU1DLE9BQU8sQ0FBQ0wsS0FBSyxDQUFDRyxJQUFJLEdBQUc7WUFDbENILEtBQUssQ0FBQ0csSUFBSSxDQUFjRyxJQUFJLENBQUNKO1FBQ2pDLE9BQU87WUFDTEYsS0FBSyxDQUFDRyxJQUFJLEdBQUc7Z0JBQUNILEtBQUssQ0FBQ0csSUFBSTtnQkFBWUQ7YUFBTTtRQUM1QztJQUNGO0lBQ0EsT0FBT0Y7QUFDVDtBQUVBLFNBQVNPLHVCQUF1QkMsS0FBYztJQUM1QyxJQUNFLE9BQU9BLFVBQVUsWUFDaEIsT0FBT0EsVUFBVSxZQUFZLENBQUNDLE1BQU1ELFVBQ3JDLE9BQU9BLFVBQVUsV0FDakI7UUFDQSxPQUFPRSxPQUFPRjtJQUNoQixPQUFPO1FBQ0wsT0FBTztJQUNUO0FBQ0Y7QUFFTyxTQUFTVix1QkFDZGEsUUFBd0I7SUFFeEIsTUFBTUMsU0FBUyxJQUFJQztJQUNuQkMsT0FBT0MsT0FBTyxDQUFDSixVQUFVVixPQUFPLENBQUMsQ0FBQU87WUFBQyxDQUFDTCxLQUFLRCxNQUFNLEdBQUFNO1FBQzVDLElBQUlKLE1BQU1DLE9BQU8sQ0FBQ0gsUUFBUTtZQUN4QkEsTUFBTUQsT0FBTyxDQUFDLENBQUNlLE9BQVNKLE9BQU9LLE1BQU0sQ0FBQ2QsS0FBS0ksdUJBQXVCUztRQUNwRSxPQUFPO1lBQ0xKLE9BQU9NLEdBQUcsQ0FBQ2YsS0FBS0ksdUJBQXVCTDtRQUN6QztJQUNGO0lBQ0EsT0FBT1U7QUFDVDtBQUVPLFNBQVNoQixPQUNkdUIsTUFBdUI7SUFDdkIsUUFBQUMsT0FBQUMsVUFBQUMsTUFBQSxFQUFBQyxtQkFBQSxJQUFBbkIsTUFBQWdCLE9BQUEsSUFBQUEsT0FBQSxRQUFBSSxPQUFBLEdBQUFBLE9BQUFKLE1BQUFJLE9BQUE7UUFBR0QsZ0JBQUFBLENBQUhDLE9BQUEsS0FBQUgsU0FBQSxDQUFBRyxLQUFzQzs7SUFFdENELGlCQUFpQnRCLE9BQU8sQ0FBQyxDQUFDRjtRQUN4QkssTUFBTXFCLElBQUksQ0FBQzFCLGFBQWEyQixJQUFJLElBQUl6QixPQUFPLENBQUMsQ0FBQ0UsTUFBUWdCLE9BQU9RLE1BQU0sQ0FBQ3hCO1FBQy9ESixhQUFhRSxPQUFPLENBQUMsQ0FBQ0MsT0FBT0MsTUFBUWdCLE9BQU9GLE1BQU0sQ0FBQ2QsS0FBS0Q7SUFDMUQ7SUFDQSxPQUFPaUI7QUFDVCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nLnRzPzM0NTkiXSwibmFtZXMiOlsiYXNzaWduIiwic2VhcmNoUGFyYW1zVG9VcmxRdWVyeSIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJxdWVyeSIsImZvckVhY2giLCJ2YWx1ZSIsImtleSIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJzdHJpbmdpZnlVcmxRdWVyeVBhcmFtIiwicGFyYW0iLCJpc05hTiIsIlN0cmluZyIsInVybFF1ZXJ5IiwicmVzdWx0IiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0IiwiZW50cmllcyIsIml0ZW0iLCJhcHBlbmQiLCJzZXQiLCJ0YXJnZXQiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2VhcmNoUGFyYW1zTGlzdCIsIl9rZXkiLCJmcm9tIiwia2V5cyIsImRlbGV0ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/querystring.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js ***!
|
||
\******************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removePathPrefix\", ({\n enumerable: true,\n get: function() {\n return removePathPrefix;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction removePathPrefix(path, prefix) {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) {\n return path;\n }\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length);\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith(\"/\")) {\n return withoutPrefix;\n }\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return \"/\" + withoutPrefix;\n} //# sourceMappingURL=remove-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS1wYXRoLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O29EQVVnQkE7OztlQUFBQTs7OzJDQVZjO0FBVXZCLFNBQVNBLGlCQUFpQkMsSUFBWSxFQUFFQyxNQUFjO0lBQzNELHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsa0JBQWtCO0lBQ2xCLEVBQUU7SUFDRixvQkFBb0I7SUFDcEIsRUFBRTtJQUNGLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLElBQUksQ0FBQ0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBYSxFQUFDRixNQUFNQyxTQUFTO1FBQ2hDLE9BQU9EO0lBQ1Q7SUFFQSwrQ0FBK0M7SUFDL0MsTUFBTUcsZ0JBQWdCSCxLQUFLSSxLQUFLLENBQUNILE9BQU9JLE1BQU07SUFFOUMsMkVBQTJFO0lBQzNFLElBQUlGLGNBQWNHLFVBQVUsQ0FBQyxNQUFNO1FBQ2pDLE9BQU9IO0lBQ1Q7SUFFQSw0RUFBNEU7SUFDNUUsbURBQW1EO0lBQ25ELE9BQU8sTUFBSUE7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS1wYXRoLXByZWZpeC50cz9mM2JhIl0sIm5hbWVzIjpbInJlbW92ZVBhdGhQcmVmaXgiLCJwYXRoIiwicHJlZml4IiwicGF0aEhhc1ByZWZpeCIsIndpdGhvdXRQcmVmaXgiLCJzbGljZSIsImxlbmd0aCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***!
|
||
\*********************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, \"\") || \"/\";\n} //# sourceMappingURL=remove-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUM7Ozs7dURBQ2VBOzs7ZUFBQUE7OztBQUFULFNBQVNBLG9CQUFvQkMsS0FBYTtJQUMvQyxPQUFPQSxNQUFNQyxPQUFPLENBQUMsT0FBTyxPQUFPO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLnRzPzdlNTQiXSwibmFtZXMiOlsicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInJvdXRlIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js ***!
|
||
\****************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return resolveRewrites;\n }\n}));\nconst _pathmatch = __webpack_require__(/*! ./path-match */ \"./node_modules/next/dist/shared/lib/router/utils/path-match.js\");\nconst _preparedestination = __webpack_require__(/*! ./prepare-destination */ \"./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../../client/remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nfunction resolveRewrites(asPath, pages, rewrites, query, resolveHref, locales) {\n let matchedPage = false;\n let externalDest = false;\n let parsedAs = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedAs.pathname), locales).pathname);\n let resolvedHref;\n const handleRewrite = (rewrite)=>{\n const matcher = (0, _pathmatch.getPathMatch)(rewrite.source + ( true ? \"(/)?\" : 0), {\n removeUnnamedParams: true,\n strict: true\n });\n let params = matcher(parsedAs.pathname);\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = (0, _preparedestination.matchHas)({\n headers: {\n host: document.location.hostname,\n \"user-agent\": navigator.userAgent\n },\n cookies: document.cookie.split(\"; \").reduce((acc, item)=>{\n const [key, ...value] = item.split(\"=\");\n acc[key] = value.join(\"=\");\n return acc;\n }, {})\n }, parsedAs.query, rewrite.has, rewrite.missing);\n if (hasParams) {\n Object.assign(params, hasParams);\n } else {\n params = false;\n }\n }\n if (params) {\n if (!rewrite.destination) {\n // this is a proxied rewrite which isn't handled on the client\n externalDest = true;\n return true;\n }\n const destRes = (0, _preparedestination.prepareDestination)({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: query\n });\n parsedAs = destRes.parsedDestination;\n asPath = destRes.newUrl;\n Object.assign(query, destRes.parsedDestination.query);\n fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(asPath), locales).pathname);\n if (pages.includes(fsPathname)) {\n // check if we now match a page as this means we are done\n // resolving the rewrites\n matchedPage = true;\n resolvedHref = fsPathname;\n return true;\n }\n // check if we match a dynamic-route, if so we break the rewrites chain\n resolvedHref = resolveHref(fsPathname);\n if (resolvedHref !== asPath && pages.includes(resolvedHref)) {\n matchedPage = true;\n return true;\n }\n }\n };\n let finished = false;\n for(let i = 0; i < rewrites.beforeFiles.length; i++){\n // we don't end after match in beforeFiles to allow\n // continuing through all beforeFiles rewrites\n handleRewrite(rewrites.beforeFiles[i]);\n }\n matchedPage = pages.includes(fsPathname);\n if (!matchedPage) {\n if (!finished) {\n for(let i = 0; i < rewrites.afterFiles.length; i++){\n if (handleRewrite(rewrites.afterFiles[i])) {\n finished = true;\n break;\n }\n }\n }\n // check dynamic route before processing fallback rewrites\n if (!finished) {\n resolvedHref = resolveHref(fsPathname);\n matchedPage = pages.includes(resolvedHref);\n finished = matchedPage;\n }\n if (!finished) {\n for(let i = 0; i < rewrites.fallback.length; i++){\n if (handleRewrite(rewrites.fallback[i])) {\n finished = true;\n break;\n }\n }\n }\n }\n return {\n asPath,\n parsedAs,\n matchedPage,\n resolvedHref,\n externalDest\n };\n} //# sourceMappingURL=resolve-rewrites.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3Jlc29sdmUtcmV3cml0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FTQTs7O2VBQXdCQTs7O3VDQVBLO2dEQUNnQjtpREFDVDtpREFDQTs0Q0FDTDs4Q0FDRTtBQUVsQixTQUFTQSxnQkFDdEJDLE1BQWMsRUFDZEMsS0FBZSxFQUNmQyxRQUlDLEVBQ0RDLEtBQXFCLEVBQ3JCQyxXQUFxQyxFQUNyQ0MsT0FBa0I7SUFRbEIsSUFBSUMsY0FBYztJQUNsQixJQUFJQyxlQUFlO0lBQ25CLElBQUlDLFdBQVdDLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBZ0IsRUFBQ1Q7SUFDaEMsSUFBSVUsYUFBYUMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFtQixFQUNsQ0MsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFtQixFQUFDQyxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBYyxFQUFDTCxTQUFTTSxRQUFRLEdBQUdULFNBQVNTLFFBQVE7SUFFMUUsSUFBSUM7SUFFSixNQUFNQyxnQkFBZ0IsQ0FBQ0M7UUFDckIsTUFBTUMsVUFBVUMsQ0FBQUEsR0FBQUEsV0FBQUEsWUFBWSxFQUMxQkYsUUFBUUcsTUFBTSxHQUFJQyxDQUFBQSxLQUFpQyxHQUFHLFNBQVMsSUFDL0Q7WUFDRUcscUJBQXFCO1lBQ3JCQyxRQUFRO1FBQ1Y7UUFHRixJQUFJQyxTQUFTUixRQUFRVixTQUFTTSxRQUFRO1FBRXRDLElBQUksQ0FBQ0csUUFBUVUsR0FBRyxJQUFJVixRQUFRVyxPQUFPLEtBQUtGLFFBQVE7WUFDOUMsTUFBTUcsWUFBWUMsQ0FBQUEsR0FBQUEsb0JBQUFBLFFBQVEsRUFDeEI7Z0JBQ0VDLFNBQVM7b0JBQ1BDLE1BQU1DLFNBQVNDLFFBQVEsQ0FBQ0MsUUFBUTtvQkFDaEMsY0FBY0MsVUFBVUMsU0FBUztnQkFDbkM7Z0JBQ0FDLFNBQVNMLFNBQVNNLE1BQU0sQ0FDckJDLEtBQUssQ0FBQyxNQUNOQyxNQUFNLENBQXlCLENBQUNDLEtBQUtDO29CQUNwQyxNQUFNLENBQUNDLEtBQUssR0FBR0MsTUFBTSxHQUFHRixLQUFLSCxLQUFLLENBQUM7b0JBQ25DRSxHQUFHLENBQUNFLElBQUksR0FBR0MsTUFBTUMsSUFBSSxDQUFDO29CQUN0QixPQUFPSjtnQkFDVCxHQUFHLENBQUM7WUFDUixHQUNBbEMsU0FBU0wsS0FBSyxFQUNkYyxRQUFRVSxHQUFHLEVBQ1hWLFFBQVFXLE9BQU87WUFHakIsSUFBSUMsV0FBVztnQkFDYmtCLE9BQU9DLE1BQU0sQ0FBQ3RCLFFBQVFHO1lBQ3hCLE9BQU87Z0JBQ0xILFNBQVM7WUFDWDtRQUNGO1FBRUEsSUFBSUEsUUFBUTtZQUNWLElBQUksQ0FBQ1QsUUFBUWdDLFdBQVcsRUFBRTtnQkFDeEIsOERBQThEO2dCQUM5RDFDLGVBQWU7Z0JBQ2YsT0FBTztZQUNUO1lBQ0EsTUFBTTJDLFVBQVVDLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBa0IsRUFBQztnQkFDakNDLHFCQUFxQjtnQkFDckJILGFBQWFoQyxRQUFRZ0MsV0FBVztnQkFDaEN2QixRQUFRQTtnQkFDUnZCLE9BQU9BO1lBQ1Q7WUFDQUssV0FBVzBDLFFBQVFHLGlCQUFpQjtZQUNwQ3JELFNBQVNrRCxRQUFRSSxNQUFNO1lBQ3ZCUCxPQUFPQyxNQUFNLENBQUM3QyxPQUFPK0MsUUFBUUcsaUJBQWlCLENBQUNsRCxLQUFLO1lBRXBETyxhQUFhQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQW1CLEVBQzlCQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQW1CLEVBQUNDLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFjLEVBQUNiLFNBQVNLLFNBQVNTLFFBQVE7WUFHL0QsSUFBSWIsTUFBTXNELFFBQVEsQ0FBQzdDLGFBQWE7Z0JBQzlCLHlEQUF5RDtnQkFDekQseUJBQXlCO2dCQUN6QkosY0FBYztnQkFDZFMsZUFBZUw7Z0JBQ2YsT0FBTztZQUNUO1lBRUEsdUVBQXVFO1lBQ3ZFSyxlQUFlWCxZQUFZTTtZQUUzQixJQUFJSyxpQkFBaUJmLFVBQVVDLE1BQU1zRCxRQUFRLENBQUN4QyxlQUFlO2dCQUMzRFQsY0FBYztnQkFDZCxPQUFPO1lBQ1Q7UUFDRjtJQUNGO0lBQ0EsSUFBSWtELFdBQVc7SUFFZixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSXZELFNBQVN3RCxXQUFXLENBQUNDLE1BQU0sRUFBRUYsSUFBSztRQUNwRCxtREFBbUQ7UUFDbkQsOENBQThDO1FBQzlDekMsY0FBY2QsU0FBU3dELFdBQVcsQ0FBQ0QsRUFBRTtJQUN2QztJQUNBbkQsY0FBY0wsTUFBTXNELFFBQVEsQ0FBQzdDO0lBRTdCLElBQUksQ0FBQ0osYUFBYTtRQUNoQixJQUFJLENBQUNrRCxVQUFVO1lBQ2IsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUl2RCxTQUFTMEQsVUFBVSxDQUFDRCxNQUFNLEVBQUVGLElBQUs7Z0JBQ25ELElBQUl6QyxjQUFjZCxTQUFTMEQsVUFBVSxDQUFDSCxFQUFFLEdBQUc7b0JBQ3pDRCxXQUFXO29CQUNYO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLDBEQUEwRDtRQUMxRCxJQUFJLENBQUNBLFVBQVU7WUFDYnpDLGVBQWVYLFlBQVlNO1lBQzNCSixjQUFjTCxNQUFNc0QsUUFBUSxDQUFDeEM7WUFDN0J5QyxXQUFXbEQ7UUFDYjtRQUVBLElBQUksQ0FBQ2tELFVBQVU7WUFDYixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSXZELFNBQVMyRCxRQUFRLENBQUNGLE1BQU0sRUFBRUYsSUFBSztnQkFDakQsSUFBSXpDLGNBQWNkLFNBQVMyRCxRQUFRLENBQUNKLEVBQUUsR0FBRztvQkFDdkNELFdBQVc7b0JBQ1g7Z0JBQ0Y7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPO1FBQ0x4RDtRQUNBUTtRQUNBRjtRQUNBUztRQUNBUjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZXNvbHZlLXJld3JpdGVzLnRzPzBjNjEiXSwibmFtZXMiOlsicmVzb2x2ZVJld3JpdGVzIiwiYXNQYXRoIiwicGFnZXMiLCJyZXdyaXRlcyIsInF1ZXJ5IiwicmVzb2x2ZUhyZWYiLCJsb2NhbGVzIiwibWF0Y2hlZFBhZ2UiLCJleHRlcm5hbERlc3QiLCJwYXJzZWRBcyIsInBhcnNlUmVsYXRpdmVVcmwiLCJmc1BhdGhuYW1lIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJyZW1vdmVCYXNlUGF0aCIsInBhdGhuYW1lIiwicmVzb2x2ZWRIcmVmIiwiaGFuZGxlUmV3cml0ZSIsInJld3JpdGUiLCJtYXRjaGVyIiwiZ2V0UGF0aE1hdGNoIiwic291cmNlIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9UUkFJTElOR19TTEFTSCIsInJlbW92ZVVubmFtZWRQYXJhbXMiLCJzdHJpY3QiLCJwYXJhbXMiLCJoYXMiLCJtaXNzaW5nIiwiaGFzUGFyYW1zIiwibWF0Y2hIYXMiLCJoZWFkZXJzIiwiaG9zdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJob3N0bmFtZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImNvb2tpZXMiLCJjb29raWUiLCJzcGxpdCIsInJlZHVjZSIsImFjYyIsIml0ZW0iLCJrZXkiLCJ2YWx1ZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJkZXN0aW5hdGlvbiIsImRlc3RSZXMiLCJwcmVwYXJlRGVzdGluYXRpb24iLCJhcHBlbmRQYXJhbXNUb1F1ZXJ5IiwicGFyc2VkRGVzdGluYXRpb24iLCJuZXdVcmwiLCJpbmNsdWRlcyIsImZpbmlzaGVkIiwiaSIsImJlZm9yZUZpbGVzIiwibGVuZ3RoIiwiYWZ0ZXJGaWxlcyIsImZhbGxiYWNrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/route-matcher.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***!
|
||
\*************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n return (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) {\n return false;\n }\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (_) {\n throw new _utils.DecodeError(\"failed to decode param\");\n }\n };\n const params = {};\n Object.keys(groups).forEach((slugName)=>{\n const g = groups[slugName];\n const m = routeMatch[g.pos];\n if (m !== undefined) {\n params[slugName] = ~m.indexOf(\"/\") ? m.split(\"/\").map((entry)=>decode(entry)) : g.repeat ? [\n decode(m)\n ] : decode(m);\n }\n });\n return params;\n };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLW1hdGNoZXIuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFXZ0JBOzs7ZUFBQUE7OzttQ0FWWTtBQVVyQixTQUFTQSxnQkFBZ0JDLEtBQTBCO0lBQTFCLE1BQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFjLEdBQTFCRjtJQUM5QixPQUFPLENBQUNHO1FBQ04sTUFBTUMsYUFBYUgsR0FBR0ksSUFBSSxDQUFDRjtRQUMzQixJQUFJLENBQUNDLFlBQVk7WUFDZixPQUFPO1FBQ1Q7UUFFQSxNQUFNRSxTQUFTLENBQUNOO1lBQ2QsSUFBSTtnQkFDRixPQUFPTyxtQkFBbUJQO1lBQzVCLEVBQUUsT0FBT1EsR0FBRztnQkFDVixNQUFNLElBQUlDLE9BQUFBLFdBQVcsQ0FBQztZQUN4QjtRQUNGO1FBQ0EsTUFBTUMsU0FBcUQsQ0FBQztRQUU1REMsT0FBT0MsSUFBSSxDQUFDVixRQUFRVyxPQUFPLENBQUMsQ0FBQ0M7WUFDM0IsTUFBTUMsSUFBSWIsTUFBTSxDQUFDWSxTQUFTO1lBQzFCLE1BQU1FLElBQUlaLFVBQVUsQ0FBQ1csRUFBRUUsR0FBRyxDQUFDO1lBQzNCLElBQUlELE1BQU1FLFdBQVc7Z0JBQ25CUixNQUFNLENBQUNJLFNBQVMsR0FBRyxDQUFDRSxFQUFFRyxPQUFPLENBQUMsT0FDMUJILEVBQUVJLEtBQUssQ0FBQyxLQUFLQyxHQUFHLENBQUMsQ0FBQ0MsUUFBVWhCLE9BQU9nQixVQUNuQ1AsRUFBRVEsTUFBTSxHQUNSO29CQUFDakIsT0FBT1U7aUJBQUcsR0FDWFYsT0FBT1U7WUFDYjtRQUNGO1FBQ0EsT0FBT047SUFDVDtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci50cz9hYWI4Il0sIm5hbWVzIjpbImdldFJvdXRlTWF0Y2hlciIsInBhcmFtIiwicmUiLCJncm91cHMiLCJwYXRobmFtZSIsInJvdXRlTWF0Y2giLCJleGVjIiwiZGVjb2RlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiXyIsIkRlY29kZUVycm9yIiwicGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzbHVnTmFtZSIsImciLCJtIiwicG9zIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsInNwbGl0IiwibWFwIiwiZW50cnkiLCJyZXBlYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/route-regex.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/route-regex.js ***!
|
||
\***********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getRouteRegex: function() {\n return getRouteRegex;\n },\n parseParameter: function() {\n return parseParameter;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst NEXT_QUERY_PARAM_PREFIX = \"nxtP\";\nconst NEXT_INTERCEPTION_MARKER_PREFIX = \"nxtI\";\nfunction parseParameter(param) {\n const optional = param.startsWith(\"[\") && param.endsWith(\"]\");\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith(\"...\");\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n}\nfunction getParametrizedRoute(route) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const groups = {};\n let groupIndex = 1;\n return {\n parameterizedRoute: segments.map((segment)=>{\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (markerMatch && paramMatches) {\n const { key, optional, repeat } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\";\n } else if (paramMatches) {\n const { key, repeat, optional } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return repeat ? optional ? \"(?:/(.+?))?\" : \"/(.+?)\" : \"/([^/]+?)\";\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute) {\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute);\n return {\n re: new RegExp(\"^\" + parameterizedRoute + \"(?:/)?$\"),\n groups: groups\n };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = \"\";\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix } = param;\n const { key, optional, repeat } = parseParameter(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, \"\");\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = key;\n }\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : \"\";\n return repeat ? optional ? \"(?:/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?))?\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?)\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">[^/]+?)\";\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n return {\n namedParameterizedRoute: segments.map((segment)=>{\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches) {\n const [usedMarker] = segment.split(paramMatches[0]);\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: usedMarker,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n });\n } else if (paramMatches) {\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n });\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, prefixRouteKey) {\n const result = getNamedParametrizedRoute(normalizedRoute, prefixRouteKey);\n return {\n ...getRouteRegex(normalizedRoute),\n namedRegex: \"^\" + result.namedParameterizedRoute + \"(?:/)?$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute);\n const { catchAll = true } = options;\n if (parameterizedRoute === \"/\") {\n let catchAllRegex = catchAll ? \".*\" : \"\";\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false);\n let catchAllGroupedRegex = catchAll ? \"(?:(/.*)?)\" : \"\";\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLXJlZ2V4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTJOZ0JBLHlCQUF1QjtlQUF2QkE7O0lBaEJBQyxvQkFBa0I7ZUFBbEJBOztJQW5JQUMsZUFBYTtlQUFiQTs7SUE5Q0FDLGdCQUFjO2VBQWRBOzs7Z0RBMUIyQjswQ0FDUjtpREFDQztBQUVwQyxNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMsa0NBQWtDO0FBcUJqQyxTQUFTRixlQUFlRyxLQUFhO0lBQzFDLE1BQU1DLFdBQVdELE1BQU1FLFVBQVUsQ0FBQyxRQUFRRixNQUFNRyxRQUFRLENBQUM7SUFDekQsSUFBSUYsVUFBVTtRQUNaRCxRQUFRQSxNQUFNSSxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCO0lBQ0EsTUFBTUMsU0FBU0wsTUFBTUUsVUFBVSxDQUFDO0lBQ2hDLElBQUlHLFFBQVE7UUFDVkwsUUFBUUEsTUFBTUksS0FBSyxDQUFDO0lBQ3RCO0lBQ0EsT0FBTztRQUFFRSxLQUFLTjtRQUFPSztRQUFRSjtJQUFTO0FBQ3hDO0FBRUEsU0FBU00scUJBQXFCQyxLQUFhO0lBQ3pDLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ0YsT0FBT0osS0FBSyxDQUFDLEdBQUdPLEtBQUssQ0FBQztJQUMzRCxNQUFNQyxTQUF5QyxDQUFDO0lBQ2hELElBQUlDLGFBQWE7SUFDakIsT0FBTztRQUNMQyxvQkFBb0JMLFNBQ2pCTSxHQUFHLENBQUMsQ0FBQ0M7WUFDSixNQUFNQyxjQUFjQyxvQkFBQUEsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUNuREosUUFBUWQsVUFBVSxDQUFDa0I7WUFFckIsTUFBTUMsZUFBZUwsUUFBUU0sS0FBSyxDQUFDLHVCQUF1Qix1QkFBdUI7O1lBRWpGLElBQUlMLGVBQWVJLGNBQWM7Z0JBQy9CLE1BQU0sRUFBRWYsR0FBRyxFQUFFTCxRQUFRLEVBQUVJLE1BQU0sRUFBRSxHQUFHUixlQUFld0IsWUFBWSxDQUFDLEVBQUU7Z0JBQ2hFVCxNQUFNLENBQUNOLElBQUksR0FBRztvQkFBRWlCLEtBQUtWO29CQUFjUjtvQkFBUUo7Z0JBQVM7Z0JBQ3BELE9BQU8sTUFBSXVCLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFrQixFQUFDUCxlQUFhO1lBQzdDLE9BQU8sSUFBSUksY0FBYztnQkFDdkIsTUFBTSxFQUFFZixHQUFHLEVBQUVELE1BQU0sRUFBRUosUUFBUSxFQUFFLEdBQUdKLGVBQWV3QixZQUFZLENBQUMsRUFBRTtnQkFDaEVULE1BQU0sQ0FBQ04sSUFBSSxHQUFHO29CQUFFaUIsS0FBS1Y7b0JBQWNSO29CQUFRSjtnQkFBUztnQkFDcEQsT0FBT0ksU0FBVUosV0FBVyxnQkFBZ0IsV0FBWTtZQUMxRCxPQUFPO2dCQUNMLE9BQU8sTUFBSXVCLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFrQixFQUFDUjtZQUNoQztRQUNGLEdBQ0NTLElBQUksQ0FBQztRQUNSYjtJQUNGO0FBQ0Y7QUFPTyxTQUFTaEIsY0FBYzhCLGVBQXVCO0lBQ25ELE1BQU0sRUFBRVosa0JBQWtCLEVBQUVGLE1BQU0sRUFBRSxHQUFHTCxxQkFBcUJtQjtJQUM1RCxPQUFPO1FBQ0xDLElBQUksSUFBSUMsT0FBTyxNQUFJZCxxQkFBbUI7UUFDdENGLFFBQVFBO0lBQ1Y7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELFNBQVNpQjtJQUNQLElBQUlDLElBQUk7SUFFUixPQUFPO1FBQ0wsSUFBSUMsV0FBVztRQUNmLElBQUlDLElBQUksRUFBRUY7UUFDVixNQUFPRSxJQUFJLEVBQUc7WUFDWkQsWUFBWUUsT0FBT0MsWUFBWSxDQUFDLEtBQU0sQ0FBQ0YsSUFBSSxLQUFLO1lBQ2hEQSxJQUFJRyxLQUFLQyxLQUFLLENBQUMsQ0FBQ0osSUFBSSxLQUFLO1FBQzNCO1FBQ0EsT0FBT0Q7SUFDVDtBQUNGO0FBRUEsU0FBU00sc0JBQXNCckMsS0FZOUI7SUFaOEIsTUFDN0JzQyxrQkFBa0IsRUFDbEJDLGVBQWUsRUFDZnZCLE9BQU8sRUFDUHdCLFNBQVMsRUFDVEMsU0FBUyxFQU9WLEdBWjhCekM7SUFhN0IsTUFBTSxFQUFFTSxHQUFHLEVBQUVMLFFBQVEsRUFBRUksTUFBTSxFQUFFLEdBQUdSLGVBQWVtQjtJQUVqRCx1REFBdUQ7SUFDdkQsa0JBQWtCO0lBQ2xCLElBQUkwQixhQUFhcEMsSUFBSXFDLE9BQU8sQ0FBQyxPQUFPO0lBRXBDLElBQUlGLFdBQVc7UUFDYkMsYUFBYSxLQUFHRCxZQUFZQztJQUM5QjtJQUNBLElBQUlFLGFBQWE7SUFFakIsa0VBQWtFO0lBQ2xFLFdBQVc7SUFDWCxJQUFJRixXQUFXRyxNQUFNLEtBQUssS0FBS0gsV0FBV0csTUFBTSxHQUFHLElBQUk7UUFDckRELGFBQWE7SUFDZjtJQUNBLElBQUksQ0FBQ0UsTUFBTUMsU0FBU0wsV0FBV3RDLEtBQUssQ0FBQyxHQUFHLE1BQU07UUFDNUN3QyxhQUFhO0lBQ2Y7SUFFQSxJQUFJQSxZQUFZO1FBQ2RGLGFBQWFIO0lBQ2Y7SUFFQSxJQUFJRSxXQUFXO1FBQ2JELFNBQVMsQ0FBQ0UsV0FBVyxHQUFHLEtBQUdELFlBQVluQztJQUN6QyxPQUFPO1FBQ0xrQyxTQUFTLENBQUNFLFdBQVcsR0FBR3BDO0lBQzFCO0lBRUEsd0ZBQXdGO0lBQ3hGLDBGQUEwRjtJQUMxRixxRkFBcUY7SUFDckYsTUFBTTBDLHFCQUFxQlYscUJBQ3ZCZCxDQUFBQSxHQUFBQSxjQUFBQSxrQkFBa0IsRUFBQ2Msc0JBQ25CO0lBRUosT0FBT2pDLFNBQ0hKLFdBQ0UsU0FBTytDLHFCQUFtQixRQUFLTixhQUFXLFlBQzFDLE1BQUlNLHFCQUFtQixRQUFLTixhQUFXLFVBQ3pDLE1BQUlNLHFCQUFtQixRQUFLTixhQUFXO0FBQzdDO0FBRUEsU0FBU08sMEJBQTBCekMsS0FBYSxFQUFFMEMsZUFBd0I7SUFDeEUsTUFBTXpDLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ0YsT0FBT0osS0FBSyxDQUFDLEdBQUdPLEtBQUssQ0FBQztJQUMzRCxNQUFNNEIsa0JBQWtCVjtJQUN4QixNQUFNVyxZQUF5QyxDQUFDO0lBQ2hELE9BQU87UUFDTFcseUJBQXlCMUMsU0FDdEJNLEdBQUcsQ0FBQyxDQUFDQztZQUNKLE1BQU1vQyx3QkFBd0JsQyxvQkFBQUEsMEJBQTBCLENBQUNtQyxJQUFJLENBQUMsQ0FBQ2pDLElBQzdESixRQUFRZCxVQUFVLENBQUNrQjtZQUVyQixNQUFNQyxlQUFlTCxRQUFRTSxLQUFLLENBQUMsdUJBQXVCLHVCQUF1Qjs7WUFFakYsSUFBSThCLHlCQUF5Qi9CLGNBQWM7Z0JBQ3pDLE1BQU0sQ0FBQ2lDLFdBQVcsR0FBR3RDLFFBQVFMLEtBQUssQ0FBQ1UsWUFBWSxDQUFDLEVBQUU7Z0JBRWxELE9BQU9nQixzQkFBc0I7b0JBQzNCRTtvQkFDQUQsb0JBQW9CZ0I7b0JBQ3BCdEMsU0FBU0ssWUFBWSxDQUFDLEVBQUU7b0JBQ3hCbUI7b0JBQ0FDLFdBQVdTLGtCQUNQbkQsa0NBQ0F3RDtnQkFDTjtZQUNGLE9BQU8sSUFBSWxDLGNBQWM7Z0JBQ3ZCLE9BQU9nQixzQkFBc0I7b0JBQzNCRTtvQkFDQXZCLFNBQVNLLFlBQVksQ0FBQyxFQUFFO29CQUN4Qm1CO29CQUNBQyxXQUFXUyxrQkFBa0JwRCwwQkFBMEJ5RDtnQkFDekQ7WUFDRixPQUFPO2dCQUNMLE9BQU8sTUFBSS9CLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFrQixFQUFDUjtZQUNoQztRQUNGLEdBQ0NTLElBQUksQ0FBQztRQUNSZTtJQUNGO0FBQ0Y7QUFVTyxTQUFTN0MsbUJBQ2QrQixlQUF1QixFQUN2QjhCLGNBQXVCO0lBRXZCLE1BQU1DLFNBQVNSLDBCQUEwQnZCLGlCQUFpQjhCO0lBQzFELE9BQU87UUFDTCxHQUFHNUQsY0FBYzhCLGdCQUFnQjtRQUNqQ2dDLFlBQVksTUFBSUQsT0FBT04sdUJBQXVCLEdBQUM7UUFDL0NYLFdBQVdpQixPQUFPakIsU0FBUztJQUM3QjtBQUNGO0FBTU8sU0FBUzlDLHdCQUNkZ0MsZUFBdUIsRUFDdkJpQyxPQUVDO0lBRUQsTUFBTSxFQUFFN0Msa0JBQWtCLEVBQUUsR0FBR1AscUJBQXFCbUI7SUFDcEQsTUFBTSxFQUFFa0MsV0FBVyxJQUFJLEVBQUUsR0FBR0Q7SUFDNUIsSUFBSTdDLHVCQUF1QixLQUFLO1FBQzlCLElBQUkrQyxnQkFBZ0JELFdBQVcsT0FBTztRQUN0QyxPQUFPO1lBQ0xGLFlBQVksT0FBS0csZ0JBQWM7UUFDakM7SUFDRjtJQUVBLE1BQU0sRUFBRVYsdUJBQXVCLEVBQUUsR0FBR0YsMEJBQ2xDdkIsaUJBQ0E7SUFFRixJQUFJb0MsdUJBQXVCRixXQUFXLGVBQWU7SUFDckQsT0FBTztRQUNMRixZQUFZLE1BQUlQLDBCQUEwQlcsdUJBQXFCO0lBQ2pFO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC50cz8wMzU5Il0sIm5hbWVzIjpbImdldE5hbWVkTWlkZGxld2FyZVJlZ2V4IiwiZ2V0TmFtZWRSb3V0ZVJlZ2V4IiwiZ2V0Um91dGVSZWdleCIsInBhcnNlUGFyYW1ldGVyIiwiTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVgiLCJORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYIiwicGFyYW0iLCJvcHRpb25hbCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNsaWNlIiwicmVwZWF0Iiwia2V5IiwiZ2V0UGFyYW1ldHJpemVkUm91dGUiLCJyb3V0ZSIsInNlZ21lbnRzIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInNwbGl0IiwiZ3JvdXBzIiwiZ3JvdXBJbmRleCIsInBhcmFtZXRlcml6ZWRSb3V0ZSIsIm1hcCIsInNlZ21lbnQiLCJtYXJrZXJNYXRjaCIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZmluZCIsIm0iLCJwYXJhbU1hdGNoZXMiLCJtYXRjaCIsInBvcyIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsImpvaW4iLCJub3JtYWxpemVkUm91dGUiLCJyZSIsIlJlZ0V4cCIsImJ1aWxkR2V0U2FmZVJvdXRlS2V5IiwiaSIsInJvdXRlS2V5IiwiaiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIk1hdGgiLCJmbG9vciIsImdldFNhZmVLZXlGcm9tU2VnbWVudCIsImludGVyY2VwdGlvbk1hcmtlciIsImdldFNhZmVSb3V0ZUtleSIsInJvdXRlS2V5cyIsImtleVByZWZpeCIsImNsZWFuZWRLZXkiLCJyZXBsYWNlIiwiaW52YWxpZEtleSIsImxlbmd0aCIsImlzTmFOIiwicGFyc2VJbnQiLCJpbnRlcmNlcHRpb25QcmVmaXgiLCJnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlIiwicHJlZml4Um91dGVLZXlzIiwibmFtZWRQYXJhbWV0ZXJpemVkUm91dGUiLCJoYXNJbnRlcmNlcHRpb25NYXJrZXIiLCJzb21lIiwidXNlZE1hcmtlciIsInVuZGVmaW5lZCIsInByZWZpeFJvdXRlS2V5IiwicmVzdWx0IiwibmFtZWRSZWdleCIsIm9wdGlvbnMiLCJjYXRjaEFsbCIsImNhdGNoQWxsUmVnZXgiLCJjYXRjaEFsbEdyb3VwZWRSZWdleCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/route-regex.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***!
|
||
\*************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSortedRoutes\", ({\n enumerable: true,\n get: function() {\n return getSortedRoutes;\n }\n}));\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split(\"/\").filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = \"/\";\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[]\"), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[...]\"), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[[...]]\"), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get(\"[]\")._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === \"/\" ? \"/\" : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get(\"[...]\")._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get(\"[[...]]\")._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith(\"[\") && nextSegment.endsWith(\"]\")) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith(\"[\") && segmentName.endsWith(\"]\")) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith(\"...\")) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith(\"[\") || segmentName.endsWith(\"]\")) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith(\".\")) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, \"\") === nextSegment.replace(/\\W/g, \"\")) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = \"[[...]]\";\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = \"[...]\";\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = \"[]\";\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3NvcnRlZC1yb3V0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFxTWdCQTs7O2VBQUFBOzs7QUFyTWhCLE1BQU1DO0lBT0pDLE9BQU9DLE9BQWUsRUFBUTtRQUM1QixJQUFJLENBQUNDLE9BQU8sQ0FBQ0QsUUFBUUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQ0MsVUFBVSxFQUFFLEVBQUU7SUFDdkQ7SUFFQUMsU0FBbUI7UUFDakIsT0FBTyxJQUFJLENBQUNDLE9BQU87SUFDckI7SUFFUUEsUUFBUUMsTUFBb0IsRUFBWTtRQUFoQ0EsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBaUI7UUFDL0IsTUFBTUMsZ0JBQWdCO2VBQUksSUFBSSxDQUFDQyxRQUFRLENBQUNDLElBQUk7U0FBRyxDQUFDQyxJQUFJO1FBQ3BELElBQUksSUFBSSxDQUFDQyxRQUFRLEtBQUssTUFBTTtZQUMxQkosY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsT0FBTztRQUNwRDtRQUNBLElBQUksSUFBSSxDQUFDQyxZQUFZLEtBQUssTUFBTTtZQUM5QlAsY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsVUFBVTtRQUN2RDtRQUNBLElBQUksSUFBSSxDQUFDRSxvQkFBb0IsS0FBSyxNQUFNO1lBQ3RDUixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxZQUFZO1FBQ3pEO1FBRUEsTUFBTUcsU0FBU1QsY0FDWlUsR0FBRyxDQUFDLENBQUNDLElBQU0sSUFBSSxDQUFDVixRQUFRLENBQUNXLEdBQUcsQ0FBQ0QsR0FBSWIsT0FBTyxDQUFDLEtBQUdDLFNBQVNZLElBQUUsTUFDdkRFLE1BQU0sQ0FBQyxDQUFDQyxNQUFNQyxPQUFTO21CQUFJRDttQkFBU0M7YUFBSyxFQUFFLEVBQUU7UUFFaEQsSUFBSSxJQUFJLENBQUNYLFFBQVEsS0FBSyxNQUFNO1lBQzFCSyxPQUFPTyxJ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QUFHLENBQUNiLGFBQWEsSUFBSXBDO1FBQ3JDO1FBRUEsSUFBSSxDQUFDVyxRQUFRLENBQ1ZXLEdBQUcsQ0FBQ2MsYUFDSmpDLE9BQU8sQ0FBQzZCLFNBQVNILEtBQUssQ0FBQyxJQUFJSSxXQUFXQztJQUMzQzs7YUFqTUFQLFdBQUFBLEdBQXVCO2FBQ3ZCaEIsUUFBQUEsR0FBaUMsSUFBSXVDO2FBQ3JDcEMsUUFBQUEsR0FBMEI7YUFDMUJHLFlBQUFBLEdBQThCO2FBQzlCQyxvQkFBQUEsR0FBc0M7O0FBOEx4QztBQUVPLFNBQVNuQixnQkFDZG9ELGVBQXNDO0lBRXRDLGtGQUFrRjtJQUNsRiw0RUFBNEU7SUFDNUUsMkNBQTJDO0lBRTNDLHlFQUF5RTtJQUN6RSwyQkFBMkI7SUFDM0Isb0NBQW9DO0lBQ3BDLDhFQUE4RTtJQUM5RSx3RUFBd0U7SUFDeEUsZ0hBQWdIO0lBQ2hILDRFQUE0RTtJQUM1RSxNQUFNQyxPQUFPLElBQUlwRDtJQUVqQiw2RkFBNkY7SUFDN0ZtRCxnQkFBZ0JOLE9BQU8sQ0FBQyxDQUFDUSxXQUFhRCxLQUFLbkQsTUFBTSxDQUFDb0Q7SUFDbEQsNEdBQTRHO0lBQzVHLE9BQU9ELEtBQUs3QyxNQUFNO0FBQ3BCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvc29ydGVkLXJvdXRlcy50cz9iYzU1Il0sIm5hbWVzIjpbImdldFNvcnRlZFJvdXRlcyIsIlVybE5vZGUiLCJpbnNlcnQiLCJ1cmxQYXRoIiwiX2luc2VydCIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInNtb29zaCIsIl9zbW9vc2giLCJwcmVmaXgiLCJjaGlsZHJlblBhdGhzIiwiY2hpbGRyZW4iLCJrZXlzIiwic29ydCIsInNsdWdOYW1lIiwic3BsaWNlIiwiaW5kZXhPZiIsInJlc3RTbHVnTmFtZSIsIm9wdGlvbmFsUmVzdFNsdWdOYW1lIiwicm91dGVzIiwibWFwIiwiYyIsImdldCIsInJlZHVjZSIsInByZXYiLCJjdXJyIiwicHVzaCIsInBsYWNlaG9sZGVyIiwiciIsInNsaWNlIiwiRXJyb3IiLCJ1bnNoaWZ0IiwidXJsUGF0aHMiLCJzbHVnTmFtZXMiLCJpc0NhdGNoQWxsIiwibGVuZ3RoIiwibmV4dFNlZ21lbnQiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzZWdtZW50TmFtZSIsImlzT3B0aW9uYWwiLCJzdWJzdHJpbmciLCJoYW5kbGVTbHVnIiwicHJldmlvdXNTbHVnIiwibmV4dFNsdWciLCJmb3JFYWNoIiwic2x1ZyIsInJlcGxhY2UiLCJoYXMiLCJzZXQiLCJNYXAiLCJub3JtYWxpemVkUGFnZXMiLCJyb290IiwicGFnZVBhdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/runtime-config.external.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/runtime-config.external.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n setConfig: function() {\n return setConfig;\n }\n});\nlet runtimeConfig;\nconst _default = ()=>{\n return runtimeConfig;\n};\nfunction setConfig(configValue) {\n runtimeConfig = configValue;\n} //# sourceMappingURL=runtime-config.external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcnVudGltZS1jb25maWcuZXh0ZXJuYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBRUFBLFNBRUM7ZUFGREM7O0lBSWdCQyxXQUFTO2VBQVRBOzs7QUFOaEIsSUFBSUM7TUFFSkYsV0FBZTtJQUNiLE9BQU9FO0FBQ1Q7QUFFTyxTQUFTRCxVQUFVRSxXQUFnQjtJQUN4Q0QsZ0JBQWdCQztBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvcnVudGltZS1jb25maWcuZXh0ZXJuYWwudHM/N2JkMSJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiX2RlZmF1bHQiLCJzZXRDb25maWciLCJydW50aW1lQ29uZmlnIiwiY29uZmlnVmFsdWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/runtime-config.external.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/segment.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/segment.js ***!
|
||
\******************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n isGroupSegment: function() {\n return isGroupSegment;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === \"(\" && segment.endsWith(\")\");\n}\nconst PAGE_SEGMENT_KEY = \"__PAGE__\";\nconst DEFAULT_SEGMENT_KEY = \"__DEFAULT__\"; //# sourceMappingURL=segment.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2VnbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFNYUEscUJBQW1CO2VBQW5CQTs7SUFEQUMsa0JBQWdCO2VBQWhCQTs7SUFMR0MsZ0JBQWM7ZUFBZEE7OztBQUFULFNBQVNBLGVBQWVDLE9BQWU7SUFDNUMsc0NBQXNDO0lBQ3RDLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBT0EsUUFBUUMsUUFBUSxDQUFDO0FBQ2hEO0FBRU8sTUFBTUgsbUJBQW1CO0FBQ3pCLE1BQU1ELHNCQUFzQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvc2VnbWVudC50cz81NWQ5Il0sIm5hbWVzIjpbIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJQQUdFX1NFR01FTlRfS0VZIiwiaXNHcm91cFNlZ21lbnQiLCJzZWdtZW50IiwiZW5kc1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/segment.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/side-effect.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/side-effect.js ***!
|
||
\**********************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return SideEffect;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst isServer = \"object\" === \"undefined\";\nconst useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;\nconst useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;\nfunction SideEffect(props) {\n _s();\n const { headManager, reduceComponentsToState } = props;\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));\n headManager.updateHead(reduceComponentsToState(headElements, props));\n }\n }\n if (isServer) {\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n emitChange();\n }\n useClientOnlyLayoutEffect(()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n return ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.delete(props.children);\n };\n });\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect(()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n return ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n };\n });\n useClientOnlyEffect(()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n return ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n };\n });\n return null;\n} //# sourceMappingURL=side-effect.js.map\n_s(SideEffect, \"gHVkikNHNxjVdD11eJBzaqkCiPY=\", false, function() {\n return [\n useClientOnlyLayoutEffect,\n useClientOnlyLayoutEffect,\n useClientOnlyEffect\n ];\n});\n_c = SideEffect;\nvar _c;\n$RefreshReg$(_c, \"SideEffect\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2lkZS1lZmZlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OzJDQW9CQTs7O2VBQXdCQTs7O21DQW5CNkI7QUFlckQsTUFBTUMsV0FBVyxhQUFrQjtBQUNuQyxNQUFNQyw0QkFBNEJELFdBQVcsS0FBTyxJQUFJRSxPQUFBQSxlQUFlO0FBQ3ZFLE1BQU1DLHNCQUFzQkgsV0FBVyxLQUFPLElBQUlJLE9BQUFBLFNBQVM7QUFFNUMsU0FBU0wsV0FBV00sS0FBc0I7O0lBQ3ZELE1BQU0sRUFBRUMsV0FBVyxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHRjtJQUVqRCxTQUFTRztRQUNQLElBQUlGLGVBQWVBLFlBQVlHLGdCQUFnQixFQUFFO1lBQy9DLE1BQU1DLGVBQWVDLE9BQUFBLFFBQVEsQ0FBQ0MsT0FBTyxDQUNuQ0MsTUFBTUMsSUFBSSxDQUFDUixZQUFZRyxnQkFBZ0IsRUFBMEJNLE1BQU0sQ0FDckVDO1lBR0pWLFlBQVlXLFVBQVUsQ0FBQ1Ysd0JBQXdCRyxjQUFjTDtRQUMvRDtJQUNGO0lBRUEsSUFBSUwsVUFBVTtZQUNaTTtRQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsWUFBYUcsZ0JBQWdCLHFCQUE3QkgsOEJBQStCWSxHQUFHLENBQUNiLE1BQU1jLFFBQVE7UUFDakRYO0lBQ0Y7SUFFQVAsMEJBQTBCO1lBQ3hCSztRQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsWUFBYUcsZ0JBQWdCLHFCQUE3QkgsOEJBQStCWSxHQUFHLENBQUNiLE1BQU1jLFFBQVE7UUFDakQsT0FBTztnQkFDTGI7WUFBQUEsZUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsQ0FBQUEsZ0NBQUFBLFlBQWFHLGdCQUFnQixxQkFBN0JILDhCQUErQmMsTUFBTSxDQUFDZixNQUFNYyxRQUFRO1FBQ3REO0lBQ0Y7SUFFQSxrRkFBa0Y7SUFDbEYsb0ZBQW9GO0lBQ3BGLGdFQUFnRTtJQUNoRSxxRkFBcUY7SUFDckYsbUZBQW1GO0lBQ25GbEIsMEJBQTBCO1FBQ3hCLElBQUlLLGFBQWE7WUFDZkEsWUFBWWUsY0FBYyxHQUFHYjtRQUMvQjtRQUNBLE9BQU87WUFDTCxJQUFJRixhQUFhO2dCQUNmQSxZQUFZZSxjQUFjLEdBQUdiO1lBQy9CO1FBQ0Y7SUFDRjtJQUVBTCxvQkFBb0I7UUFDbEIsSUFBSUcsZUFBZUEsWUFBWWUsY0FBYyxFQUFFO1lBQzdDZixZQUFZZSxjQUFjO1lBQzFCZixZQUFZZSxjQUFjLEdBQUc7UUFDL0I7UUFDQSxPQUFPO1lBQ0wsSUFBSWYsZUFBZUEsWUFBWWUsY0FBYyxFQUFFO2dCQUM3Q2YsWUFBWWUsY0FBYztnQkFDMUJmLFlBQVllLGNBQWMsR0FBRztZQUMvQjtRQUNGO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7R0F4RHdCdEI7O1FBbUJ0QkU7UUFZQUE7UUFXQUU7OztLQTFDc0JKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi9zaWRlLWVmZmVjdC50c3g/NzVkZSJdLCJuYW1lcyI6WyJTaWRlRWZmZWN0IiwiaXNTZXJ2ZXIiLCJ1c2VDbGllbnRPbmx5TGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlQ2xpZW50T25seUVmZmVjdCIsInVzZUVmZmVjdCIsInByb3BzIiwiaGVhZE1hbmFnZXIiLCJyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZSIsImVtaXRDaGFuZ2UiLCJtb3VudGVkSW5zdGFuY2VzIiwiaGVhZEVsZW1lbnRzIiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwiQXJyYXkiLCJmcm9tIiwiZmlsdGVyIiwiQm9vbGVhbiIsInVwZGF0ZUhlYWQiLCJhZGQiLCJjaGlsZHJlbiIsImRlbGV0ZSIsIl9wZW5kaW5nVXBkYXRlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/side-effect.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/utils.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils.js ***!
|
||
\****************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\");\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === \"string\" ? Component : Component.displayName || Component.name || \"Unknown\";\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split(\"?\");\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") + (urlParts[1] ? \"?\" + urlParts.slice(1).join(\"?\") : \"\");\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== \"undefined\";\nconst ST = SP && [\n \"mark\",\n \"measure\",\n \"getEntriesByName\"\n].every((method)=>typeof performance[method] === \"function\");\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = \"ENOENT\";\n this.name = \"PageNotFoundError\";\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = \"ENOENT\";\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBb2FhQSxhQUFXO2VBQVhBOztJQW9CQUMseUJBQXVCO2VBQXZCQTs7SUFQQUMsbUJBQWlCO2VBQWpCQTs7SUFaQUMsZ0JBQWM7ZUFBZEE7O0lBQ0FDLG1CQUFpQjtlQUFqQkE7O0lBVEFDLElBQUU7ZUFBRkE7O0lBQ0FDLElBQUU7ZUFBRkE7O0lBbFhBQyxZQUFVO2VBQVZBOztJQXNRR0MsVUFBUTtlQUFSQTs7SUErQkFDLGdCQUFjO2VBQWRBOztJQVhBQyxtQkFBaUI7ZUFBakJBOztJQUtBQyxRQUFNO2VBQU5BOztJQVBIQyxlQUFhO2VBQWJBOztJQW1CR0MsV0FBUztlQUFUQTs7SUFrQk1DLHFCQUFtQjtlQUFuQkE7O0lBZE5DLDBCQUF3QjtlQUF4QkE7O0lBK0dBQyxnQkFBYztlQUFkQTs7O0FBOVpULE1BQU1ULGFBQWE7SUFBQztJQUFPO0lBQU87SUFBTztJQUFPO0lBQU87Q0FBTztBQXNROUQsU0FBU0MsU0FDZFMsRUFBSztJQUVMLElBQUlDLE9BQU87SUFDWCxJQUFJQztJQUVKLE9BQVE7eUNBQUlDLE9BQUFBLElBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLE9BQUFBLE1BQUFBLE9BQUFBO1lBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztRQUNWLElBQUksQ0FBQ0YsTUFBTTtZQUNUQSxPQUFPO1lBQ1BDLFNBQVNGLE1BQU1HO1FBQ2pCO1FBQ0EsT0FBT0Q7SUFDVDtBQUNGO0FBRUEsMERBQTBEO0FBQzFELGdFQUFnRTtBQUNoRSxNQUFNRSxxQkFBcUI7QUFDcEIsTUFBTVQsZ0JBQWdCLENBQUNVLE1BQWdCRCxtQkFBbUJFLElBQUksQ0FBQ0Q7QUFFL0QsU0FBU1o7SUFDZCxNQUFNLEVBQUVjLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsT0FBT0MsUUFBUTtJ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QUFFWixPQUFlLENBQUU7UUFDekMsS0FBSztRQUNMLElBQUksQ0FBQ0EsT0FBTyxHQUFHLDBDQUF3Q1ksT0FBSyxNQUFHWjtJQUNqRTtBQUNGO0FBRU8sTUFBTWpELGdDQUFnQ2tEO0lBRTNDVSxhQUFjO1FBQ1osS0FBSztRQUNMLElBQUksQ0FBQ0UsSUFBSSxHQUFHO1FBQ1osSUFBSSxDQUFDYixPQUFPLEdBQUk7SUFDbEI7QUFDRjtBQVdPLFNBQVNsQyxlQUFlZ0QsS0FBWTtJQUN6QyxPQUFPQyxLQUFLQyxTQUFTLENBQUM7UUFBRWhCLFNBQVNjLE1BQU1kLE9BQU87UUFBRWlCLE9BQU9ILE1BQU1HLEtBQUs7SUFBQztBQUNyRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL3NoYXJlZC9saWIvdXRpbHMudHM/NDRjYiJdLCJuYW1lcyI6WyJEZWNvZGVFcnJvciIsIk1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIiwiTWlzc2luZ1N0YXRpY1BhZ2UiLCJOb3JtYWxpemVFcnJvciIsIlBhZ2VOb3RGb3VuZEVycm9yIiwiU1AiLCJTVCIsIldFQl9WSVRBTFMiLCJleGVjT25jZSIsImdldERpc3BsYXlOYW1lIiwiZ2V0TG9jYXRpb25PcmlnaW4iLCJnZXRVUkwiLCJpc0Fic29sdXRlVXJsIiwiaXNSZXNTZW50IiwibG9hZEdldEluaXRpYWxQcm9wcyIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsInN0cmluZ2lmeUVycm9yIiwiZm4iLCJ1c2VkIiwicmVzdWx0IiwiYXJncyIsIkFCU09MVVRFX1VSTF9SRUdFWCIsInVybCIsInRlc3QiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwicG9ydCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsIm9yaWdpbiIsInN1YnN0cmluZyIsImxlbmd0aCIsIkNvbXBvbmVudCIsImRpc3BsYXlOYW1lIiwibmFtZSIsInJlcyIsImZpbmlzaGVkIiwiaGVhZGVyc1NlbnQiLCJ1cmxQYXJ0cyIsInNwbGl0IiwidXJsTm9RdWVyeSIsInJlcGxhY2UiLCJzbGljZSIsImpvaW4iLCJBcHAiLCJjdHgiLCJwcm9jZXNzIiwicHJvdG90eXBlIiwiZ2V0SW5pdGlhbFByb3BzIiwibWVzc2FnZSIsIkVycm9yIiwicGFnZVByb3BzIiwicHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiY29uc29sZSIsIndhcm4iLCJwZXJmb3JtYW5jZSIsImV2ZXJ5IiwibWV0aG9kIiwiY29uc3RydWN0b3IiLCJwYWdlIiwiY29kZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YWNrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/shared/lib/utils/warn-once.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***!
|
||
\**************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMvd2Fybi1vbmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7NENBV1NBOzs7ZUFBQUE7OztBQVhULElBQUlBLFdBQVcsQ0FBQ0MsS0FBZTtBQUMvQixJQUFJQyxJQUF5QixFQUFjO0lBQ3pDLE1BQU1DLFdBQVcsSUFBSUM7SUFDckJKLFdBQVcsQ0FBQ0s7UUFDVixJQUFJLENBQUNGLFNBQVNHLEdBQUcsQ0FBQ0QsTUFBTTtZQUN0QkUsUUFBUUMsSUFBSSxDQUFDSDtRQUNmO1FBQ0FGLFNBQVNNLEdBQUcsQ0FBQ0o7SUFDZjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UudHM/NDNhNiJdLCJuYW1lcyI6WyJ3YXJuT25jZSIsIl8iLCJwcm9jZXNzIiwid2FybmluZ3MiLCJTZXQiLCJtc2ciLCJoYXMiLCJjb25zb2xlIiwid2FybiIsImFkZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils/warn-once.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/anser/index.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/anser/index.js ***!
|
||
\********************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";var e={211:e=>{var r=function(){function defineProperties(e,r){for(var n=0;n<r.length;n++){var s=r[n];s.enumerable=s.enumerable||false;s.configurable=true;if(\"value\"in s)s.writable=true;Object.defineProperty(e,s.key,s)}}return function(e,r,n){if(r)defineProperties(e.prototype,r);if(n)defineProperties(e,n);return e}}();function _classCallCheck(e,r){if(!(e instanceof r)){throw new TypeError(\"Cannot call a class as a function\")}}var n=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];var s=function(){r(Anser,null,[{key:\"escapeForHtml\",value:function escapeForHtml(e){return(new Anser).escapeForHtml(e)}},{key:\"linkify\",value:function linkify(e){return(new Anser).linkify(e)}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return(new Anser).ansiToHtml(e,r)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){return(new Anser).ansiToJson(e,r)}},{key:\"ansiToText\",value:function ansiToText(e){return(new Anser).ansiToText(e)}}]);function Anser(){_classCallCheck(this,Anser);this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null;this.bright=0}r(Anser,[{key:\"setupPalette\",value:function setupPalette(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e){for(var r=0;r<8;++r){this.PALETTE_COLORS.push(n[e][r].color)}}var s=[0,95,135,175,215,255];var i=function format(e,r,n){return s[e]+\", \"+s[r]+\", \"+s[n]};var t=void 0,o=void 0,a=void 0;for(var l=0;l<6;++l){for(var c=0;c<6;++c){for(var u=0;u<6;++u){this.PALETTE_COLORS.push(i(l,c,u))}}}var f=8;for(var h=0;h<24;++h,f+=10){this.PALETTE_COLORS.push(i(f,f,f))}}},{key:\"escapeForHtml\",value:function escapeForHtml(e){return e.replace(/[&<>]/gm,(function(e){return e==\"&\"?\"&\":e==\"<\"?\"<\":e==\">\"?\">\":\"\"}))}},{key:\"linkify\",value:function linkify(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,(function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"}))}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return this.process(e,r,true)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){r=r||{};r.json=true;r.clearLine=false;return this.process(e,r,true)}},{key:\"ansiToText\",value:function ansiToText(e){return this.process(e,{},false)}},{key:\"process\",value:function process(e,r,n){var s=this;var i=this;var t=e.split(/\\033\\[/);var o=t.shift();if(r===undefined||r===null){r={}}r.clearLine=/\\r/.test(e);var a=t.map((function(e){return s.processChunk(e,r,n)}));if(r&&r.json){var l=i.processChunkJson(\"\");l.content=o;l.clearLine=r.clearLine;a.unshift(l);if(r.remove_empty){a=a.filter((function(e){return!e.isEmpty()}))}return a}else{a.unshift(o)}return a.join(\"\")}},{key:\"processChunkJson\",value:function processChunkJson(e,r,s){r=typeof r==\"undefined\"?{}:r;var i=r.use_classes=typeof r.use_classes!=\"undefined\"&&r.use_classes;var t=r.key=i?\"class\":\"color\";var o={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:r.clearLine,decoration:null,was_processed:false,isEmpty:function isEmpty(){return!o.content}};var a=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!a)return o;var l=o.content=a[4];var c=a[2].split(\";\");if(a[1]!==\"\"||a[3]!==\"m\"){return o}if(!s){return o}var u=this;u.decoration=null;while(c.length>0){var f=c.shift();var h=parseInt(f);if(isNaN(h)||h===0){u.fg=u.bg=u.decoration=null}else if(h===1){u.decoration=\"bold\"}else if(h===2){u.decoration=\"dim\"}else if(h==3){u.decoration=\"italic\"}else if(h==4){u.decoration=\"underline\"}else if(h==5){u.decoration=\"blink\"}else if(h===7){u.decoration=\"reverse\"}else if(h===8){u.decoration=\"hidden\"}else if(h===9){u.decoration=\"strikethrough\"}else if(h==39){u.fg=null}else if(h==49){u.bg=null}else if(h>=30&&h<38){u.fg=n[0][h%10][t]}else if(h>=90&&h<98){u.fg=n[1][h%10][t]}else if(h>=40&&h<48){u.bg=n[0][h%10][t]}else if(h>=100&&h<108){u.bg=n[1][h%10][t]}else if(h===38||h===48){var p=h===38;if(c.length>=1){var g=c.shift();if(g===\"5\"&&c.length>=1){var v=parseInt(c.shift());if(v>=0&&v<=255){if(!i){if(!this.PALETTE_COLORS){u.setupPalette()}if(p){u.fg=this.PALETTE_COLORS[v]}else{u.bg=this.PALETTE_COLORS[v]}}else{var d=v>=16?\"ansi-palette-\"+v:n[v>7?1:0][v%8][\"class\"];if(p){u.fg=d}else{u.bg=d}}}}else if(g===\"2\"&&c.length>=3){var _=parseInt(c.shift());var b=parseInt(c.shift());var y=parseInt(c.shift());if(_>=0&&_<=255&&b>=0&&b<=255&&y>=0&&y<=255){var k=_+\", \"+b+\", \"+y;if(!i){if(p){u.fg=k}else{u.bg=k}}else{if(p){u.fg=\"ansi-truecolor\";u.fg_truecolor=k}else{u.bg=\"ansi-truecolor\";u.bg_truecolor=k}}}}}}}if(u.fg===null&&u.bg===null&&u.decoration===null){return o}else{var T=[];var m=[];var w={};o.fg=u.fg;o.bg=u.bg;o.fg_truecolor=u.fg_truecolor;o.bg_truecolor=u.bg_truecolor;o.decoration=u.decoration;o.was_processed=true;return o}}},{key:\"processChunk\",value:function processChunk(e,r,n){var s=this;var i=this;r=r||{};var t=this.processChunkJson(e,r,n);if(r.json){return t}if(t.isEmpty()){return\"\"}if(!t.was_processed){return t.content}var o=r.use_classes;var a=[];var l=[];var c={};var u=function render_data(e){var r=[];var n=void 0;for(n in e){if(e.hasOwnProperty(n)){r.push(\"data-\"+n+'=\"'+s.escapeForHtml(e[n])+'\"')}}return r.length>0?\" \"+r.join(\" \"):\"\"};if(t.fg){if(o){l.push(t.fg+\"-fg\");if(t.fg_truecolor!==null){c[\"ansi-truecolor-fg\"]=t.fg_truecolor;t.fg_truecolor=null}}else{a.push(\"color:rgb(\"+t.fg+\")\")}}if(t.bg){if(o){l.push(t.bg+\"-bg\");if(t.bg_truecolor!==null){c[\"ansi-truecolor-bg\"]=t.bg_truecolor;t.bg_truecolor=null}}else{a.push(\"background-color:rgb(\"+t.bg+\")\")}}if(t.decoration){if(o){l.push(\"ansi-\"+t.decoration)}else if(t.decoration===\"bold\"){a.push(\"font-weight:bold\")}else if(t.decoration===\"dim\"){a.push(\"opacity:0.5\")}else if(t.decoration===\"italic\"){a.push(\"font-style:italic\")}else if(t.decoration===\"reverse\"){a.push(\"filter:invert(100%)\")}else if(t.decoration===\"hidden\"){a.push(\"visibility:hidden\")}else if(t.decoration===\"strikethrough\"){a.push(\"text-decoration:line-through\")}else{a.push(\"text-decoration:\"+t.decoration)}}if(o){return'<span class=\"'+l.join(\" \")+'\"'+u(c)+\">\"+t.content+\"</span>\"}else{return'<span style=\"'+a.join(\";\")+'\"'+u(c)+\">\"+t.content+\"</span>\"}}}]);return Anser}();e.exports=s}};var r={};function __nccwpck_require__(n){var s=r[n];if(s!==undefined){return s.exports}var i=r[n]={exports:{}};var t=true;try{e[n](i,i.exports,__nccwpck_require__);t=false}finally{if(t)delete r[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(211);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLGFBQWEsT0FBTyxRQUFRLGlCQUFpQiwrQkFBK0IsWUFBWSxXQUFXLEtBQUssV0FBVyxpQ0FBaUMsb0JBQW9CLCtCQUErQixrQ0FBa0MsdUJBQXVCLHFDQUFxQywyQkFBMkIsVUFBVSxHQUFHLDhCQUE4QixzQkFBc0IsMERBQTBELFNBQVMsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUscUNBQXFDLEVBQUUsd0NBQXdDLEVBQUUsb0NBQW9DLEVBQUUseUNBQXlDLEVBQUUsc0NBQXNDLEVBQUUsdUNBQXVDLElBQUksNkNBQTZDLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsZ0RBQWdELEVBQUUsNkNBQTZDLEVBQUUsaURBQWlELEVBQUUsOENBQThDLEVBQUUsZ0RBQWdELEdBQUcsaUJBQWlCLGVBQWUsb0RBQW9ELG9DQUFvQyxFQUFFLHdDQUF3Qyw4QkFBOEIsRUFBRSxnREFBZ0QsbUNBQW1DLEVBQUUsZ0RBQWdELG1DQUFtQyxFQUFFLDhDQUE4QyxpQ0FBaUMsR0FBRyxpQkFBaUIsNEJBQTRCLHlEQUF5RCxjQUFjLFVBQVUsaURBQWlELHVCQUF1QixZQUFZLElBQUksS0FBSyxZQUFZLElBQUksS0FBSyx5Q0FBeUMsNkJBQTZCLDZCQUE2QixpQ0FBaUMsK0JBQStCLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLHFDQUFxQyxRQUFRLFlBQVksS0FBSyxXQUFXLHFDQUFxQyxFQUFFLG9EQUFvRCx3Q0FBd0Msb0JBQW9CLGNBQWMsY0FBYyxLQUFLLElBQUksRUFBRSx3Q0FBd0Msc0RBQXNELGtDQUFrQyxJQUFJLEVBQUUsZ0RBQWdELCtCQUErQixFQUFFLGdEQUFnRCxRQUFRLFlBQVksa0JBQWtCLCtCQUErQixFQUFFLDhDQUE4Qyx3QkFBd0IsU0FBUyxFQUFFLDRDQUE0QyxXQUFXLFdBQVcsd0JBQXdCLGdCQUFnQiw0QkFBNEIsS0FBSyx5QkFBeUIseUJBQXlCLDZCQUE2QixHQUFHLGNBQWMsNkJBQTZCLFlBQVksd0JBQXdCLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsR0FBRyxTQUFTLEtBQUssYUFBYSxtQkFBbUIsRUFBRSw4REFBOEQsMEJBQTBCLEdBQUcscUVBQXFFLDhCQUE4QixPQUFPLG1KQUFtSixtQkFBbUIsb0NBQW9DLHlDQUF5QyxlQUFlLHFCQUFxQixtQkFBbUIsR0FBRywwQkFBMEIsU0FBUyxPQUFPLFNBQVMsV0FBVyxrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isb0JBQW9CLDRCQUE0QixlQUFlLG9CQUFvQixlQUFlLG1CQUFtQixjQUFjLHNCQUFzQixjQUFjLHlCQUF5QixjQUFjLHFCQUFxQixlQUFlLHVCQUF1QixlQUFlLHNCQUFzQixlQUFlLDZCQUE2QixlQUFlLFVBQVUsZUFBZSxVQUFVLHFCQUFxQixtQkFBbUIscUJBQXFCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsd0JBQXdCLGFBQWEsZ0JBQWdCLGdCQUFnQix5QkFBeUIsMEJBQTBCLGlCQUFpQixPQUFPLHlCQUF5QixpQkFBaUIsTUFBTSw0QkFBNEIsS0FBSyw2QkFBNkIsS0FBSyx1REFBdUQsTUFBTSxPQUFPLEtBQUssVUFBVSw4QkFBOEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsNkNBQTZDLHNCQUFzQixPQUFPLE1BQU0sT0FBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLHNCQUFzQixpQkFBaUIsS0FBSyxzQkFBc0IsdUJBQXVCLGtEQUFrRCxTQUFTLEtBQUssU0FBUyxTQUFTLFNBQVMsVUFBVSxVQUFVLDhCQUE4Qiw4QkFBOEIsMEJBQTBCLHFCQUFxQixXQUFXLEVBQUUsc0RBQXNELFdBQVcsV0FBVyxRQUFRLG1DQUFtQyxXQUFXLFNBQVMsZ0JBQWdCLFNBQVMscUJBQXFCLGlCQUFpQixvQkFBb0IsU0FBUyxTQUFTLFNBQVMsOEJBQThCLFNBQVMsYUFBYSxZQUFZLHdCQUF3QixrREFBa0Qsc0NBQXNDLFNBQVMsTUFBTSxtQkFBbUIsMEJBQTBCLHNDQUFzQyxxQkFBcUIsS0FBSywrQkFBK0IsU0FBUyxNQUFNLG1CQUFtQiwwQkFBMEIsc0NBQXNDLHFCQUFxQixLQUFLLDBDQUEwQyxpQkFBaUIsTUFBTSw2QkFBNkIsK0JBQStCLDJCQUEyQiw4QkFBOEIsc0JBQXNCLGlDQUFpQyw0QkFBNEIsa0NBQWtDLDhCQUE4QixpQ0FBaUMsNEJBQTRCLHdDQUF3Qyx1Q0FBdUMsS0FBSyx5Q0FBeUMsTUFBTSxtRUFBbUUsS0FBSywrQkFBK0Isc0NBQXNDLEdBQUcsYUFBYSxHQUFHLGNBQWMsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzPzQyZGQiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ezIxMTplPT57dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBzPXJbbl07cy5lbnVtZXJhYmxlPXMuZW51bWVyYWJsZXx8ZmFsc2U7cy5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBzKXMud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxzLmtleSxzKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtpZihyKWRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUscik7aWYobilkZWZpbmVQcm9wZXJ0aWVzKGUsbik7cmV0dXJuIGV9fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhlLHIpe2lmKCEoZSBpbnN0YW5jZW9mIHIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfX12YXIgbj1bW3tjb2xvcjpcIjAsIDAsIDBcIixjbGFzczpcImFuc2ktYmxhY2tcIn0se2NvbG9yOlwiMTg3LCAwLCAwXCIsY2xhc3M6XCJhbnNpLXJlZFwifSx7Y29sb3I6XCIwLCAxODcsIDBcIixjbGFzczpcImFuc2ktZ3JlZW5cIn0se2NvbG9yOlwiMTg3LCAxODcsIDBcIixjbGFzczpcImFuc2kteWVsbG93XCJ9LHtjb2xvcjpcIjAsIDAsIDE4N1wiLGNsYXNzOlwiYW5zaS1ibHVlXCJ9LHtjb2xvcjpcIjE4NywgMCwgMTg3XCIsY2xhc3M6XCJhbnNpLW1hZ2VudGFcIn0se2NvbG9yOlwiMCwgMTg3LCAxODdcIixjbGFzczpcImFuc2ktY3lhblwifSx7Y29sb3I6XCIyNTUsMjU1LDI1NVwiLGNsYXNzOlwiYW5zaS13aGl0ZVwifV0sW3tjb2xvcjpcIjg1LCA4NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWJsYWNrXCJ9LHtjb2xvcjpcIjI1NSwgODUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1yZWRcIn0se2NvbG9yOlwiMCwgMjU1LCAwXCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ncmVlblwifSx7Y29sb3I6XCIyNTUsIDI1NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXllbGxvd1wifSx7Y29sb3I6XCI4NSwgODUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtYmx1ZVwifSx7Y29sb3I6XCIyNTUsIDg1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LW1hZ2VudGFcIn0se2NvbG9yOlwiODUsIDI1NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1jeWFuXCJ9LHtjb2xvcjpcIjI1NSwgMjU1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXdoaXRlXCJ9XV07dmFyIHM9ZnVuY3Rpb24oKXtyKEFuc2VyLG51bGwsW3trZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24gZXNjYXBlRm9ySHRtbChlKXtyZXR1cm4obmV3IEFuc2VyKS5lc2NhcGVGb3JIdG1sKGUpfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbiBsaW5raWZ5KGUpe3JldHVybihuZXcgQW5zZXIpLmxpbmtpZnkoZSl9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0h0bWwoZSxyKXtyZXR1cm4obmV3IEFuc2VyKS5hbnNpVG9IdG1sKGUscil9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0pzb24oZSxyKXtyZXR1cm4obmV3IEFuc2VyKS5hbnNpVG9Kc29uKGUscil9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb1RleHQoZSl7cmV0dXJuKG5ldyBBbnNlcikuYW5zaVRvVGV4dChlKX19XSk7ZnVuY3Rpb24gQW5zZXIoKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxBbnNlcik7dGhpcy5mZz10aGlzLmJnPXRoaXMuZmdfdHJ1ZWNvbG9yPXRoaXMuYmdfdHJ1ZWNvbG9yPW51bGw7dGhpcy5icmlnaHQ9MH1yKEFuc2VyLFt7a2V5Olwic2V0dXBQYWxldHRlXCIsdmFsdWU6ZnVuY3Rpb24gc2V0dXBQYWxldHRlKCl7dGhpcy5QQUxFVFRFX0NPTE9SUz1bXTtmb3IodmFyIGU9MDtlPDI7KytlKXtmb3IodmFyIHI9MDtyPDg7KytyKXt0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2gobltlXVtyXS5jb2xvcil9fXZhciBzPVswLDk1LDEzNSwxNzUsMjE1LDI1NV07dmFyIGk9ZnVuY3Rpb24gZm9ybWF0KGUscixuKXtyZXR1cm4gc1tlXStcIiwgXCIrc1tyXStcIiwgXCIrc1tuXX07dmFyIHQ9dm9pZCAwLG89dm9pZCAwLGE9dm9pZCAwO2Zvcih2YXIgbD0wO2w8NjsrK2wpe2Zvcih2YXIgYz0wO2M8NjsrK2Mpe2Zvcih2YXIgdT0wO3U8NjsrK3Upe3RoaXMuUEFMRVRURV9DT0xPUlMucHVzaChpKGwsYyx1KSl9fX12YXIgZj04O2Zvcih2YXIgaD0wO2g8MjQ7KytoLGYrPTEwKXt0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2goaShmLGYsZikpfX19LHtrZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24gZXNjYXBlRm9ySHRtbChlKXtyZXR1cm4gZS5yZXBsYWNlKC9bJjw+XS9nbSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PVwiJlwiP1wiJmFtcDtcIjplPT1cIjxcIj9cIiZsdDtcIjplPT1cIj5cIj9cIiZndDtcIjpcIlwifSkpfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbiBsaW5raWZ5KGUpe3JldHVybiBlLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvW15cXHNdKykvZ20sKGZ1bmN0aW9uKGUpe3JldHVybic8YSBocmVmPVwiJytlKydcIj4nK2UrXCI8L2E+XCJ9KSl9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0h0bWwoZSxyKXtyZXR1cm4gdGhpcy5wcm9jZXNzKGUscix0cnVlKX19LHtrZXk6XCJhbnNpVG9Kc29uXCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvSnNvbihlLHIpe3I9cnx8e307ci5qc29uPXRydWU7ci5jbGVhckxpbmU9ZmFsc2U7cmV0dXJuIHRoaXMucHJvY2VzcyhlLHIsdHJ1ZSl9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb1RleHQoZSl7cmV0dXJuIHRoaXMucHJvY2VzcyhlLHt9LGZhbHNlKX19LHtrZXk6XCJwcm9jZXNzXCIsdmFsdWU6ZnVuY3Rpb24gcHJvY2VzcyhlLHIsbil7dmFyIHM9dGhpczt2YXIgaT10aGlzO3ZhciB0PWUuc3BsaXQoL1xcMDMzXFxbLyk7dmFyIG89dC5zaGlmdCgpO2lmKHI9PT11bmRlZmluZWR8fHI9PT1udWxsKXtyPXt9fXIuY2xlYXJMaW5lPS9cXHIvLnRlc3QoZSk7dmFyIGE9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBzLnByb2Nlc3NDaHVuayhlLHIsbil9KSk7aWYociYmci5qc29uKXt2YXIgbD1pLnByb2Nlc3NDaHVua0pzb24oXCJcIik7bC5jb250ZW50PW87bC5jbGVhckxpbmU9ci5jbGVhckxpbmU7YS51bnNoaWZ0KGwpO2lmKHIucmVtb3ZlX2VtcHR5KXthPWEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pc0VtcHR5KCl9KSl9cmV0dXJuIGF9ZWxzZXthLnVuc2hpZnQobyl9cmV0dXJuIGEuam9pbihcIlwiKX19LHtrZXk6XCJwcm9jZXNzQ2h1bmtKc29uXCIsdmFsdWU6ZnVuY3Rpb24gcHJvY2Vzc0NodW5rSnNvbihlLHIscyl7cj10eXBlb2Ygcj09XCJ1bmRlZmluZWRcIj97fTpyO3ZhciBpPXIudXNlX2NsYXNzZXM9dHlwZW9mIHIudXNlX2NsYXNzZXMhPVwidW5kZWZpbmVkXCImJnIudXNlX2NsYXNzZXM7dmFyIHQ9ci5rZXk9aT9cImNsYXNzXCI6XCJjb2xvclwiO3ZhciBvPXtjb250ZW50OmUsZmc6bnVsbCxiZzpudWxsLGZnX3RydWVjb2xvcjpudWxsLGJnX3RydWVjb2xvcjpudWxsLGNsZWFyTGluZTpyLmNsZWFyTGluZSxkZWNvcmF0aW9uOm51bGwsd2FzX3Byb2Nlc3NlZDpmYWxzZSxpc0VtcHR5OmZ1bmN0aW9uIGlzRW1wdHkoKXtyZXR1cm4hby5jb250ZW50fX07dmFyIGE9ZS5tYXRjaCgvXihbIVxceDNjLVxceDNmXSopKFtcXGQ7XSopKFtcXHgyMC1cXHgyY10qW1xceDQwLVxceDdlXSkoW1xcc1xcU10qKS9tKTtpZighYSlyZXR1cm4gbzt2YXIgbD1vLmNvbnRlbnQ9YVs0XTt2YXIgYz1hWzJdLnNwbGl0KFwiO1wiKTtpZihhWzFdIT09XCJcInx8YVszXSE9PVwibVwiKXtyZXR1cm4gb31pZighcyl7cmV0dXJuIG99dmFyIHU9dGhpczt1LmRlY29yYXRpb249bnVsbDt3aGlsZShjLmxlbmd0aD4wKXt2YXIgZj1jLnNoaWZ0KCk7dmFyIGg9cGFyc2VJbnQoZik7aWYoaXNOYU4oaCl8fGg9PT0wKXt1LmZnPXUuYmc9dS5kZWNvcmF0aW9uPW51bGx9ZWxzZSBpZihoPT09MSl7dS5kZWNvcmF0aW9uPVwiYm9sZFwifWVsc2UgaWYoaD09PTIpe3UuZGVjb3JhdGlvbj1cImRpbVwifWVsc2UgaWYoaD09Myl7dS5kZWNvcmF0aW9uPVwiaXRhbGljXCJ9ZWxzZSBpZihoPT00KXt1LmRlY29yYXRpb249XCJ1bmRlcmxpbmVcIn1lbHNlIGlmKGg9PTUpe3UuZGVjb3JhdGlvbj1cImJsaW5rXCJ9ZWxzZSBpZihoPT09Nyl7dS5kZWNvcmF0aW9uPVwicmV2ZXJzZVwifWVsc2UgaWYoaD09PTgpe3UuZGVjb3JhdGlvbj1cImhpZGRlblwifWVsc2UgaWYoaD09PTkpe3UuZGVjb3JhdGlvbj1cInN0cmlrZXRocm91Z2hcIn1lbHNlIGlmKGg9PTM5KXt1LmZnPW51bGx9ZWxzZSBpZihoPT00OSl7dS5iZz1udWxsfWVsc2UgaWYoaD49MzAmJmg8Mzgpe3UuZmc9blswXVtoJTEwXVt0XX1lbHNlIGlmKGg+PTkwJiZoPDk4KXt1LmZnPW5bMV1baCUxMF1bdF19ZWxzZSBpZihoPj00MCYmaDw0OCl7dS5iZz1uWzBdW2glMTBdW3RdfWVsc2UgaWYoaD49MTAwJiZoPDEwOCl7dS5iZz1uWzFdW2glMTBdW3RdfWVsc2UgaWYoaD09PTM4fHxoPT09NDgpe3ZhciBwPWg9PT0zODtpZihjLmxlbmd0aD49MSl7dmFyIGc9Yy5zaGlmdCgpO2lmKGc9PT1cIjVcIiYmYy5sZW5ndGg+PTEpe3ZhciB2PXBhcnNlSW50KGMuc2hpZnQoKSk7aWYodj49MCYmdjw9MjU1KXtpZighaSl7aWYoIXRoaXMuUEFMRVRURV9DT0xPUlMpe3Uuc2V0dXBQYWxldHRlKCl9aWYocCl7dS5mZz10aGlzLlBBTEVUVEVfQ09MT1JTW3ZdfWVsc2V7dS5iZz10aGlzLlBBTEVUVEVfQ09MT1JTW3ZdfX1lbHNle3ZhciBkPXY+PTE2P1wiYW5zaS1wYWxldHRlLVwiK3Y6blt2Pjc/MTowXVt2JThdW1wiY2xhc3NcIl07aWYocCl7dS5mZz1kfWVsc2V7dS5iZz1kfX19fWVsc2UgaWYoZz09PVwiMlwiJiZjLmxlbmd0aD49Myl7dmFyIF89cGFyc2VJbnQoYy5zaGlmdCgpKTt2YXIgYj1wYXJzZUludChjLnNoaWZ0KCkpO3ZhciB5PXBhcnNlSW50KGMuc2hpZnQoKSk7aWYoXz49MCYmXzw9MjU1JiZiPj0wJiZiPD0yNTUmJnk+PTAmJnk8PTI1NSl7dmFyIGs9XytcIiwgXCIrYitcIiwgXCIreTtpZighaSl7aWYocCl7dS5mZz1rfWVsc2V7dS5iZz1rfX1lbHNle2lmKHApe3UuZmc9XCJhbnNpLXRydWVjb2xvclwiO3UuZmdfdHJ1ZWNvbG9yPWt9ZWxzZXt1LmJnPVwiYW5zaS10cnVlY29sb3JcIjt1LmJnX3RydWVjb2xvcj1rfX19fX19fWlmKHUuZmc9PT1udWxsJiZ1LmJnPT09bnVsbCYmdS5kZWNvcmF0aW9uPT09bnVsbCl7cmV0dXJuIG99ZWxzZXt2YXIgVD1bXTt2YXIgbT1bXTt2YXIgdz17fTtvLmZnPXUuZmc7by5iZz11LmJnO28uZmdfdHJ1ZWNvbG9yPXUuZmdfdHJ1ZWNvbG9yO28uYmdfdHJ1ZWNvbG9yPXUuYmdfdHJ1ZWNvbG9yO28uZGVjb3JhdGlvbj11LmRlY29yYXRpb247by53YXNfcHJvY2Vzc2VkPXRydWU7cmV0dXJuIG99fX0se2tleTpcInByb2Nlc3NDaHVua1wiLHZhbHVlOmZ1bmN0aW9uIHByb2Nlc3NDaHVuayhlLHIsbil7dmFyIHM9dGhpczt2YXIgaT10aGlzO3I9cnx8e307dmFyIHQ9dGhpcy5wcm9jZXNzQ2h1bmtKc29uKGUscixuKTtpZihyLmpzb24pe3JldHVybiB0fWlmKHQuaXNFbXB0eSgpKXtyZXR1cm5cIlwifWlmKCF0Lndhc19wcm9jZXNzZWQpe3JldHVybiB0LmNvbnRlbnR9dmFyIG89ci51c2VfY2xhc3Nlczt2YXIgYT1bXTt2YXIgbD1bXTt2YXIgYz17fTt2YXIgdT1mdW5jdGlvbiByZW5kZXJfZGF0YShlKXt2YXIgcj1bXTt2YXIgbj12b2lkIDA7Zm9yKG4gaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7ci5wdXNoKFwiZGF0YS1cIituKyc9XCInK3MuZXNjYXBlRm9ySHRtbChlW25dKSsnXCInKX19cmV0dXJuIHIubGVuZ3RoPjA/XCIgXCIrci5qb2luKFwiIFwiKTpcIlwifTtpZih0LmZnKXtpZihvKXtsLnB1c2godC5mZytcIi1mZ1wiKTtpZih0LmZnX3RydWVjb2xvciE9PW51bGwpe2NbXCJhbnNpLXRydWVjb2xvci1mZ1wiXT10LmZnX3RydWVjb2xvcjt0LmZnX3RydWVjb2xvcj1udWxsfX1lbHNle2EucHVzaChcImNvbG9yOnJnYihcIit0LmZnK1wiKVwiKX19aWYodC5iZyl7aWYobyl7bC5wdXNoKHQuYmcrXCItYmdcIik7aWYodC5iZ190cnVlY29sb3IhPT1udWxsKXtjW1wiYW5zaS10cnVlY29sb3ItYmdcIl09dC5iZ190cnVlY29sb3I7dC5iZ190cnVlY29sb3I9bnVsbH19ZWxzZXthLnB1c2goXCJiYWNrZ3JvdW5kLWNvbG9yOnJnYihcIit0LmJnK1wiKVwiKX19aWYodC5kZWNvcmF0aW9uKXtpZihvKXtsLnB1c2goXCJhbnNpLVwiK3QuZGVjb3JhdGlvbil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cImJvbGRcIil7YS5wdXNoKFwiZm9udC13ZWlnaHQ6Ym9sZFwiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwiZGltXCIpe2EucHVzaChcIm9wYWNpdHk6MC41XCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJpdGFsaWNcIil7YS5wdXNoKFwiZm9udC1zdHlsZTppdGFsaWNcIil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cInJldmVyc2VcIil7YS5wdXNoKFwiZmlsdGVyOmludmVydCgxMDAlKVwiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwiaGlkZGVuXCIpe2EucHVzaChcInZpc2liaWxpdHk6aGlkZGVuXCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJzdHJpa2V0aHJvdWdoXCIpe2EucHVzaChcInRleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2hcIil9ZWxzZXthLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246XCIrdC5kZWNvcmF0aW9uKX19aWYobyl7cmV0dXJuJzxzcGFuIGNsYXNzPVwiJytsLmpvaW4oXCIgXCIpKydcIicrdShjKStcIj5cIit0LmNvbnRlbnQrXCI8L3NwYW4+XCJ9ZWxzZXtyZXR1cm4nPHNwYW4gc3R5bGU9XCInK2Euam9pbihcIjtcIikrJ1wiJyt1KGMpK1wiPlwiK3QuY29udGVudCtcIjwvc3Bhbj5cIn19fV0pO3JldHVybiBBbnNlcn0oKTtlLmV4cG9ydHM9c319O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18obil7dmFyIHM9cltuXTtpZihzIT09dW5kZWZpbmVkKXtyZXR1cm4gcy5leHBvcnRzfXZhciBpPXJbbl09e2V4cG9ydHM6e319O3ZhciB0PXRydWU7dHJ5e2Vbbl0oaSxpLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7dD1mYWxzZX1maW5hbGx5e2lmKHQpZGVsZXRlIHJbbl19cmV0dXJuIGkuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIG49X19uY2N3cGNrX3JlcXVpcmVfXygyMTEpO21vZHVsZS5leHBvcnRzPW59KSgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/anser/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/cookie/index.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/cookie/index.js ***!
|
||
\*********************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nvb2tpZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxhQUFhLG1FQUFtRSxTQUFTLEtBQUssU0FBUyxNQUFNO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCLHlCQUF5Qix5QkFBeUIsU0FBUyxHQUFHLDhDQUE4QyxvQkFBb0Isd0JBQXdCLHFEQUFxRCxTQUFTLFlBQVksaUJBQWlCLGtCQUFrQixZQUFZLFdBQVcsS0FBSyxXQUFXLHFCQUFxQixRQUFRLFNBQVMsMkJBQTJCLG9DQUFvQyxjQUFjLGdCQUFnQixvQkFBb0IscUJBQXFCLFNBQVMsMEJBQTBCLFlBQVksa0JBQWtCLDBCQUEwQixnREFBZ0QsZUFBZSxnREFBZ0QsV0FBVyxrQkFBa0IsK0NBQStDLGNBQWMsbUJBQW1CLGlCQUFpQiwyQkFBMkIsZ0RBQWdELE1BQU0sd0JBQXdCLGFBQWEsc0JBQXNCLGdEQUFnRCxNQUFNLGtCQUFrQixXQUFXLG9CQUFvQiw4Q0FBOEMsTUFBTSxjQUFjLGNBQWMsOENBQThDLGlEQUFpRCxNQUFNLGtDQUFrQyxlQUFlLE1BQU0sVUFBVSxhQUFhLE1BQU0sUUFBUSxlQUFlLHVFQUF1RSxVQUFVLGdCQUFnQixpQkFBaUIsTUFBTSxnQkFBZ0IsY0FBYyxNQUFNLG1CQUFtQixpQkFBaUIsTUFBTSxpQkFBaUIsZUFBZSxNQUFNLDJEQUEyRCxTQUFTLHdCQUF3QixJQUFJLFlBQVksU0FBUyxXQUFXLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvY29va2llL2luZGV4LmpzP2IyNWUiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBlPXt9OygoKT0+e3ZhciByPWU7XG4vKiFcbiAqIGNvb2tpZVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovci5wYXJzZT1wYXJzZTtyLnNlcmlhbGl6ZT1zZXJpYWxpemU7dmFyIGk9ZGVjb2RlVVJJQ29tcG9uZW50O3ZhciB0PWVuY29kZVVSSUNvbXBvbmVudDt2YXIgYT0vOyAqLzt2YXIgbj0vXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskLztmdW5jdGlvbiBwYXJzZShlLHIpe2lmKHR5cGVvZiBlIT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHN0ciBtdXN0IGJlIGEgc3RyaW5nXCIpfXZhciB0PXt9O3ZhciBuPXJ8fHt9O3ZhciBvPWUuc3BsaXQoYSk7dmFyIHM9bi5kZWNvZGV8fGk7Zm9yKHZhciBwPTA7cDxvLmxlbmd0aDtwKyspe3ZhciBmPW9bcF07dmFyIHU9Zi5pbmRleE9mKFwiPVwiKTtpZih1PDApe2NvbnRpbnVlfXZhciB2PWYuc3Vic3RyKDAsdSkudHJpbSgpO3ZhciBjPWYuc3Vic3RyKCsrdSxmLmxlbmd0aCkudHJpbSgpO2lmKCdcIic9PWNbMF0pe2M9Yy5zbGljZSgxLC0xKX1pZih1bmRlZmluZWQ9PXRbdl0pe3Rbdl09dHJ5RGVjb2RlKGMscyl9fXJldHVybiB0fWZ1bmN0aW9uIHNlcmlhbGl6ZShlLHIsaSl7dmFyIGE9aXx8e307dmFyIG89YS5lbmNvZGV8fHQ7aWYodHlwZW9mIG8hPT1cImZ1bmN0aW9uXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gZW5jb2RlIGlzIGludmFsaWRcIil9aWYoIW4udGVzdChlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG5hbWUgaXMgaW52YWxpZFwiKX12YXIgcz1vKHIpO2lmKHMmJiFuLnRlc3Qocykpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCB2YWwgaXMgaW52YWxpZFwiKX12YXIgcD1lK1wiPVwiK3M7aWYobnVsbCE9YS5tYXhBZ2Upe3ZhciBmPWEubWF4QWdlLTA7aWYoaXNOYU4oZil8fCFpc0Zpbml0ZShmKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBtYXhBZ2UgaXMgaW52YWxpZFwiKX1wKz1cIjsgTWF4LUFnZT1cIitNYXRoLmZsb29yKGYpfWlmKGEuZG9tYWluKXtpZighbi50ZXN0KGEuZG9tYWluKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBkb21haW4gaXMgaW52YWxpZFwiKX1wKz1cIjsgRG9tYWluPVwiK2EuZG9tYWlufWlmKGEucGF0aCl7aWYoIW4udGVzdChhLnBhdGgpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIHBhdGggaXMgaW52YWxpZFwiKX1wKz1cIjsgUGF0aD1cIithLnBhdGh9aWYoYS5leHBpcmVzKXtpZih0eXBlb2YgYS5leHBpcmVzLnRvVVRDU3RyaW5nIT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIGV4cGlyZXMgaXMgaW52YWxpZFwiKX1wKz1cIjsgRXhwaXJlcz1cIithLmV4cGlyZXMudG9VVENTdHJpbmcoKX1pZihhLmh0dHBPbmx5KXtwKz1cIjsgSHR0cE9ubHlcIn1pZihhLnNlY3VyZSl7cCs9XCI7IFNlY3VyZVwifWlmKGEuc2FtZVNpdGUpe3ZhciB1PXR5cGVvZiBhLnNhbWVTaXRlPT09XCJzdHJpbmdcIj9hLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCk6YS5zYW1lU2l0ZTtzd2l0Y2godSl7Y2FzZSB0cnVlOnArPVwiOyBTYW1lU2l0ZT1TdHJpY3RcIjticmVhaztjYXNlXCJsYXhcIjpwKz1cIjsgU2FtZVNpdGU9TGF4XCI7YnJlYWs7Y2FzZVwic3RyaWN0XCI6cCs9XCI7IFNhbWVTaXRlPVN0cmljdFwiO2JyZWFrO2Nhc2VcIm5vbmVcIjpwKz1cIjsgU2FtZVNpdGU9Tm9uZVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBzYW1lU2l0ZSBpcyBpbnZhbGlkXCIpfX1yZXR1cm4gcH1mdW5jdGlvbiB0cnlEZWNvZGUoZSxyKXt0cnl7cmV0dXJuIHIoZSl9Y2F0Y2gocil7cmV0dXJuIGV9fX0pKCk7bW9kdWxlLmV4cG9ydHM9ZX0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/cookie/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/css.escape/css.escape.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/css.escape/css.escape.js ***!
|
||
\******************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{var e={553:function(e){(function(r,t){if(true){e.exports=t(r)}else{}})(typeof __webpack_require__.g!=\"undefined\"?__webpack_require__.g:this,(function(e){if(e.CSS&&e.CSS.escape){return e.CSS.escape}var cssEscape=function(e){if(arguments.length==0){throw new TypeError(\"`CSS.escape` requires an argument.\")}var r=String(e);var t=r.length;var n=-1;var a;var i=\"\";var u=r.charCodeAt(0);while(++n<t){a=r.charCodeAt(n);if(a==0){i+=\"<22>\";continue}if(a>=1&&a<=31||a==127||n==0&&a>=48&&a<=57||n==1&&a>=48&&a<=57&&u==45){i+=\"\\\\\"+a.toString(16)+\" \";continue}if(n==0&&t==1&&a==45){i+=\"\\\\\"+r.charAt(n);continue}if(a>=128||a==45||a==95||a>=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122){i+=r.charAt(n);continue}i+=\"\\\\\"+r.charAt(n)}return i};if(!e.CSS){e.CSS={}}e.CSS.escape=cssEscape;return cssEscape}))}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var a=r[t]={exports:{}};var i=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(553);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy5lc2NhcGUvY3NzLmVzY2FwZS5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxPQUFPLGdCQUFnQixlQUFlLEdBQUcsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUMsU0FBUyxxQkFBTSxjQUFjLHFCQUFNLG1CQUFtQix3QkFBd0Isb0JBQW9CLDBCQUEwQix3QkFBd0IsMERBQTBELGdCQUFnQixlQUFlLFNBQVMsTUFBTSxTQUFTLHNCQUFzQixhQUFhLGtCQUFrQixTQUFTLE9BQU8sU0FBUyx1RUFBdUUsMkJBQTJCLFNBQVMsc0JBQXNCLG9CQUFvQixTQUFTLG9FQUFvRSxlQUFlLFNBQVMsb0JBQW9CLFVBQVUsV0FBVyxTQUFTLHVCQUF1QixpQkFBaUIsS0FBSyxTQUFTLGdDQUFnQyxXQUFXLGtCQUFrQixpQkFBaUIsWUFBWSxZQUFZLFdBQVcsSUFBSSxxREFBcUQsUUFBUSxRQUFRLGlCQUFpQixpQkFBaUIsbUVBQW1FLFNBQVMsS0FBSywrQkFBK0IsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvY3NzLmVzY2FwZS9jc3MuZXNjYXBlLmpzPzQ3MzMiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57dmFyIGU9ezU1MzpmdW5jdGlvbihlKXsoZnVuY3Rpb24ocix0KXtpZih0cnVlKXtlLmV4cG9ydHM9dChyKX1lbHNle319KSh0eXBlb2YgZ2xvYmFsIT1cInVuZGVmaW5lZFwiP2dsb2JhbDp0aGlzLChmdW5jdGlvbihlKXtpZihlLkNTUyYmZS5DU1MuZXNjYXBlKXtyZXR1cm4gZS5DU1MuZXNjYXBlfXZhciBjc3NFc2NhcGU9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aD09MCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcImBDU1MuZXNjYXBlYCByZXF1aXJlcyBhbiBhcmd1bWVudC5cIil9dmFyIHI9U3RyaW5nKGUpO3ZhciB0PXIubGVuZ3RoO3ZhciBuPS0xO3ZhciBhO3ZhciBpPVwiXCI7dmFyIHU9ci5jaGFyQ29kZUF0KDApO3doaWxlKCsrbjx0KXthPXIuY2hhckNvZGVBdChuKTtpZihhPT0wKXtpKz1cIu+/vVwiO2NvbnRpbnVlfWlmKGE+PTEmJmE8PTMxfHxhPT0xMjd8fG49PTAmJmE+PTQ4JiZhPD01N3x8bj09MSYmYT49NDgmJmE8PTU3JiZ1PT00NSl7aSs9XCJcXFxcXCIrYS50b1N0cmluZygxNikrXCIgXCI7Y29udGludWV9aWYobj09MCYmdD09MSYmYT09NDUpe2krPVwiXFxcXFwiK3IuY2hhckF0KG4pO2NvbnRpbnVlfWlmKGE+PTEyOHx8YT09NDV8fGE9PTk1fHxhPj00OCYmYTw9NTd8fGE+PTY1JiZhPD05MHx8YT49OTcmJmE8PTEyMil7aSs9ci5jaGFyQXQobik7Y29udGludWV9aSs9XCJcXFxcXCIrci5jaGFyQXQobil9cmV0dXJuIGl9O2lmKCFlLkNTUyl7ZS5DU1M9e319ZS5DU1MuZXNjYXBlPWNzc0VzY2FwZTtyZXR1cm4gY3NzRXNjYXBlfSkpfX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgbj1yW3RdO2lmKG4hPT11bmRlZmluZWQpe3JldHVybiBuLmV4cG9ydHN9dmFyIGE9clt0XT17ZXhwb3J0czp7fX07dmFyIGk9dHJ1ZTt0cnl7ZVt0XS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtpPWZhbHNlfWZpbmFsbHl7aWYoaSlkZWxldGUgclt0XX1yZXR1cm4gYS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDU1Myk7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css.escape/css.escape.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/path-to-regexp/index.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/path-to-regexp/index.js ***!
|
||
\*****************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n while (i < str.length) {\n var char = str[i];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n if (char === \":\") {\n var name = \"\";\n var j = i + 1;\n while (j < str.length) {\n var code = str.charCodeAt(j);\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n break;\n }\n if (!name)\n throw new TypeError(\"Missing parameter name at \" + i);\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n if (char === \"(\") {\n var count = 1;\n var pattern = \"\";\n var j = i + 1;\n if (str[j] === \"?\") {\n throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \" + j);\n }\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n }\n else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(\"Capturing groups are not allowed at \" + j);\n }\n }\n pattern += str[j++];\n }\n if (count)\n throw new TypeError(\"Unbalanced pattern at \" + i);\n if (!pattern)\n throw new TypeError(\"Missing pattern at \" + i);\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n tokens.push({ type: \"END\", index: i, value: \"\" });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options) {\n if (options === void 0) { options = {}; }\n var tokens = lexer(str);\n var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n var defaultPattern = \"[^\" + escapeString(options.delimiter || \"/#?\") + \"]+?\";\n var result = [];\n var key = 0;\n var i = 0;\n var path = \"\";\n var tryConsume = function (type) {\n if (i < tokens.length && tokens[i].type === type)\n return tokens[i++].value;\n };\n var mustConsume = function (type) {\n var value = tryConsume(type);\n if (value !== undefined)\n return value;\n var _a = tokens[i], nextType = _a.type, index = _a.index;\n throw new TypeError(\"Unexpected \" + nextType + \" at \" + index + \", expected \" + type);\n };\n var consumeText = function () {\n var result = \"\";\n var value;\n // tslint:disable-next-line\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n while (i < tokens.length) {\n var char = tryConsume(\"CHAR\");\n var name = tryConsume(\"NAME\");\n var pattern = tryConsume(\"PATTERN\");\n if (name || pattern) {\n var prefix = char || \"\";\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n var value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n var open = tryConsume(\"OPEN\");\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume(\"NAME\") || \"\";\n var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n var suffix = consumeText();\n mustConsume(\"CLOSE\");\n result.push({\n name: name_1 || (pattern_1 ? key++ : \"\"),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n mustConsume(\"END\");\n }\n return result;\n}\nexports.parse = parse;\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\nexports.compile = compile;\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction(tokens, options) {\n if (options === void 0) { options = {}; }\n var reFlags = flags(options);\n var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n // Compile all the tokens into regexps.\n var matches = tokens.map(function (token) {\n if (typeof token === \"object\") {\n return new RegExp(\"^(?:\" + token.pattern + \")$\", reFlags);\n }\n });\n return function (data) {\n var path = \"\";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === \"?\" || token.modifier === \"*\";\n var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not repeat, but got an array\");\n }\n if (value.length === 0) {\n if (optional)\n continue;\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not be empty\");\n }\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected all \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n }\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n var segment = encode(String(value), token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n continue;\n }\n if (optional)\n continue;\n var typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to be \" + typeOfMessage);\n }\n return path;\n };\n}\nexports.tokensToFunction = tokensToFunction;\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\nexports.match = match;\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction(re, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m)\n return false;\n var path = m[0], index = m.index;\n var params = Object.create(null);\n var _loop_1 = function (i) {\n // tslint:disable-next-line\n if (m[i] === undefined)\n return \"continue\";\n var key = keys[i - 1];\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n }\n else {\n params[key.name] = decode(m[i], key);\n }\n };\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n return { path: path, index: index, params: params };\n };\n}\nexports.regexpToFunction = regexpToFunction;\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n if (!keys)\n return path;\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n });\n }\n }\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n return new RegExp(\"(?:\" + parts.join(\"|\") + \")\", flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nfunction tokensToRegexp(tokens, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d;\n var endsWith = \"[\" + escapeString(options.endsWith || \"\") + \"]|$\";\n var delimiter = \"[\" + escapeString(options.delimiter || \"/#?\") + \"]\";\n var route = start ? \"^\" : \"\";\n // Iterate over the tokens and create our regexp string.\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n }\n else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n if (token.pattern) {\n if (keys)\n keys.push(token);\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n var mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += \"(?:\" + prefix + \"((?:\" + token.pattern + \")(?:\" + suffix + prefix + \"(?:\" + token.pattern + \"))*)\" + suffix + \")\" + mod;\n }\n else {\n route += \"(?:\" + prefix + \"(\" + token.pattern + \")\" + suffix + \")\" + token.modifier;\n }\n }\n else {\n route += \"(\" + token.pattern + \")\" + token.modifier;\n }\n }\n else {\n route += \"(?:\" + prefix + suffix + \")\" + token.modifier;\n }\n }\n }\n if (end) {\n if (!strict)\n route += delimiter + \"?\";\n route += !options.endsWith ? \"$\" : \"(?=\" + endsWith + \")\";\n }\n else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === \"string\"\n ? delimiter.indexOf(endToken[endToken.length - 1]) > -1\n : // tslint:disable-next-line\n endToken === undefined;\n if (!strict) {\n route += \"(?:\" + delimiter + \"(?=\" + endsWith + \"))?\";\n }\n if (!isEndDelimited) {\n route += \"(?=\" + delimiter + \"|\" + endsWith + \")\";\n }\n }\n return new RegExp(route, flags(options));\n}\nexports.tokensToRegexp = tokensToRegexp;\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nfunction pathToRegexp(path, keys, options) {\n if (path instanceof RegExp)\n return regexpToRegexp(path, keys);\n if (Array.isArray(path))\n return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\nexports.pathToRegexp = pathToRegexp;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBNkM7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1EQUFtRDtBQUM3RTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDBCQUEwQix5Q0FBeUM7QUFDbkU7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QiwwQkFBMEIsMENBQTBDO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIscUNBQXFDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDJDQUEyQztBQUNyRTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IseUNBQXlDO0FBQy9EO0FBQ0Esa0JBQWtCLGtDQUFrQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLHFFQUFxRSxZQUFZO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxrQkFBa0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIscUVBQXFFLFlBQVk7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxrREFBa0Q7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLHlPQUF5TyxZQUFZO0FBQ3JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHNCQUFzQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQTREO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9wYXRoLXRvLXJlZ2V4cC9pbmRleC5qcz83ZDEyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBUb2tlbml6ZSBpbnB1dCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGxleGVyKHN0cikge1xuICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgIHZhciBjaGFyID0gc3RyW2ldO1xuICAgICAgICBpZiAoY2hhciA9PT0gXCIqXCIgfHwgY2hhciA9PT0gXCIrXCIgfHwgY2hhciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJNT0RJRklFUlwiLCBpbmRleDogaSwgdmFsdWU6IHN0cltpKytdIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiRVNDQVBFRF9DSEFSXCIsIGluZGV4OiBpKyssIHZhbHVlOiBzdHJbaSsrXSB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIntcIikge1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIk9QRU5cIiwgaW5kZXg6IGksIHZhbHVlOiBzdHJbaSsrXSB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIkNMT1NFXCIsIGluZGV4OiBpLCB2YWx1ZTogc3RyW2krK10gfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gXCI6XCIpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBqID0gaSArIDE7XG4gICAgICAgICAgICB3aGlsZSAoaiA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGopO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAvLyBgMC05YFxuICAgICAgICAgICAgICAgIChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGBBLVpgXG4gICAgICAgICAgICAgICAgICAgIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGBhLXpgXG4gICAgICAgICAgICAgICAgICAgIChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBgX2BcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9PT0gOTUpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzdHJbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNaXNzaW5nIHBhcmFtZXRlciBuYW1lIGF0IFwiICsgaSk7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiTkFNRVwiLCBpbmRleDogaSwgdmFsdWU6IG5hbWUgfSk7XG4gICAgICAgICAgICBpID0gajtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIihcIikge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gMTtcbiAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBqID0gaSArIDE7XG4gICAgICAgICAgICBpZiAoc3RyW2pdID09PSBcIj9cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXR0ZXJuIGNhbm5vdCBzdGFydCB3aXRoIFxcXCI/XFxcIiBhdCBcIiArIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGogPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cltqXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiArPSBzdHJbaisrXSArIHN0cltqKytdO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cltqXSA9PT0gXCIpXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJbal0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJbaiArIDFdICE9PSBcIj9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhcHR1cmluZyBncm91cHMgYXJlIG5vdCBhbGxvd2VkIGF0IFwiICsgaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGF0dGVybiArPSBzdHJbaisrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3VudClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5iYWxhbmNlZCBwYXR0ZXJuIGF0IFwiICsgaSk7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pc3NpbmcgcGF0dGVybiBhdCBcIiArIGkpO1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIlBBVFRFUk5cIiwgaW5kZXg6IGksIHZhbHVlOiBwYXR0ZXJuIH0pO1xuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiQ0hBUlwiLCBpbmRleDogaSwgdmFsdWU6IHN0cltpKytdIH0pO1xuICAgIH1cbiAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiRU5EXCIsIGluZGV4OiBpLCB2YWx1ZTogXCJcIiB9KTtcbiAgICByZXR1cm4gdG9rZW5zO1xufVxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0ciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHRva2VucyA9IGxleGVyKHN0cik7XG4gICAgdmFyIF9hID0gb3B0aW9ucy5wcmVmaXhlcywgcHJlZml4ZXMgPSBfYSA9PT0gdm9pZCAwID8gXCIuL1wiIDogX2E7XG4gICAgdmFyIGRlZmF1bHRQYXR0ZXJuID0gXCJbXlwiICsgZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8IFwiLyM/XCIpICsgXCJdKz9cIjtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwYXRoID0gXCJcIjtcbiAgICB2YXIgdHJ5Q29uc3VtZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmIChpIDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaV0udHlwZSA9PT0gdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnNbaSsrXS52YWx1ZTtcbiAgICB9O1xuICAgIHZhciBtdXN0Q29uc3VtZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRyeUNvbnN1bWUodHlwZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YXIgX2EgPSB0b2tlbnNbaV0sIG5leHRUeXBlID0gX2EudHlwZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuZXhwZWN0ZWQgXCIgKyBuZXh0VHlwZSArIFwiIGF0IFwiICsgaW5kZXggKyBcIiwgZXhwZWN0ZWQgXCIgKyB0eXBlKTtcbiAgICB9O1xuICAgIHZhciBjb25zdW1lVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHdoaWxlICgodmFsdWUgPSB0cnlDb25zdW1lKFwiQ0hBUlwiKSB8fCB0cnlDb25zdW1lKFwiRVNDQVBFRF9DSEFSXCIpKSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICB3aGlsZSAoaSA8IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGNoYXIgPSB0cnlDb25zdW1lKFwiQ0hBUlwiKTtcbiAgICAgICAgdmFyIG5hbWUgPSB0cnlDb25zdW1lKFwiTkFNRVwiKTtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSB0cnlDb25zdW1lKFwiUEFUVEVSTlwiKTtcbiAgICAgICAgaWYgKG5hbWUgfHwgcGF0dGVybikge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGNoYXIgfHwgXCJcIjtcbiAgICAgICAgICAgIGlmIChwcmVmaXhlcy5pbmRleE9mKHByZWZpeCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSBwcmVmaXg7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgcGF0dGVybjogcGF0dGVybiB8fCBkZWZhdWx0UGF0dGVybixcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogdHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpIHx8IFwiXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlID0gY2hhciB8fCB0cnlDb25zdW1lKFwiRVNDQVBFRF9DSEFSXCIpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICBwYXRoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3BlbiA9IHRyeUNvbnN1bWUoXCJPUEVOXCIpO1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGNvbnN1bWVUZXh0KCk7XG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gdHJ5Q29uc3VtZShcIk5BTUVcIikgfHwgXCJcIjtcbiAgICAgICAgICAgIHZhciBwYXR0ZXJuXzEgPSB0cnlDb25zdW1lKFwiUEFUVEVSTlwiKSB8fCBcIlwiO1xuICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IGNvbnN1bWVUZXh0KCk7XG4gICAgICAgICAgICBtdXN0Q29uc3VtZShcIkNMT1NFXCIpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVfMSB8fCAocGF0dGVybl8xID8ga2V5KysgOiBcIlwiKSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBuYW1lXzEgJiYgIXBhdHRlcm5fMSA/IGRlZmF1bHRQYXR0ZXJuIDogcGF0dGVybl8xLFxuICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgICAgICAgIHN1ZmZpeDogc3VmZml4LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyOiB0cnlDb25zdW1lKFwiTU9ESUZJRVJcIikgfHwgXCJcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtdXN0Q29uc3VtZShcIkVORFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKHRva2Vucywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHJlRmxhZ3MgPSBmbGFncyhvcHRpb25zKTtcbiAgICB2YXIgX2EgPSBvcHRpb25zLmVuY29kZSwgZW5jb2RlID0gX2EgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9IDogX2EsIF9iID0gb3B0aW9ucy52YWxpZGF0ZSwgdmFsaWRhdGUgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iO1xuICAgIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICAgIHZhciBtYXRjaGVzID0gdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyB0b2tlbi5wYXR0ZXJuICsgXCIpJFwiLCByZUZsYWdzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgcGF0aCA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGEgPyBkYXRhW3Rva2VuLm5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIG9wdGlvbmFsID0gdG9rZW4ubW9kaWZpZXIgPT09IFwiP1wiIHx8IHRva2VuLm1vZGlmaWVyID09PSBcIipcIjtcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCIgfHwgdG9rZW4ubW9kaWZpZXIgPT09IFwiK1wiO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gbm90IHJlcGVhdCwgYnV0IGdvdCBhbiBhcnJheVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gbm90IGJlIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZSAmJiAhbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYWxsIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gbWF0Y2ggXFxcIlwiICsgdG9rZW4ucGF0dGVybiArIFwiXFxcIiwgYnV0IGdvdCBcXFwiXCIgKyBzZWdtZW50ICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudCArIHRva2VuLnN1ZmZpeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHZhciBzZWdtZW50ID0gZW5jb2RlKFN0cmluZyh2YWx1ZSksIHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGUgJiYgIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgXFxcIlwiICsgdG9rZW4ubmFtZSArIFwiXFxcIiB0byBtYXRjaCBcXFwiXCIgKyB0b2tlbi5wYXR0ZXJuICsgXCJcXFwiLCBidXQgZ290IFxcXCJcIiArIHNlZ21lbnQgKyBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudCArIHRva2VuLnN1ZmZpeDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25hbClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciB0eXBlT2ZNZXNzYWdlID0gcmVwZWF0ID8gXCJhbiBhcnJheVwiIDogXCJhIHN0cmluZ1wiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gYmUgXCIgKyB0eXBlT2ZNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9O1xufVxuZXhwb3J0cy50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvbjtcbi8qKlxuICogQ3JlYXRlIHBhdGggbWF0Y2ggZnVuY3Rpb24gZnJvbSBgcGF0aC10by1yZWdleHBgIHNwZWMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgdmFyIHJlID0gcGF0aFRvUmVnZXhwKHN0ciwga2V5cywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlZ2V4cFRvRnVuY3Rpb24ocmUsIGtleXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tYXRjaCA9IG1hdGNoO1xuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIG1hdGNoIGZ1bmN0aW9uIGZyb20gYHBhdGgtdG8tcmVnZXhwYCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvRnVuY3Rpb24ocmUsIGtleXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBfYSA9IG9wdGlvbnMuZGVjb2RlLCBkZWNvZGUgPSBfYSA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOiBfYTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHBhdGhuYW1lKSB7XG4gICAgICAgIHZhciBtID0gcmUuZXhlYyhwYXRobmFtZSk7XG4gICAgICAgIGlmICghbSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHBhdGggPSBtWzBdLCBpbmRleCA9IG0uaW5kZXg7XG4gICAgICAgIHZhciBwYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGlmIChtW2ldID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChrZXkubW9kaWZpZXIgPT09IFwiKlwiIHx8IGtleS5tb2RpZmllciA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5Lm5hbWVdID0gbVtpXS5zcGxpdChrZXkucHJlZml4ICsga2V5LnN1ZmZpeCkubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlKHZhbHVlLCBrZXkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zW2tleS5uYW1lXSA9IGRlY29kZShtW2ldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcGF0aDogcGF0aCwgaW5kZXg6IGluZGV4LCBwYXJhbXM6IHBhcmFtcyB9O1xuICAgIH07XG59XG5leHBvcnRzLnJlZ2V4cFRvRnVuY3Rpb24gPSByZWdleHBUb0Z1bmN0aW9uO1xuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfC9cXFxcXSkvZywgXCJcXFxcJDFcIik7XG59XG4vKipcbiAqIEdldCB0aGUgZmxhZ3MgZm9yIGEgcmVnZXhwIGZyb20gdGhlIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGZsYWdzKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLnNlbnNpdGl2ZSA/IFwiXCIgOiBcImlcIjtcbn1cbi8qKlxuICogUHVsbCBvdXQga2V5cyBmcm9tIGEgcmVnZXhwLlxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzKSB7XG4gICAgaWYgKCFrZXlzKVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICAgIHZhciBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKTtcbiAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGksXG4gICAgICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICAgICAgICAgIHN1ZmZpeDogXCJcIixcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogXCJcIixcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn1cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAocGF0aHMsIGtleXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgcGFydHMgPSBwYXRocy5tYXAoZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGhUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKS5zb3VyY2U7IH0pO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKD86XCIgKyBwYXJ0cy5qb2luKFwifFwiKSArIFwiKVwiLCBmbGFncyhvcHRpb25zKSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRva2Vuc1RvUmVnZXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdleHAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLnN0cmljdCwgc3RyaWN0ID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5zdGFydCwgc3RhcnQgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IG9wdGlvbnMuZW5kLCBlbmQgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuZW5jb2RlLCBlbmNvZGUgPSBfZCA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOiBfZDtcbiAgICB2YXIgZW5kc1dpdGggPSBcIltcIiArIGVzY2FwZVN0cmluZyhvcHRpb25zLmVuZHNXaXRoIHx8IFwiXCIpICsgXCJdfCRcIjtcbiAgICB2YXIgZGVsaW1pdGVyID0gXCJbXCIgKyBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgXCIvIz9cIikgKyBcIl1cIjtcbiAgICB2YXIgcm91dGUgPSBzdGFydCA/IFwiXlwiIDogXCJcIjtcbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICAgIGZvciAodmFyIF9pID0gMCwgdG9rZW5zXzEgPSB0b2tlbnM7IF9pIDwgdG9rZW5zXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc18xW19pXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcm91dGUgKz0gZXNjYXBlU3RyaW5nKGVuY29kZSh0b2tlbikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGVzY2FwZVN0cmluZyhlbmNvZGUodG9rZW4ucHJlZml4KSk7XG4gICAgICAgICAgICB2YXIgc3VmZml4ID0gZXNjYXBlU3RyaW5nKGVuY29kZSh0b2tlbi5zdWZmaXgpKTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5wYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleXMpXG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHByZWZpeCB8fCBzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLm1vZGlmaWVyID09PSBcIitcIiB8fCB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCIgPyBcIj9cIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiICsgcHJlZml4ICsgXCIoKD86XCIgKyB0b2tlbi5wYXR0ZXJuICsgXCIpKD86XCIgKyBzdWZmaXggKyBwcmVmaXggKyBcIig/OlwiICsgdG9rZW4ucGF0dGVybiArIFwiKSkqKVwiICsgc3VmZml4ICsgXCIpXCIgKyBtb2Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiICsgcHJlZml4ICsgXCIoXCIgKyB0b2tlbi5wYXR0ZXJuICsgXCIpXCIgKyBzdWZmaXggKyBcIilcIiArIHRva2VuLm1vZGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIihcIiArIHRva2VuLnBhdHRlcm4gKyBcIilcIiArIHRva2VuLm1vZGlmaWVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvdXRlICs9IFwiKD86XCIgKyBwcmVmaXggKyBzdWZmaXggKyBcIilcIiArIHRva2VuLm1vZGlmaWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgICAgaWYgKCFzdHJpY3QpXG4gICAgICAgICAgICByb3V0ZSArPSBkZWxpbWl0ZXIgKyBcIj9cIjtcbiAgICAgICAgcm91dGUgKz0gIW9wdGlvbnMuZW5kc1dpdGggPyBcIiRcIiA6IFwiKD89XCIgKyBlbmRzV2l0aCArIFwiKVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGVuZFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIGlzRW5kRGVsaW1pdGVkID0gdHlwZW9mIGVuZFRva2VuID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IGRlbGltaXRlci5pbmRleE9mKGVuZFRva2VuW2VuZFRva2VuLmxlbmd0aCAtIDFdKSA+IC0xXG4gICAgICAgICAgICA6IC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIGVuZFRva2VuID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiICsgZGVsaW1pdGVyICsgXCIoPz1cIiArIGVuZHNXaXRoICsgXCIpKT9cIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW5kRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICByb3V0ZSArPSBcIig/PVwiICsgZGVsaW1pdGVyICsgXCJ8XCIgKyBlbmRzV2l0aCArIFwiKVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVnRXhwKHJvdXRlLCBmbGFncyhvcHRpb25zKSk7XG59XG5leHBvcnRzLnRva2Vuc1RvUmVnZXhwID0gdG9rZW5zVG9SZWdleHA7XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSlcbiAgICAgICAgcmV0dXJuIGFycmF5VG9SZWdleHAocGF0aCwga2V5cywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wYXRoVG9SZWdleHAgPSBwYXRoVG9SZWdleHA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/path-to-regexp/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/platform/platform.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/platform/platform.js ***!
|
||
\**************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{var e={541:function(e,i,t){e=t.nmd(e);\n/*!\n * Platform.js v1.3.6\n * Copyright 2014-2020 Benjamin Tan\n * Copyright 2011-2013 John-David Dalton\n * Available under MIT license\n */(function(){\"use strict\";var t={function:true,object:true};var r=t[typeof window]&&window||this;var a=r;var n=t[typeof i]&&i;var o=t[\"object\"]&&e&&!e.nodeType&&e;var l=n&&o&&typeof __webpack_require__.g==\"object\"&&__webpack_require__.g;if(l&&(l.global===l||l.window===l||l.self===l)){r=l}var s=Math.pow(2,53)-1;var f=/\\bOpera/;var b=this;var c=Object.prototype;var p=c.hasOwnProperty;var u=c.toString;function capitalize(e){e=String(e);return e.charAt(0).toUpperCase()+e.slice(1)}function cleanupOS(e,i,t){var r={\"10.0\":\"10\",6.4:\"10 Technical Preview\",6.3:\"8.1\",6.2:\"8\",6.1:\"Server 2008 R2 / 7\",\"6.0\":\"Server 2008 / Vista\",5.2:\"Server 2003 / XP 64-bit\",5.1:\"XP\",5.01:\"2000 SP1\",\"5.0\":\"2000\",\"4.0\":\"NT\",\"4.90\":\"ME\"};if(i&&t&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(r=r[/[\\d.]+$/.exec(e)])){e=\"Windows \"+r}e=String(e);if(i&&t){e=e.replace(RegExp(i,\"i\"),t)}e=format(e.replace(/ ce$/i,\" CE\").replace(/\\bhpw/i,\"web\").replace(/\\bMacintosh\\b/,\"Mac OS\").replace(/_PowerPC\\b/i,\" OS\").replace(/\\b(OS X) [^ \\d]+/i,\"$1\").replace(/\\bMac (OS X)\\b/,\"$1\").replace(/\\/(\\d)/,\" $1\").replace(/_/g,\".\").replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i,\"\").replace(/\\bx86\\.64\\b/gi,\"x86_64\").replace(/\\b(Windows Phone) OS\\b/,\"$1\").replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/,\"$1\").split(\" on \")[0]);return e}function each(e,i){var t=-1,r=e?e.length:0;if(typeof r==\"number\"&&r>-1&&r<=s){while(++t<r){i(e[t],t,e)}}else{forOwn(e,i)}}function format(e){e=trim(e);return/^(?:webOS|i(?:OS|P))/.test(e)?e:capitalize(e)}function forOwn(e,i){for(var t in e){if(p.call(e,t)){i(e[t],t,e)}}}function getClassOf(e){return e==null?capitalize(e):u.call(e).slice(8,-1)}function isHostType(e,i){var t=e!=null?typeof e[i]:\"number\";return!/^(?:boolean|number|string|undefined)$/.test(t)&&(t==\"object\"?!!e[i]:true)}function qualify(e){return String(e).replace(/([ -])(?!$)/g,\"$1?\")}function reduce(e,i){var t=null;each(e,(function(r,a){t=i(t,r,a,e)}));return t}function trim(e){return String(e).replace(/^ +| +$/g,\"\")}function parse(e){var i=r;var t=e&&typeof e==\"object\"&&getClassOf(e)!=\"String\";if(t){i=e;e=null}var n=i.navigator||{};var o=n.userAgent||\"\";e||(e=o);var l=t||b==a;var s=t?!!n.likeChrome:/\\bChrome\\b/.test(e)&&!/internal|\\n/i.test(u.toString());var c=\"Object\",p=t?c:\"ScriptBridgingProxyObject\",d=t?c:\"Environment\",S=t&&i.java?\"JavaPackage\":getClassOf(i.java),x=t?c:\"RuntimeObject\";var m=/\\bJava/.test(S)&&i.java;var g=m&&getClassOf(i.environment)==d;var h=m?\"a\":\"α\";var v=m?\"b\":\"β\";var O=i.document||{};var y=i.operamini||i.opera;var w=f.test(w=t&&y?y[\"[[Class]]\"]:getClassOf(y))?w:y=null;var M;var E=e;var P=[];var C=null;var k=e==o;var B=k&&y&&typeof y.version==\"function\"&&y.version();var W;var _=getLayout([{label:\"EdgeHTML\",pattern:\"Edge\"},\"Trident\",{label:\"WebKit\",pattern:\"AppleWebKit\"},\"iCab\",\"Presto\",\"NetFront\",\"Tasman\",\"KHTML\",\"Gecko\"]);var R=getName([\"Adobe AIR\",\"Arora\",\"Avant Browser\",\"Breach\",\"Camino\",\"Electron\",\"Epiphany\",\"Fennec\",\"Flock\",\"Galeon\",\"GreenBrowser\",\"iCab\",\"Iceweasel\",\"K-Meleon\",\"Konqueror\",\"Lunascape\",\"Maxthon\",{label:\"Microsoft Edge\",pattern:\"(?:Edge|Edg|EdgA|EdgiOS)\"},\"Midori\",\"Nook Browser\",\"PaleMoon\",\"PhantomJS\",\"Raven\",\"Rekonq\",\"RockMelt\",{label:\"Samsung Internet\",pattern:\"SamsungBrowser\"},\"SeaMonkey\",{label:\"Silk\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Sleipnir\",\"SlimBrowser\",{label:\"SRWare Iron\",pattern:\"Iron\"},\"Sunrise\",\"Swiftfox\",\"Vivaldi\",\"Waterfox\",\"WebPositive\",{label:\"Yandex Browser\",pattern:\"YaBrowser\"},{label:\"UC Browser\",pattern:\"UCBrowser\"},\"Opera Mini\",{label:\"Opera Mini\",pattern:\"OPiOS\"},\"Opera\",{label:\"Opera\",pattern:\"OPR\"},\"Chromium\",\"Chrome\",{label:\"Chrome\",pattern:\"(?:HeadlessChrome)\"},{label:\"Chrome Mobile\",pattern:\"(?:CriOS|CrMo)\"},{label:\"Firefox\",pattern:\"(?:Firefox|Minefield)\"},{label:\"Firefox for iOS\",pattern:\"FxiOS\"},{label:\"IE\",pattern:\"IEMobile\"},{label:\"IE\",pattern:\"MSIE\"},\"Safari\"]);var A=getProduct([{label:\"BlackBerry\",pattern:\"BB10\"},\"BlackBerry\",{label:\"Galaxy S\",pattern:\"GT-I9000\"},{label:\"Galaxy S2\",pattern:\"GT-I9100\"},{label:\"Galaxy S3\",pattern:\"GT-I9300\"},{label:\"Galaxy S4\",pattern:\"GT-I9500\"},{label:\"Galaxy S5\",pattern:\"SM-G900\"},{label:\"Galaxy S6\",pattern:\"SM-G920\"},{label:\"Galaxy S6 Edge\",pattern:\"SM-G925\"},{label:\"Galaxy S7\",pattern:\"SM-G930\"},{label:\"Galaxy S7 Edge\",pattern:\"SM-G935\"},\"Google TV\",\"Lumia\",\"iPad\",\"iPod\",\"iPhone\",\"Kindle\",{label:\"Kindle Fire\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Nexus\",\"Nook\",\"PlayBook\",\"PlayStation Vita\",\"PlayStation\",\"TouchPad\",\"Transformer\",{label:\"Wii U\",pattern:\"WiiU\"},\"Wii\",\"Xbox One\",{label:\"Xbox 360\",pattern:\"Xbox\"},\"Xoom\"]);var I=getManufacturer({Apple:{iPad:1,iPhone:1,iPod:1},Alcatel:{},Archos:{},Amazon:{Kindle:1,\"Kindle Fire\":1},Asus:{Transformer:1},\"Barnes & Noble\":{Nook:1},BlackBerry:{PlayBook:1},Google:{\"Google TV\":1,Nexus:1},HP:{TouchPad:1},HTC:{},Huawei:{},Lenovo:{},LG:{},Microsoft:{Xbox:1,\"Xbox One\":1},Motorola:{Xoom:1},Nintendo:{\"Wii U\":1,Wii:1},Nokia:{Lumia:1},Oppo:{},Samsung:{\"Galaxy S\":1,\"Galaxy S2\":1,\"Galaxy S3\":1,\"Galaxy S4\":1},Sony:{PlayStation:1,\"PlayStation Vita\":1},Xiaomi:{Mi:1,Redmi:1}});var T=getOS([\"Windows Phone\",\"KaiOS\",\"Android\",\"CentOS\",{label:\"Chrome OS\",pattern:\"CrOS\"},\"Debian\",{label:\"DragonFly BSD\",pattern:\"DragonFly\"},\"Fedora\",\"FreeBSD\",\"Gentoo\",\"Haiku\",\"Kubuntu\",\"Linux Mint\",\"OpenBSD\",\"Red Hat\",\"SuSE\",\"Ubuntu\",\"Xubuntu\",\"Cygwin\",\"Symbian OS\",\"hpwOS\",\"webOS \",\"webOS\",\"Tablet OS\",\"Tizen\",\"Linux\",\"Mac OS X\",\"Macintosh\",\"Mac\",\"Windows 98;\",\"Windows \"]);function getLayout(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getManufacturer(i){return reduce(i,(function(i,t,r){return i||(t[A]||t[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(A)]||RegExp(\"\\\\b\"+qualify(r)+\"(?:\\\\b|\\\\w*\\\\d)\",\"i\").exec(e))&&r}))}function getName(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getOS(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\"(?:/[\\\\d.]+|[ \\\\w.]*)\",\"i\").exec(e))){i=cleanupOS(i,r,t.label||t)}return i}))}function getProduct(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\" *\\\\d+[.\\\\w_]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\" *\\\\w+-[\\\\w]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\"(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)\",\"i\").exec(e))){if((i=String(t.label&&!RegExp(r,\"i\").test(t.label)?t.label:i).split(\"/\"))[1]&&!/[\\d.]+/.test(i[0])){i[0]+=\" \"+i[1]}t=t.label||t;i=format(i[0].replace(RegExp(r,\"i\"),t).replace(RegExp(\"; *(?:\"+t+\"[_-])?\",\"i\"),\" \").replace(RegExp(\"(\"+t+\")[-_.]?(\\\\w)\",\"i\"),\"$1 $2\"))}return i}))}function getVersion(i){return reduce(i,(function(i,t){return i||(RegExp(t+\"(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)\",\"i\").exec(e)||0)[1]||null}))}function toStringPlatform(){return this.description||\"\"}_&&(_=[_]);if(/\\bAndroid\\b/.test(T)&&!A&&(M=/\\bAndroid[^;]*;(.*?)(?:Build|\\) AppleWebKit)\\b/i.exec(e))){A=trim(M[1]).replace(/^[a-z]{2}-[a-z]{2};\\s*/i,\"\")||null}if(I&&!A){A=getProduct([I])}else if(I&&A){A=A.replace(RegExp(\"^(\"+qualify(I)+\")[-_.\\\\s]\",\"i\"),I+\" \").replace(RegExp(\"^(\"+qualify(I)+\")[-_.]?(\\\\w)\",\"i\"),I+\" $2\")}if(M=/\\bGoogle TV\\b/.exec(A)){A=M[0]}if(/\\bSimulator\\b/i.test(e)){A=(A?A+\" \":\"\")+\"Simulator\"}if(R==\"Opera Mini\"&&/\\bOPiOS\\b/.test(e)){P.push(\"running in Turbo/Uncompressed mode\")}if(R==\"IE\"&&/\\blike iPhone OS\\b/.test(e)){M=parse(e.replace(/like iPhone OS/,\"\"));I=M.manufacturer;A=M.product}else if(/^iP/.test(A)){R||(R=\"Safari\");T=\"iOS\"+((M=/ OS ([\\d_]+)/i.exec(e))?\" \"+M[1].replace(/_/g,\".\"):\"\")}else if(R==\"Konqueror\"&&/^Linux\\b/i.test(T)){T=\"Kubuntu\"}else if(I&&I!=\"Google\"&&(/Chrome/.test(R)&&!/\\bMobile Safari\\b/i.test(e)||/\\bVita\\b/.test(A))||/\\bAndroid\\b/.test(T)&&/^Chrome/.test(R)&&/\\bVersion\\//i.test(e)){R=\"Android Browser\";T=/\\bAndroid\\b/.test(T)?T:\"Android\"}else if(R==\"Silk\"){if(!/\\bMobi/i.test(e)){T=\"Android\";P.unshift(\"desktop mode\")}if(/Accelerated *= *true/i.test(e)){P.unshift(\"accelerated\")}}else if(R==\"UC Browser\"&&/\\bUCWEB\\b/.test(e)){P.push(\"speed mode\")}else if(R==\"PaleMoon\"&&(M=/\\bFirefox\\/([\\d.]+)\\b/.exec(e))){P.push(\"identifying as Firefox \"+M[1])}else if(R==\"Firefox\"&&(M=/\\b(Mobile|Tablet|TV)\\b/i.exec(e))){T||(T=\"Firefox OS\");A||(A=M[1])}else if(!R||(M=!/\\bMinefield\\b/i.test(e)&&/\\b(?:Firefox|Safari)\\b/.exec(R))){if(R&&!A&&/[\\/,]|^[^(]+?\\)/.test(e.slice(e.indexOf(M+\"/\")+8))){R=null}if((M=A||I||T)&&(A||I||/\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(T))){R=/[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(T)?T:M)+\" Browser\"}}else if(R==\"Electron\"&&(M=(/\\bChrome\\/([\\d.]+)\\b/.exec(e)||0)[1])){P.push(\"Chromium \"+M)}if(!B){B=getVersion([\"(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\\\d.]+$)|UCBrowser|YaBrowser)\",\"Version\",qualify(R),\"(?:Firefox|Minefield|NetFront)\"])}if(M=_==\"iCab\"&&parseFloat(B)>3&&\"WebKit\"||/\\bOpera\\b/.test(R)&&(/\\bOPR\\b/.test(e)?\"Blink\":\"Presto\")||/\\b(?:Midori|Nook|Safari)\\b/i.test(e)&&!/^(?:Trident|EdgeHTML)$/.test(_)&&\"WebKit\"||!_&&/\\bMSIE\\b/i.test(e)&&(T==\"Mac OS\"?\"Tasman\":\"Trident\")||_==\"WebKit\"&&/\\bPlayStation\\b(?! Vita\\b)/i.test(R)&&\"NetFront\"){_=[M]}if(R==\"IE\"&&(M=(/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(e)||0)[1])){R+=\" Mobile\";T=\"Windows Phone \"+(/\\+$/.test(M)?M:M+\".x\");P.unshift(\"desktop mode\")}else if(/\\bWPDesktop\\b/i.test(e)){R=\"IE Mobile\";T=\"Windows Phone 8.x\";P.unshift(\"desktop mode\");B||(B=(/\\brv:([\\d.]+)/.exec(e)||0)[1])}else if(R!=\"IE\"&&_==\"Trident\"&&(M=/\\brv:([\\d.]+)/.exec(e))){if(R){P.push(\"identifying as \"+R+(B?\" \"+B:\"\"))}R=\"IE\";B=M[1]}if(k){if(isHostType(i,\"global\")){if(m){M=m.lang.System;E=M.getProperty(\"os.arch\");T=T||M.getProperty(\"os.name\")+\" \"+M.getProperty(\"os.version\")}if(g){try{B=i.require(\"ringo/engine\").version.join(\".\");R=\"RingoJS\"}catch(e){if((M=i.system)&&M.global.system==i.system){R=\"Narwhal\";T||(T=M[0].os||null)}}if(!R){R=\"Rhino\"}}else if(typeof i.process==\"object\"&&!i.process.browser&&(M=i.process)){if(typeof M.versions==\"object\"){if(typeof M.versions.electron==\"string\"){P.push(\"Node \"+M.versions.node);R=\"Electron\";B=M.versions.electron}else if(typeof M.versions.nw==\"string\"){P.push(\"Chromium \"+B,\"Node \"+M.versions.node);R=\"NW.js\";B=M.versions.nw}}if(!R){R=\"Node.js\";E=M.arch;T=M.platform;B=/[\\d.]+/.exec(M.version);B=B?B[0]:null}}}else if(getClassOf(M=i.runtime)==p){R=\"Adobe AIR\";T=M.flash.system.Capabilities.os}else if(getClassOf(M=i.phantom)==x){R=\"PhantomJS\";B=(M=M.version||null)&&M.major+\".\"+M.minor+\".\"+M.patch}else if(typeof O.documentMode==\"number\"&&(M=/\\bTrident\\/(\\d+)/i.exec(e))){B=[B,O.documentMode];if((M=+M[1]+4)!=B[1]){P.push(\"IE \"+B[1]+\" mode\");_&&(_[1]=\"\");B[1]=M}B=R==\"IE\"?String(B[1].toFixed(1)):B[0]}else if(typeof O.documentMode==\"number\"&&/^(?:Chrome|Firefox)\\b/.test(R)){P.push(\"masking as \"+R+\" \"+B);R=\"IE\";B=\"11.0\";_=[\"Trident\"];T=\"Windows\"}T=T&&format(T)}if(B&&(M=/(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(B)||/(?:alpha|beta)(?: ?\\d)?/i.exec(e+\";\"+(k&&n.appMinorVersion))||/\\bMinefield\\b/i.test(e)&&\"a\")){C=/b/i.test(M)?\"beta\":\"alpha\";B=B.replace(RegExp(M+\"\\\\+?$\"),\"\")+(C==\"beta\"?v:h)+(/\\d+\\+?/.exec(M)||\"\")}if(R==\"Fennec\"||R==\"Firefox\"&&/\\b(?:Android|Firefox OS|KaiOS)\\b/.test(T)){R=\"Firefox Mobile\"}else if(R==\"Maxthon\"&&B){B=B.replace(/\\.[\\d.]+/,\".x\")}else if(/\\bXbox\\b/i.test(A)){if(A==\"Xbox 360\"){T=null}if(A==\"Xbox 360\"&&/\\bIEMobile\\b/.test(e)){P.unshift(\"mobile mode\")}}else if((/^(?:Chrome|IE|Opera)$/.test(R)||R&&!A&&!/Browser|Mobi/.test(R))&&(T==\"Windows CE\"||/Mobi/i.test(e))){R+=\" Mobile\"}else if(R==\"IE\"&&k){try{if(i.external===null){P.unshift(\"platform preview\")}}catch(e){P.unshift(\"embedded\")}}else if((/\\bBlackBerry\\b/.test(A)||/\\bBB10\\b/.test(e))&&(M=(RegExp(A.replace(/ +/g,\" *\")+\"/([.\\\\d]+)\",\"i\").exec(e)||0)[1]||B)){M=[M,/BB10/.test(e)];T=(M[1]?(A=null,I=\"BlackBerry\"):\"Device Software\")+\" \"+M[0];B=null}else if(this!=forOwn&&A!=\"Wii\"&&(k&&y||/Opera/.test(R)&&/\\b(?:MSIE|Firefox)\\b/i.test(e)||R==\"Firefox\"&&/\\bOS X (?:\\d+\\.){2,}/.test(T)||R==\"IE\"&&(T&&!/^Win/.test(T)&&B>5.5||/\\bWindows XP\\b/.test(T)&&B>8||B==8&&!/\\bTrident\\b/.test(e)))&&!f.test(M=parse.call(forOwn,e.replace(f,\"\")+\";\"))&&M.name){M=\"ing as \"+M.name+((M=M.version)?\" \"+M:\"\");if(f.test(R)){if(/\\bIE\\b/.test(M)&&T==\"Mac OS\"){T=null}M=\"identify\"+M}else{M=\"mask\"+M;if(w){R=format(w.replace(/([a-z])([A-Z])/g,\"$1 $2\"))}else{R=\"Opera\"}if(/\\bIE\\b/.test(M)){T=null}if(!k){B=null}}_=[\"Presto\"];P.push(M)}if(M=(/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(e)||0)[1]){M=[parseFloat(M.replace(/\\.(\\d)$/,\".0$1\")),M];if(R==\"Safari\"&&M[1].slice(-1)==\"+\"){R=\"WebKit Nightly\";C=\"alpha\";B=M[1].slice(0,-1)}else if(B==M[1]||B==(M[2]=(/\\bSafari\\/([\\d.]+\\+?)/i.exec(e)||0)[1])){B=null}M[1]=(/\\b(?:Headless)?Chrome\\/([\\d.]+)/i.exec(e)||0)[1];if(M[0]==537.36&&M[2]==537.36&&parseFloat(M[1])>=28&&_==\"WebKit\"){_=[\"Blink\"]}if(!k||!s&&!M[1]){_&&(_[1]=\"like Safari\");M=(M=M[0],M<400?1:M<500?2:M<526?3:M<533?4:M<534?\"4+\":M<535?5:M<537?6:M<538?7:M<601?8:M<602?9:M<604?10:M<606?11:M<608?12:\"12\")}else{_&&(_[1]=\"like Chrome\");M=M[1]||(M=M[0],M<530?1:M<532?2:M<532.05?3:M<533?4:M<534.03?5:M<534.07?6:M<534.1?7:M<534.13?8:M<534.16?9:M<534.24?10:M<534.3?11:M<535.01?12:M<535.02?\"13+\":M<535.07?15:M<535.11?16:M<535.19?17:M<536.05?18:M<536.1?19:M<537.01?20:M<537.11?\"21+\":M<537.13?23:M<537.18?24:M<537.24?25:M<537.36?26:_!=\"Blink\"?\"27\":\"28\")}_&&(_[1]+=\" \"+(M+=typeof M==\"number\"?\".x\":/[.+]/.test(M)?\"\":\"+\"));if(R==\"Safari\"&&(!B||parseInt(B)>45)){B=M}else if(R==\"Chrome\"&&/\\bHeadlessChrome/i.test(e)){P.unshift(\"headless\")}}if(R==\"Opera\"&&(M=/\\bzbov|zvav$/.exec(T))){R+=\" \";P.unshift(\"desktop mode\");if(M==\"zvav\"){R+=\"Mini\";B=null}else{R+=\"Mobile\"}T=T.replace(RegExp(\" *\"+M+\"$\"),\"\")}else if(R==\"Safari\"&&/\\bChrome\\b/.exec(_&&_[1])){P.unshift(\"desktop mode\");R=\"Chrome Mobile\";B=null;if(/\\bOS X\\b/.test(T)){I=\"Apple\";T=\"iOS 4.3+\"}else{T=null}}else if(/\\bSRWare Iron\\b/.test(R)&&!B){B=getVersion(\"Chrome\")}if(B&&B.indexOf(M=/[\\d.]+$/.exec(T))==0&&e.indexOf(\"/\"+M+\"-\")>-1){T=trim(T.replace(M,\"\"))}if(T&&T.indexOf(R)!=-1&&!RegExp(R+\" OS\").test(T)){T=T.replace(RegExp(\" *\"+qualify(R)+\" *\"),\"\")}if(_&&!/\\b(?:Avant|Nook)\\b/.test(R)&&(/Browser|Lunascape|Maxthon/.test(R)||R!=\"Safari\"&&/^iOS/.test(T)&&/\\bSafari\\b/.test(_[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(R)&&_[1])){(M=_[_.length-1])&&P.push(M)}if(P.length){P=[\"(\"+P.join(\"; \")+\")\"]}if(I&&A&&A.indexOf(I)<0){P.push(\"on \"+I)}if(A){P.push((/^on /.test(P[P.length-1])?\"\":\"on \")+A)}if(T){M=/ ([\\d.+]+)$/.exec(T);W=M&&T.charAt(T.length-M[0].length-1)==\"/\";T={architecture:32,family:M&&!W?T.replace(M[0],\"\"):T,version:M?M[1]:null,toString:function(){var e=this.version;return this.family+(e&&!W?\" \"+e:\"\")+(this.architecture==64?\" 64-bit\":\"\")}}}if((M=/\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(E))&&!/\\bi686\\b/i.test(E)){if(T){T.architecture=64;T.family=T.family.replace(RegExp(\" *\"+M),\"\")}if(R&&(/\\bWOW64\\b/i.test(e)||k&&/\\w(?:86|32)$/.test(n.cpuClass||n.platform)&&!/\\bWin64; x64\\b/i.test(e))){P.unshift(\"32-bit\")}}else if(T&&/^OS X/.test(T.family)&&R==\"Chrome\"&&parseFloat(B)>=39){T.architecture=64}e||(e=null);var F={};F.description=e;F.layout=_&&_[0];F.manufacturer=I;F.name=R;F.prerelease=C;F.product=A;F.ua=e;F.version=R&&B;F.os=T||{architecture:null,family:null,version:null,toString:function(){return\"null\"}};F.parse=parse;F.toString=toStringPlatform;if(F.version){P.unshift(B)}if(F.name){P.unshift(R)}if(T&&R&&!(T==String(T).split(\" \")[0]&&(T==R.split(\" \")[0]||A))){P.push(A?\"(\"+T+\")\":\"on \"+T)}if(P.length){F.description=P.join(\" \")}return F}var d=parse();if(n&&o){forOwn(d,(function(e,i){n[i]=e}))}else{r.platform=d}}).call(this)}};var i={};function __nccwpck_require__(t){var r=i[t];if(r!==undefined){return r.exports}var a=i[t]={id:t,loaded:false,exports:{}};var n=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete i[t]}a.loaded=true;return a.exports}(()=>{__nccwpck_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(541);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtL3BsYXRmb3JtLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLE9BQU8sb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWEsT0FBTywyQkFBMkIscUNBQXFDLFFBQVEscUJBQXFCLHFDQUFxQyxtQkFBbUIscUJBQU0sWUFBWSxxQkFBTSxDQUFDLGdEQUFnRCxJQUFJLHVCQUF1QixnQkFBZ0IsV0FBVyx1QkFBdUIsdUJBQXVCLGlCQUFpQix1QkFBdUIsWUFBWSw0Q0FBNEMsMEJBQTBCLE9BQU8sME1BQTBNLGlGQUFpRixlQUFlLFlBQVksU0FBUyw2QkFBNkIsbVpBQW1aLFNBQVMsbUJBQW1CLHdCQUF3QixtQ0FBbUMsYUFBYSxhQUFhLEtBQUssYUFBYSxtQkFBbUIsVUFBVSxxREFBcUQscUJBQXFCLGdCQUFnQixnQkFBZ0IsY0FBYyx1QkFBdUIsbURBQW1ELHlCQUF5QixtQ0FBbUMsa0ZBQWtGLG9CQUFvQiwrQ0FBK0MscUJBQXFCLFdBQVcsc0JBQXNCLGFBQWEsR0FBRyxTQUFTLGlCQUFpQix3Q0FBd0Msa0JBQWtCLFFBQVEscURBQXFELE1BQU0sSUFBSSxPQUFPLHNCQUFzQixzQkFBc0IsU0FBUyxjQUFjLGdGQUFnRix3SUFBd0ksK0JBQStCLHNDQUFzQyxnQkFBZ0IsZ0JBQWdCLHFCQUFxQiwyQkFBMkIsMkRBQTJELE1BQU0sUUFBUSxTQUFTLFdBQVcsV0FBVyxzREFBc0QsTUFBTSxrQkFBa0IsZ0NBQWdDLFlBQVkscUNBQXFDLHVEQUF1RCxxTUFBcU0sMERBQTBELDZFQUE2RSxrREFBa0QsY0FBYyxtREFBbUQsMkJBQTJCLG1DQUFtQywwREFBMEQsMkNBQTJDLEVBQUUsdUNBQXVDLGVBQWUsbUNBQW1DLFVBQVUsNEJBQTRCLHNCQUFzQiw0Q0FBNEMsRUFBRSwrQ0FBK0MsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSw4QkFBOEIsRUFBRSwwQkFB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QXdCLDhIQUE4SCxLQUFLLHdCQUF3Qix1VEFBdVQsa0VBQWtFLHNDQUFzQyxJQUFJLGtEQUFrRCx1QkFBdUIsMkNBQTJDLE9BQU8sMEJBQTBCLGNBQWMsVUFBVSxPQUFPLEtBQUssWUFBWSxtQ0FBbUMsaURBQWlELDBCQUEwQixrQkFBa0IsT0FBTyx1QkFBdUIsVUFBVSxhQUFhLEtBQUssUUFBUSx1Q0FBdUMsdUJBQXVCLGtFQUFrRSx3QkFBd0Isa0RBQWtELDZDQUE2Qyw4UEFBOFAsNkJBQTZCLGFBQWEsaUJBQWlCLFFBQVEseUJBQXlCLGdCQUFnQixNQUFNLGdEQUFnRCxNQUFNLHdCQUF3QiwyQ0FBMkMsR0FBRywwRkFBMEYsbUJBQW1CLDJFQUEyRSx5RUFBeUUsTUFBTSxrQkFBa0IsNkNBQTZDLHdGQUF3RixrQkFBa0IscUJBQXFCLG1FQUFtRSxrQkFBa0IsWUFBWSxTQUFTLGdCQUFnQixpQkFBaUIsaUJBQWlCLFNBQVMsZUFBZSxZQUFZLE9BQU8sZUFBZSxTQUFTLCtEQUErRCxlQUFlLGNBQWMsNEJBQTRCLGNBQWMsYUFBYSxXQUFXLGFBQWEsaUVBQWlFLDRCQUE0QixhQUFhLDBCQUEwQixTQUFTLGNBQWMsU0FBUyx3QkFBd0IsT0FBTyxHQUFHLEtBQUssY0FBYyxlQUFlLFNBQVMsZ0NBQWdDLFdBQVcsa0JBQWtCLGlCQUFpQixZQUFZLDhCQUE4QixXQUFXLElBQUkscURBQXFELFFBQVEsUUFBUSxpQkFBaUIsY0FBYyxpQkFBaUIsTUFBTSw0QkFBNEIsV0FBVyw2QkFBNkIsVUFBVSxJQUFJLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtL3BsYXRmb3JtLmpzP2VhZmYiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57dmFyIGU9ezU0MTpmdW5jdGlvbihlLGksdCl7ZT10Lm5tZChlKTtcbi8qIVxuICogUGxhdGZvcm0uanMgdjEuMy42XG4gKiBDb3B5cmlnaHQgMjAxNC0yMDIwIEJlbmphbWluIFRhblxuICogQ29weXJpZ2h0IDIwMTEtMjAxMyBKb2huLURhdmlkIERhbHRvblxuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlXG4gKi8oZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17ZnVuY3Rpb246dHJ1ZSxvYmplY3Q6dHJ1ZX07dmFyIHI9dFt0eXBlb2Ygd2luZG93XSYmd2luZG93fHx0aGlzO3ZhciBhPXI7dmFyIG49dFt0eXBlb2YgaV0mJmk7dmFyIG89dFtcIm9iamVjdFwiXSYmZSYmIWUubm9kZVR5cGUmJmU7dmFyIGw9biYmbyYmdHlwZW9mIGdsb2JhbD09XCJvYmplY3RcIiYmZ2xvYmFsO2lmKGwmJihsLmdsb2JhbD09PWx8fGwud2luZG93PT09bHx8bC5zZWxmPT09bCkpe3I9bH12YXIgcz1NYXRoLnBvdygyLDUzKS0xO3ZhciBmPS9cXGJPcGVyYS87dmFyIGI9dGhpczt2YXIgYz1PYmplY3QucHJvdG90eXBlO3ZhciBwPWMuaGFzT3duUHJvcGVydHk7dmFyIHU9Yy50b1N0cmluZztmdW5jdGlvbiBjYXBpdGFsaXplKGUpe2U9U3RyaW5nKGUpO3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9ZnVuY3Rpb24gY2xlYW51cE9TKGUsaSx0KXt2YXIgcj17XCIxMC4wXCI6XCIxMFwiLDYuNDpcIjEwIFRlY2huaWNhbCBQcmV2aWV3XCIsNi4zOlwiOC4xXCIsNi4yOlwiOFwiLDYuMTpcIlNlcnZlciAyMDA4IFIyIC8gN1wiLFwiNi4wXCI6XCJTZXJ2ZXIgMjAwOCAvIFZpc3RhXCIsNS4yOlwiU2VydmVyIDIwMDMgLyBYUCA2NC1iaXRcIiw1LjE6XCJYUFwiLDUuMDE6XCIyMDAwIFNQMVwiLFwiNS4wXCI6XCIyMDAwXCIsXCI0LjBcIjpcIk5UXCIsXCI0LjkwXCI6XCJNRVwifTtpZihpJiZ0JiYvXldpbi9pLnRlc3QoZSkmJiEvXldpbmRvd3MgUGhvbmUgL2kudGVzdChlKSYmKHI9clsvW1xcZC5dKyQvLmV4ZWMoZSldKSl7ZT1cIldpbmRvd3MgXCIrcn1lPVN0cmluZyhlKTtpZihpJiZ0KXtlPWUucmVwbGFjZShSZWdFeHAoaSxcImlcIiksdCl9ZT1mb3JtYXQoZS5yZXBsYWNlKC8gY2UkL2ksXCIgQ0VcIikucmVwbGFjZSgvXFxiaHB3L2ksXCJ3ZWJcIikucmVwbGFjZSgvXFxiTWFjaW50b3NoXFxiLyxcIk1hYyBPU1wiKS5yZXBsYWNlKC9fUG93ZXJQQ1xcYi9pLFwiIE9TXCIpLnJlcGxhY2UoL1xcYihPUyBYKSBbXiBcXGRdKy9pLFwiJDFcIikucmVwbGFjZSgvXFxiTWFjIChPUyBYKVxcYi8sXCIkMVwiKS5yZXBsYWNlKC9cXC8oXFxkKS8sXCIgJDFcIikucmVwbGFjZSgvXy9nLFwiLlwiKS5yZXBsYWNlKC8oPzogQmVQQ3xbIC5dKmZjWyBcXGQuXSspJC9pLFwiXCIpLnJlcGxhY2UoL1xcYng4NlxcLjY0XFxiL2dpLFwieDg2XzY0XCIpLnJlcGxhY2UoL1xcYihXaW5kb3dzIFBob25lKSBPU1xcYi8sXCIkMVwiKS5yZXBsYWNlKC9cXGIoQ2hyb21lIE9TIFxcdyspIFtcXGQuXStcXGIvLFwiJDFcIikuc3BsaXQoXCIgb24gXCIpWzBdKTtyZXR1cm4gZX1mdW5jdGlvbiBlYWNoKGUsaSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7aWYodHlwZW9mIHI9PVwibnVtYmVyXCImJnI+LTEmJnI8PXMpe3doaWxlKCsrdDxyKXtpKGVbdF0sdCxlKX19ZWxzZXtmb3JPd24oZSxpKX19ZnVuY3Rpb24gZm9ybWF0KGUpe2U9dHJpbShlKTtyZXR1cm4vXig/OndlYk9TfGkoPzpPU3xQKSkvLnRlc3QoZSk/ZTpjYXBpdGFsaXplKGUpfWZ1bmN0aW9uIGZvck93bihlLGkpe2Zvcih2YXIgdCBpbiBlKXtpZihwLmNhbGwoZSx0KSl7aShlW3RdLHQsZSl9fX1mdW5jdGlvbiBnZXRDbGFzc09mKGUpe3JldHVybiBlPT1udWxsP2NhcGl0YWxpemUoZSk6dS5jYWxsKGUpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIGlzSG9zdFR5cGUoZSxpKXt2YXIgdD1lIT1udWxsP3R5cGVvZiBlW2ldOlwibnVtYmVyXCI7cmV0dXJuIS9eKD86Ym9vbGVhbnxudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZCkkLy50ZXN0KHQpJiYodD09XCJvYmplY3RcIj8hIWVbaV06dHJ1ZSl9ZnVuY3Rpb24gcXVhbGlmeShlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoLyhbIC1dKSg/ISQpL2csXCIkMT9cIil9ZnVuY3Rpb24gcmVkdWNlKGUsaSl7dmFyIHQ9bnVsbDtlYWNoKGUsKGZ1bmN0aW9uKHIsYSl7dD1pKHQscixhLGUpfSkpO3JldHVybiB0fWZ1bmN0aW9uIHRyaW0oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC9eICt8ICskL2csXCJcIil9ZnVuY3Rpb24gcGFyc2UoZSl7dmFyIGk9cjt2YXIgdD1lJiZ0eXBlb2YgZT09XCJvYmplY3RcIiYmZ2V0Q2xhc3NPZihlKSE9XCJTdHJpbmdcIjtpZih0KXtpPWU7ZT1udWxsfXZhciBuPWkubmF2aWdhdG9yfHx7fTt2YXIgbz1uLnVzZXJBZ2VudHx8XCJcIjtlfHwoZT1vKTt2YXIgbD10fHxiPT1hO3ZhciBzPXQ/ISFuLmxpa2VDaHJvbWU6L1xcYkNocm9tZVxcYi8udGVzdChlKSYmIS9pbnRlcm5hbHxcXG4vaS50ZXN0KHUudG9TdHJpbmcoKSk7dmFyIGM9XCJPYmplY3RcIixwPXQ/YzpcIlNjcmlwdEJyaWRnaW5nUHJveHlPYmplY3RcIixkPXQ/YzpcIkVudmlyb25tZW50XCIsUz10JiZpLmphdmE/XCJKYXZhUGFja2FnZVwiOmdldENsYXNzT2YoaS5qYXZhKSx4PXQ/YzpcIlJ1bnRpbWVPYmplY3RcIjt2YXIgbT0vXFxiSmF2YS8udGVzdChTKSYmaS5qYXZhO3ZhciBnPW0mJmdldENsYXNzT2YoaS5lbnZpcm9ubWVudCk9PWQ7dmFyIGg9bT9cImFcIjpcIs6xXCI7dmFyIHY9bT9cImJcIjpcIs6yXCI7dmFyIE89aS5kb2N1bWVudHx8e307dmFyIHk9aS5vcGVyYW1pbml8fGkub3BlcmE7dmFyIHc9Zi50ZXN0KHc9dCYmeT95W1wiW1tDbGFzc11dXCJdOmdldENsYXNzT2YoeSkpP3c6eT1udWxsO3ZhciBNO3ZhciBFPWU7dmFyIFA9W107dmFyIEM9bnVsbDt2YXIgaz1lPT1vO3ZhciBCPWsmJnkmJnR5cGVvZiB5LnZlcnNpb249PVwiZnVuY3Rpb25cIiYmeS52ZXJzaW9uKCk7dmFyIFc7dmFyIF89Z2V0TGF5b3V0KFt7bGFiZWw6XCJFZGdlSFRNTFwiLHBhdHRlcm46XCJFZGdlXCJ9LFwiVHJpZGVudFwiLHtsYWJlbDpcIldlYktpdFwiLHBhdHRlcm46XCJBcHBsZVdlYktpdFwifSxcImlDYWJcIixcIlByZXN0b1wiLFwiTmV0RnJvbnRcIixcIlRhc21hblwiLFwiS0hUTUxcIixcIkdlY2tvXCJdKTt2YXIgUj1nZXROYW1lKFtcIkFkb2JlIEFJUlwiLFwiQXJvcmFcIixcIkF2YW50IEJyb3dzZXJcIixcIkJyZWFjaFwiLFwiQ2FtaW5vXCIsXCJFbGVjdHJvblwiLFwiRXBpcGhhbnlcIixcIkZlbm5lY1wiLFwiRmxvY2tcIixcIkdhbGVvblwiLFwiR3JlZW5Ccm93c2VyXCIsXCJpQ2FiXCIsXCJJY2V3ZWFzZWxcIixcIkstTWVsZW9uXCIsXCJLb25xdWVyb3JcIixcIkx1bmFzY2FwZVwiLFwiTWF4dGhvblwiLHtsYWJlbDpcIk1pY3Jvc29mdCBFZGdlXCIscGF0dGVybjpcIig/OkVkZ2V8RWRnfEVkZ0F8RWRnaU9TKVwifSxcIk1pZG9yaVwiLFwiTm9vayBCcm93c2VyXCIsXCJQYWxlTW9vblwiLFwiUGhhbnRvbUpTXCIsXCJSYXZlblwiLFwiUmVrb25xXCIsXCJSb2NrTWVsdFwiLHtsYWJlbDpcIlNhbXN1bmcgSW50ZXJuZXRcIixwYXR0ZXJuOlwiU2Ftc3VuZ0Jyb3dzZXJcIn0sXCJTZWFNb25rZXlcIix7bGFiZWw6XCJTaWxrXCIscGF0dGVybjpcIig/OkNsb3VkOXxTaWxrLUFjY2VsZXJhdGVkKVwifSxcIlNsZWlwbmlyXCIsXCJTbGltQnJvd3NlclwiLHtsYWJlbDpcIlNSV2FyZSBJcm9uXCIscGF0dGVybjpcIklyb25cIn0sXCJTdW5yaXNlXCIsXCJTd2lmdGZveFwiLFwiVml2YWxkaVwiLFwiV2F0ZXJmb3hcIixcIldlYlBvc2l0aXZlXCIse2xhYmVsOlwiWWFuZGV4IEJyb3dzZXJcIixwYXR0ZXJuOlwiWWFCcm93c2VyXCJ9LHtsYWJlbDpcIlVDIEJyb3dzZXJcIixwYXR0ZXJuOlwiVUNCcm93c2VyXCJ9LFwiT3BlcmEgTWluaVwiLHtsYWJlbDpcIk9wZXJhIE1pbmlcIixwYXR0ZXJuOlwiT1BpT1NcIn0sXCJPcGVyYVwiLHtsYWJlbDpcIk9wZXJhXCIscGF0dGVybjpcIk9QUlwifSxcIkNocm9taXVtXCIsXCJDaHJvbWVcIix7bGFiZWw6XCJDaHJvbWVcIixwYXR0ZXJuOlwiKD86SGVhZGxlc3NDaHJvbWUpXCJ9LHtsYWJlbDpcIkNocm9tZSBNb2JpbGVcIixwYXR0ZXJuOlwiKD86Q3JpT1N8Q3JNbylcIn0se2xhYmVsOlwiRmlyZWZveFwiLHBhdHRlcm46XCIoPzpGaXJlZm94fE1pbmVmaWVsZClcIn0se2xhYmVsOlwiRmlyZWZveCBmb3IgaU9TXCIscGF0dGVybjpcIkZ4aU9TXCJ9LHtsYWJlbDpcIklFXCIscGF0dGVybjpcIklFTW9iaWxlXCJ9LHtsYWJlbDpcIklFXCIscGF0dGVybjpcIk1TSUVcIn0sXCJTYWZhcmlcIl0pO3ZhciBBPWdldFByb2R1Y3QoW3tsYWJlbDpcIkJsYWNrQmVycnlcIixwYXR0ZXJuOlwiQkIxMFwifSxcIkJsYWNrQmVycnlcIix7bGFiZWw6XCJHYWxheHkgU1wiLHBhdHRlcm46XCJHVC1JOTAwMFwifSx7bGFiZWw6XCJHYWxheHkgUzJcIixwYXR0ZXJuOlwiR1QtSTkxMDBcIn0se2xhYmVsOlwiR2FsYXh5IFMzXCIscGF0dGVybjpcIkdULUk5MzAwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNFwiLHBhdHRlcm46XCJHVC1JOTUwMFwifSx7bGFiZWw6XCJHYWxheHkgUzVcIixwYXR0ZXJuOlwiU00tRzkwMFwifSx7bGFiZWw6XCJHYWxheHkgUzZcIixwYXR0ZXJuOlwiU00tRzkyMFwifSx7bGFiZWw6XCJHYWxheHkgUzYgRWRnZVwiLHBhdHRlcm46XCJTTS1HOTI1XCJ9LHtsYWJlbDpcIkdhbGF4eSBTN1wiLHBhdHRlcm46XCJTTS1HOTMwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNyBFZGdlXCIscGF0dGVybjpcIlNNLUc5MzVcIn0sXCJHb29nbGUgVFZcIixcIkx1bWlhXCIsXCJpUGFkXCIsXCJpUG9kXCIsXCJpUGhvbmVcIixcIktpbmRsZVwiLHtsYWJlbDpcIktpbmRsZSBGaXJlXCIscGF0dGVybjpcIig/OkNsb3VkOXxTaWxrLUFjY2VsZXJhdGVkKVwifSxcIk5leHVzXCIsXCJOb29rXCIsXCJQbGF5Qm9va1wiLFwiUGxheVN0YXRpb24gVml0YVwiLFwiUGxheVN0YXRpb25cIixcIlRvdWNoUGFkXCIsXCJUcmFuc2Zvcm1lclwiLHtsYWJlbDpcIldpaSBVXCIscGF0dGVybjpcIldpaVVcIn0sXCJXaWlcIixcIlhib3ggT25lXCIse2xhYmVsOlwiWGJveCAzNjBcIixwYXR0ZXJuOlwiWGJveFwifSxcIlhvb21cIl0pO3ZhciBJPWdldE1hbnVmYWN0dXJlcih7QXBwbGU6e2lQYWQ6MSxpUGhvbmU6MSxpUG9kOjF9LEFsY2F0ZWw6e30sQXJjaG9zOnt9LEFtYXpvbjp7S2luZGxlOjEsXCJLaW5kbGUgRmlyZVwiOjF9LEFzdXM6e1RyYW5zZm9ybWVyOjF9LFwiQmFybmVzICYgTm9ibGVcIjp7Tm9vazoxfSxCbGFja0JlcnJ5OntQbGF5Qm9vazoxfSxHb29nbGU6e1wiR29vZ2xlIFRWXCI6MSxOZXh1czoxfSxIUDp7VG91Y2hQYWQ6MX0sSFRDOnt9LEh1YXdlaTp7fSxMZW5vdm86e30sTEc6e30sTWljcm9zb2Z0OntYYm94OjEsXCJYYm94IE9uZVwiOjF9LE1vdG9yb2xhOntYb29tOjF9LE5pbnRlbmRvOntcIldpaSBVXCI6MSxXaWk6MX0sTm9raWE6e0x1bWlhOjF9LE9wcG86e30sU2Ftc3VuZzp7XCJHYWxheHkgU1wiOjEsXCJHYWxheHkgUzJcIjoxLFwiR2FsYXh5IFMzXCI6MSxcIkdhbGF4eSBTNFwiOjF9LFNvbnk6e1BsYXlTdGF0aW9uOjEsXCJQbGF5U3RhdGlvbiBWaXRhXCI6MX0sWGlhb21pOntNaToxLFJlZG1pOjF9fSk7dmFyIFQ9Z2V0T1MoW1wiV2luZG93cyBQaG9uZVwiLFwiS2FpT1NcIixcIkFuZHJvaWRcIixcIkNlbnRPU1wiLHtsYWJlbDpcIkNocm9tZSBPU1wiLHBhdHRlcm46XCJDck9TXCJ9LFwiRGViaWFuXCIse2xhYmVsOlwiRHJhZ29uRmx5IEJTRFwiLHBhdHRlcm46XCJEcmFnb25GbHlcIn0sXCJGZWRvcmFcIixcIkZyZWVCU0RcIixcIkdlbnRvb1wiLFwiSGFpa3VcIixcIkt1YnVudHVcIixcIkxpbnV4IE1pbnRcIixcIk9wZW5CU0RcIixcIlJlZCBIYXRcIixcIlN1U0VcIixcIlVidW50dVwiLFwiWHVidW50dVwiLFwiQ3lnd2luXCIsXCJTeW1iaWFuIE9TXCIsXCJocHdPU1wiLFwid2ViT1MgXCIsXCJ3ZWJPU1wiLFwiVGFibGV0IE9TXCIsXCJUaXplblwiLFwiTGludXhcIixcIk1hYyBPUyBYXCIsXCJNYWNpbnRvc2hcIixcIk1hY1wiLFwiV2luZG93cyA5ODtcIixcIldpbmRvd3MgXCJdKTtmdW5jdGlvbiBnZXRMYXlvdXQoaSl7cmV0dXJuIHJlZHVjZShpLChmdW5jdGlvbihpLHQpe3JldHVybiBpfHxSZWdFeHAoXCJcXFxcYlwiKyh0LnBhdHRlcm58fHF1YWxpZnkodCkpK1wiXFxcXGJcIixcImlcIikuZXhlYyhlKSYmKHQubGFiZWx8fHQpfSkpfWZ1bmN0aW9uIGdldE1hbnVmYWN0dXJlcihpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCxyKXtyZXR1cm4gaXx8KHRbQV18fHRbL15bYS16XSsoPzogK1thLXpdK1xcYikqL2kuZXhlYyhBKV18fFJlZ0V4cChcIlxcXFxiXCIrcXVhbGlmeShyKStcIig/OlxcXFxifFxcXFx3KlxcXFxkKVwiLFwiaVwiKS5leGVjKGUpKSYmcn0pKX1mdW5jdGlvbiBnZXROYW1lKGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0KXtyZXR1cm4gaXx8UmVnRXhwKFwiXFxcXGJcIisodC5wYXR0ZXJufHxxdWFsaWZ5KHQpKStcIlxcXFxiXCIsXCJpXCIpLmV4ZWMoZSkmJih0LmxhYmVsfHx0KX0pKX1mdW5jdGlvbiBnZXRPUyhpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7dmFyIHI9dC5wYXR0ZXJufHxxdWFsaWZ5KHQpO2lmKCFpJiYoaT1SZWdFeHAoXCJcXFxcYlwiK3IrXCIoPzovW1xcXFxkLl0rfFsgXFxcXHcuXSopXCIsXCJpXCIpLmV4ZWMoZSkpKXtpPWNsZWFudXBPUyhpLHIsdC5sYWJlbHx8dCl9cmV0dXJuIGl9KSl9ZnVuY3Rpb24gZ2V0UHJvZHVjdChpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7dmFyIHI9dC5wYXR0ZXJufHxxdWFsaWZ5KHQpO2lmKCFpJiYoaT1SZWdFeHAoXCJcXFxcYlwiK3IrXCIgKlxcXFxkK1suXFxcXHdfXSpcIixcImlcIikuZXhlYyhlKXx8UmVnRXhwKFwiXFxcXGJcIityK1wiICpcXFxcdystW1xcXFx3XSpcIixcImlcIikuZXhlYyhlKXx8UmVnRXhwKFwiXFxcXGJcIityK1wiKD86OyAqKD86W2Etel0rW18tXSk/W2Etel0rXFxcXGQrfFteICgpOy1dKilcIixcImlcIikuZXhlYyhlKSkpe2lmKChpPVN0cmluZyh0LmxhYmVsJiYhUmVnRXhwKHIsXCJpXCIpLnRlc3QodC5sYWJlbCk/dC5sYWJlbDppKS5zcGxpdChcIi9cIikpWzFdJiYhL1tcXGQuXSsvLnRlc3QoaVswXSkpe2lbMF0rPVwiIFwiK2lbMV19dD10LmxhYmVsfHx0O2k9Zm9ybWF0KGlbMF0ucmVwbGFjZShSZWdFeHAocixcImlcIiksdCkucmVwbGFjZShSZWdFeHAoXCI7ICooPzpcIit0K1wiW18tXSk/XCIsXCJpXCIpLFwiIFwiKS5yZXBsYWNlKFJlZ0V4cChcIihcIit0K1wiKVstXy5dPyhcXFxcdylcIixcImlcIiksXCIkMSAkMlwiKSl9cmV0dXJuIGl9KSl9ZnVuY3Rpb24gZ2V0VmVyc2lvbihpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7cmV0dXJuIGl8fChSZWdFeHAodCtcIig/Oi1bXFxcXGQuXSsvfCg/OiBmb3IgW1xcXFx3LV0rKT9bIC8tXSkoW1xcXFxkLl0rW14gKCk7L18tXSopXCIsXCJpXCIpLmV4ZWMoZSl8fDApWzFdfHxudWxsfSkpfWZ1bmN0aW9uIHRvU3RyaW5nUGxhdGZvcm0oKXtyZXR1cm4gdGhpcy5kZXNjcmlwdGlvbnx8XCJcIn1fJiYoXz1bX10pO2lmKC9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpJiYhQSYmKE09L1xcYkFuZHJvaWRbXjtdKjsoLio/KSg/OkJ1aWxkfFxcKSBBcHBsZVdlYktpdClcXGIvaS5leGVjKGUpKSl7QT10cmltKE1bMV0pLnJlcGxhY2UoL15bYS16XXsyfS1bYS16XXsyfTtcXHMqL2ksXCJcIil8fG51bGx9aWYoSSYmIUEpe0E9Z2V0UHJvZHVjdChbSV0pfWVsc2UgaWYoSSYmQSl7QT1BLnJlcGxhY2UoUmVnRXhwKFwiXihcIitxdWFsaWZ5KEkpK1wiKVstXy5cXFxcc11cIixcImlcIiksSStcIiBcIikucmVwbGFjZShSZWdFeHAoXCJeKFwiK3F1YWxpZnkoSSkrXCIpWy1fLl0/KFxcXFx3KVwiLFwiaVwiKSxJK1wiICQyXCIpfWlmKE09L1xcYkdvb2dsZSBUVlxcYi8uZXhlYyhBKSl7QT1NWzBdfWlmKC9cXGJTaW11bGF0b3JcXGIvaS50ZXN0KGUpKXtBPShBP0ErXCIgXCI6XCJcIikrXCJTaW11bGF0b3JcIn1pZihSPT1cIk9wZXJhIE1pbmlcIiYmL1xcYk9QaU9TXFxiLy50ZXN0KGUpKXtQLnB1c2goXCJydW5uaW5nIGluIFR1cmJvL1VuY29tcHJlc3NlZCBtb2RlXCIpfWlmKFI9PVwiSUVcIiYmL1xcYmxpa2UgaVBob25lIE9TXFxiLy50ZXN0KGUpKXtNPXBhcnNlKGUucmVwbGFjZSgvbGlrZSBpUGhvbmUgT1MvLFwiXCIpKTtJPU0ubWFudWZhY3R1cmVyO0E9TS5wcm9kdWN0fWVsc2UgaWYoL15pUC8udGVzdChBKSl7Unx8KFI9XCJTYWZhcmlcIik7VD1cImlPU1wiKygoTT0vIE9TIChbXFxkX10rKS9pLmV4ZWMoZSkpP1wiIFwiK01bMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpcIlwiKX1lbHNlIGlmKFI9PVwiS29ucXVlcm9yXCImJi9eTGludXhcXGIvaS50ZXN0KFQpKXtUPVwiS3VidW50dVwifWVsc2UgaWYoSSYmSSE9XCJHb29nbGVcIiYmKC9DaHJvbWUvLnRlc3QoUikmJiEvXFxiTW9iaWxlIFNhZmFyaVxcYi9pLnRlc3QoZSl8fC9cXGJWaXRhXFxiLy50ZXN0KEEpKXx8L1xcYkFuZHJvaWRcXGIvLnRlc3QoVCkmJi9eQ2hyb21lLy50ZXN0KFIpJiYvXFxiVmVyc2lvblxcLy9pLnRlc3QoZSkpe1I9XCJBbmRyb2lkIEJyb3dzZXJcIjtUPS9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpP1Q6XCJBbmRyb2lkXCJ9ZWxzZSBpZihSPT1cIlNpbGtcIil7aWYoIS9cXGJNb2JpL2kudGVzdChlKSl7VD1cIkFuZHJvaWRcIjtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIil9aWYoL0FjY2VsZXJhdGVkICo9ICp0cnVlL2kudGVzdChlKSl7UC51bnNoaWZ0KFwiYWNjZWxlcmF0ZWRcIil9fWVsc2UgaWYoUj09XCJVQyBCcm93c2VyXCImJi9cXGJVQ1dFQlxcYi8udGVzdChlKSl7UC5wdXNoKFwic3BlZWQgbW9kZVwiKX1lbHNlIGlmKFI9PVwiUGFsZU1vb25cIiYmKE09L1xcYkZpcmVmb3hcXC8oW1xcZC5dKylcXGIvLmV4ZWMoZSkpKXtQLnB1c2goXCJpZGVudGlmeWluZyBhcyBGaXJlZm94IFwiK01bMV0pfWVsc2UgaWYoUj09XCJGaXJlZm94XCImJihNPS9cXGIoTW9iaWxlfFRhYmxldHxUVilcXGIvaS5leGVjKGUpKSl7VHx8KFQ9XCJGaXJlZm94IE9TXCIpO0F8fChBPU1bMV0pfWVsc2UgaWYoIVJ8fChNPSEvXFxiTWluZWZpZWxkXFxiL2kudGVzdChlKSYmL1xcYig/OkZpcmVmb3h8U2FmYXJpKVxcYi8uZXhlYyhSKSkpe2lmKFImJiFBJiYvW1xcLyxdfF5bXihdKz9cXCkvLnRlc3QoZS5zbGljZShlLmluZGV4T2YoTStcIi9cIikrOCkpKXtSPW51bGx9aWYoKE09QXx8SXx8VCkmJihBfHxJfHwvXFxiKD86QW5kcm9pZHxTeW1iaWFuIE9TfFRhYmxldCBPU3x3ZWJPUylcXGIvLnRlc3QoVCkpKXtSPS9bYS16XSsoPzogSGF0KT8vaS5leGVjKC9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpP1Q6TSkrXCIgQnJvd3NlclwifX1lbHNlIGlmKFI9PVwiRWxlY3Ryb25cIiYmKE09KC9cXGJDaHJvbWVcXC8oW1xcZC5dKylcXGIvLmV4ZWMoZSl8fDApWzFdKSl7UC5wdXNoKFwiQ2hyb21pdW0gXCIrTSl9aWYoIUIpe0I9Z2V0VmVyc2lvbihbXCIoPzpDbG91ZDl8Q3JpT1N8Q3JNb3xFZGdlfEVkZ3xFZGdBfEVkZ2lPU3xGeGlPU3xIZWFkbGVzc0Nocm9tZXxJRU1vYmlsZXxJcm9ufE9wZXJhID9NaW5pfE9QaU9TfE9QUnxSYXZlbnxTYW1zdW5nQnJvd3NlcnxTaWxrKD8hL1tcXFxcZC5dKyQpfFVDQnJvd3NlcnxZYUJyb3dzZXIpXCIsXCJWZXJzaW9uXCIscXVhbGlmeShSKSxcIig/OkZpcmVmb3h8TWluZWZpZWxkfE5ldEZyb250KVwiXSl9aWYoTT1fPT1cImlDYWJcIiYmcGFyc2VGbG9hdChCKT4zJiZcIldlYktpdFwifHwvXFxiT3BlcmFcXGIvLnRlc3QoUikmJigvXFxiT1BSXFxiLy50ZXN0KGUpP1wiQmxpbmtcIjpcIlByZXN0b1wiKXx8L1xcYig/Ok1pZG9yaXxOb29rfFNhZmFyaSlcXGIvaS50ZXN0KGUpJiYhL14oPzpUcmlkZW50fEVkZ2VIVE1MKSQvLnRlc3QoXykmJlwiV2ViS2l0XCJ8fCFfJiYvXFxiTVNJRVxcYi9pLnRlc3QoZSkmJihUPT1cIk1hYyBPU1wiP1wiVGFzbWFuXCI6XCJUcmlkZW50XCIpfHxfPT1cIldlYktpdFwiJiYvXFxiUGxheVN0YXRpb25cXGIoPyEgVml0YVxcYikvaS50ZXN0KFIpJiZcIk5ldEZyb250XCIpe189W01dfWlmKFI9PVwiSUVcIiYmKE09KC87ICooPzpYQkxXUHxadW5lV1ApKFxcZCspL2kuZXhlYyhlKXx8MClbMV0pKXtSKz1cIiBNb2JpbGVcIjtUPVwiV2luZG93cyBQaG9uZSBcIisoL1xcKyQvLnRlc3QoTSk/TTpNK1wiLnhcIik7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpfWVsc2UgaWYoL1xcYldQRGVza3RvcFxcYi9pLnRlc3QoZSkpe1I9XCJJRSBNb2JpbGVcIjtUPVwiV2luZG93cyBQaG9uZSA4LnhcIjtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIik7Qnx8KEI9KC9cXGJydjooW1xcZC5dKykvLmV4ZWMoZSl8fDApWzFdKX1lbHNlIGlmKFIhPVwiSUVcIiYmXz09XCJUcmlkZW50XCImJihNPS9cXGJydjooW1xcZC5dKykvLmV4ZWMoZSkpKXtpZihSKXtQLnB1c2goXCJpZGVudGlmeWluZyBhcyBcIitSKyhCP1wiIFwiK0I6XCJcIikpfVI9XCJJRVwiO0I9TVsxXX1pZihrKXtpZihpc0hvc3RUeXBlKGksXCJnbG9iYWxcIikpe2lmKG0pe009bS5sYW5nLlN5c3RlbTtFPU0uZ2V0UHJvcGVydHkoXCJvcy5hcmNoXCIpO1Q9VHx8TS5nZXRQcm9wZXJ0eShcIm9zLm5hbWVcIikrXCIgXCIrTS5nZXRQcm9wZXJ0eShcIm9zLnZlcnNpb25cIil9aWYoZyl7dHJ5e0I9aS5yZXF1aXJlKFwicmluZ28vZW5naW5lXCIpLnZlcnNpb24uam9pbihcIi5cIik7Uj1cIlJpbmdvSlNcIn1jYXRjaChlKXtpZigoTT1pLnN5c3RlbSkmJk0uZ2xvYmFsLnN5c3RlbT09aS5zeXN0ZW0pe1I9XCJOYXJ3aGFsXCI7VHx8KFQ9TVswXS5vc3x8bnVsbCl9fWlmKCFSKXtSPVwiUmhpbm9cIn19ZWxzZSBpZih0eXBlb2YgaS5wcm9jZXNzPT1cIm9iamVjdFwiJiYhaS5wcm9jZXNzLmJyb3dzZXImJihNPWkucHJvY2Vzcykpe2lmKHR5cGVvZiBNLnZlcnNpb25zPT1cIm9iamVjdFwiKXtpZih0eXBlb2YgTS52ZXJzaW9ucy5lbGVjdHJvbj09XCJzdHJpbmdcIil7UC5wdXNoKFwiTm9kZSBcIitNLnZlcnNpb25zLm5vZGUpO1I9XCJFbGVjdHJvblwiO0I9TS52ZXJzaW9ucy5lbGVjdHJvbn1lbHNlIGlmKHR5cGVvZiBNLnZlcnNpb25zLm53PT1cInN0cmluZ1wiKXtQLnB1c2goXCJDaHJvbWl1bSBcIitCLFwiTm9kZSBcIitNLnZlcnNpb25zLm5vZGUpO1I9XCJOVy5qc1wiO0I9TS52ZXJzaW9ucy5ud319aWYoIVIpe1I9XCJOb2RlLmpzXCI7RT1NLmFyY2g7VD1NLnBsYXRmb3JtO0I9L1tcXGQuXSsvLmV4ZWMoTS52ZXJzaW9uKTtCPUI/QlswXTpudWxsfX19ZWxzZSBpZihnZXRDbGFzc09mKE09aS5ydW50aW1lKT09cCl7Uj1cIkFkb2JlIEFJUlwiO1Q9TS5mbGFzaC5zeXN0ZW0uQ2FwYWJpbGl0aWVzLm9zfWVsc2UgaWYoZ2V0Q2xhc3NPZihNPWkucGhhbnRvbSk9PXgpe1I9XCJQaGFudG9tSlNcIjtCPShNPU0udmVyc2lvbnx8bnVsbCkmJk0ubWFqb3IrXCIuXCIrTS5taW5vcitcIi5cIitNLnBhdGNofWVsc2UgaWYodHlwZW9mIE8uZG9jdW1lbnRNb2RlPT1cIm51bWJlclwiJiYoTT0vXFxiVHJpZGVudFxcLyhcXGQrKS9pLmV4ZWMoZSkpKXtCPVtCLE8uZG9jdW1lbnRNb2RlXTtpZigoTT0rTVsxXSs0KSE9QlsxXSl7UC5wdXNoKFwiSUUgXCIrQlsxXStcIiBtb2RlXCIpO18mJihfWzFdPVwiXCIpO0JbMV09TX1CPVI9PVwiSUVcIj9TdHJpbmcoQlsxXS50b0ZpeGVkKDEpKTpCWzBdfWVsc2UgaWYodHlwZW9mIE8uZG9jdW1lbnRNb2RlPT1cIm51bWJlclwiJiYvXig/OkNocm9tZXxGaXJlZm94KVxcYi8udGVzdChSKSl7UC5wdXNoKFwibWFza2luZyBhcyBcIitSK1wiIFwiK0IpO1I9XCJJRVwiO0I9XCIxMS4wXCI7Xz1bXCJUcmlkZW50XCJdO1Q9XCJXaW5kb3dzXCJ9VD1UJiZmb3JtYXQoVCl9aWYoQiYmKE09Lyg/OlthYl18ZHB8cHJlfFthYl1cXGQrcHJlKSg/OlxcZCtcXCs/KT8kL2kuZXhlYyhCKXx8Lyg/OmFscGhhfGJldGEpKD86ID9cXGQpPy9pLmV4ZWMoZStcIjtcIisoayYmbi5hcHBNaW5vclZlcnNpb24pKXx8L1xcYk1pbmVmaWVsZFxcYi9pLnRlc3QoZSkmJlwiYVwiKSl7Qz0vYi9pLnRlc3QoTSk/XCJiZXRhXCI6XCJhbHBoYVwiO0I9Qi5yZXBsYWNlKFJlZ0V4cChNK1wiXFxcXCs/JFwiKSxcIlwiKSsoQz09XCJiZXRhXCI/djpoKSsoL1xcZCtcXCs/Ly5leGVjKE0pfHxcIlwiKX1pZihSPT1cIkZlbm5lY1wifHxSPT1cIkZpcmVmb3hcIiYmL1xcYig/OkFuZHJvaWR8RmlyZWZveCBPU3xLYWlPUylcXGIvLnRlc3QoVCkpe1I9XCJGaXJlZm94IE1vYmlsZVwifWVsc2UgaWYoUj09XCJNYXh0aG9uXCImJkIpe0I9Qi5yZXBsYWNlKC9cXC5bXFxkLl0rLyxcIi54XCIpfWVsc2UgaWYoL1xcYlhib3hcXGIvaS50ZXN0KEEpKXtpZihBPT1cIlhib3ggMzYwXCIpe1Q9bnVsbH1pZihBPT1cIlhib3ggMzYwXCImJi9cXGJJRU1vYmlsZVxcYi8udGVzdChlKSl7UC51bnNoaWZ0KFwibW9iaWxlIG1vZGVcIil9fWVsc2UgaWYoKC9eKD86Q2hyb21lfElFfE9wZXJhKSQvLnRlc3QoUil8fFImJiFBJiYhL0Jyb3dzZXJ8TW9iaS8udGVzdChSKSkmJihUPT1cIldpbmRvd3MgQ0VcInx8L01vYmkvaS50ZXN0KGUpKSl7Uis9XCIgTW9iaWxlXCJ9ZWxzZSBpZihSPT1cIklFXCImJmspe3RyeXtpZihpLmV4dGVybmFsPT09bnVsbCl7UC51bnNoaWZ0KFwicGxhdGZvcm0gcHJldmlld1wiKX19Y2F0Y2goZSl7UC51bnNoaWZ0KFwiZW1iZWRkZWRcIil9fWVsc2UgaWYoKC9cXGJCbGFja0JlcnJ5XFxiLy50ZXN0KEEpfHwvXFxiQkIxMFxcYi8udGVzdChlKSkmJihNPShSZWdFeHAoQS5yZXBsYWNlKC8gKy9nLFwiICpcIikrXCIvKFsuXFxcXGRdKylcIixcImlcIikuZXhlYyhlKXx8MClbMV18fEIpKXtNPVtNLC9CQjEwLy50ZXN0KGUpXTtUPShNWzFdPyhBPW51bGwsST1cIkJsYWNrQmVycnlcIik6XCJEZXZpY2UgU29mdHdhcmVcIikrXCIgXCIrTVswXTtCPW51bGx9ZWxzZSBpZih0aGlzIT1mb3JPd24mJkEhPVwiV2lpXCImJihrJiZ5fHwvT3BlcmEvLnRlc3QoUikmJi9cXGIoPzpNU0lFfEZpcmVmb3gpXFxiL2kudGVzdChlKXx8Uj09XCJGaXJlZm94XCImJi9cXGJPUyBYICg/OlxcZCtcXC4pezIsfS8udGVzdChUKXx8Uj09XCJJRVwiJiYoVCYmIS9eV2luLy50ZXN0KFQpJiZCPjUuNXx8L1xcYldpbmRvd3MgWFBcXGIvLnRlc3QoVCkmJkI+OHx8Qj09OCYmIS9cXGJUcmlkZW50XFxiLy50ZXN0KGUpKSkmJiFmLnRlc3QoTT1wYXJzZS5jYWxsKGZvck93bixlLnJlcGxhY2UoZixcIlwiKStcIjtcIikpJiZNLm5hbWUpe009XCJpbmcgYXMgXCIrTS5uYW1lKygoTT1NLnZlcnNpb24pP1wiIFwiK006XCJcIik7aWYoZi50ZXN0KFIpKXtpZigvXFxiSUVcXGIvLnRlc3QoTSkmJlQ9PVwiTWFjIE9TXCIpe1Q9bnVsbH1NPVwiaWRlbnRpZnlcIitNfWVsc2V7TT1cIm1hc2tcIitNO2lmKHcpe1I9Zm9ybWF0KHcucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZyxcIiQxICQyXCIpKX1lbHNle1I9XCJPcGVyYVwifWlmKC9cXGJJRVxcYi8udGVzdChNKSl7VD1udWxsfWlmKCFrKXtCPW51bGx9fV89W1wiUHJlc3RvXCJdO1AucHVzaChNKX1pZihNPSgvXFxiQXBwbGVXZWJLaXRcXC8oW1xcZC5dK1xcKz8pL2kuZXhlYyhlKXx8MClbMV0pe009W3BhcnNlRmxvYXQoTS5yZXBsYWNlKC9cXC4oXFxkKSQvLFwiLjAkMVwiKSksTV07aWYoUj09XCJTYWZhcmlcIiYmTVsxXS5zbGljZSgtMSk9PVwiK1wiKXtSPVwiV2ViS2l0IE5pZ2h0bHlcIjtDPVwiYWxwaGFcIjtCPU1bMV0uc2xpY2UoMCwtMSl9ZWxzZSBpZihCPT1NWzFdfHxCPT0oTVsyXT0oL1xcYlNhZmFyaVxcLyhbXFxkLl0rXFwrPykvaS5leGVjKGUpfHwwKVsxXSkpe0I9bnVsbH1NWzFdPSgvXFxiKD86SGVhZGxlc3MpP0Nocm9tZVxcLyhbXFxkLl0rKS9pLmV4ZWMoZSl8fDApWzFdO2lmKE1bMF09PTUzNy4zNiYmTVsyXT09NTM3LjM2JiZwYXJzZUZsb2F0KE1bMV0pPj0yOCYmXz09XCJXZWJLaXRcIil7Xz1bXCJCbGlua1wiXX1pZigha3x8IXMmJiFNWzFdKXtfJiYoX1sxXT1cImxpa2UgU2FmYXJpXCIpO009KE09TVswXSxNPDQwMD8xOk08NTAwPzI6TTw1MjY/MzpNPDUzMz80Ok08NTM0P1wiNCtcIjpNPDUzNT81Ok08NTM3PzY6TTw1Mzg/NzpNPDYwMT84Ok08NjAyPzk6TTw2MDQ/MTA6TTw2MDY/MTE6TTw2MDg/MTI6XCIxMlwiKX1lbHNle18mJihfWzFdPVwibGlrZSBDaHJvbWVcIik7TT1NWzFdfHwoTT1NWzBdLE08NTMwPzE6TTw1MzI/MjpNPDUzMi4wNT8zOk08NTMzPzQ6TTw1MzQuMDM/NTpNPDUzNC4wNz82Ok08NTM0LjE/NzpNPDUzNC4xMz84Ok08NTM0LjE2Pzk6TTw1MzQuMjQ/MTA6TTw1MzQuMz8xMTpNPDUzNS4wMT8xMjpNPDUzNS4wMj9cIjEzK1wiOk08NTM1LjA3PzE1Ok08NTM1LjExPzE2Ok08NTM1LjE5PzE3Ok08NTM2LjA1PzE4Ok08NTM2LjE/MTk6TTw1MzcuMDE/MjA6TTw1MzcuMTE/XCIyMStcIjpNPDUzNy4xMz8yMzpNPDUzNy4xOD8yNDpNPDUzNy4yND8yNTpNPDUzNy4zNj8yNjpfIT1cIkJsaW5rXCI/XCIyN1wiOlwiMjhcIil9XyYmKF9bMV0rPVwiIFwiKyhNKz10eXBlb2YgTT09XCJudW1iZXJcIj9cIi54XCI6L1suK10vLnRlc3QoTSk/XCJcIjpcIitcIikpO2lmKFI9PVwiU2FmYXJpXCImJighQnx8cGFyc2VJbnQoQik+NDUpKXtCPU19ZWxzZSBpZihSPT1cIkNocm9tZVwiJiYvXFxiSGVhZGxlc3NDaHJvbWUvaS50ZXN0KGUpKXtQLnVuc2hpZnQoXCJoZWFkbGVzc1wiKX19aWYoUj09XCJPcGVyYVwiJiYoTT0vXFxiemJvdnx6dmF2JC8uZXhlYyhUKSkpe1IrPVwiIFwiO1AudW5zaGlmdChcImRlc2t0b3AgbW9kZVwiKTtpZihNPT1cInp2YXZcIil7Uis9XCJNaW5pXCI7Qj1udWxsfWVsc2V7Uis9XCJNb2JpbGVcIn1UPVQucmVwbGFjZShSZWdFeHAoXCIgKlwiK00rXCIkXCIpLFwiXCIpfWVsc2UgaWYoUj09XCJTYWZhcmlcIiYmL1xcYkNocm9tZVxcYi8uZXhlYyhfJiZfWzFdKSl7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpO1I9XCJDaHJvbWUgTW9iaWxlXCI7Qj1udWxsO2lmKC9cXGJPUyBYXFxiLy50ZXN0KFQpKXtJPVwiQXBwbGVcIjtUPVwiaU9TIDQuMytcIn1lbHNle1Q9bnVsbH19ZWxzZSBpZigvXFxiU1JXYXJlIElyb25cXGIvLnRlc3QoUikmJiFCKXtCPWdldFZlcnNpb24oXCJDaHJvbWVcIil9aWYoQiYmQi5pbmRleE9mKE09L1tcXGQuXSskLy5leGVjKFQpKT09MCYmZS5pbmRleE9mKFwiL1wiK00rXCItXCIpPi0xKXtUPXRyaW0oVC5yZXBsYWNlKE0sXCJcIikpfWlmKFQmJlQuaW5kZXhPZihSKSE9LTEmJiFSZWdFeHAoUitcIiBPU1wiKS50ZXN0KFQpKXtUPVQucmVwbGFjZShSZWdFeHAoXCIgKlwiK3F1YWxpZnkoUikrXCIgKlwiKSxcIlwiKX1pZihfJiYhL1xcYig/OkF2YW50fE5vb2spXFxiLy50ZXN0KFIpJiYoL0Jyb3dzZXJ8THVuYXNjYXBlfE1heHRob24vLnRlc3QoUil8fFIhPVwiU2FmYXJpXCImJi9eaU9TLy50ZXN0KFQpJiYvXFxiU2FmYXJpXFxiLy50ZXN0KF9bMV0pfHwvXig/OkFkb2JlfEFyb3JhfEJyZWFjaHxNaWRvcml8T3BlcmF8UGhhbnRvbXxSZWtvbnF8Um9ja3xTYW1zdW5nIEludGVybmV0fFNsZWlwbmlyfFNSV2FyZSBJcm9ufFZpdmFsZGl8V2ViKS8udGVzdChSKSYmX1sxXSkpeyhNPV9bXy5sZW5ndGgtMV0pJiZQLnB1c2goTSl9aWYoUC5sZW5ndGgpe1A9W1wiKFwiK1Auam9pbihcIjsgXCIpK1wiKVwiXX1pZihJJiZBJiZBLmluZGV4T2YoSSk8MCl7UC5wdXNoKFwib24gXCIrSSl9aWYoQSl7UC5wdXNoKCgvXm9uIC8udGVzdChQW1AubGVuZ3RoLTFdKT9cIlwiOlwib24gXCIpK0EpfWlmKFQpe009LyAoW1xcZC4rXSspJC8uZXhlYyhUKTtXPU0mJlQuY2hhckF0KFQubGVuZ3RoLU1bMF0ubGVuZ3RoLTEpPT1cIi9cIjtUPXthcmNoaXRlY3R1cmU6MzIsZmFtaWx5Ok0mJiFXP1QucmVwbGFjZShNWzBdLFwiXCIpOlQsdmVyc2lvbjpNP01bMV06bnVsbCx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmVyc2lvbjtyZXR1cm4gdGhpcy5mYW1pbHkrKGUmJiFXP1wiIFwiK2U6XCJcIikrKHRoaXMuYXJjaGl0ZWN0dXJlPT02ND9cIiA2NC1iaXRcIjpcIlwiKX19fWlmKChNPS9cXGIoPzpBTUR8SUF8V2lufFdPV3x4ODZffHgpNjRcXGIvaS5leGVjKEUpKSYmIS9cXGJpNjg2XFxiL2kudGVzdChFKSl7aWYoVCl7VC5hcmNoaXRlY3R1cmU9NjQ7VC5mYW1pbHk9VC5mYW1pbHkucmVwbGFjZShSZWdFeHAoXCIgKlwiK00pLFwiXCIpfWlmKFImJigvXFxiV09XNjRcXGIvaS50ZXN0KGUpfHxrJiYvXFx3KD86ODZ8MzIpJC8udGVzdChuLmNwdUNsYXNzfHxuLnBsYXRmb3JtKSYmIS9cXGJXaW42NDsgeDY0XFxiL2kudGVzdChlKSkpe1AudW5zaGlmdChcIjMyLWJpdFwiKX19ZWxzZSBpZihUJiYvXk9TIFgvLnRlc3QoVC5mYW1pbHkpJiZSPT1cIkNocm9tZVwiJiZwYXJzZUZsb2F0KEIpPj0zOSl7VC5hcmNoaXRlY3R1cmU9NjR9ZXx8KGU9bnVsbCk7dmFyIEY9e307Ri5kZXNjcmlwdGlvbj1lO0YubGF5b3V0PV8mJl9bMF07Ri5tYW51ZmFjdHVyZXI9STtGLm5hbWU9UjtGLnByZXJlbGVhc2U9QztGLnByb2R1Y3Q9QTtGLnVhPWU7Ri52ZXJzaW9uPVImJkI7Ri5vcz1UfHx7YXJjaGl0ZWN0dXJlOm51bGwsZmFtaWx5Om51bGwsdmVyc2lvbjpudWxsLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJudWxsXCJ9fTtGLnBhcnNlPXBhcnNlO0YudG9TdHJpbmc9dG9TdHJpbmdQbGF0Zm9ybTtpZihGLnZlcnNpb24pe1AudW5zaGlmdChCKX1pZihGLm5hbWUpe1AudW5zaGlmdChSKX1pZihUJiZSJiYhKFQ9PVN0cmluZyhUKS5zcGxpdChcIiBcIilbMF0mJihUPT1SLnNwbGl0KFwiIFwiKVswXXx8QSkpKXtQLnB1c2goQT9cIihcIitUK1wiKVwiOlwib24gXCIrVCl9aWYoUC5sZW5ndGgpe0YuZGVzY3JpcHRpb249UC5qb2luKFwiIFwiKX1yZXR1cm4gRn12YXIgZD1wYXJzZSgpO2lmKG4mJm8pe2Zvck93bihkLChmdW5jdGlvbihlLGkpe25baV09ZX0pKX1lbHNle3IucGxhdGZvcm09ZH19KS5jYWxsKHRoaXMpfX07dmFyIGk9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgcj1pW3RdO2lmKHIhPT11bmRlZmluZWQpe3JldHVybiByLmV4cG9ydHN9dmFyIGE9aVt0XT17aWQ6dCxsb2FkZWQ6ZmFsc2UsZXhwb3J0czp7fX07dmFyIG49dHJ1ZTt0cnl7ZVt0XS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtuPWZhbHNlfWZpbmFsbHl7aWYobilkZWxldGUgaVt0XX1hLmxvYWRlZD10cnVlO3JldHVybiBhLmV4cG9ydHN9KCgpPT57X19uY2N3cGNrX3JlcXVpcmVfXy5ubWQ9ZT0+e2UucGF0aHM9W107aWYoIWUuY2hpbGRyZW4pZS5jaGlsZHJlbj1bXTtyZXR1cm4gZX19KSgpO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDU0MSk7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/platform/platform.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/process/browser.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/process/browser.js ***!
|
||
\************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a<t){if(u){u[a].run()}}a=-1;t=i.length}u=null;o=false;runClearTimeout(e)}t.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}i.push(new Item(e,t));if(i.length===1&&!o){runTimeout(drainQueue)}};function Item(e,t){this.fun=e;this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};t.title=\"browser\";t.browser=true;t.env={};t.argv=[];t.version=\"\";t.versions={};function noop(){}t.on=noop;t.addListener=noop;t.once=noop;t.off=noop;t.removeListener=noop;t.removeAllListeners=noop;t.emit=noop;t.prependListener=noop;t.prependOnceListener=noop;t.listeners=function(e){return[]};t.binding=function(e){throw new Error(\"process.binding is not supported\")};t.cwd=function(){return\"/\"};t.chdir=function(e){throw new Error(\"process.chdir is not supported\")};t.umask=function(){return 0}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(229);module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsWUFBWSxPQUFPLGdCQUFnQixtQkFBbUIsTUFBTSxNQUFNLDRCQUE0QixtREFBbUQsK0JBQStCLHFEQUFxRCxZQUFZLElBQUksbUNBQW1DLGFBQWEsS0FBSyxvQkFBb0IsU0FBUyxtQkFBbUIsSUFBSSxxQ0FBcUMsZUFBZSxLQUFLLHVCQUF1QixTQUFTLHVCQUF1QixJQUFJLHVCQUF1QixtQkFBbUIsdUJBQXVCLDJDQUEyQyxhQUFhLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxJQUFJLHdCQUF3QixTQUFTLDBCQUEwQiw0QkFBNEIscUJBQXFCLHVCQUF1QixnREFBZ0QsZUFBZSx1QkFBdUIsSUFBSSxZQUFZLFNBQVMsSUFBSSxzQkFBc0IsU0FBUyx3QkFBd0IsU0FBUyxZQUFZLE1BQU0sU0FBUywyQkFBMkIsV0FBVyxPQUFPLFFBQVEsYUFBYSxjQUFjLEtBQUssS0FBSyxhQUFhLGNBQWMsc0JBQXNCLE1BQU0sT0FBTyxrQ0FBa0MsT0FBTyxlQUFlLFNBQVMsSUFBSSxLQUFLLGFBQWEsTUFBTSxZQUFZLEtBQUssV0FBVyxPQUFPLFFBQVEsbUJBQW1CLHVCQUF1QixvQ0FBb0MsdUJBQXVCLFlBQVksbUJBQW1CLEtBQUsscUJBQXFCLHNCQUFzQixxQkFBcUIseUJBQXlCLG1CQUFtQixXQUFXLGFBQWEsOEJBQThCLGlDQUFpQyxrQkFBa0IsZUFBZSxTQUFTLFVBQVUsYUFBYSxjQUFjLGlCQUFpQixVQUFVLG1CQUFtQixZQUFZLFdBQVcsc0JBQXNCLDBCQUEwQixZQUFZLHVCQUF1QiwyQkFBMkIsd0JBQXdCLFVBQVUsc0JBQXNCLHFEQUFxRCxpQkFBaUIsV0FBVyxvQkFBb0IsbURBQW1ELG1CQUFtQixZQUFZLFNBQVMsZ0NBQWdDLFdBQVcsa0JBQWtCLGlCQUFpQixZQUFZLFlBQVksV0FBVyxJQUFJLHNDQUFzQyxRQUFRLFFBQVEsaUJBQWlCLGlCQUFpQixtRUFBbUUsU0FBUyxLQUFLLCtCQUErQixpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9wcm9jZXNzL2Jyb3dzZXIuanM/MWIxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXt2YXIgZT17MjI5OmZ1bmN0aW9uKGUpe3ZhciB0PWUuZXhwb3J0cz17fTt2YXIgcjt2YXIgbjtmdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0KCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfShmdW5jdGlvbigpe3RyeXtpZih0eXBlb2Ygc2V0VGltZW91dD09PVwiZnVuY3Rpb25cIil7cj1zZXRUaW1lb3V0fWVsc2V7cj1kZWZhdWx0U2V0VGltb3V0fX1jYXRjaChlKXtyPWRlZmF1bHRTZXRUaW1vdXR9dHJ5e2lmKHR5cGVvZiBjbGVhclRpbWVvdXQ9PT1cImZ1bmN0aW9uXCIpe249Y2xlYXJUaW1lb3V0fWVsc2V7bj1kZWZhdWx0Q2xlYXJUaW1lb3V0fX1jYXRjaChlKXtuPWRlZmF1bHRDbGVhclRpbWVvdXR9fSkoKTtmdW5jdGlvbiBydW5UaW1lb3V0KGUpe2lmKHI9PT1zZXRUaW1lb3V0KXtyZXR1cm4gc2V0VGltZW91dChlLDApfWlmKChyPT09ZGVmYXVsdFNldFRpbW91dHx8IXIpJiZzZXRUaW1lb3V0KXtyPXNldFRpbWVvdXQ7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX10cnl7cmV0dXJuIHIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHIuY2FsbCh0aGlzLGUsMCl9fX1mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQoZSl7aWYobj09PWNsZWFyVGltZW91dCl7cmV0dXJuIGNsZWFyVGltZW91dChlKX1pZigobj09PWRlZmF1bHRDbGVhclRpbWVvdXR8fCFuKSYmY2xlYXJUaW1lb3V0KXtuPWNsZWFyVGltZW91dDtyZXR1cm4gY2xlYXJUaW1lb3V0KGUpfXRyeXtyZXR1cm4gbihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fXZhciBpPVtdO3ZhciBvPWZhbHNlO3ZhciB1O3ZhciBhPS0xO2Z1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpe2lmKCFvfHwhdSl7cmV0dXJufW89ZmFsc2U7aWYodS5sZW5ndGgpe2k9dS5jb25jYXQoaSl9ZWxzZXthPS0xfWlmKGkubGVuZ3RoKXtkcmFpblF1ZXVlKCl9fWZ1bmN0aW9uIGRyYWluUXVldWUoKXtpZihvKXtyZXR1cm59dmFyIGU9cnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO289dHJ1ZTt2YXIgdD1pLmxlbmd0aDt3aGlsZSh0KXt1PWk7aT1bXTt3aGlsZSgrK2E8dCl7aWYodSl7dVthXS5ydW4oKX19YT0tMTt0PWkubGVuZ3RofXU9bnVsbDtvPWZhbHNlO3J1bkNsZWFyVGltZW91dChlKX10Lm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dFtyLTFdPWFyZ3VtZW50c1tyXX19aS5wdXNoKG5ldyBJdGVtKGUsdCkpO2lmKGkubGVuZ3RoPT09MSYmIW8pe3J1blRpbWVvdXQoZHJhaW5RdWV1ZSl9fTtmdW5jdGlvbiBJdGVtKGUsdCl7dGhpcy5mdW49ZTt0aGlzLmFycmF5PXR9SXRlbS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX07dC50aXRsZT1cImJyb3dzZXJcIjt0LmJyb3dzZXI9dHJ1ZTt0LmVudj17fTt0LmFyZ3Y9W107dC52ZXJzaW9uPVwiXCI7dC52ZXJzaW9ucz17fTtmdW5jdGlvbiBub29wKCl7fXQub249bm9vcDt0LmFkZExpc3RlbmVyPW5vb3A7dC5vbmNlPW5vb3A7dC5vZmY9bm9vcDt0LnJlbW92ZUxpc3RlbmVyPW5vb3A7dC5yZW1vdmVBbGxMaXN0ZW5lcnM9bm9vcDt0LmVtaXQ9bm9vcDt0LnByZXBlbmRMaXN0ZW5lcj1ub29wO3QucHJlcGVuZE9uY2VMaXN0ZW5lcj1ub29wO3QubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfTt0LmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9O3QuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9O3QuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfTt0LnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fX07dmFyIHQ9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhyKXt2YXIgbj10W3JdO2lmKG4hPT11bmRlZmluZWQpe3JldHVybiBuLmV4cG9ydHN9dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07dmFyIG89dHJ1ZTt0cnl7ZVtyXShpLGkuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtvPWZhbHNlfWZpbmFsbHl7aWYobylkZWxldGUgdFtyXX1yZXR1cm4gaS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgcj1fX25jY3dwY2tfcmVxdWlyZV9fKDIyOSk7bW9kdWxlLmV4cG9ydHM9cn0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/process/browser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js ***!
|
||
\******************************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQztBQUNoQztBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLGVBQWU7QUFDZixrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLFlBQVk7QUFDWixZQUFZO0FBQ1osY0FBYztBQUNkLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkIsd0JBQXdCO0FBQ3hCLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsaUJBQWlCO0FBQ2pCLG9CQUFvQjtBQUNwQixrQkFBa0I7QUFDbEIsY0FBYztBQUNkLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLG9CQUFvQjtBQUNwQixrQkFBa0I7QUFDbEIsc0JBQXNCO0FBQ3RCLDBCQUEwQjtBQUMxQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzP2VjODUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2VydmVyX2NvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VMaXN0KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLlN1c3BlbnNlTGlzdCA9IFN1c3BlbnNlTGlzdDtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGlzU3VzcGVuc2VMaXN0O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/react-is/index.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-is/index.js ***!
|
||
\***********************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxtSkFBeUQ7QUFDM0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pcy9pbmRleC5qcz80MjNkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/react-is/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js ***!
|
||
\*************************************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});var n=\"<unknown>\";function parse(e){var r=e.split(\"\\n\");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;var l=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var u=r[2]&&r[2].indexOf(\"native\")===0;var t=r[2]&&r[2].indexOf(\"eval\")===0;var i=l.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!u?r[2]:null,methodName:r[1]||n,arguments:u?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var u=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseWinjs(e){var r=u.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;var i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(\" > eval\")>-1;var l=i.exec(r[3]);if(a&&l!=null){r[3]=l[1];r[4]=l[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var s=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function parseJSC(e){var r=s.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var o=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseNode(e){var r=o.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyL3N0YWNrLXRyYWNlLXBhcnNlci5janMuanMiLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sYUFBYSxtRUFBbUUsU0FBUyxLQUFLLFNBQVMsTUFBTSxRQUFRLHNDQUFzQyxXQUFXLEVBQUUsa0JBQWtCLGtCQUFrQixvQkFBb0IsK0JBQStCLDhFQUE4RSxNQUFNLFVBQVUsU0FBUyxNQUFNLGtKQUFrSixzQ0FBc0Msd0JBQXdCLGdCQUFnQixPQUFPLFlBQVksdUNBQXVDLHFDQUFxQyxtQkFBbUIsZUFBZSxVQUFVLFVBQVUsVUFBVSxPQUFPLDhHQUE4RyxzSEFBc0gsdUJBQXVCLGdCQUFnQixPQUFPLFlBQVksT0FBTyxtRkFBbUYsd0lBQXdJLHNEQUFzRCx1QkFBdUIsZ0JBQWdCLE9BQU8sWUFBWSx1Q0FBdUMsbUJBQW1CLGVBQWUsVUFBVSxVQUFVLFVBQVUsT0FBTyxrSEFBa0gscUVBQXFFLHFCQUFxQixnQkFBZ0IsT0FBTyxZQUFZLE9BQU8sbUZBQW1GLHNHQUFzRyxzQkFBc0IsZ0JBQWdCLE9BQU8sWUFBWSxPQUFPLG1GQUFtRixjQUFjLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qcz9mZTBlIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgZT17fTsoKCk9Pnt2YXIgcj1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dmFyIG49XCI8dW5rbm93bj5cIjtmdW5jdGlvbiBwYXJzZShlKXt2YXIgcj1lLnNwbGl0KFwiXFxuXCIpO3JldHVybiByLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXt2YXIgbj1wYXJzZUNocm9tZShyKXx8cGFyc2VXaW5qcyhyKXx8cGFyc2VHZWNrbyhyKXx8cGFyc2VOb2RlKHIpfHxwYXJzZUpTQyhyKTtpZihuKXtlLnB1c2gobil9cmV0dXJuIGV9KSxbXSl9dmFyIGE9L15cXHMqYXQgKC4qPykgP1xcKCgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258bmF0aXZlfGV2YWx8d2VicGFja3w8YW5vbnltb3VzPnxcXC98W2Etel06XFxcXHxcXFxcXFxcXCkuKj8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFwpP1xccyokL2k7dmFyIGw9L1xcKChcXFMqKSg/OjooXFxkKykpKD86OihcXGQrKSlcXCkvO2Z1bmN0aW9uIHBhcnNlQ2hyb21lKGUpe3ZhciByPWEuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9dmFyIHU9clsyXSYmclsyXS5pbmRleE9mKFwibmF0aXZlXCIpPT09MDt2YXIgdD1yWzJdJiZyWzJdLmluZGV4T2YoXCJldmFsXCIpPT09MDt2YXIgaT1sLmV4ZWMoclsyXSk7aWYodCYmaSE9bnVsbCl7clsyXT1pWzFdO3JbM109aVsyXTtyWzRdPWlbM119cmV0dXJue2ZpbGU6IXU/clsyXTpudWxsLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6dT9bclsyXV06W10sbGluZU51bWJlcjpyWzNdPytyWzNdOm51bGwsY29sdW1uOnJbNF0/K3JbNF06bnVsbH19dmFyIHU9L15cXHMqYXQgKD86KCg/OlxcW29iamVjdCBvYmplY3RcXF0pPy4rKSApP1xcKD8oKD86ZmlsZXxtcy1hcHB4fGh0dHBzP3x3ZWJwYWNrfGJsb2IpOi4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2k7ZnVuY3Rpb24gcGFyc2VXaW5qcyhlKXt2YXIgcj11LmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbMl0sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzNdLGNvbHVtbjpyWzRdPytyWzRdOm51bGx9fXZhciB0PS9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3xyZXNvdXJjZXxcXFtuYXRpdmUpLio/fFteQF0qYnVuZGxlKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2k7dmFyIGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7ZnVuY3Rpb24gcGFyc2VHZWNrbyhlKXt2YXIgcj10LmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciBhPXJbM10mJnJbM10uaW5kZXhPZihcIiA+IGV2YWxcIik+LTE7dmFyIGw9aS5leGVjKHJbM10pO2lmKGEmJmwhPW51bGwpe3JbM109bFsxXTtyWzRdPWxbMl07cls1XT1udWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpyWzJdP3JbMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6cls0XT8rcls0XTpudWxsLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBzPS9eXFxzKig/OihbXkBdKikoPzpcXCgoLio/KVxcKSk/QCk/KFxcUy4qPyk6KFxcZCspKD86OihcXGQrKSk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZUpTQyhlKXt2YXIgcj1zLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzRdLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBvPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZU5vZGUoZSl7dmFyIHI9by5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH1yZXR1cm57ZmlsZTpyWzJdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorclszXSxjb2x1bW46cls0XT8rcls0XTpudWxsfX1yLnBhcnNlPXBhcnNlfSkoKTttb2R1bGUuZXhwb3J0cz1lfSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/compiled/web-vitals/web-vitals.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/web-vitals/web-vitals.js ***!
|
||
\******************************************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var n={};!function(){n.d=function(y,T){for(var C in T){if(n.o(T,C)&&!n.o(y,C)){Object.defineProperty(y,C,{enumerable:true,get:T[C]})}}}}();!function(){n.o=function(n,y){return Object.prototype.hasOwnProperty.call(n,y)}}();!function(){n.r=function(n){if(typeof Symbol!==\"undefined\"&&Symbol.toStringTag){Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"})}Object.defineProperty(n,\"__esModule\",{value:true})}}();if(typeof n!==\"undefined\")n.ab=__dirname+\"/\";var y={};n.r(y);n.d(y,{getCLS:function(){return E},getFCP:function(){return g},getFID:function(){return F},getINP:function(){return O},getLCP:function(){return _},getTTFB:function(){return G},onCLS:function(){return E},onFCP:function(){return g},onFID:function(){return F},onINP:function(){return O},onLCP:function(){return _},onTTFB:function(){return G}});var T,C,w,P,I,k=-1,o=function(n){addEventListener(\"pageshow\",(function(y){y.persisted&&(k=y.timeStamp,n(y))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var n=c();return n&&n.activationStart||0},f=function(n,y){var T=c(),C=\"navigate\";return k>=0?C=\"back-forward-cache\":T&&(C=document.prerendering||u()>0?\"prerender\":T.type.replace(/_/g,\"-\")),{name:n,value:void 0===y?-1:y,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:C}},s=function(n,y,T){try{if(PerformanceObserver.supportedEntryTypes.includes(n)){var C=new PerformanceObserver((function(n){y(n.getEntries())}));return C.observe(Object.assign({type:n,buffered:!0},T||{})),C}}catch(n){}},d=function(n,y){var T=function t(T){\"pagehide\"!==T.type&&\"hidden\"!==document.visibilityState||(n(T),y&&(removeEventListener(\"visibilitychange\",t,!0),removeEventListener(\"pagehide\",t,!0)))};addEventListener(\"visibilitychange\",T,!0),addEventListener(\"pagehide\",T,!0)},l=function(n,y,T,C){var w,P;return function(I){y.value>=0&&(I||C)&&((P=y.value-(w||0))||void 0===w)&&(w=y.value,y.delta=P,y.rating=function(n,y){return n>y[1]?\"poor\":n>y[0]?\"needs-improvement\":\"good\"}(y.value,T),n(y))}},N=-1,v=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},m=function(){d((function(n){var y=n.timeStamp;N=y}),!0)},h=function(){return N<0&&(N=v(),m(),o((function(){setTimeout((function(){N=v(),m()}),0)}))),{get firstHiddenTime(){return N}}},g=function(n,y){y=y||{};var T,C=[1800,3e3],w=h(),P=f(\"FCP\"),c=function(n){n.forEach((function(n){\"first-contentful-paint\"===n.name&&(k&&k.disconnect(),n.startTime<w.firstHiddenTime&&(P.value=n.startTime-u(),P.entries.push(n),T(!0)))}))},I=window.performance&&window.performance.getEntriesByName&&window.performance.getEntriesByName(\"first-contentful-paint\")[0],k=I?null:s(\"paint\",c);(I||k)&&(T=l(n,P,C,y.reportAllChanges),I&&c([I]),o((function(w){P=f(\"FCP\"),T=l(n,P,C,y.reportAllChanges),requestAnimationFrame((function(){requestAnimationFrame((function(){P.value=performance.now()-w.timeStamp,T(!0)}))}))})))},j=!1,q=-1,E=function(n,y){y=y||{};var T=[.1,.25];j||(g((function(n){q=n.value})),j=!0);var C,i=function(y){q>-1&&n(y)},w=f(\"CLS\",0),P=0,I=[],p=function(n){n.forEach((function(n){if(!n.hadRecentInput){var y=I[0],T=I[I.length-1];P&&n.startTime-T.startTime<1e3&&n.startTime-y.startTime<5e3?(P+=n.value,I.push(n)):(P=n.value,I=[n]),P>w.value&&(w.value=P,w.entries=I,C())}}))},k=s(\"layout-shift\",p);k&&(C=l(i,w,T,y.reportAllChanges),d((function(){p(k.takeRecords()),C(!0)})),o((function(){P=0,q=-1,w=f(\"CLS\",0),C=l(i,w,T,y.reportAllChanges)})))},x={passive:!0,capture:!0},z=new Date,L=function(n,y){T||(T=y,C=n,w=new Date,A(removeEventListener),S())},S=function(){if(C>=0&&C<w-z){var n={entryType:\"first-input\",name:T.type,target:T.target,cancelable:T.cancelable,startTime:T.timeStamp,processingStart:T.timeStamp+C};P.forEach((function(y){y(n)})),P=[]}},b=function(n){if(n.cancelable){var y=(n.timeStamp>1e12?new Date:performance.now())-n.timeStamp;\"pointerdown\"==n.type?function(n,y){var t=function(){L(n,y),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",t,x),removeEventListener(\"pointercancel\",r,x)};addEventListener(\"pointerup\",t,x),addEventListener(\"pointercancel\",r,x)}(y,n):L(y,n)}},A=function(n){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(y){return n(y,b,x)}))},F=function(n,y){y=y||{};var w,I=[100,300],k=h(),N=f(\"FID\"),v=function(n){n.startTime<k.firstHiddenTime&&(N.value=n.processingStart-n.startTime,N.entries.push(n),w(!0))},m=function(n){n.forEach(v)},j=s(\"first-input\",m);w=l(n,N,I,y.reportAllChanges),j&&d((function(){m(j.takeRecords()),j.disconnect()}),!0),j&&o((function(){var k;N=f(\"FID\"),w=l(n,N,I,y.reportAllChanges),P=[],C=-1,T=null,A(addEventListener),k=v,P.push(k),S()}))},J=0,K=1/0,Q=0,M=function(n){n.forEach((function(n){n.interactionId&&(K=Math.min(K,n.interactionId),Q=Math.max(Q,n.interactionId),J=Q?(Q-K)/7+1:0)}))},B=function(){return I?J:performance.interactionCount||0},D=function(){\"interactionCount\"in performance||I||(I=s(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))},U=0,R=function(){return B()-U},V=[],W={},H=function(n){var y=V[V.length-1],T=W[n.interactionId];if(T||V.length<10||n.duration>y.latency){if(T)T.entries.push(n),T.latency=Math.max(T.latency,n.duration);else{var C={id:n.interactionId,latency:n.duration,entries:[n]};W[C.id]=C,V.push(C)}V.sort((function(n,y){return y.latency-n.latency})),V.splice(10).forEach((function(n){delete W[n.id]}))}},O=function(n,y){y=y||{};var T=[200,500];D();var C,w=f(\"INP\"),a=function(n){n.forEach((function(n){(n.interactionId&&H(n),\"first-input\"===n.entryType)&&(!V.some((function(y){return y.entries.some((function(y){return n.duration===y.duration&&n.startTime===y.startTime}))}))&&H(n))}));var y,T=(y=Math.min(V.length-1,Math.floor(R()/50)),V[y]);T&&T.latency!==w.value&&(w.value=T.latency,w.entries=T.entries,C())},P=s(\"event\",a,{durationThreshold:y.durationThreshold||40});C=l(n,w,T,y.reportAllChanges),P&&(P.observe({type:\"first-input\",buffered:!0}),d((function(){a(P.takeRecords()),w.value<0&&R()>0&&(w.value=0,w.entries=[]),C(!0)})),o((function(){V=[],U=B(),w=f(\"INP\"),C=l(n,w,T,y.reportAllChanges)})))},X={},_=function(n,y){y=y||{};var T,C=[2500,4e3],w=h(),P=f(\"LCP\"),c=function(n){var y=n[n.length-1];if(y){var C=y.startTime-u();C<w.firstHiddenTime&&(P.value=C,P.entries=[y],T())}},I=s(\"largest-contentful-paint\",c);if(I){T=l(n,P,C,y.reportAllChanges);var v=function(){X[P.id]||(c(I.takeRecords()),I.disconnect(),X[P.id]=!0,T(!0))};[\"keydown\",\"click\"].forEach((function(n){addEventListener(n,v,{once:!0,capture:!0})})),d(v,!0),o((function(w){P=f(\"LCP\"),T=l(n,P,C,y.reportAllChanges),requestAnimationFrame((function(){requestAnimationFrame((function(){P.value=performance.now()-w.timeStamp,X[P.id]=!0,T(!0)}))}))}))}},Y=function e(n){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e(n)}),!0):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},G=function(n,y){y=y||{};var T=[800,1800],C=f(\"TTFB\"),w=l(n,C,T,y.reportAllChanges);Y((function(){var P=c();if(P){if(C.value=Math.max(P.responseStart-u(),0),C.value<0||C.value>performance.now())return;C.entries=[P],w(!0),o((function(){C=f(\"TTFB\",0),(w=l(n,C,T,y.reportAllChanges))(!0)}))}}))};module.exports=y})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3dlYi12aXRhbHMvd2ViLXZpdGFscy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsWUFBWSxhQUFhLFNBQVMsWUFBWSxrQkFBa0IsZ0JBQWdCLHdCQUF3QiwyQkFBMkIseUJBQXlCLEtBQUssR0FBRyxZQUFZLGtCQUFrQixrREFBa0QsR0FBRyxZQUFZLGdCQUFnQixvREFBb0QsNENBQTRDLGVBQWUsRUFBRSxzQ0FBc0MsV0FBVyxHQUFHLEdBQUcsK0JBQStCLFNBQVMsS0FBSyxTQUFTLE9BQU8sT0FBTyxrQkFBa0IsU0FBUyxtQkFBbUIsU0FBUyxtQkFBbUIsU0FBUyxtQkFBbUIsU0FBUyxtQkFBbUIsU0FBUyxvQkFBb0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxtQkFBbUIsVUFBVSxFQUFFLGlDQUFpQyx5Q0FBeUMsa0NBQWtDLE1BQU0sY0FBYyx1R0FBdUcsY0FBYyxVQUFVLCtCQUErQixpQkFBaUIsdUJBQXVCLDZHQUE2RyxxS0FBcUssbUJBQW1CLElBQUksd0RBQXdELDJDQUEyQyxrQkFBa0IsR0FBRyxnQ0FBZ0MsbUJBQW1CLE1BQU0sTUFBTSxXQUFXLGlCQUFpQixvQkFBb0IseUpBQXlKLDRFQUE0RSxxQkFBcUIsUUFBUSxtQkFBbUIsa0dBQWtHLHVEQUF1RCxtQkFBbUIsbUJBQW1CLHVFQUF1RSxjQUFjLGVBQWUsa0JBQWtCLElBQUksTUFBTSxjQUFjLHFDQUFxQyx1QkFBdUIsVUFBVSxLQUFLLEtBQUssc0JBQXNCLFdBQVcsaUJBQWlCLFFBQVEsa0RBQWtELHVCQUF1Qix3SUFBd0ksR0FBRyxtSkFBbUosZ0VBQWdFLDJFQUEyRSxrQ0FBa0MsNENBQTRDLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixRQUFRLGVBQWUsbUJBQW1CLFVBQVUsU0FBUyxvQkFBb0IsV0FBVyxxQ0FBcUMsdUJBQXVCLHNCQUFzQiwyQkFBMkIsNklBQTZJLEdBQUcsdUJBQXVCLGdEQUFnRCx5QkFBeUIsaUJBQWlCLG9EQUFvRCxJQUFJLElBQUksc0JBQXNCLDRCQUE0QixtREFBbUQsY0FBYyxnQkFBZ0IsT0FBTyxpSUFBaUksdUJBQXVCLEtBQUssU0FBUyxlQUFlLGlCQUFpQixnRUFBZ0Usb0NBQW9DLGlCQUFpQixXQUFXLGNBQWMsSUFBSSxjQUFjLCtFQUErRSx3RUFBd0UsY0FBYyxlQUFlLHdFQUF3RSxnQkFBZ0IsR0FBRyxpQkFBaUIsUUFBUSxpREFBaUQsK0ZBQStGLGVBQWUsYUFBYSxzQkFBc0IsK0NBQStDLGtDQUFrQyx1QkFBdUIsTUFBTSxnR0FBZ0csR0FBRyw2QkFBNkIsdUJBQXVCLCtGQUErRixHQUFHLGNBQWMsMkNBQTJDLGNBQWMscURBQXFELDZDQUE2QyxHQUFHLGtCQUFrQixhQUFhLFVBQVUsZUFBZSx5Q0FBeUMseUNBQXlDLGdFQUFnRSxLQUFLLE9BQU8sbURBQW1ELG9CQUFvQixzQkFBc0IsMkJBQTJCLHFDQUFxQyxlQUFlLElBQUksaUJBQWlCLFFBQVEsZ0JBQWdCLElBQUksK0JBQStCLHVCQUF1QiwyRUFBMkUsbUNBQW1DLDBEQUEwRCxHQUFHLFVBQVUsR0FBRyx5REFBeUQsb0VBQW9FLGdCQUFnQiwwQ0FBMEMsRUFBRSw2Q0FBNkMsK0JBQStCLGdCQUFnQixvRUFBb0UsaUJBQWlCLG9EQUFvRCxJQUFJLEtBQUssaUJBQWlCLFFBQVEsa0RBQWtELG9CQUFvQixNQUFNLHNCQUFzQixvREFBb0QsbUNBQW1DLE1BQU0sOEJBQThCLGlCQUFpQiwrREFBK0QseUNBQXlDLHNCQUFzQixtQkFBbUIsRUFBRSwwQkFBMEIsMkVBQTJFLGtDQUFrQyx1REFBdUQsR0FBRyxHQUFHLElBQUksaUJBQWlCLHdFQUF3RSxZQUFZLDJFQUEyRSxZQUFZLHNCQUFzQixpQkFBaUIsUUFBUSwyREFBMkQsY0FBYyxVQUFVLE1BQU0sdUZBQXVGLGtDQUFrQyxrREFBa0QsSUFBSSxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3dlYi12aXRhbHMvd2ViLXZpdGFscy5qcz8wOWY0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9OyFmdW5jdGlvbigpe24uZD1mdW5jdGlvbih5LFQpe2Zvcih2YXIgQyBpbiBUKXtpZihuLm8oVCxDKSYmIW4ubyh5LEMpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSxDLHtlbnVtZXJhYmxlOnRydWUsZ2V0OlRbQ119KX19fX0oKTshZnVuY3Rpb24oKXtuLm89ZnVuY3Rpb24obix5KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4seSl9fSgpOyFmdW5jdGlvbigpe24ucj1mdW5jdGlvbihuKXtpZih0eXBlb2YgU3ltYm9sIT09XCJ1bmRlZmluZWRcIiYmU3ltYm9sLnRvU3RyaW5nVGFnKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pfX0oKTtpZih0eXBlb2YgbiE9PVwidW5kZWZpbmVkXCIpbi5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIHk9e307bi5yKHkpO24uZCh5LHtnZXRDTFM6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sZ2V0RkNQOmZ1bmN0aW9uKCl7cmV0dXJuIGd9LGdldEZJRDpmdW5jdGlvbigpe3JldHVybiBGfSxnZXRJTlA6ZnVuY3Rpb24oKXtyZXR1cm4gT30sZ2V0TENQOmZ1bmN0aW9uKCl7cmV0dXJuIF99LGdldFRURkI6ZnVuY3Rpb24oKXtyZXR1cm4gR30sb25DTFM6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sb25GQ1A6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sb25GSUQ6ZnVuY3Rpb24oKXtyZXR1cm4gRn0sb25JTlA6ZnVuY3Rpb24oKXtyZXR1cm4gT30sb25MQ1A6ZnVuY3Rpb24oKXtyZXR1cm4gX30sb25UVEZCOmZ1bmN0aW9uKCl7cmV0dXJuIEd9fSk7dmFyIFQsQyx3LFAsSSxrPS0xLG89ZnVuY3Rpb24obil7YWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsKGZ1bmN0aW9uKHkpe3kucGVyc2lzdGVkJiYoaz15LnRpbWVTdGFtcCxuKHkpKX0pLCEwKX0sYz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUmJnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJuYXZpZ2F0aW9uXCIpWzBdfSx1PWZ1bmN0aW9uKCl7dmFyIG49YygpO3JldHVybiBuJiZuLmFjdGl2YXRpb25TdGFydHx8MH0sZj1mdW5jdGlvbihuLHkpe3ZhciBUPWMoKSxDPVwibmF2aWdhdGVcIjtyZXR1cm4gaz49MD9DPVwiYmFjay1mb3J3YXJkLWNhY2hlXCI6VCYmKEM9ZG9jdW1lbnQucHJlcmVuZGVyaW5nfHx1KCk+MD9cInByZXJlbmRlclwiOlQudHlwZS5yZXBsYWNlKC9fL2csXCItXCIpKSx7bmFtZTpuLHZhbHVlOnZvaWQgMD09PXk/LTE6eSxyYXRpbmc6XCJnb29kXCIsZGVsdGE6MCxlbnRyaWVzOltdLGlkOlwidjMtXCIuY29uY2F0KERhdGUubm93KCksXCItXCIpLmNvbmNhdChNYXRoLmZsb29yKDg5OTk5OTk5OTk5OTkqTWF0aC5yYW5kb20oKSkrMWUxMiksbmF2aWdhdGlvblR5cGU6Q319LHM9ZnVuY3Rpb24obix5LFQpe3RyeXtpZihQZXJmb3JtYW5jZU9ic2VydmVyLnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXMobikpe3ZhciBDPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKChmdW5jdGlvbihuKXt5KG4uZ2V0RW50cmllcygpKX0pKTtyZXR1cm4gQy5vYnNlcnZlKE9iamVjdC5hc3NpZ24oe3R5cGU6bixidWZmZXJlZDohMH0sVHx8e30pKSxDfX1jYXRjaChuKXt9fSxkPWZ1bmN0aW9uKG4seSl7dmFyIFQ9ZnVuY3Rpb24gdChUKXtcInBhZ2VoaWRlXCIhPT1ULnR5cGUmJlwiaGlkZGVuXCIhPT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGV8fChuKFQpLHkmJihyZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQsITApLHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLHQsITApKSl9O2FkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsVCwhMCksYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsVCwhMCl9LGw9ZnVuY3Rpb24obix5LFQsQyl7dmFyIHcsUDtyZXR1cm4gZnVuY3Rpb24oSSl7eS52YWx1ZT49MCYmKEl8fEMpJiYoKFA9eS52YWx1ZS0od3x8MCkpfHx2b2lkIDA9PT13KSYmKHc9eS52YWx1ZSx5LmRlbHRhPVAseS5yYXRpbmc9ZnVuY3Rpb24obix5KXtyZXR1cm4gbj55WzFdP1wicG9vclwiOm4+eVswXT9cIm5lZWRzLWltcHJvdmVtZW50XCI6XCJnb29kXCJ9KHkudmFsdWUsVCksbih5KSl9fSxOPS0xLHY9ZnVuY3Rpb24oKXtyZXR1cm5cImhpZGRlblwiIT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlfHxkb2N1bWVudC5wcmVyZW5kZXJpbmc/MS8wOjB9LG09ZnVuY3Rpb24oKXtkKChmdW5jdGlvbihuKXt2YXIgeT1uLnRpbWVTdGFtcDtOPXl9KSwhMCl9LGg9ZnVuY3Rpb24oKXtyZXR1cm4gTjwwJiYoTj12KCksbSgpLG8oKGZ1bmN0aW9uKCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtOPXYoKSxtKCl9KSwwKX0pKSkse2dldCBmaXJzdEhpZGRlblRpbWUoKXtyZXR1cm4gTn19fSxnPWZ1bmN0aW9uKG4seSl7eT15fHx7fTt2YXIgVCxDPVsxODAwLDNlM10sdz1oKCksUD1mKFwiRkNQXCIpLGM9ZnVuY3Rpb24obil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtcImZpcnN0LWNvbnRlbnRmdWwtcGFpbnRcIj09PW4ubmFtZSYmKGsmJmsuZGlzY29ubmVjdCgpLG4uc3RhcnRUaW1lPHcuZmlyc3RIaWRkZW5UaW1lJiYoUC52YWx1ZT1uLnN0YXJ0VGltZS11KCksUC5lbnRyaWVzLnB1c2gobiksVCghMCkpKX0pKX0sST13aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lJiZ3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShcImZpcnN0LWNvbnRlbnRmdWwtcGFpbnRcIilbMF0saz1JP251bGw6cyhcInBhaW50XCIsYyk7KEl8fGspJiYoVD1sKG4sUCxDLHkucmVwb3J0QWxsQ2hhbmdlcyksSSYmYyhbSV0pLG8oKGZ1bmN0aW9uKHcpe1A9ZihcIkZDUFwiKSxUPWwobixQLEMseS5yZXBvcnRBbGxDaGFuZ2VzKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe1AudmFsdWU9cGVyZm9ybWFuY2Uubm93KCktdy50aW1lU3RhbXAsVCghMCl9KSl9KSl9KSkpfSxqPSExLHE9LTEsRT1mdW5jdGlvbihuLHkpe3k9eXx8e307dmFyIFQ9Wy4xLC4yNV07anx8KGcoKGZ1bmN0aW9uKG4pe3E9bi52YWx1ZX0pKSxqPSEwKTt2YXIgQyxpPWZ1bmN0aW9uKHkpe3E+LTEmJm4oeSl9LHc9ZihcIkNMU1wiLDApLFA9MCxJPVtdLHA9ZnVuY3Rpb24obil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighbi5oYWRSZWNlbnRJbnB1dCl7dmFyIHk9SVswXSxUPUlbSS5sZW5ndGgtMV07UCYmbi5zdGFydFRpbWUtVC5zdGFydFRpbWU8MWUzJiZuLnN0YXJ0VGltZS15LnN0YXJ0VGltZTw1ZTM/KFArPW4udmFsdWUsSS5wdXNoKG4pKTooUD1uLnZhbHVlLEk9W25dKSxQPncudmFsdWUmJih3LnZhbHVlPVAsdy5lbnRyaWVzPUksQygpKX19KSl9LGs9cyhcImxheW91dC1zaGlmdFwiLHApO2smJihDPWwoaSx3LFQseS5yZXBvcnRBbGxDaGFuZ2VzKSxkKChmdW5jdGlvbigpe3Aoay50YWtlUmVjb3JkcygpKSxDKCEwKX0pKSxvKChmdW5jdGlvbigpe1A9MCxxPS0xLHc9ZihcIkNMU1wiLDApLEM9bChpLHcsVCx5LnJlcG9ydEFsbENoYW5nZXMpfSkpKX0seD17cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSx6PW5ldyBEYXRlLEw9ZnVuY3Rpb24obix5KXtUfHwoVD15LEM9bix3PW5ldyBEYXRlLEEocmVtb3ZlRXZlbnRMaXN0ZW5lciksUygpKX0sUz1mdW5jdGlvbigpe2lmKEM+PTAmJkM8dy16KXt2YXIgbj17ZW50cnlUeXBlOlwiZmlyc3QtaW5wdXRcIixuYW1lOlQudHlwZSx0YXJnZXQ6VC50YXJnZXQsY2FuY2VsYWJsZTpULmNhbmNlbGFibGUsc3RhcnRUaW1lOlQudGltZVN0YW1wLHByb2Nlc3NpbmdTdGFydDpULnRpbWVTdGFtcCtDfTtQLmZvckVhY2goKGZ1bmN0aW9uKHkpe3kobil9KSksUD1bXX19LGI9ZnVuY3Rpb24obil7aWYobi5jYW5jZWxhYmxlKXt2YXIgeT0obi50aW1lU3RhbXA+MWUxMj9uZXcgRGF0ZTpwZXJmb3JtYW5jZS5ub3coKSktbi50aW1lU3RhbXA7XCJwb2ludGVyZG93blwiPT1uLnR5cGU/ZnVuY3Rpb24obix5KXt2YXIgdD1mdW5jdGlvbigpe0wobix5KSxpKCl9LHI9ZnVuY3Rpb24oKXtpKCl9LGk9ZnVuY3Rpb24oKXtyZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsdCx4KSxyZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLHIseCl9O2FkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIix0LHgpLGFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIscix4KX0oeSxuKTpMKHksbil9fSxBPWZ1bmN0aW9uKG4pe1tcIm1vdXNlZG93blwiLFwia2V5ZG93blwiLFwidG91Y2hzdGFydFwiLFwicG9pbnRlcmRvd25cIl0uZm9yRWFjaCgoZnVuY3Rpb24oeSl7cmV0dXJuIG4oeSxiLHgpfSkpfSxGPWZ1bmN0aW9uKG4seSl7eT15fHx7fTt2YXIgdyxJPVsxMDAsMzAwXSxrPWgoKSxOPWYoXCJGSURcIiksdj1mdW5jdGlvbihuKXtuLnN0YXJ0VGltZTxrLmZpcnN0SGlkZGVuVGltZSYmKE4udmFsdWU9bi5wcm9jZXNzaW5nU3RhcnQtbi5zdGFydFRpbWUsTi5lbnRyaWVzLnB1c2gobiksdyghMCkpfSxtPWZ1bmN0aW9uKG4pe24uZm9yRWFjaCh2KX0saj1zKFwiZmlyc3QtaW5wdXRcIixtKTt3PWwobixOLEkseS5yZXBvcnRBbGxDaGFuZ2VzKSxqJiZkKChmdW5jdGlvbigpe20oai50YWtlUmVjb3JkcygpKSxqLmRpc2Nvbm5lY3QoKX0pLCEwKSxqJiZvKChmdW5jdGlvbigpe3ZhciBrO049ZihcIkZJRFwiKSx3PWwobixOLEkseS5yZXBvcnRBbGxDaGFuZ2VzKSxQPVtdLEM9LTEsVD1udWxsLEEoYWRkRXZlbnRMaXN0ZW5lciksaz12LFAucHVzaChrKSxTKCl9KSl9LEo9MCxLPTEvMCxRPTAsTT1mdW5jdGlvbihuKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uaW50ZXJhY3Rpb25JZCYmKEs9TWF0aC5taW4oSyxuLmludGVyYWN0aW9uSWQpLFE9TWF0aC5tYXgoUSxuLmludGVyYWN0aW9uSWQpLEo9UT8oUS1LKS83KzE6MCl9KSl9LEI9ZnVuY3Rpb24oKXtyZXR1cm4gST9KOnBlcmZvcm1hbmNlLmludGVyYWN0aW9uQ291bnR8fDB9LEQ9ZnVuY3Rpb24oKXtcImludGVyYWN0aW9uQ291bnRcImluIHBlcmZvcm1hbmNlfHxJfHwoST1zKFwiZXZlbnRcIixNLHt0eXBlOlwiZXZlbnRcIixidWZmZXJlZDohMCxkdXJhdGlvblRocmVzaG9sZDowfSkpfSxVPTAsUj1mdW5jdGlvbigpe3JldHVybiBCKCktVX0sVj1bXSxXPXt9LEg9ZnVuY3Rpb24obil7dmFyIHk9VltWLmxlbmd0aC0xXSxUPVdbbi5pbnRlcmFjdGlvbklkXTtpZihUfHxWLmxlbmd0aDwxMHx8bi5kdXJhdGlvbj55LmxhdGVuY3kpe2lmKFQpVC5lbnRyaWVzLnB1c2gobiksVC5sYXRlbmN5PU1hdGgubWF4KFQubGF0ZW5jeSxuLmR1cmF0aW9uKTtlbHNle3ZhciBDPXtpZDpuLmludGVyYWN0aW9uSWQsbGF0ZW5jeTpuLmR1cmF0aW9uLGVudHJpZXM6W25dfTtXW0MuaWRdPUMsVi5wdXNoKEMpfVYuc29ydCgoZnVuY3Rpb24obix5KXtyZXR1cm4geS5sYXRlbmN5LW4ubGF0ZW5jeX0pKSxWLnNwbGljZSgxMCkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZGVsZXRlIFdbbi5pZF19KSl9fSxPPWZ1bmN0aW9uKG4seSl7eT15fHx7fTt2YXIgVD1bMjAwLDUwMF07RCgpO3ZhciBDLHc9ZihcIklOUFwiKSxhPWZ1bmN0aW9uKG4pe24uZm9yRWFjaCgoZnVuY3Rpb24obil7KG4uaW50ZXJhY3Rpb25JZCYmSChuKSxcImZpcnN0LWlucHV0XCI9PT1uLmVudHJ5VHlwZSkmJighVi5zb21lKChmdW5jdGlvbih5KXtyZXR1cm4geS5lbnRyaWVzLnNvbWUoKGZ1bmN0aW9uKHkpe3JldHVybiBuLmR1cmF0aW9uPT09eS5kdXJhdGlvbiYmbi5zdGFydFRpbWU9PT15LnN0YXJ0VGltZX0pKX0pKSYmSChuKSl9KSk7dmFyIHksVD0oeT1NYXRoLm1pbihWLmxlbmd0aC0xLE1hdGguZmxvb3IoUigpLzUwKSksVlt5XSk7VCYmVC5sYXRlbmN5IT09dy52YWx1ZSYmKHcudmFsdWU9VC5sYXRlbmN5LHcuZW50cmllcz1ULmVudHJpZXMsQygpKX0sUD1zKFwiZXZlbnRcIixhLHtkdXJhdGlvblRocmVzaG9sZDp5LmR1cmF0aW9uVGhyZXNob2xkfHw0MH0pO0M9bChuLHcsVCx5LnJlcG9ydEFsbENoYW5nZXMpLFAmJihQLm9ic2VydmUoe3R5cGU6XCJmaXJzdC1pbnB1dFwiLGJ1ZmZlcmVkOiEwfSksZCgoZnVuY3Rpb24oKXthKFAudGFrZVJlY29yZHMoKSksdy52YWx1ZTwwJiZSKCk+MCYmKHcudmFsdWU9MCx3LmVudHJpZXM9W10pLEMoITApfSkpLG8oKGZ1bmN0aW9uKCl7Vj1bXSxVPUIoKSx3PWYoXCJJTlBcIiksQz1sKG4sdyxULHkucmVwb3J0QWxsQ2hhbmdlcyl9KSkpfSxYPXt9LF89ZnVuY3Rpb24obix5KXt5PXl8fHt9O3ZhciBULEM9WzI1MDAsNGUzXSx3PWgoKSxQPWYoXCJMQ1BcIiksYz1mdW5jdGlvbihuKXt2YXIgeT1uW24ubGVuZ3RoLTFdO2lmKHkpe3ZhciBDPXkuc3RhcnRUaW1lLXUoKTtDPHcuZmlyc3RIaWRkZW5UaW1lJiYoUC52YWx1ZT1DLFAuZW50cmllcz1beV0sVCgpKX19LEk9cyhcImxhcmdlc3QtY29udGVudGZ1bC1wYWludFwiLGMpO2lmKEkpe1Q9bChuLFAsQyx5LnJlcG9ydEFsbENoYW5nZXMpO3ZhciB2PWZ1bmN0aW9uKCl7WFtQLmlkXXx8KGMoSS50YWtlUmVjb3JkcygpKSxJLmRpc2Nvbm5lY3QoKSxYW1AuaWRdPSEwLFQoITApKX07W1wia2V5ZG93blwiLFwiY2xpY2tcIl0uZm9yRWFjaCgoZnVuY3Rpb24obil7YWRkRXZlbnRMaXN0ZW5lcihuLHYse29uY2U6ITAsY2FwdHVyZTohMH0pfSkpLGQodiwhMCksbygoZnVuY3Rpb24odyl7UD1mKFwiTENQXCIpLFQ9bChuLFAsQyx5LnJlcG9ydEFsbENoYW5nZXMpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7UC52YWx1ZT1wZXJmb3JtYW5jZS5ub3coKS13LnRpbWVTdGFtcCxYW1AuaWRdPSEwLFQoITApfSkpfSkpfSkpfX0sWT1mdW5jdGlvbiBlKG4pe2RvY3VtZW50LnByZXJlbmRlcmluZz9hZGRFdmVudExpc3RlbmVyKFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KSwhMCk6XCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLChmdW5jdGlvbigpe3JldHVybiBlKG4pfSksITApOnNldFRpbWVvdXQobiwwKX0sRz1mdW5jdGlvbihuLHkpe3k9eXx8e307dmFyIFQ9WzgwMCwxODAwXSxDPWYoXCJUVEZCXCIpLHc9bChuLEMsVCx5LnJlcG9ydEFsbENoYW5nZXMpO1koKGZ1bmN0aW9uKCl7dmFyIFA9YygpO2lmKFApe2lmKEMudmFsdWU9TWF0aC5tYXgoUC5yZXNwb25zZVN0YXJ0LXUoKSwwKSxDLnZhbHVlPDB8fEMudmFsdWU+cGVyZm9ybWFuY2Uubm93KCkpcmV0dXJuO0MuZW50cmllcz1bUF0sdyghMCksbygoZnVuY3Rpb24oKXtDPWYoXCJUVEZCXCIsMCksKHc9bChuLEMsVCx5LnJlcG9ydEFsbENoYW5nZXMpKSghMCl9KSl9fSkpfTttb2R1bGUuZXhwb3J0cz15fSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/web-vitals/web-vitals.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/lib/is-api-route.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/is-api-route.js ***!
|
||
\****************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isAPIRoute\", ({\n enumerable: true,\n get: function() {\n return isAPIRoute;\n }\n}));\nfunction isAPIRoute(value) {\n return value === \"/api\" || Boolean(value == null ? void 0 : value.startsWith(\"/api/\"));\n}\n\n//# sourceMappingURL=is-api-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1hcGktcm91dGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiw4Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtYXBpLXJvdXRlLmpzPzE2ODEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FQSVJvdXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0FQSVJvdXRlO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNBUElSb3V0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gXCIvYXBpXCIgfHwgQm9vbGVhbih2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuc3RhcnRzV2l0aChcIi9hcGkvXCIpKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtYXBpLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/is-api-route.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/lib/is-error.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/is-error.js ***!
|
||
\************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"./node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === \"object\" && err !== null && \"name\" in err && \"message\" in err;\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === \"undefined\") {\n return new Error(\"An undefined error was thrown, \" + \"see here for more info: https://nextjs.org/docs/messages/threw-undefined\");\n }\n if (err === null) {\n return new Error(\"A null error was thrown, \" + \"see here for more info: https://nextjs.org/docs/messages/threw-undefined\");\n }\n }\n return new Error((0, _isplainobject.isPlainObject)(err) ? JSON.stringify(err) : err + \"\");\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBK0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtZXJyb3IuanM/MTc4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZ2V0UHJvcGVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yO1xuICAgIH0sXG4gICAgZ2V0UHJvcGVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UHJvcGVyRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaXNwbGFpbm9iamVjdCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdFwiKTtcbmZ1bmN0aW9uIGlzRXJyb3IoZXJyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyICE9PSBudWxsICYmIFwibmFtZVwiIGluIGVyciAmJiBcIm1lc3NhZ2VcIiBpbiBlcnI7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJFcnJvcihlcnIpIHtcbiAgICBpZiAoaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIC8vIHByb3ZpZGUgYmV0dGVyIGVycm9yIGZvciBjYXNlIHdoZXJlIGB0aHJvdyB1bmRlZmluZWRgXG4gICAgICAgIC8vIGlzIGNhbGxlZCBpbiBkZXZlbG9wbWVudFxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkFuIHVuZGVmaW5lZCBlcnJvciB3YXMgdGhyb3duLCBcIiArIFwic2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdGhyZXctdW5kZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIG51bGwgZXJyb3Igd2FzIHRocm93biwgXCIgKyBcInNlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKCgwLCBfaXNwbGFpbm9iamVjdC5pc1BsYWluT2JqZWN0KShlcnIpID8gSlNPTi5zdHJpbmdpZnkoZXJyKSA6IGVyciArIFwiXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/is-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/server/api-utils/get-cookie-parser.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/api-utils/get-cookie-parser.js ***!
|
||
\**********************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getCookieParser\", ({\n enumerable: true,\n get: function() {\n return getCookieParser;\n }\n}));\nfunction getCookieParser(headers) {\n return function parseCookie() {\n const { cookie } = headers;\n if (!cookie) {\n return {};\n }\n const { parse: parseCookieFn } = __webpack_require__(/*! next/dist/compiled/cookie */ \"./node_modules/next/dist/compiled/cookie/index.js\");\n return parseCookieFn(Array.isArray(cookie) ? cookie.join(\"; \") : cookie);\n };\n}\n\n//# sourceMappingURL=get-cookie-parser.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcGktdXRpbHMvZ2V0LWNvb2tpZS1wYXJzZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixtREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QixFQUFFLG1CQUFPLENBQUMsb0ZBQTJCO0FBQzVFLG9FQUFvRTtBQUNwRTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2FwaS11dGlscy9nZXQtY29va2llLXBhcnNlci5qcz85OWNkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Q29va2llUGFyc2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRDb29raWVQYXJzZXI7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRDb29raWVQYXJzZXIoaGVhZGVycykge1xuICAgIHJldHVybiBmdW5jdGlvbiBwYXJzZUNvb2tpZSgpIHtcbiAgICAgICAgY29uc3QgeyBjb29raWUgfSA9IGhlYWRlcnM7XG4gICAgICAgIGlmICghY29va2llKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYXJzZTogcGFyc2VDb29raWVGbiB9ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9jb29raWVcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUNvb2tpZUZuKEFycmF5LmlzQXJyYXkoY29va2llKSA/IGNvb2tpZS5qb2luKFwiOyBcIikgOiBjb29raWUpO1xuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1jb29raWUtcGFyc2VyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/api-utils/get-cookie-parser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/server/dev/extract-modules-from-turbopack-message.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/dev/extract-modules-from-turbopack-message.js ***!
|
||
\*************************************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"extractModulesFromTurbopackMessage\", ({\n enumerable: true,\n get: function() {\n return extractModulesFromTurbopackMessage;\n }\n}));\nfunction extractModulesFromTurbopackMessage(data) {\n const updatedModules = new Set();\n const updates = Array.isArray(data) ? data : [\n data\n ];\n for (const update of updates){\n // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n if (update.type !== \"partial\" || update.instruction.type !== \"ChunkListUpdate\" || update.instruction.merged === undefined) {\n continue;\n }\n for (const mergedUpdate of update.instruction.merged){\n for (const name of Object.keys(mergedUpdate.entries)){\n const res = /(.*)\\s+\\[.*/.exec(name);\n if (res === null) {\n console.error(\"[Turbopack HMR] Expected module to match pattern: \" + name);\n continue;\n }\n updatedModules.add(res[1]);\n }\n }\n }\n return [\n ...updatedModules\n ];\n}\n\n//# sourceMappingURL=extract-modules-from-turbopack-message.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvZXh0cmFjdC1tb2R1bGVzLWZyb20tdHVyYm9wYWNrLW1lc3NhZ2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixzRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvZXh0cmFjdC1tb2R1bGVzLWZyb20tdHVyYm9wYWNrLW1lc3NhZ2UuanM/MjIzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4dHJhY3RNb2R1bGVzRnJvbVR1cmJvcGFja01lc3NhZ2VcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RNb2R1bGVzRnJvbVR1cmJvcGFja01lc3NhZ2U7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBleHRyYWN0TW9kdWxlc0Zyb21UdXJib3BhY2tNZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCB1cGRhdGVkTW9kdWxlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCB1cGRhdGVzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXG4gICAgICAgIGRhdGFcbiAgICBdO1xuICAgIGZvciAoY29uc3QgdXBkYXRlIG9mIHVwZGF0ZXMpe1xuICAgICAgICAvLyBUT0RPIHRoaXMgd29uJ3QgY2FwdHVyZSBjaGFuZ2VzIHRvIENTUyBzaW5jZSB0aGV5IGRvbid0IHJlc3VsdCBpbiBhIFwibWVyZ2VkXCIgdXBkYXRlXG4gICAgICAgIGlmICh1cGRhdGUudHlwZSAhPT0gXCJwYXJ0aWFsXCIgfHwgdXBkYXRlLmluc3RydWN0aW9uLnR5cGUgIT09IFwiQ2h1bmtMaXN0VXBkYXRlXCIgfHwgdXBkYXRlLmluc3RydWN0aW9uLm1lcmdlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG1lcmdlZFVwZGF0ZSBvZiB1cGRhdGUuaW5zdHJ1Y3Rpb24ubWVyZ2VkKXtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhtZXJnZWRVcGRhdGUuZW50cmllcykpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IC8oLiopXFxzK1xcWy4qLy5leGVjKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltUdXJib3BhY2sgSE1SXSBFeHBlY3RlZCBtb2R1bGUgdG8gbWF0Y2ggcGF0dGVybjogXCIgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVwZGF0ZWRNb2R1bGVzLmFkZChyZXNbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAgIC4uLnVwZGF0ZWRNb2R1bGVzXG4gICAgXTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXh0cmFjdC1tb2R1bGVzLWZyb20tdHVyYm9wYWNrLW1lc3NhZ2UuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/dev/extract-modules-from-turbopack-message.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/server/dev/hot-reloader-types.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/dev/hot-reloader-types.js ***!
|
||
\*****************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER;\n(function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n})(HMR_ACTIONS_SENT_TO_BROWSER || (HMR_ACTIONS_SENT_TO_BROWSER = {}));\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsK0RBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGtFQUFrRTs7QUFFbkUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcy5qcz9iZmFhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG4gICAgfVxufSk7XG52YXIgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSO1xuKGZ1bmN0aW9uKEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUikge1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkFEREVEX1BBR0VcIl0gPSBcImFkZGVkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlJFTU9WRURfUEFHRVwiXSA9IFwicmVtb3ZlZFBhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJSRUxPQURfUEFHRVwiXSA9IFwicmVsb2FkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFU1wiXSA9IFwic2VydmVyQ29tcG9uZW50Q2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIk1JRERMRVdBUkVfQ0hBTkdFU1wiXSA9IFwibWlkZGxld2FyZUNoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJDTElFTlRfQ0hBTkdFU1wiXSA9IFwiY2xpZW50Q2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9PTkxZX0NIQU5HRVNcIl0gPSBcInNlcnZlck9ubHlDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU1lOQ1wiXSA9IFwic3luY1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkJVSUxUXCJdID0gXCJidWlsdFwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkJVSUxESU5HXCJdID0gXCJidWlsZGluZ1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEVcIl0gPSBcImRldlBhZ2VzTWFuaWZlc3RVcGRhdGVcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfTUVTU0FHRVwiXSA9IFwidHVyYm9wYWNrLW1lc3NhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfRVJST1JcIl0gPSBcInNlcnZlckVycm9yXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiVFVSQk9QQUNLX0NPTk5FQ1RFRFwiXSA9IFwidHVyYm9wYWNrLWNvbm5lY3RlZFwiO1xufSkoSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIHx8IChITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgPSB7fSkpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob3QtcmVsb2FkZXItdHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/dev/hot-reloader-types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/next/dist/server/future/helpers/interception-routes.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/future/helpers/interception-routes.js ***!
|
||
\*****************************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n }\n});\nconst _apppaths = __webpack_require__(/*! ../../../shared/lib/router/utils/app-paths */ \"./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n \"(..)(..)\",\n \"(.)\",\n \"(..)\",\n \"(...)\"\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split(\"/\").find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split(\"/\")){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`);\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case \"(.)\":\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === \"/\") {\n interceptedRoute = `/${interceptedRoute}`;\n } else {\n interceptedRoute = interceptingRoute + \"/\" + interceptedRoute;\n }\n break;\n case \"(..)\":\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === \"/\") {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`);\n }\n interceptedRoute = interceptingRoute.split(\"/\").slice(0, -1).concat(interceptedRoute).join(\"/\");\n break;\n case \"(...)\":\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = \"/\" + interceptedRoute;\n break;\n case \"(..)(..)\":\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split(\"/\");\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`);\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join(\"/\");\n break;\n default:\n throw new Error(\"Invariant: unexpected marker\");\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n}\n\n//# sourceMappingURL=interception-routes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLG1CQUFPLENBQUMsaUhBQTRDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsS0FBSztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUI7QUFDeEQsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxLQUFLO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsS0FBSztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXMuanM/MzVjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBudWxsLFxuICAgIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uOiBudWxsLFxuICAgIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTO1xuICAgIH0sXG4gICAgZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb247XG4gICAgfSxcbiAgICBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHBwYXRocyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHNcIik7XG5jb25zdCBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyA9IFtcbiAgICBcIiguLikoLi4pXCIsXG4gICAgXCIoLilcIixcbiAgICBcIiguLilcIixcbiAgICBcIiguLi4pXCJcbl07XG5mdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoKSB7XG4gICAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5maW5kKChzZWdtZW50KT0+SU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSkpICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbihwYXRoKSB7XG4gICAgbGV0IGludGVyY2VwdGluZ1JvdXRlLCBtYXJrZXIsIGludGVyY2VwdGVkUm91dGU7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoXCIvXCIpKXtcbiAgICAgICAgbWFya2VyID0gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSk7XG4gICAgICAgIGlmIChtYXJrZXIpIHtcbiAgICAgICAgICAgIFtpbnRlcmNlcHRpbmdSb3V0ZSwgaW50ZXJjZXB0ZWRSb3V0ZV0gPSBwYXRoLnNwbGl0KG1hcmtlciwgMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWludGVyY2VwdGluZ1JvdXRlIHx8ICFtYXJrZXIgfHwgIWludGVyY2VwdGVkUm91dGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gTXVzdCBiZSBpbiB0aGUgZm9ybWF0IC88aW50ZXJjZXB0aW5nIHJvdXRlPi8oLi58Li4ufC4uKSguLikvPGludGVyY2VwdGVkIHJvdXRlPmApO1xuICAgIH1cbiAgICBpbnRlcmNlcHRpbmdSb3V0ZSA9ICgwLCBfYXBwcGF0aHMubm9ybWFsaXplQXBwUGF0aCkoaW50ZXJjZXB0aW5nUm91dGUpIC8vIG5vcm1hbGl6ZSB0aGUgcGF0aCwgZS5nLiAvKGJsb2cpL2ZlZWQgLT4gL2ZlZWRcbiAgICA7XG4gICAgc3dpdGNoKG1hcmtlcil7XG4gICAgICAgIGNhc2UgXCIoLilcIjpcbiAgICAgICAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBgLyR7aW50ZXJjZXB0ZWRSb3V0ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUgKyBcIi9cIiArIGludGVyY2VwdGVkUm91dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIiguLilcIjpcbiAgICAgICAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCwgdXNlICguKSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuY29uY2F0KGludGVyY2VwdGVkUm91dGUpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIoLi4uKVwiOlxuICAgICAgICAgICAgLy8gKC4uLikgd2lsbCBtYXRjaCB0aGUgcm91dGUgc2VnbWVudCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmVwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IFwiL1wiICsgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiKC4uKSguLilcIjpcbiAgICAgICAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChzcGxpdEludGVyY2VwdGluZ1JvdXRlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IHNwbGl0SW50ZXJjZXB0aW5nUm91dGUuc2xpY2UoMCwgLTIpLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKS5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiB1bmV4cGVjdGVkIG1hcmtlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZXJjZXB0aW5nUm91dGUsXG4gICAgICAgIGludGVyY2VwdGVkUm91dGVcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmNlcHRpb24tcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/helpers/interception-routes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react-dom/cjs/react-dom-client.development.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/react-dom/cjs/react-dom-client.development.js ***!
|
||
\********************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"./node_modules/next/dist/build/polyfills/process.js\");\n/**\n * @license React\n * react-dom-client.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n true &&\n (function () {\n function findHook(fiber, id) {\n for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )\n (fiber = fiber.next), id--;\n return fiber;\n }\n function copyWithSetImpl(obj, path, index, value) {\n if (index >= path.length) return value;\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n return updated;\n }\n function copyWithRename(obj, oldPath, newPath) {\n if (oldPath.length !== newPath.length)\n console.warn(\"copyWithRename() expects paths of the same length\");\n else {\n for (var i = 0; i < newPath.length - 1; i++)\n if (oldPath[i] !== newPath[i]) {\n console.warn(\n \"copyWithRename() expects paths to be the same except for the deepest key\"\n );\n return;\n }\n return copyWithRenameImpl(obj, oldPath, newPath, 0);\n }\n }\n function copyWithRenameImpl(obj, oldPath, newPath, index) {\n var oldKey = oldPath[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n index + 1 === oldPath.length\n ? ((updated[newPath[index]] = updated[oldKey]),\n isArrayImpl(updated)\n ? updated.splice(oldKey, 1)\n : delete updated[oldKey])\n : (updated[oldKey] = copyWithRenameImpl(\n obj[oldKey],\n oldPath,\n newPath,\n index + 1\n ));\n return updated;\n }\n function copyWithDeleteImpl(obj, path, index) {\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n if (index + 1 === path.length)\n return (\n isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],\n updated\n );\n updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n return updated;\n }\n function shouldSuspendImpl() {\n return !1;\n }\n function shouldErrorImpl() {\n return null;\n }\n function createFiber(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n }\n function warnInvalidHookAccess() {\n console.error(\n \"Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks\"\n );\n }\n function warnInvalidContextAccess() {\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n }\n function noop$2() {}\n function warnForMissingKey() {}\n function setToSortedString(set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(\", \");\n }\n function scheduleRoot(root, element) {\n root.context === emptyContextObject &&\n (updateContainerSync(element, root, null, null), flushSyncWork$1());\n }\n function scheduleRefresh(root, update) {\n if (null !== resolveFamily) {\n var staleFamilies = update.staleFamilies;\n update = update.updatedFamilies;\n flushPassiveEffects();\n scheduleFibersWithFamiliesRecursively(\n root.current,\n update,\n staleFamilies\n );\n flushSyncWork$1();\n }\n }\n function setRefreshHandler(handler) {\n resolveFamily = handler;\n }\n function isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getComponentNameFromOwner(owner) {\n return \"number\" === typeof owner.tag\n ? getComponentNameFromFiber(owner)\n : \"string\" === typeof owner.name\n ? owner.name\n : null;\n }\n function getComponentNameFromFiber(fiber) {\n var type = fiber.type;\n switch (fiber.tag) {\n case 24:\n return \"Cache\";\n case 9:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case 10:\n return (type.displayName || \"Context\") + \".Provider\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return (\n (fiber = type.render),\n (fiber = fiber.displayName || fiber.name || \"\"),\n type.displayName ||\n (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n );\n case 7:\n return \"Fragment\";\n case 26:\n case 27:\n case 5:\n return type;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return getComponentNameFromType(type);\n case 8:\n return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 25:\n return \"TracingMarker\";\n case 1:\n case 0:\n case 14:\n case 15:\n if (\"function\" === typeof type)\n return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n break;\n case 29:\n type = fiber._debugInfo;\n if (null != type)\n for (var i = type.length - 1; 0 <= i; i--)\n if (\"string\" === typeof type[i].name) return type[i].name;\n if (null !== fiber.return)\n return getComponentNameFromFiber(fiber.return);\n }\n return null;\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return (fiber = describeNativeComponentFrame(fiber.type, !1)), fiber;\n case 11:\n return (\n (fiber = describeNativeComponentFrame(fiber.type.render, !1)), fiber\n );\n case 1:\n return (fiber = describeNativeComponentFrame(fiber.type, !0)), fiber;\n default:\n return \"\";\n }\n }\n function getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\";\n do {\n info += describeFiber(workInProgress);\n var debugInfo = workInProgress._debugInfo;\n if (debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--) {\n var entry = debugInfo[i];\n if (\"string\" === typeof entry.name) {\n var JSCompiler_temp_const = info,\n env = entry.env;\n var JSCompiler_inline_result = describeBuiltInComponentFrame(\n entry.name + (env ? \" [\" + env + \"]\" : \"\")\n );\n info = JSCompiler_temp_const + JSCompiler_inline_result;\n }\n }\n workInProgress = workInProgress.return;\n } while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n }\n function getCurrentFiberOwnerNameInDevOrNull() {\n if (null === current) return null;\n var owner = current._debugOwner;\n return null != owner ? getComponentNameFromOwner(owner) : null;\n }\n function getCurrentFiberStackInDev() {\n return null === current ? \"\" : getStackByFiberInDevAndProd(current);\n }\n function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {\n var previousFiber = current;\n ReactSharedInternals.getCurrentStack =\n null === fiber ? null : getCurrentFiberStackInDev;\n isRendering = !1;\n current = fiber;\n try {\n return callback(arg0, arg1, arg2, arg3, arg4);\n } finally {\n current = previousFiber;\n }\n throw Error(\n \"runWithFiberInDEV should never be called in production. This is a bug in React.\"\n );\n }\n function getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n }\n function getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n }\n function assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n function findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate)\n throw Error(\"Unable to find node on an unmounted component.\");\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, _child = parentA.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild) {\n for (_child = parentB.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild)\n throw Error(\n \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n );\n }\n }\n if (a.alternate !== b)\n throw Error(\n \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (3 !== a.tag)\n throw Error(\"Unable to find node on an unmounted component.\");\n return a.stateNode.current === a ? fiber : alternate;\n }\n function findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n }\n function createCursor(defaultValue) {\n return { current: defaultValue };\n }\n function pop(cursor, fiber) {\n 0 > index$jscomp$0\n ? console.error(\"Unexpected pop.\")\n : (fiber !== fiberStack[index$jscomp$0] &&\n console.error(\"Unexpected Fiber popped.\"),\n (cursor.current = valueStack[index$jscomp$0]),\n (valueStack[index$jscomp$0] = null),\n (fiberStack[index$jscomp$0] = null),\n index$jscomp$0--);\n }\n function push(cursor, value, fiber) {\n index$jscomp$0++;\n valueStack[index$jscomp$0] = cursor.current;\n fiberStack[index$jscomp$0] = fiber;\n cursor.current = value;\n }\n function requiredContext(c) {\n null === c &&\n console.error(\n \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n );\n return c;\n }\n function pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance, fiber);\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor, null, fiber);\n var nextRootContext = nextRootInstance.nodeType;\n switch (nextRootContext) {\n case 9:\n case 11:\n nextRootContext = 9 === nextRootContext ? \"#document\" : \"#fragment\";\n nextRootInstance = (nextRootInstance =\n nextRootInstance.documentElement)\n ? (nextRootInstance = nextRootInstance.namespaceURI)\n ? getOwnHostContext(nextRootInstance)\n : HostContextNamespaceNone\n : HostContextNamespaceNone;\n break;\n default:\n if (\n ((nextRootInstance =\n 8 === nextRootContext\n ? nextRootInstance.parentNode\n : nextRootInstance),\n (nextRootContext = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (nextRootInstance = getChildHostContextProd(\n nextRootInstance,\n nextRootContext\n ));\n else\n switch (nextRootContext) {\n case \"svg\":\n nextRootInstance = HostContextNamespaceSvg;\n break;\n case \"math\":\n nextRootInstance = HostContextNamespaceMath;\n break;\n default:\n nextRootInstance = HostContextNamespaceNone;\n }\n }\n nextRootContext = nextRootContext.toLowerCase();\n nextRootContext = updatedAncestorInfoDev(null, nextRootContext);\n nextRootContext = {\n context: nextRootInstance,\n ancestorInfo: nextRootContext\n };\n pop(contextStackCursor, fiber);\n push(contextStackCursor, nextRootContext, fiber);\n }\n function popHostContainer(fiber) {\n pop(contextStackCursor, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n }\n function getHostContext() {\n return requiredContext(contextStackCursor.current);\n }\n function pushHostContext(fiber) {\n null !== fiber.memoizedState &&\n push(hostTransitionProviderCursor, fiber, fiber);\n var context = requiredContext(contextStackCursor.current);\n var type = fiber.type;\n var nextContext = getChildHostContextProd(context.context, type);\n type = updatedAncestorInfoDev(context.ancestorInfo, type);\n nextContext = { context: nextContext, ancestorInfo: type };\n context !== nextContext &&\n (push(contextFiberStackCursor, fiber, fiber),\n push(contextStackCursor, nextContext, fiber));\n }\n function popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor, fiber),\n (HostTransitionContext._currentValue = NotPendingTransition));\n }\n function typeName(value) {\n return (\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\"\n );\n }\n function willCoercionThrow(value) {\n try {\n return testStringCoercion(value), !1;\n } catch (e) {\n return !0;\n }\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkAttributeStringCoercion(value, attributeName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.\",\n attributeName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkCSSPropertyStringCoercion(value, propName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.\",\n propName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkFormFieldValueStringCoercion(value) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.\",\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function injectInternals(internals) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled) return !0;\n if (!hook.supportsFiber)\n return (\n console.error(\n \"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools\"\n ),\n !0\n );\n try {\n (rendererID = hook.inject(internals)), (injectedHook = hook);\n } catch (err) {\n console.error(\"React instrumentation encountered an error: %s.\", err);\n }\n return hook.checkDCE ? !0 : !1;\n }\n function onCommitRoot$1(root, eventPriority) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n var didError = 128 === (root.current.flags & 128);\n switch (eventPriority) {\n case DiscreteEventPriority:\n var schedulerPriority = ImmediatePriority;\n break;\n case ContinuousEventPriority:\n schedulerPriority = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n schedulerPriority = NormalPriority$1;\n break;\n case IdleEventPriority:\n schedulerPriority = IdlePriority;\n break;\n default:\n schedulerPriority = NormalPriority$1;\n }\n injectedHook.onCommitFiberRoot(\n rendererID,\n root,\n schedulerPriority,\n didError\n );\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n }\n function setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 &&\n unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n }\n function injectProfilingHooks(profilingHooks) {\n injectedProfilingHooks = profilingHooks;\n }\n function markCommitStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStopped &&\n injectedProfilingHooks.markCommitStopped();\n }\n function markComponentRenderStarted(fiber) {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStarted &&\n injectedProfilingHooks.markComponentRenderStarted(fiber);\n }\n function markComponentRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStopped &&\n injectedProfilingHooks.markComponentRenderStopped();\n }\n function markRenderStarted(lanes) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStarted &&\n injectedProfilingHooks.markRenderStarted(lanes);\n }\n function markRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStopped &&\n injectedProfilingHooks.markRenderStopped();\n }\n function markStateUpdateScheduled(fiber, lane) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markStateUpdateScheduled &&\n injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n }\n function clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n }\n function getLabelForLane(lane) {\n if (lane & 1) return \"SyncHydrationLane\";\n if (lane & 2) return \"Sync\";\n if (lane & 4) return \"InputContinuousHydration\";\n if (lane & 8) return \"InputContinuous\";\n if (lane & 16) return \"DefaultHydration\";\n if (lane & 32) return \"Default\";\n if (lane & 64) return \"TransitionHydration\";\n if (lane & 4194176) return \"Transition\";\n if (lane & 62914560) return \"Retry\";\n if (lane & 67108864) return \"SelectiveHydration\";\n if (lane & 134217728) return \"IdleHydration\";\n if (lane & 268435456) return \"Idle\";\n if (lane & 536870912) return \"Offscreen\";\n if (lane & 1073741824) return \"Deferred\";\n }\n function getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 4194176;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n lanes\n );\n }\n }\n function getNextLanes(root, wipLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n warmLanes = root.warmLanes;\n root = 0 !== root.finishedLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : root ||\n ((warmLanes = nonIdlePendingLanes & ~warmLanes),\n 0 !== warmLanes &&\n (nextLanes = getHighestPriorityLanes(warmLanes)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : root ||\n ((warmLanes = pendingLanes & ~warmLanes),\n 0 !== warmLanes &&\n (nextLanes = getHighestPriorityLanes(warmLanes))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (warmLanes = wipLanes & -wipLanes),\n suspendedLanes >= warmLanes ||\n (32 === suspendedLanes && 0 !== (warmLanes & 4194176)))\n ? wipLanes\n : nextLanes;\n }\n function checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n }\n function computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n return currentTime + 250;\n case 16:\n case 32:\n case 64:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n -1\n );\n }\n }\n function claimNextTransitionLane() {\n var lane = nextTransitionLane;\n nextTransitionLane <<= 1;\n 0 === (nextTransitionLane & 4194176) && (nextTransitionLane = 128);\n return lane;\n }\n function claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n }\n function createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n }\n function markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0),\n (root.pingedLanes = 0),\n (root.warmLanes = 0));\n }\n function markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index = 31 - clz32(remainingLanes),\n lane = 1 << index;\n entanglements[index] = 0;\n expirationTimes[index] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index] = null, index = 0;\n index < hiddenUpdatesForLane.length;\n index++\n ) {\n var update = hiddenUpdatesForLane[index];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n }\n function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 4194218);\n }\n function markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index = 31 - clz32(rootEntangledLanes),\n lane = 1 << index;\n (lane & entangledLanes) | (root[index] & entangledLanes) &&\n (root[index] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n }\n function addFiberToLanesMap(root, fiber, lanes) {\n if (isDevToolsPresent)\n for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n root[index].add(fiber);\n lanes &= ~lane;\n }\n }\n function movePendingFibersToMemoized(root, lanes) {\n if (isDevToolsPresent)\n for (\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,\n memoizedUpdaters = root.memoizedUpdaters;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes);\n root = 1 << index;\n index = pendingUpdatersLaneMap[index];\n 0 < index.size &&\n (index.forEach(function (fiber) {\n var alternate = fiber.alternate;\n (null !== alternate && memoizedUpdaters.has(alternate)) ||\n memoizedUpdaters.add(fiber);\n }),\n index.clear());\n lanes &= ~root;\n }\n }\n function lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes\n ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes\n ? 0 !== (lanes & 134217727)\n ? DefaultEventPriority\n : IdleEventPriority\n : ContinuousEventPriority\n : DiscreteEventPriority;\n }\n function resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority\n ? DefaultEventPriority\n : getEventPriority(updatePriority.type);\n }\n function runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n }\n function detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n }\n function getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentSuspenseInstance(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey]))\n return parentNode;\n targetNode = getParentSuspenseInstance(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n }\n function getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n }\n function getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag)\n return inst.stateNode;\n throw Error(\"getNodeFromInstance: Invalid argument.\");\n }\n function getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n }\n function markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n }\n function registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n }\n function registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] &&\n console.error(\n \"EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.\",\n registrationName\n );\n registrationNameDependencies[registrationName] = dependencies;\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n \"onDoubleClick\" === registrationName &&\n (possibleRegistrationNames.ondblclick = registrationName);\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n }\n function checkControlledValueProps(tagName, props) {\n hasReadOnlyValue[props.type] ||\n props.onChange ||\n props.onInput ||\n props.readOnly ||\n props.disabled ||\n null == props.value ||\n (\"select\" === tagName\n ? console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.\"\n )\n : console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.\"\n ));\n props.onChange ||\n props.readOnly ||\n props.disabled ||\n null == props.checked ||\n console.error(\n \"You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.\"\n );\n }\n function isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))\n return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n console.error(\"Invalid attribute name: `%s`\", attributeName);\n return !1;\n }\n function getValueForAttributeOnCustomComponent(node, name, expected) {\n if (isAttributeNameSafe(name)) {\n if (!node.hasAttribute(name)) {\n switch (typeof expected) {\n case \"symbol\":\n case \"object\":\n return expected;\n case \"function\":\n return expected;\n case \"boolean\":\n if (!1 === expected) return expected;\n }\n return void 0 === expected ? void 0 : null;\n }\n node = node.getAttribute(name);\n if (\"\" === node && !0 === expected) return !0;\n checkAttributeStringCoercion(expected, name);\n return node === \"\" + expected ? expected : node;\n }\n }\n function setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix && \"aria-\" !== prefix) {\n node.removeAttribute(name);\n return;\n }\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n }\n function getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return checkFormFieldValueStringCoercion(value), value;\n default:\n return \"\";\n }\n }\n function isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n }\n function trackValueOnNode(node) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\",\n descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n checkFormFieldValueStringCoercion(node[valueField]);\n var currentValue = \"\" + node[valueField];\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n }\n function track(node) {\n node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n }\n function updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n }\n function getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n }\n function escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n }\n function validateInputProps(element, props) {\n void 0 === props.checked ||\n void 0 === props.defaultChecked ||\n didWarnCheckedDefaultChecked ||\n (console.error(\n \"%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnCheckedDefaultChecked = !0));\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue$1 ||\n (console.error(\n \"%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnValueDefaultValue$1 = !0));\n }\n function updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n ) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (checkAttributeStringCoercion(type, \"type\"), (element.type = type))\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) ||\n element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked &&\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (checkAttributeStringCoercion(name, \"name\"),\n (element.name = \"\" + getToStringValue(name)))\n : element.removeAttribute(\"name\");\n }\n function initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n ) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (checkAttributeStringCoercion(type, \"type\"), (element.type = type));\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n )\n return;\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked &&\n !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (checkAttributeStringCoercion(name, \"name\"), (element.name = name));\n }\n function setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n }\n function validateOptionProps(element, props) {\n null == props.value &&\n (\"object\" === typeof props.children && null !== props.children\n ? React.Children.forEach(props.children, function (child) {\n null == child ||\n \"string\" === typeof child ||\n \"number\" === typeof child ||\n \"bigint\" === typeof child ||\n didWarnInvalidChild ||\n ((didWarnInvalidChild = !0),\n console.error(\n \"Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>.\"\n ));\n })\n : null == props.dangerouslySetInnerHTML ||\n didWarnInvalidInnerHTML ||\n ((didWarnInvalidInnerHTML = !0),\n console.error(\n \"Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.\"\n )));\n null == props.selected ||\n didWarnSelectedSetOnOption ||\n (console.error(\n \"Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>.\"\n ),\n (didWarnSelectedSetOnOption = !0));\n }\n function getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n return ownerName\n ? \"\\n\\nCheck the render method of `\" + ownerName + \"`.\"\n : \"\";\n }\n function updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n }\n function validateSelectProps(element, props) {\n for (element = 0; element < valuePropNames.length; element++) {\n var propName = valuePropNames[element];\n if (null != props[propName]) {\n var propNameIsArray = isArrayImpl(props[propName]);\n props.multiple && !propNameIsArray\n ? console.error(\n \"The `%s` prop supplied to <select> must be an array if `multiple` is true.%s\",\n propName,\n getDeclarationErrorAddendum()\n )\n : !props.multiple &&\n propNameIsArray &&\n console.error(\n \"The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s\",\n propName,\n getDeclarationErrorAddendum()\n );\n }\n }\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue ||\n (console.error(\n \"Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnValueDefaultValue = !0));\n }\n function validateTextareaProps(element, props) {\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValDefaultVal ||\n (console.error(\n \"%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\"\n ),\n (didWarnValDefaultVal = !0));\n null != props.children &&\n null == props.value &&\n console.error(\n \"Use the `defaultValue` or `value` props instead of setting children on <textarea>.\"\n );\n }\n function updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n }\n function initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue)\n throw Error(\n \"If you supply `defaultValue` on a <textarea>, do not pass children.\"\n );\n if (isArrayImpl(children)) {\n if (1 < children.length)\n throw Error(\"<textarea> can only have at most one child.\");\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n }\n function findNotableNode(node, indent) {\n return void 0 === node.serverProps &&\n 0 === node.serverTail.length &&\n 1 === node.children.length &&\n 3 < node.distanceFromLeaf &&\n node.distanceFromLeaf > 15 - indent\n ? findNotableNode(node.children[0], indent)\n : node;\n }\n function indentation(indent) {\n return \" \" + \" \".repeat(indent);\n }\n function added(indent) {\n return \"+ \" + \" \".repeat(indent);\n }\n function removed(indent) {\n return \"- \" + \" \".repeat(indent);\n }\n function describeFiberType(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return fiber.type;\n case 16:\n return \"Lazy\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 0:\n case 15:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n case 11:\n return (\n (fiber = fiber.type.render), fiber.displayName || fiber.name || null\n );\n case 1:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n default:\n return null;\n }\n }\n function describeTextNode(content, maxLength) {\n return needsEscaping.test(content)\n ? ((content = JSON.stringify(content)),\n content.length > maxLength - 2\n ? 8 > maxLength\n ? '{\"...\"}'\n : \"{\" + content.slice(0, maxLength - 7) + '...\"}'\n : \"{\" + content + \"}\")\n : content.length > maxLength\n ? 5 > maxLength\n ? '{\"...\"}'\n : content.slice(0, maxLength - 3) + \"...\"\n : content;\n }\n function describeTextDiff(clientText, serverProps, indent) {\n var maxLength = 120 - 2 * indent;\n if (null === serverProps)\n return added(indent) + describeTextNode(clientText, maxLength) + \"\\n\";\n if (\"string\" === typeof serverProps) {\n for (\n var firstDiff = 0;\n firstDiff < serverProps.length &&\n firstDiff < clientText.length &&\n serverProps.charCodeAt(firstDiff) ===\n clientText.charCodeAt(firstDiff);\n firstDiff++\n );\n firstDiff > maxLength - 8 &&\n 10 < firstDiff &&\n ((clientText = \"...\" + clientText.slice(firstDiff - 8)),\n (serverProps = \"...\" + serverProps.slice(firstDiff - 8)));\n return (\n added(indent) +\n describeTextNode(clientText, maxLength) +\n \"\\n\" +\n removed(indent) +\n describeTextNode(serverProps, maxLength) +\n \"\\n\"\n );\n }\n return (\n indentation(indent) + describeTextNode(clientText, maxLength) + \"\\n\"\n );\n }\n function objectName(object) {\n return Object.prototype.toString\n .call(object)\n .replace(/^\\[object (.*)\\]$/, function (m, p0) {\n return p0;\n });\n }\n function describeValue(value, maxLength) {\n switch (typeof value) {\n case \"string\":\n return (\n (value = JSON.stringify(value)),\n value.length > maxLength\n ? 5 > maxLength\n ? '\"...\"'\n : value.slice(0, maxLength - 4) + '...\"'\n : value\n );\n case \"object\":\n if (null === value) return \"null\";\n if (isArrayImpl(value)) return \"[...]\";\n if (value.$$typeof === REACT_ELEMENT_TYPE)\n return (maxLength = getComponentNameFromType(value.type))\n ? \"<\" + maxLength + \">\"\n : \"<...>\";\n var name = objectName(value);\n if (\"Object\" === name) {\n name = \"\";\n maxLength -= 2;\n for (var propName in value)\n if (value.hasOwnProperty(propName)) {\n var jsonPropName = JSON.stringify(propName);\n jsonPropName !== '\"' + propName + '\"' &&\n (propName = jsonPropName);\n maxLength -= propName.length - 2;\n jsonPropName = describeValue(\n value[propName],\n 15 > maxLength ? maxLength : 15\n );\n maxLength -= jsonPropName.length;\n if (0 > maxLength) {\n name += \"\" === name ? \"...\" : \", ...\";\n break;\n }\n name +=\n (\"\" === name ? \"\" : \",\") + propName + \":\" + jsonPropName;\n }\n return \"{\" + name + \"}\";\n }\n return name;\n case \"function\":\n return (maxLength = value.displayName || value.name)\n ? \"function \" + maxLength\n : \"function\";\n default:\n return String(value);\n }\n }\n function describePropValue(value, maxLength) {\n return \"string\" !== typeof value || needsEscaping.test(value)\n ? \"{\" + describeValue(value, maxLength - 2) + \"}\"\n : value.length > maxLength - 2\n ? 5 > maxLength\n ? '\"...\"'\n : '\"' + value.slice(0, maxLength - 5) + '...\"'\n : '\"' + value + '\"';\n }\n function describeExpandedElement(type, props, rowPrefix) {\n var remainingRowLength = 120 - rowPrefix.length - type.length,\n properties = [],\n propName;\n for (propName in props)\n if (props.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(\n props[propName],\n 120 - rowPrefix.length - propName.length - 1\n );\n remainingRowLength -= propName.length + propValue.length + 2;\n properties.push(propName + \"=\" + propValue);\n }\n return 0 === properties.length\n ? rowPrefix + \"<\" + type + \">\\n\"\n : 0 < remainingRowLength\n ? rowPrefix + \"<\" + type + \" \" + properties.join(\" \") + \">\\n\"\n : rowPrefix +\n \"<\" +\n type +\n \"\\n\" +\n rowPrefix +\n \" \" +\n properties.join(\"\\n\" + rowPrefix + \" \") +\n \"\\n\" +\n rowPrefix +\n \">\\n\";\n }\n function describePropertiesDiff(clientObject, serverObject, indent) {\n var properties = \"\",\n remainingServerProperties = assign({}, serverObject),\n propName;\n for (propName in clientObject)\n if (clientObject.hasOwnProperty(propName)) {\n delete remainingServerProperties[propName];\n var maxLength = 120 - 2 * indent - propName.length - 2,\n clientPropValue = describeValue(clientObject[propName], maxLength);\n serverObject.hasOwnProperty(propName)\n ? ((maxLength = describeValue(serverObject[propName], maxLength)),\n (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\"),\n (properties +=\n removed(indent) + propName + \": \" + maxLength + \"\\n\"))\n : (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\");\n }\n for (var _propName in remainingServerProperties)\n remainingServerProperties.hasOwnProperty(_propName) &&\n ((clientObject = describeValue(\n remainingServerProperties[_propName],\n 120 - 2 * indent - _propName.length - 2\n )),\n (properties +=\n removed(indent) + _propName + \": \" + clientObject + \"\\n\"));\n return properties;\n }\n function describeElementDiff(type, clientProps, serverProps, indent) {\n var content = \"\",\n serverPropNames = new Map();\n for (propName$jscomp$0 in serverProps)\n serverProps.hasOwnProperty(propName$jscomp$0) &&\n serverPropNames.set(\n propName$jscomp$0.toLowerCase(),\n propName$jscomp$0\n );\n if (1 === serverPropNames.size && serverPropNames.has(\"children\"))\n content += describeExpandedElement(\n type,\n clientProps,\n indentation(indent)\n );\n else {\n for (var _propName2 in clientProps)\n if (\n clientProps.hasOwnProperty(_propName2) &&\n \"children\" !== _propName2\n ) {\n var maxLength$jscomp$0 =\n 120 - 2 * (indent + 1) - _propName2.length - 1,\n serverPropName = serverPropNames.get(_propName2.toLowerCase());\n if (void 0 !== serverPropName) {\n serverPropNames.delete(_propName2.toLowerCase());\n var propName$jscomp$0 = clientProps[_propName2];\n serverPropName = serverProps[serverPropName];\n var clientPropValue = describePropValue(\n propName$jscomp$0,\n maxLength$jscomp$0\n );\n maxLength$jscomp$0 = describePropValue(\n serverPropName,\n maxLength$jscomp$0\n );\n \"object\" === typeof propName$jscomp$0 &&\n null !== propName$jscomp$0 &&\n \"object\" === typeof serverPropName &&\n null !== serverPropName &&\n \"Object\" === objectName(propName$jscomp$0) &&\n \"Object\" === objectName(serverPropName) &&\n (2 < Object.keys(propName$jscomp$0).length ||\n 2 < Object.keys(serverPropName).length ||\n -1 < clientPropValue.indexOf(\"...\") ||\n -1 < maxLength$jscomp$0.indexOf(\"...\"))\n ? (content +=\n indentation(indent + 1) +\n _propName2 +\n \"={{\\n\" +\n describePropertiesDiff(\n propName$jscomp$0,\n serverPropName,\n indent + 2\n ) +\n indentation(indent + 1) +\n \"}}\\n\")\n : ((content +=\n added(indent + 1) +\n _propName2 +\n \"=\" +\n clientPropValue +\n \"\\n\"),\n (content +=\n removed(indent + 1) +\n _propName2 +\n \"=\" +\n maxLength$jscomp$0 +\n \"\\n\"));\n } else\n content +=\n indentation(indent + 1) +\n _propName2 +\n \"=\" +\n describePropValue(clientProps[_propName2], maxLength$jscomp$0) +\n \"\\n\";\n }\n serverPropNames.forEach(function (propName) {\n if (\"children\" !== propName) {\n var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;\n content +=\n removed(indent + 1) +\n propName +\n \"=\" +\n describePropValue(serverProps[propName], maxLength) +\n \"\\n\";\n }\n });\n content =\n \"\" === content\n ? indentation(indent) + \"<\" + type + \">\\n\"\n : indentation(indent) +\n \"<\" +\n type +\n \"\\n\" +\n content +\n indentation(indent) +\n \">\\n\";\n }\n type = serverProps.children;\n clientProps = clientProps.children;\n if (\n \"string\" === typeof type ||\n \"number\" === typeof type ||\n \"bigint\" === typeof type\n ) {\n serverPropNames = \"\";\n if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n serverPropNames = \"\" + clientProps;\n content += describeTextDiff(serverPropNames, \"\" + type, indent + 1);\n } else if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n content =\n null == type\n ? content + describeTextDiff(\"\" + clientProps, null, indent + 1)\n : content + describeTextDiff(\"\" + clientProps, void 0, indent + 1);\n return content;\n }\n function describeSiblingFiber(fiber, indent) {\n var type = describeFiberType(fiber);\n if (null === type) {\n type = \"\";\n for (fiber = fiber.child; fiber; )\n (type += describeSiblingFiber(fiber, indent)),\n (fiber = fiber.sibling);\n return type;\n }\n return indentation(indent) + \"<\" + type + \">\\n\";\n }\n function describeNode(node, indent) {\n var skipToNode = findNotableNode(node, indent);\n if (\n skipToNode !== node &&\n (1 !== node.children.length || node.children[0] !== skipToNode)\n )\n return (\n indentation(indent) + \"...\\n\" + describeNode(skipToNode, indent + 1)\n );\n skipToNode = \"\";\n var debugInfo = node.fiber._debugInfo;\n if (debugInfo)\n for (var i = 0; i < debugInfo.length; i++) {\n var serverComponentName = debugInfo[i].name;\n \"string\" === typeof serverComponentName &&\n ((skipToNode +=\n indentation(indent) + \"<\" + serverComponentName + \">\\n\"),\n indent++);\n }\n debugInfo = \"\";\n i = node.fiber.pendingProps;\n if (6 === node.fiber.tag)\n (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;\n else if (\n ((serverComponentName = describeFiberType(node.fiber)),\n null !== serverComponentName)\n )\n if (void 0 === node.serverProps) {\n debugInfo = indent;\n var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,\n content = \"\";\n for (propName in i)\n if (i.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(i[propName], 15);\n maxLength -= propName.length + propValue.length + 2;\n if (0 > maxLength) {\n content += \" ...\";\n break;\n }\n content += \" \" + propName + \"=\" + propValue;\n }\n debugInfo =\n indentation(debugInfo) +\n \"<\" +\n serverComponentName +\n content +\n \">\\n\";\n indent++;\n } else\n null === node.serverProps\n ? ((debugInfo = describeExpandedElement(\n serverComponentName,\n i,\n added(indent)\n )),\n indent++)\n : \"string\" === typeof node.serverProps\n ? console.error(\n \"Should not have matched a non HostText fiber to a Text node. This is a bug in React.\"\n )\n : ((debugInfo = describeElementDiff(\n serverComponentName,\n i,\n node.serverProps,\n indent\n )),\n indent++);\n var propName = \"\";\n i = node.fiber.child;\n for (\n serverComponentName = 0;\n i && serverComponentName < node.children.length;\n\n )\n (maxLength = node.children[serverComponentName]),\n maxLength.fiber === i\n ? ((propName += describeNode(maxLength, indent)),\n serverComponentName++)\n : (propName += describeSiblingFiber(i, indent)),\n (i = i.sibling);\n i &&\n 0 < node.children.length &&\n (propName += indentation(indent) + \"...\\n\");\n i = node.serverTail;\n null === node.serverProps && indent--;\n for (node = 0; node < i.length; node++)\n (serverComponentName = i[node]),\n (propName =\n \"string\" === typeof serverComponentName\n ? propName +\n (removed(indent) +\n describeTextNode(serverComponentName, 120 - 2 * indent) +\n \"\\n\")\n : propName +\n describeExpandedElement(\n serverComponentName.type,\n serverComponentName.props,\n removed(indent)\n ));\n return skipToNode + debugInfo + propName;\n }\n function describeDiff(rootNode) {\n try {\n return \"\\n\\n\" + describeNode(rootNode, 0);\n } catch (x) {\n return \"\";\n }\n }\n function describeAncestors(ancestor, child, props) {\n for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )\n fiber === ancestor && (distanceFromLeaf = 0),\n (node = {\n fiber: fiber,\n children: null !== node ? [node] : [],\n serverProps:\n fiber === child ? props : fiber === ancestor ? null : void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n }),\n distanceFromLeaf++,\n (fiber = fiber.return);\n return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, \">\") : \"\";\n }\n function updatedAncestorInfoDev(oldInfo, tag) {\n oldInfo = assign({}, oldInfo || emptyAncestorInfoDev);\n var info = { tag: tag };\n -1 !== inScopeTags.indexOf(tag) &&\n ((oldInfo.aTagInScope = null),\n (oldInfo.buttonTagInScope = null),\n (oldInfo.nobrTagInScope = null));\n -1 !== buttonScopeTags.indexOf(tag) && (oldInfo.pTagInButtonScope = null);\n -1 !== specialTags.indexOf(tag) &&\n \"address\" !== tag &&\n \"div\" !== tag &&\n \"p\" !== tag &&\n ((oldInfo.listItemTagAutoclosing = null),\n (oldInfo.dlItemTagAutoclosing = null));\n oldInfo.current = info;\n \"form\" === tag && (oldInfo.formTag = info);\n \"a\" === tag && (oldInfo.aTagInScope = info);\n \"button\" === tag && (oldInfo.buttonTagInScope = info);\n \"nobr\" === tag && (oldInfo.nobrTagInScope = info);\n \"p\" === tag && (oldInfo.pTagInButtonScope = info);\n \"li\" === tag && (oldInfo.listItemTagAutoclosing = info);\n if (\"dd\" === tag || \"dt\" === tag) oldInfo.dlItemTagAutoclosing = info;\n \"#document\" === tag || \"html\" === tag\n ? (oldInfo.containerTagInScope = null)\n : oldInfo.containerTagInScope || (oldInfo.containerTagInScope = info);\n return oldInfo;\n }\n function isTagValidWithParent(tag, parentTag) {\n switch (parentTag) {\n case \"select\":\n return (\n \"hr\" === tag ||\n \"option\" === tag ||\n \"optgroup\" === tag ||\n \"#text\" === tag\n );\n case \"optgroup\":\n return \"option\" === tag || \"#text\" === tag;\n case \"option\":\n return \"#text\" === tag;\n case \"tr\":\n return (\n \"th\" === tag ||\n \"td\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"tbody\":\n case \"thead\":\n case \"tfoot\":\n return (\n \"tr\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"colgroup\":\n return \"col\" === tag || \"template\" === tag;\n case \"table\":\n return (\n \"caption\" === tag ||\n \"colgroup\" === tag ||\n \"tbody\" === tag ||\n \"tfoot\" === tag ||\n \"thead\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"head\":\n return (\n \"base\" === tag ||\n \"basefont\" === tag ||\n \"bgsound\" === tag ||\n \"link\" === tag ||\n \"meta\" === tag ||\n \"title\" === tag ||\n \"noscript\" === tag ||\n \"noframes\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"html\":\n return \"head\" === tag || \"body\" === tag || \"frameset\" === tag;\n case \"frameset\":\n return \"frame\" === tag;\n case \"#document\":\n return \"html\" === tag;\n }\n switch (tag) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return (\n \"h1\" !== parentTag &&\n \"h2\" !== parentTag &&\n \"h3\" !== parentTag &&\n \"h4\" !== parentTag &&\n \"h5\" !== parentTag &&\n \"h6\" !== parentTag\n );\n case \"rp\":\n case \"rt\":\n return -1 === impliedEndTags.indexOf(parentTag);\n case \"body\":\n case \"caption\":\n case \"col\":\n case \"colgroup\":\n case \"frameset\":\n case \"frame\":\n case \"head\":\n case \"html\":\n case \"tbody\":\n case \"td\":\n case \"tfoot\":\n case \"th\":\n case \"thead\":\n case \"tr\":\n return null == parentTag;\n }\n return !0;\n }\n function findInvalidAncestorForTag(tag, ancestorInfo) {\n switch (tag) {\n case \"address\":\n case \"article\":\n case \"aside\":\n case \"blockquote\":\n case \"center\":\n case \"details\":\n case \"dialog\":\n case \"dir\":\n case \"div\":\n case \"dl\":\n case \"fieldset\":\n case \"figcaption\":\n case \"figure\":\n case \"footer\":\n case \"header\":\n case \"hgroup\":\n case \"main\":\n case \"menu\":\n case \"nav\":\n case \"ol\":\n case \"p\":\n case \"section\":\n case \"summary\":\n case \"ul\":\n case \"pre\":\n case \"listing\":\n case \"table\":\n case \"hr\":\n case \"xmp\":\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return ancestorInfo.pTagInButtonScope;\n case \"form\":\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n case \"li\":\n return ancestorInfo.listItemTagAutoclosing;\n case \"dd\":\n case \"dt\":\n return ancestorInfo.dlItemTagAutoclosing;\n case \"button\":\n return ancestorInfo.buttonTagInScope;\n case \"a\":\n return ancestorInfo.aTagInScope;\n case \"nobr\":\n return ancestorInfo.nobrTagInScope;\n }\n return null;\n }\n function findAncestor(parent, tagName) {\n for (; parent; ) {\n switch (parent.tag) {\n case 5:\n case 26:\n case 27:\n if (parent.type === tagName) return parent;\n }\n parent = parent.return;\n }\n return null;\n }\n function validateDOMNesting(childTag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfoDev;\n var parentInfo = ancestorInfo.current;\n ancestorInfo = (parentInfo = isTagValidWithParent(\n childTag,\n parentInfo && parentInfo.tag\n )\n ? null\n : parentInfo)\n ? null\n : findInvalidAncestorForTag(childTag, ancestorInfo);\n ancestorInfo = parentInfo || ancestorInfo;\n if (!ancestorInfo) return !0;\n ancestorInfo = ancestorInfo.tag;\n var warnKey = String(!!parentInfo) + \"|\" + childTag + \"|\" + ancestorInfo;\n if (didWarn[warnKey]) return !1;\n didWarn[warnKey] = !0;\n var ancestor = (warnKey = current)\n ? findAncestor(warnKey.return, ancestorInfo)\n : null;\n warnKey =\n null !== warnKey && null !== ancestor\n ? describeAncestors(ancestor, warnKey, null)\n : \"\";\n ancestor = \"<\" + childTag + \">\";\n parentInfo\n ? ((parentInfo = \"\"),\n \"table\" === ancestorInfo &&\n \"tr\" === childTag &&\n (parentInfo +=\n \" Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser.\"),\n console.error(\n \"In HTML, %s cannot be a child of <%s>.%s\\nThis will cause a hydration error.%s\",\n ancestor,\n ancestorInfo,\n parentInfo,\n warnKey\n ))\n : console.error(\n \"In HTML, %s cannot be a descendant of <%s>.\\nThis will cause a hydration error.%s\",\n ancestor,\n ancestorInfo,\n warnKey\n );\n return !1;\n }\n function validateTextNesting(childText, parentTag) {\n if (isTagValidWithParent(\"#text\", parentTag)) return !0;\n var warnKey = \"#text|\" + parentTag;\n if (didWarn[warnKey]) return !1;\n didWarn[warnKey] = !0;\n var ancestor = (warnKey = current)\n ? findAncestor(warnKey, parentTag)\n : null;\n warnKey =\n null !== warnKey && null !== ancestor\n ? describeAncestors(\n ancestor,\n warnKey,\n 6 !== warnKey.tag ? { children: null } : null\n )\n : \"\";\n /\\S/.test(childText)\n ? console.error(\n \"In HTML, text nodes cannot be a child of <%s>.\\nThis will cause a hydration error.%s\",\n parentTag,\n warnKey\n )\n : console.error(\n \"In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\\nThis will cause a hydration error.%s\",\n parentTag,\n warnKey\n );\n return !1;\n }\n function setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n }\n function camelize(string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n }\n function setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n isCustomProperty ||\n (-1 < styleName.indexOf(\"-\")\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported style property %s. Did you mean %s?\",\n styleName,\n camelize(styleName.replace(msPattern, \"ms-\"))\n ))\n : badVendoredStyleNamePattern.test(styleName)\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported vendor-prefixed style property %s. Did you mean %s?\",\n styleName,\n styleName.charAt(0).toUpperCase() + styleName.slice(1)\n ))\n : !badStyleValueWithSemicolonPattern.test(value) ||\n (warnedStyleValues.hasOwnProperty(value) &&\n warnedStyleValues[value]) ||\n ((warnedStyleValues[value] = !0),\n console.error(\n 'Style property values shouldn\\'t contain a semicolon. Try \"%s: %s\" instead.',\n styleName,\n value.replace(badStyleValueWithSemicolonPattern, \"\")\n )),\n \"number\" === typeof value &&\n (isNaN(value)\n ? warnedForNaNValue ||\n ((warnedForNaNValue = !0),\n console.error(\n \"`NaN` is an invalid value for the `%s` css style property.\",\n styleName\n ))\n : isFinite(value) ||\n warnedForInfinityValue ||\n ((warnedForInfinityValue = !0),\n console.error(\n \"`Infinity` is an invalid value for the `%s` css style property.\",\n styleName\n ))));\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (checkCSSPropertyStringCoercion(value, styleName),\n (style[styleName] = (\"\" + value).trim()))\n : (style[styleName] = value + \"px\");\n }\n function setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n styles && Object.freeze(styles);\n node = node.style;\n if (null != prevStyles) {\n if (styles) {\n var expandedUpdates = {};\n if (prevStyles)\n for (var key in prevStyles)\n if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))\n for (\n var longhands = shorthandToLonghand[key] || [key], i = 0;\n i < longhands.length;\n i++\n )\n expandedUpdates[longhands[i]] = key;\n for (var _key in styles)\n if (\n styles.hasOwnProperty(_key) &&\n (!prevStyles || prevStyles[_key] !== styles[_key])\n )\n for (\n key = shorthandToLonghand[_key] || [_key], longhands = 0;\n longhands < key.length;\n longhands++\n )\n expandedUpdates[key[longhands]] = _key;\n _key = {};\n for (var key$jscomp$0 in styles)\n for (\n key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],\n longhands = 0;\n longhands < key.length;\n longhands++\n )\n _key[key[longhands]] = key$jscomp$0;\n key$jscomp$0 = {};\n for (var _key2 in expandedUpdates)\n if (\n ((key = expandedUpdates[_key2]),\n (longhands = _key[_key2]) &&\n key !== longhands &&\n ((i = key + \",\" + longhands), !key$jscomp$0[i]))\n ) {\n key$jscomp$0[i] = !0;\n i = console;\n var value = styles[key];\n i.error.call(\n i,\n \"%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.\",\n null == value || \"boolean\" === typeof value || \"\" === value\n ? \"Removing\"\n : \"Updating\",\n key,\n longhands\n );\n }\n }\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var _styleName in styles)\n (_key2 = styles[_styleName]),\n styles.hasOwnProperty(_styleName) &&\n prevStyles[_styleName] !== _key2 &&\n setValueForStyle(node, _styleName, _key2);\n } else\n for (expandedUpdates in styles)\n styles.hasOwnProperty(expandedUpdates) &&\n setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);\n }\n function isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n }\n function getAttributeAlias(name) {\n return aliases.get(name) || name;\n }\n function validateProperty$1(tagName, name) {\n if (\n hasOwnProperty.call(warnedProperties$1, name) &&\n warnedProperties$1[name]\n )\n return !0;\n if (rARIACamel$1.test(name)) {\n tagName = \"aria-\" + name.slice(4).toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.\",\n name\n ),\n (warnedProperties$1[name] = !0)\n );\n if (name !== tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0)\n );\n }\n if (rARIA$1.test(name)) {\n tagName = name.toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName) return (warnedProperties$1[name] = !0), !1;\n name !== tagName &&\n (console.error(\n \"Unknown ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0));\n }\n return !0;\n }\n function validateProperties$2(type, props) {\n var invalidProps = [],\n key;\n for (key in props)\n validateProperty$1(type, key) || invalidProps.push(key);\n props = invalidProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === invalidProps.length\n ? console.error(\n \"Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n )\n : 1 < invalidProps.length &&\n console.error(\n \"Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n );\n }\n function validateProperty(tagName, name, value, eventRegistry) {\n if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])\n return !0;\n var lowerCasedName = name.toLowerCase();\n if (\"onfocusin\" === lowerCasedName || \"onfocusout\" === lowerCasedName)\n return (\n console.error(\n \"React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"function\" === typeof value &&\n ((\"form\" === tagName && \"action\" === name) ||\n (\"input\" === tagName && \"formAction\" === name) ||\n (\"button\" === tagName && \"formAction\" === name))\n )\n return !0;\n if (null != eventRegistry) {\n tagName = eventRegistry.possibleRegistrationNames;\n if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))\n return !0;\n eventRegistry = tagName.hasOwnProperty(lowerCasedName)\n ? tagName[lowerCasedName]\n : null;\n if (null != eventRegistry)\n return (\n console.error(\n \"Invalid event handler property `%s`. Did you mean `%s`?\",\n name,\n eventRegistry\n ),\n (warnedProperties[name] = !0)\n );\n if (EVENT_NAME_REGEX.test(name))\n return (\n console.error(\n \"Unknown event handler property `%s`. It will be ignored.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n } else if (EVENT_NAME_REGEX.test(name))\n return (\n INVALID_EVENT_NAME_REGEX.test(name) &&\n console.error(\n \"Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (rARIA.test(name) || rARIACamel.test(name)) return !0;\n if (\"innerhtml\" === lowerCasedName)\n return (\n console.error(\n \"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\"aria\" === lowerCasedName)\n return (\n console.error(\n \"The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"is\" === lowerCasedName &&\n null !== value &&\n void 0 !== value &&\n \"string\" !== typeof value\n )\n return (\n console.error(\n \"Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.\",\n typeof value\n ),\n (warnedProperties[name] = !0)\n );\n if (\"number\" === typeof value && isNaN(value))\n return (\n console.error(\n \"Received NaN for the `%s` attribute. If this is expected, cast the value to a string.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n if (\n ((lowerCasedName = possibleStandardNames[lowerCasedName]),\n lowerCasedName !== name)\n )\n return (\n console.error(\n \"Invalid DOM property `%s`. Did you mean `%s`?\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n } else if (name !== lowerCasedName)\n return (\n console.error(\n \"React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n switch (name) {\n case \"dangerouslySetInnerHTML\":\n case \"children\":\n case \"style\":\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n return !0;\n case \"innerText\":\n case \"textContent\":\n return !0;\n }\n switch (typeof value) {\n case \"boolean\":\n switch (name) {\n case \"autoFocus\":\n case \"checked\":\n case \"multiple\":\n case \"muted\":\n case \"selected\":\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"capture\":\n case \"download\":\n case \"inert\":\n return !0;\n default:\n lowerCasedName = name.toLowerCase().slice(0, 5);\n if (\"data-\" === lowerCasedName || \"aria-\" === lowerCasedName)\n return !0;\n value\n ? console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.',\n value,\n name,\n name,\n value,\n name\n )\n : console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',\n value,\n name,\n name,\n value,\n name,\n name,\n name\n );\n return (warnedProperties[name] = !0);\n }\n case \"function\":\n case \"symbol\":\n return (warnedProperties[name] = !0), !1;\n case \"string\":\n if (\"false\" === value || \"true\" === value) {\n switch (name) {\n case \"checked\":\n case \"selected\":\n case \"multiple\":\n case \"muted\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"inert\":\n break;\n default:\n return !0;\n }\n console.error(\n \"Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?\",\n value,\n name,\n \"false\" === value\n ? \"The browser will interpret it as a truthy value.\"\n : 'Although this works, it will not work as expected if you pass the string \"false\".',\n name,\n value\n );\n warnedProperties[name] = !0;\n }\n }\n return !0;\n }\n function warnUnknownProperties(type, props, eventRegistry) {\n var unknownProps = [],\n key;\n for (key in props)\n validateProperty(type, key, props[key], eventRegistry) ||\n unknownProps.push(key);\n props = unknownProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === unknownProps.length\n ? console.error(\n \"Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n )\n : 1 < unknownProps.length &&\n console.error(\n \"Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n );\n }\n function sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n }\n function getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n }\n function restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (\n ((target = internalInstance.stateNode), internalInstance.type)\n ) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n checkAttributeStringCoercion(internalInstance, \"name\");\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps)\n throw Error(\n \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\"\n );\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form &&\n updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n }\n function batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n }\n function getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof stateNode +\n \"` type.\"\n );\n return stateNode;\n }\n function getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n }\n function getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n }\n function functionThatReturnsTrue() {\n return !0;\n }\n function functionThatReturnsFalse() {\n return !1;\n }\n function createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue &&\n (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n }\n function modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n }\n function getEventModifierState() {\n return modifierStateGetter;\n }\n function isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return nativeEvent.keyCode !== START_KEYCODE;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n }\n function getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n }\n function getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (nativeEvent.which !== SPACEBAR_CODE) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress\n ? null\n : domEventName\n );\n default:\n return null;\n }\n }\n function getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(\n nativeEvent.ctrlKey ||\n nativeEvent.altKey ||\n nativeEvent.metaKey\n ) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which)\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n }\n function isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n }\n function isEventSupported(eventNameSuffix) {\n if (!canUseDOM) return !1;\n eventNameSuffix = \"on\" + eventNameSuffix;\n var isSupported = eventNameSuffix in document;\n isSupported ||\n ((isSupported = document.createElement(\"div\")),\n isSupported.setAttribute(eventNameSuffix, \"return;\"),\n (isSupported = \"function\" === typeof isSupported[eventNameSuffix]));\n return isSupported;\n }\n function createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n ) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n }\n function runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n }\n function getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n }\n function getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n }\n function stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n }\n function handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n }\n function handleEventsForInputEventPolyfill(\n domEventName,\n target,\n targetInst\n ) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n }\n function getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n }\n function getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n }\n function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n }\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n }\n function getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n }\n function getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n }\n function containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n }\n function getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n }\n function hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n }\n function restoreSelection(priorSelectionInformation, containerInfo) {\n var curFocusedElem = getActiveElementDeep(containerInfo);\n containerInfo = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n if (\n curFocusedElem !== containerInfo &&\n containerInfo &&\n containerInfo.ownerDocument &&\n containsNode(containerInfo.ownerDocument.documentElement, containerInfo)\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(containerInfo)\n )\n if (\n ((priorSelectionInformation = priorSelectionRange.start),\n (curFocusedElem = priorSelectionRange.end),\n void 0 === curFocusedElem &&\n (curFocusedElem = priorSelectionInformation),\n \"selectionStart\" in containerInfo)\n )\n (containerInfo.selectionStart = priorSelectionInformation),\n (containerInfo.selectionEnd = Math.min(\n curFocusedElem,\n containerInfo.value.length\n ));\n else if (\n ((curFocusedElem =\n ((priorSelectionInformation =\n containerInfo.ownerDocument || document) &&\n priorSelectionInformation.defaultView) ||\n window),\n curFocusedElem.getSelection)\n ) {\n curFocusedElem = curFocusedElem.getSelection();\n var length = containerInfo.textContent.length,\n start = Math.min(priorSelectionRange.start, length);\n priorSelectionRange =\n void 0 === priorSelectionRange.end\n ? start\n : Math.min(priorSelectionRange.end, length);\n !curFocusedElem.extend &&\n start > priorSelectionRange &&\n ((length = priorSelectionRange),\n (priorSelectionRange = start),\n (start = length));\n length = getNodeForCharacterOffset(containerInfo, start);\n var endMarker = getNodeForCharacterOffset(\n containerInfo,\n priorSelectionRange\n );\n length &&\n endMarker &&\n (1 !== curFocusedElem.rangeCount ||\n curFocusedElem.anchorNode !== length.node ||\n curFocusedElem.anchorOffset !== length.offset ||\n curFocusedElem.focusNode !== endMarker.node ||\n curFocusedElem.focusOffset !== endMarker.offset) &&\n ((priorSelectionInformation =\n priorSelectionInformation.createRange()),\n priorSelectionInformation.setStart(length.node, length.offset),\n curFocusedElem.removeAllRanges(),\n start > priorSelectionRange\n ? (curFocusedElem.addRange(priorSelectionInformation),\n curFocusedElem.extend(endMarker.node, endMarker.offset))\n : (priorSelectionInformation.setEnd(\n endMarker.node,\n endMarker.offset\n ),\n curFocusedElem.addRange(priorSelectionInformation)));\n }\n priorSelectionInformation = [];\n for (\n curFocusedElem = containerInfo;\n (curFocusedElem = curFocusedElem.parentNode);\n\n )\n 1 === curFocusedElem.nodeType &&\n priorSelectionInformation.push({\n element: curFocusedElem,\n left: curFocusedElem.scrollLeft,\n top: curFocusedElem.scrollTop\n });\n \"function\" === typeof containerInfo.focus && containerInfo.focus();\n for (\n containerInfo = 0;\n containerInfo < priorSelectionInformation.length;\n containerInfo++\n )\n (curFocusedElem = priorSelectionInformation[containerInfo]),\n (curFocusedElem.element.scrollLeft = curFocusedElem.left),\n (curFocusedElem.element.scrollTop = curFocusedElem.top);\n }\n }\n function constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n ) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n }\n function makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n }\n function getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n }\n function registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n }\n function finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n }\n function enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n }\n function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber ||\n sourceFiber._visibility & OffscreenVisible ||\n (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n isHidden &&\n null !== update &&\n 3 === sourceFiber.tag &&\n ((parent = sourceFiber.stateNode),\n (isHidden = 31 - clz32(lane)),\n (parent = parent.hiddenUpdates),\n (sourceFiber = parent[isHidden]),\n null === sourceFiber\n ? (parent[isHidden] = [update])\n : sourceFiber.push(update),\n (update.lane = lane | 536870912));\n }\n function getRootForUpdatedFiber(sourceFiber) {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT)\n throw (\n ((nestedPassiveUpdateCount = nestedUpdateCount = 0),\n (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),\n Error(\n \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n ))\n );\n nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&\n ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null),\n console.error(\n \"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.\"\n ));\n null === sourceFiber.alternate &&\n 0 !== (sourceFiber.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n for (var node = sourceFiber, parent = node.return; null !== parent; )\n null === node.alternate &&\n 0 !== (node.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),\n (node = parent),\n (parent = node.return);\n return 3 === node.tag ? node.stateNode : null;\n }\n function resolveFunctionForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family ? type : family.current;\n }\n function resolveForwardRefForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family\n ? null !== type &&\n void 0 !== type &&\n \"function\" === typeof type.render &&\n ((family = resolveFunctionForHotReloading(type.render)),\n type.render !== family)\n ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),\n void 0 !== type.displayName &&\n (family.displayName = type.displayName),\n family)\n : type\n : family.current;\n }\n function isCompatibleFamilyForHotReloading(fiber, element) {\n if (null === resolveFamily) return !1;\n var prevType = fiber.elementType;\n element = element.type;\n var needsCompareFamilies = !1,\n $$typeofNextType =\n \"object\" === typeof element && null !== element\n ? element.$$typeof\n : null;\n switch (fiber.tag) {\n case 1:\n \"function\" === typeof element && (needsCompareFamilies = !0);\n break;\n case 0:\n \"function\" === typeof element\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 11:\n $$typeofNextType === REACT_FORWARD_REF_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 14:\n case 15:\n $$typeofNextType === REACT_MEMO_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n default:\n return !1;\n }\n return needsCompareFamilies &&\n ((fiber = resolveFamily(prevType)),\n void 0 !== fiber && fiber === resolveFamily(element))\n ? !0\n : !1;\n }\n function markFailedErrorBoundaryForHotReloading(fiber) {\n null !== resolveFamily &&\n \"function\" === typeof WeakSet &&\n (null === failedBoundaries && (failedBoundaries = new WeakSet()),\n failedBoundaries.add(fiber));\n }\n function scheduleFibersWithFamiliesRecursively(\n fiber,\n updatedFamilies,\n staleFamilies\n ) {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type,\n candidateType = null;\n switch (tag) {\n case 0:\n case 15:\n case 1:\n candidateType = type;\n break;\n case 11:\n candidateType = type.render;\n }\n if (null === resolveFamily)\n throw Error(\"Expected resolveFamily to be set during hot reload.\");\n var needsRender = !1;\n type = !1;\n null !== candidateType &&\n ((candidateType = resolveFamily(candidateType)),\n void 0 !== candidateType &&\n (staleFamilies.has(candidateType)\n ? (type = !0)\n : updatedFamilies.has(candidateType) &&\n (1 === tag ? (type = !0) : (needsRender = !0))));\n null !== failedBoundaries &&\n (failedBoundaries.has(fiber) ||\n (null !== alternate && failedBoundaries.has(alternate))) &&\n (type = !0);\n type && (fiber._debugNeedsRemount = !0);\n if (type || needsRender)\n (alternate = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);\n null === child ||\n type ||\n scheduleFibersWithFamiliesRecursively(\n child,\n updatedFamilies,\n staleFamilies\n );\n null !== sibling &&\n scheduleFibersWithFamiliesRecursively(\n sibling,\n updatedFamilies,\n staleFamilies\n );\n }\n function pushNestedEffectDurations() {\n var prevEffectDuration = profilerEffectDuration;\n profilerEffectDuration = 0;\n return prevEffectDuration;\n }\n function popNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration = prevEffectDuration;\n return elapsedTime;\n }\n function bubbleNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration += prevEffectDuration;\n return elapsedTime;\n }\n function startProfilerTimer(fiber) {\n profilerStartTime = now();\n 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);\n }\n function stopProfilerTimerIfRunningAndRecordDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n fiber.selfBaseDuration = elapsedTime;\n profilerStartTime = -1;\n }\n }\n function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n profilerStartTime = -1;\n }\n }\n function recordEffectDuration() {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n profilerStartTime = -1;\n profilerEffectDuration += elapsedTime;\n }\n }\n function startEffectTimer() {\n profilerStartTime = now();\n }\n function transferActualDuration(fiber) {\n for (var child = fiber.child; child; )\n (fiber.actualDuration += child.actualDuration), (child = child.sibling);\n }\n function createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n }\n function pushTreeFork(workInProgress, totalChildren) {\n warnIfNotHydrating();\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n }\n function pushTreeId(workInProgress, totalChildren, index) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n }\n function pushMaterializedTreeId(workInProgress) {\n warnIfNotHydrating();\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n }\n function popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n }\n function warnIfNotHydrating() {\n isHydrating ||\n console.error(\n \"Expected to be hydrating. This is a bug in React. Please file an issue.\"\n );\n }\n function buildHydrationDiffNode(fiber, distanceFromLeaf) {\n if (null === fiber.return) {\n if (null === hydrationDiffRootDEV)\n hydrationDiffRootDEV = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n else {\n if (hydrationDiffRootDEV.fiber !== fiber)\n throw Error(\n \"Saw multiple hydration diff roots in a pass. This is a bug in React.\"\n );\n hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&\n (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);\n }\n return hydrationDiffRootDEV;\n }\n var siblings = buildHydrationDiffNode(\n fiber.return,\n distanceFromLeaf + 1\n ).children;\n if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)\n return (\n (siblings = siblings[siblings.length - 1]),\n siblings.distanceFromLeaf > distanceFromLeaf &&\n (siblings.distanceFromLeaf = distanceFromLeaf),\n siblings\n );\n distanceFromLeaf = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n siblings.push(distanceFromLeaf);\n return distanceFromLeaf;\n }\n function warnNonHydratedInstance(fiber, rejectedCandidate) {\n didSuspendOrErrorDEV ||\n ((fiber = buildHydrationDiffNode(fiber, 0)),\n (fiber.serverProps = null),\n null !== rejectedCandidate &&\n ((rejectedCandidate =\n describeHydratableInstanceForDevWarnings(rejectedCandidate)),\n fiber.serverTail.push(rejectedCandidate)));\n }\n function throwOnHydrationMismatch(fiber) {\n var diff = \"\",\n diffRoot = hydrationDiffRootDEV;\n null !== diffRoot &&\n ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\nhttps://react.dev/link/hydration-mismatch\" +\n diff\n ),\n fiber\n )\n );\n throw HydrationMismatchException;\n }\n function prepareToHydrateHostInstance(fiber) {\n var didHydrate = fiber.stateNode;\n var type = fiber.type,\n props = fiber.memoizedProps;\n didHydrate[internalInstanceKey] = fiber;\n didHydrate[internalPropsKey] = props;\n validatePropertiesInDevelopment(type, props);\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", didHydrate);\n listenToNonDelegatedEvent(\"close\", didHydrate);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", didHydrate);\n break;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateInputProps(didHydrate, props);\n initInput(\n didHydrate,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n track(didHydrate);\n break;\n case \"option\":\n validateOptionProps(didHydrate, props);\n break;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateSelectProps(didHydrate, props);\n break;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props),\n listenToNonDelegatedEvent(\"invalid\", didHydrate),\n validateTextareaProps(didHydrate, props),\n initTextarea(\n didHydrate,\n props.value,\n props.defaultValue,\n props.children\n ),\n track(didHydrate);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n didHydrate.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(didHydrate.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", didHydrate),\n listenToNonDelegatedEvent(\"toggle\", didHydrate)),\n null != props.onScroll &&\n listenToNonDelegatedEvent(\"scroll\", didHydrate),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", didHydrate),\n null != props.onClick && (didHydrate.onclick = noop$1),\n (didHydrate = !0))\n : (didHydrate = !1);\n didHydrate || throwOnHydrationMismatch(fiber);\n }\n function popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 3:\n case 27:\n rootOrSingletonContext = !0;\n return;\n case 5:\n case 13:\n rootOrSingletonContext = !1;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n }\n function popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating)\n return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var shouldClear = !1,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) {\n if ((JSCompiler_temp = 5 === fiber.tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && (shouldClear = !0);\n if (shouldClear && nextHydratableInstance) {\n for (shouldClear = nextHydratableInstance; shouldClear; ) {\n JSCompiler_temp = buildHydrationDiffNode(fiber, 0);\n var description =\n describeHydratableInstanceForDevWarnings(shouldClear);\n JSCompiler_temp.serverTail.push(description);\n shouldClear =\n \"Suspense\" === description.type\n ? getNextHydratableInstanceAfterSuspenseInstance(shouldClear)\n : getNextHydratable(shouldClear.nextSibling);\n }\n throwOnHydrationMismatch(fiber);\n }\n popToNextHostParent(fiber);\n if (13 === fiber.tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextHydratableInstance =\n getNextHydratableInstanceAfterSuspenseInstance(fiber);\n } else\n nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null;\n return !0;\n }\n function resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n didSuspendOrErrorDEV = isHydrating = !1;\n }\n function queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n }\n function emitPendingHydrationWarnings() {\n var diffRoot = hydrationDiffRootDEV;\n null !== diffRoot &&\n ((hydrationDiffRootDEV = null),\n (diffRoot = describeDiff(diffRoot)),\n console.error(\n \"A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\n%s%s\",\n \"https://react.dev/link/hydration-mismatch\",\n diffRoot\n ));\n }\n function createThenableState() {\n return { didWarnAboutUncachedPromise: !1, thenables: [] };\n }\n function isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n }\n function noop$3() {}\n function trackUsedThenable(thenableState, thenable, index) {\n null !== ReactSharedInternals.actQueue &&\n (ReactSharedInternals.didUsePromise = !0);\n var trackedThenables = thenableState.thenables;\n index = trackedThenables[index];\n void 0 === index\n ? trackedThenables.push(thenable)\n : index !== thenable &&\n (thenableState.didWarnAboutUncachedPromise ||\n ((thenableState.didWarnAboutUncachedPromise = !0),\n console.error(\n \"A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.\"\n )),\n thenable.then(noop$3, noop$3),\n (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status)\n thenable.then(noop$3, noop$3);\n else {\n thenableState = workInProgressRoot;\n if (\n null !== thenableState &&\n 100 < thenableState.shellSuspendCounter\n )\n throw Error(\n \"async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n needsToResetSuspendedThenableDEV = !0;\n throw SuspenseException;\n }\n }\n function getSuspendedThenable() {\n if (null === suspendedThenable)\n throw Error(\n \"Expected a suspended thenable. This is a bug in React. Please file an issue.\"\n );\n var thenable = suspendedThenable;\n suspendedThenable = null;\n needsToResetSuspendedThenableDEV = !1;\n return thenable;\n }\n function checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (rejectedReason === SuspenseException)\n throw Error(\n \"Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n }\n function pushDebugInfo(debugInfo) {\n var previousDebugInfo = currentDebugInfo;\n null != debugInfo &&\n (currentDebugInfo =\n null === previousDebugInfo\n ? debugInfo\n : previousDebugInfo.concat(debugInfo));\n return previousDebugInfo;\n }\n function validateFragmentProps(element, fiber, returnFiber) {\n for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (\"children\" !== key && \"key\" !== key) {\n null === fiber &&\n ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),\n (fiber._debugInfo = currentDebugInfo),\n (fiber.return = returnFiber));\n runWithFiberInDEV(\n fiber,\n function (erroredKey) {\n console.error(\n \"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\",\n erroredKey\n );\n },\n key\n );\n break;\n }\n }\n }\n function unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = createThenableState());\n return trackUsedThenable(thenableState$1, thenable, index);\n }\n function coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n }\n function throwOnInvalidObjectType(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(\n 'A React Element from an older version of React was rendered. This is not supported. It can happen if:\\n- Multiple copies of the \"react\" package is used.\\n- A library pre-bundled an old copy of \"react\" or \"react/jsx-runtime\".\\n- A compiler tries to \"inline\" JSX instead of using the runtime.'\n );\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n function warnOnFunctionType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasFunctionTypeWarning[parentName] ||\n ((ownerHasFunctionTypeWarning[parentName] = !0),\n (invalidChild =\n invalidChild.displayName || invalidChild.name || \"Component\"),\n 3 === returnFiber.tag\n ? console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n root.render(%s)\",\n invalidChild,\n invalidChild,\n invalidChild\n )\n : console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n <%s>{%s}</%s>\",\n invalidChild,\n invalidChild,\n parentName,\n invalidChild,\n parentName\n ));\n }\n function warnOnSymbolType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasSymbolTypeWarning[parentName] ||\n ((ownerHasSymbolTypeWarning[parentName] = !0),\n (invalidChild = String(invalidChild)),\n 3 === returnFiber.tag\n ? console.error(\n \"Symbols are not valid as a React child.\\n root.render(%s)\",\n invalidChild\n )\n : console.error(\n \"Symbols are not valid as a React child.\\n <%s>%s</%s>\",\n parentName,\n invalidChild,\n parentName\n ));\n }\n function createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]),\n (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 33554434), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 33554434;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 33554434);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(\n textContent,\n returnFiber.mode,\n lanes\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (current = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n validateFragmentProps(element, current, returnFiber),\n current\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n isCompatibleFamilyForHotReloading(current, element) ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n (current._debugOwner = element._owner),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = createFiberFromElement(element, returnFiber.mode, lanes);\n coerceRef(current, element);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugOwner = returnFiber),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = createChild(returnFiber, newChild, lanes);\n currentDebugInfo = _prevDebugInfo;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (lanes = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = createChild(\n returnFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? ((key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild)) {\n if (null !== key) return null;\n key = pushDebugInfo(newChild._debugInfo);\n returnFiber = updateFragment(\n returnFiber,\n oldFiber,\n newChild,\n lanes,\n null\n );\n currentDebugInfo = key;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (newIdx =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n newIdx,\n newChild,\n lanes\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n );\n currentDebugInfo = _prevDebugInfo7;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newIdx = existingChildren.get(newIdx) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFragment(\n returnFiber,\n newIdx,\n newChild,\n lanes,\n null\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo7),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {\n if (\"object\" !== typeof child || null === child) return knownKeys;\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(returnFiber, workInProgress, child);\n var key = child.key;\n if (\"string\" !== typeof key) break;\n if (null === knownKeys) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n \"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \\u2014 the behavior is unsupported and could change in a future version.\",\n key\n );\n });\n break;\n case REACT_LAZY_TYPE:\n (child = callLazyInitInDEV(child)),\n warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);\n }\n return knownKeys;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var knownKeys = null,\n resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n newChildren[newIdx],\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren)\n throw Error(\"An iterable object provided no iterator.\");\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n knownKeys = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n step.value,\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (oldFiber = createChild(returnFiber, step.value, lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n step.value,\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n step.value,\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n step.value,\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (validateFragmentProps(newChild, null, returnFiber),\n (newChild = newChild.props.children));\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n var prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n validateFragmentProps(newChild, lanes, returnFiber);\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n isCompatibleFamilyForHotReloading(\n currentFirstChild,\n newChild\n ) ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugInfo = currentDebugInfo),\n validateFragmentProps(newChild, lanes, returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes));\n }\n returnFiber = placeSingleChild(returnFiber);\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n case REACT_PORTAL_TYPE:\n a: {\n prevDebugInfo = newChild;\n for (\n newChild = prevDebugInfo.key;\n null !== currentFirstChild;\n\n ) {\n if (currentFirstChild.key === newChild)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n prevDebugInfo.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n prevDebugInfo.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n prevDebugInfo.children || []\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n }\n if (isArrayImpl(newChild))\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (getIteratorFn(newChild)) {\n prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key)\n throw Error(\n \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n );\n var newChildren = key.call(newChild);\n if (newChildren === newChild) {\n if (\n 0 !== returnFiber.tag ||\n \"[object GeneratorFunction]\" !==\n Object.prototype.toString.call(returnFiber.type) ||\n \"[object Generator]\" !==\n Object.prototype.toString.call(newChildren)\n )\n didWarnAboutGenerators ||\n console.error(\n \"Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items.\"\n ),\n (didWarnAboutGenerators = !0);\n } else\n newChild.entries !== key ||\n didWarnAboutMaps ||\n (console.error(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0));\n returnFiber = reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n );\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (prevDebugInfo = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n ),\n (lanes = useFiber(currentFirstChild, prevDebugInfo)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber)\n );\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n var prevDebugInfo = currentDebugInfo;\n currentDebugInfo = null;\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException) throw x;\n var fiber = createFiber(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n var debugInfo = (fiber._debugInfo = currentDebugInfo);\n fiber._debugOwner = returnFiber._debugOwner;\n if (null != debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--)\n if (\"string\" === typeof debugInfo[i].stack) {\n fiber._debugOwner = debugInfo[i];\n break;\n }\n return fiber;\n } finally {\n currentDebugInfo = prevDebugInfo;\n }\n };\n }\n function pushHiddenContext(fiber, context) {\n var prevEntangledRenderLanes = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);\n push(currentTreeHiddenStackCursor, context, fiber);\n entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;\n }\n function reuseHiddenContextOnStack(fiber) {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);\n push(\n currentTreeHiddenStackCursor,\n currentTreeHiddenStackCursor.current,\n fiber\n );\n }\n function popHiddenContext(fiber) {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor, fiber);\n pop(prevEntangledRenderLanesCursor, fiber);\n }\n function pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(\n suspenseStackCursor,\n suspenseStackCursor.current & SubtreeSuspenseContextMask,\n handler\n );\n push(suspenseHandlerStackCursor, handler, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n }\n function pushOffscreenSuspenseHandler(fiber) {\n if (22 === fiber.tag) {\n if (\n (push(suspenseStackCursor, suspenseStackCursor.current, fiber),\n push(suspenseHandlerStackCursor, fiber, fiber),\n null === shellBoundary)\n ) {\n var current = fiber.alternate;\n null !== current &&\n null !== current.memoizedState &&\n (shellBoundary = fiber);\n }\n } else reuseSuspenseHandlerOnStack(fiber);\n }\n function reuseSuspenseHandlerOnStack(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n push(\n suspenseHandlerStackCursor,\n suspenseHandlerStackCursor.current,\n fiber\n );\n }\n function popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor, fiber);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor, fiber);\n }\n function findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n state.data === SUSPENSE_PENDING_START_DATA ||\n state.data === SUSPENSE_FALLBACK_START_DATA)\n )\n return node;\n } else if (\n 19 === node.tag &&\n void 0 !== node.memoizedProps.revealOrder\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n }\n function createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n }\n function retainCache(cache) {\n cache.controller.signal.aborted &&\n console.warn(\n \"A cache instance was retained after it was already freed. This likely indicates a bug in React.\"\n );\n cache.refCount++;\n }\n function releaseCache(cache) {\n cache.refCount--;\n 0 > cache.refCount &&\n console.warn(\n \"A cache instance was released after it was already freed. This likely indicates a bug in React.\"\n );\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n }\n function entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n }\n function pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n }\n function chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n }\n function peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n }\n function pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)\n : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);\n }\n function getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n }\n function mountHookTypesDev() {\n var hookName = currentHookNameInDev;\n null === hookTypesDev\n ? (hookTypesDev = [hookName])\n : hookTypesDev.push(hookName);\n }\n function updateHookTypesDev() {\n var hookName = currentHookNameInDev;\n if (\n null !== hookTypesDev &&\n (hookTypesUpdateIndexDev++,\n hookTypesDev[hookTypesUpdateIndexDev] !== hookName)\n ) {\n var componentName = getComponentNameFromFiber(\n currentlyRenderingFiber$1\n );\n if (\n !didWarnAboutMismatchedHooksForComponent.has(componentName) &&\n (didWarnAboutMismatchedHooksForComponent.add(componentName),\n null !== hookTypesDev)\n ) {\n for (var table = \"\", i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i],\n newHookName =\n i === hookTypesUpdateIndexDev ? hookName : oldHookName;\n for (\n oldHookName = i + 1 + \". \" + oldHookName;\n 30 > oldHookName.length;\n\n )\n oldHookName += \" \";\n oldHookName += newHookName + \"\\n\";\n table += oldHookName;\n }\n console.error(\n \"React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\\n\\n Previous render Next render\\n ------------------------------------------------------\\n%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n\",\n componentName,\n table\n );\n }\n }\n }\n function checkDepsAreArrayDev(deps) {\n void 0 === deps ||\n null === deps ||\n isArrayImpl(deps) ||\n console.error(\n \"%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.\",\n currentHookNameInDev,\n typeof deps\n );\n }\n function warnOnUseFormStateInDev() {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);\n didWarnAboutUseFormState.has(componentName) ||\n (didWarnAboutUseFormState.add(componentName),\n console.error(\n \"ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.\",\n componentName\n ));\n }\n function throwInvalidHookError() {\n throw Error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n }\n function areHookInputsEqual(nextDeps, prevDeps) {\n if (ignorePreviousDependencies) return !1;\n if (null === prevDeps)\n return (\n console.error(\n \"%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.\",\n currentHookNameInDev\n ),\n !1\n );\n nextDeps.length !== prevDeps.length &&\n console.error(\n \"The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\\n\\nPrevious: %s\\nIncoming: %s\",\n currentHookNameInDev,\n \"[\" + prevDeps.join(\", \") + \"]\",\n \"[\" + nextDeps.join(\", \") + \"]\"\n );\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n }\n function renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n ) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber$1 = workInProgress;\n hookTypesDev = null !== current ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n if (\n \"[object AsyncFunction]\" ===\n Object.prototype.toString.call(Component) ||\n \"[object AsyncGeneratorFunction]\" ===\n Object.prototype.toString.call(Component)\n )\n (nextRenderLanes = getComponentNameFromFiber(\n currentlyRenderingFiber$1\n )),\n didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||\n (didWarnAboutAsyncClientComponent.add(nextRenderLanes),\n console.error(\n \"async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n ));\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null !== current && null !== current.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : null !== hookTypesDev\n ? HooksDispatcherOnMountWithHookTypesInDEV\n : HooksDispatcherOnMountInDEV;\n shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =\n (workInProgress.mode & StrictLegacyMode) !== NoMode;\n var children = callComponentInDEV(Component, props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n if (nextRenderLanes) {\n setIsStrictModeForDevtools(!0);\n try {\n children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n finishRenderingHooks(current, workInProgress);\n return children;\n }\n function finishRenderingHooks(current, workInProgress) {\n workInProgress._debugHookTypes = hookTypesDev;\n null === workInProgress.dependencies\n ? null !== thenableState &&\n (workInProgress.dependencies = {\n lanes: 0,\n firstContext: null,\n _debugThenableState: thenableState\n })\n : (workInProgress.dependencies._debugThenableState = thenableState);\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks =\n null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n hookTypesDev =\n currentHookNameInDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber$1 =\n null;\n hookTypesUpdateIndexDev = -1;\n null !== current &&\n (current.flags & 31457280) !== (workInProgress.flags & 31457280) &&\n console.error(\n \"Internal React error: Expected static flag was missing. Please notify the React team.\"\n );\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks)\n throw Error(\n \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n );\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n needsToResetSuspendedThenableDEV\n ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))\n : (current = !1);\n current &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Unknown\"),\n didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||\n didWarnAboutAsyncClientComponent.has(workInProgress) ||\n (didWarnAboutUseWrappedInTryCatch.add(workInProgress),\n console.error(\n \"`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.\"\n )));\n }\n function renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber$1 = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (numberOfReRenders >= RE_RENDER_LIMIT)\n throw Error(\n \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n );\n numberOfReRenders += 1;\n ignorePreviousDependencies = !1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n hookTypesUpdateIndexDev = -1;\n ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;\n children = callComponentInDEV(Component, props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n }\n function TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !==\n dispatcher && (currentlyRenderingFiber$1.flags |= 1024);\n return maybeThenable;\n }\n function checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n }\n function bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags =\n (workInProgress.mode & StrictEffectsMode) !== NoMode\n ? workInProgress.flags & -201328645\n : workInProgress.flags & -2053;\n current.lanes &= ~lanes;\n }\n function resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n hookTypesDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber$1 =\n null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n }\n function mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n }\n function updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber$1.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber$1.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber$1.alternate)\n throw Error(\n \"Update hook called on initial render. This is likely a bug in React. Please file an issue.\"\n );\n throw Error(\"Rendered more hooks than during the previous render.\");\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n }\n function useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = createThenableState());\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber$1;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null !== index && null !== index.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : HooksDispatcherOnMountInDEV));\n return thenable;\n }\n function use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(\"An unsupported type was passed to use(): \" + String(usable));\n }\n function useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber$1.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber$1.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber$1.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue || ignorePreviousDependencies)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size),\n current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n else\n updateQueue.length !== size &&\n console.error(\n \"Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.\",\n updateQueue.length,\n size\n );\n memoCache.index++;\n return updateQueue;\n }\n function basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n }\n function mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber$1,\n reducer\n );\n return [hook.memoizedState, reducer];\n }\n function updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n }\n function updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue !== baseQueue &&\n console.error(\n \"Internal error: Expected work-in-progress queue to be a clone. This is a bug in React.\"\n );\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber$1.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber$1.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n }\n function rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do\n (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n }\n function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber$1,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n var nextSnapshot = getServerSnapshot();\n didWarnUncachedGetSnapshot ||\n nextSnapshot === getServerSnapshot() ||\n (console.error(\n \"The result of getServerSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n } else {\n nextSnapshot = getSnapshot();\n didWarnUncachedGetSnapshot ||\n ((getServerSnapshot = getSnapshot()),\n objectIs(nextSnapshot, getServerSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0)));\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n 0 !== (workInProgressRootRenderLanes & 60) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n hook.memoizedState = nextSnapshot;\n getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };\n hook.queue = getServerSnapshot;\n mountEffect(\n subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),\n [subscribe]\n );\n fiber.flags |= 2048;\n pushEffect(\n HasEffect | Passive,\n updateStoreInstance.bind(\n null,\n fiber,\n getServerSnapshot,\n nextSnapshot,\n getSnapshot\n ),\n { destroy: void 0 },\n null\n );\n return nextSnapshot;\n }\n function updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n var fiber = currentlyRenderingFiber$1,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n getServerSnapshot = getServerSnapshot();\n } else if (\n ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)\n ) {\n var cachedSnapshot = getSnapshot();\n objectIs(getServerSnapshot, cachedSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n if (\n (cachedSnapshot = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n ))\n )\n (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);\n hook = hook.queue;\n var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n updateEffectImpl(2048, Passive, create, [subscribe]);\n if (\n hook.getSnapshot !== getSnapshot ||\n cachedSnapshot ||\n (null !== workInProgressHook &&\n workInProgressHook.memoizedState.tag & HasEffect)\n ) {\n fiber.flags |= 2048;\n pushEffect(\n HasEffect | Passive,\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n { destroy: void 0 },\n null\n );\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 60) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n }\n function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber$1.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber$1.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n }\n function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n }\n function subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n }\n function mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n }\n function mountState(initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(\n null,\n currentlyRenderingFiber$1,\n queue\n );\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n }\n function mountOptimistic(passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber$1,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n }\n function updateOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n }\n function updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n }\n function rerenderOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n }\n function dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n ) {\n if (isRenderPhaseUpdate(fiber))\n throw Error(\"Cannot update form state while rendering.\");\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n }\n function runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n ReactSharedInternals.T._updatedFibers = new Set();\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((actionQueue = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < actionQueue &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n } else\n try {\n (currentTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, currentTransition);\n } catch (error$3) {\n onActionError(actionQueue, node, error$3);\n }\n }\n function handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? (returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n ),\n node.isTransition ||\n console.error(\n \"An async function was passed to useActionState, but it was dispatched outside of an action context. This is likely not what you intended. Either pass the dispatch function to an `action` prop, or dispatch manually inside `startTransition`\"\n ))\n : onActionSuccess(actionQueue, node, returnValue);\n }\n function onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n }\n function onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n }\n function notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n }\n function actionStateReducer(oldState, newState) {\n return newState;\n }\n function mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var isMatching = currentlyRenderingFiber$1;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var markerInstance = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== markerInstance.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n markerInstance = null;\n break b;\n }\n markerInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n if (null === markerInstance) {\n markerInstance = null;\n break b;\n }\n }\n inRootOrSingleton = markerInstance.data;\n markerInstance =\n inRootOrSingleton === FORM_STATE_IS_MATCHING ||\n inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING\n ? markerInstance\n : null;\n }\n if (markerInstance) {\n nextHydratableInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;\n break a;\n }\n }\n throwOnHydrationMismatch(isMatching);\n }\n isMatching = !1;\n }\n isMatching && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n isMatching = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = isMatching;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber$1,\n isMatching\n );\n isMatching.dispatch = ssrFormState;\n isMatching = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber$1,\n !1,\n isMatching.queue\n );\n isMatching = mountWorkInProgressHook();\n markerInstance = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n isMatching.queue = markerInstance;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber$1,\n markerInstance,\n inRootOrSingleton,\n ssrFormState\n );\n markerInstance.dispatch = ssrFormState;\n isMatching.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n }\n function updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n }\n function updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n currentStateHook =\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n ? useThenable(currentStateHook)\n : currentStateHook;\n var actionQueueHook = updateWorkInProgressHook(),\n actionQueue = actionQueueHook.queue,\n dispatch = actionQueue.dispatch;\n action !== actionQueueHook.memoizedState &&\n ((currentlyRenderingFiber$1.flags |= 2048),\n pushEffect(\n HasEffect | Passive,\n actionStateActionEffect.bind(null, actionQueue, action),\n { destroy: void 0 },\n null\n ));\n return [currentStateHook, dispatch, stateHook];\n }\n function actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n }\n function rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n }\n function pushEffect(tag, create, inst, deps) {\n tag = { tag: tag, create: create, inst: inst, deps: deps, next: null };\n create = currentlyRenderingFiber$1.updateQueue;\n null === create &&\n ((create = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber$1.updateQueue = create));\n inst = create.lastEffect;\n null === inst\n ? (create.lastEffect = tag.next = tag)\n : ((deps = inst.next),\n (inst.next = tag),\n (tag.next = deps),\n (create.lastEffect = tag));\n return tag;\n }\n function mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n }\n function mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(\n HasEffect | hookFlags,\n create,\n { destroy: void 0 },\n void 0 === deps ? null : deps\n );\n }\n function updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushEffect(hookFlags, create, inst, deps))\n : ((currentlyRenderingFiber$1.flags |= fiberFlags),\n (hook.memoizedState = pushEffect(\n HasEffect | hookFlags,\n create,\n inst,\n deps\n )));\n }\n function mountEffect(create, deps) {\n (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode &&\n (currentlyRenderingFiber$1.mode & NoStrictPassiveEffectsMode) === NoMode\n ? mountEffectImpl(142608384, Passive, create, deps)\n : mountEffectImpl(8390656, Passive, create, deps);\n }\n function mountLayoutEffect(create, deps) {\n var fiberFlags = 4194308;\n (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 67108864);\n return mountEffectImpl(fiberFlags, Layout, create, deps);\n }\n function imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.\",\n \"an object with keys {\" + Object.keys(ref).join(\", \") + \"}\"\n ),\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n }\n function mountImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n var fiberFlags = 4194308;\n (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 67108864);\n mountEffectImpl(\n fiberFlags,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function updateImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(\n 4,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function mountCallback(callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n }\n function updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n }\n function mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n }\n function updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n }\n function mountDeferredValue(value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n }\n function updateDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function rerenderDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function mountDeferredValueImpl(hook, value, initialValue) {\n if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber$1.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n }\n function updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (0 === (renderLanes & 42))\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber$1.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n }\n function startTransition(\n fiber,\n queue,\n pendingState,\n finishedState,\n callback\n ) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && previousPriority < ContinuousEventPriority\n ? previousPriority\n : ContinuousEventPriority;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane(fiber)\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((fiber = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < fiber &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n }\n function startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag)\n throw Error(\n \"Expected the form instance to be a HostComponent. This is a bug in React.\"\n );\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n NotPendingTransition,\n null === action\n ? noop$2\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n }\n function ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: NotPendingTransition,\n baseState: NotPendingTransition,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: NotPendingTransition\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n }\n function requestFormReset$1(formFiber) {\n null === ReactSharedInternals.T &&\n console.error(\n \"requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.\"\n );\n var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n dispatchSetStateInternal(\n formFiber,\n resetStateQueue,\n {},\n requestUpdateLane(formFiber)\n );\n }\n function mountTransition() {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber$1,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n }\n function updateTransition() {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function rerenderTransition() {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n }\n function mountId() {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var treeId = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n treeId =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + treeId;\n identifierPrefix = \":\" + identifierPrefix + \"R\" + treeId;\n treeId = localIdCounter++;\n 0 < treeId && (identifierPrefix += \"H\" + treeId.toString(32));\n identifierPrefix += \":\";\n } else\n (treeId = globalClientIdCounter++),\n (identifierPrefix =\n \":\" + identifierPrefix + \"r\" + treeId.toString(32) + \":\");\n return (hook.memoizedState = identifierPrefix);\n }\n function mountRefresh() {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber$1\n ));\n }\n function refreshCache(fiber, seedKey) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane(provider);\n fiber = createUpdate(lane);\n var root = enqueueUpdate(provider, fiber, lane);\n null !== root &&\n (scheduleUpdateOnFiber(root, provider, lane),\n entangleTransitions(root, provider, lane));\n provider = createCache();\n null !== seedKey &&\n void 0 !== seedKey &&\n null !== root &&\n console.error(\n \"The seed argument is not enabled outside experimental channels.\"\n );\n fiber.payload = { cache: provider };\n return;\n }\n provider = provider.return;\n }\n }\n function dispatchReducerAction(\n fiber,\n queue,\n action,\n JSCompiler_OptimizeArgumentsArray_p0\n ) {\n \"function\" === typeof JSCompiler_OptimizeArgumentsArray_p0 &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n JSCompiler_OptimizeArgumentsArray_p0 = requestUpdateLane(fiber);\n action = {\n lane: JSCompiler_OptimizeArgumentsArray_p0,\n revertLane: 0,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n JSCompiler_OptimizeArgumentsArray_p0\n )),\n null !== action &&\n (scheduleUpdateOnFiber(\n action,\n fiber,\n JSCompiler_OptimizeArgumentsArray_p0\n ),\n entangleTransitionUpdate(\n action,\n queue,\n JSCompiler_OptimizeArgumentsArray_p0\n )));\n markStateUpdateScheduled(fiber, JSCompiler_OptimizeArgumentsArray_p0);\n }\n function dispatchSetState(\n fiber,\n queue,\n action,\n JSCompiler_OptimizeArgumentsArray_p1\n ) {\n \"function\" === typeof JSCompiler_OptimizeArgumentsArray_p1 &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n JSCompiler_OptimizeArgumentsArray_p1 = requestUpdateLane(fiber);\n dispatchSetStateInternal(\n fiber,\n queue,\n action,\n JSCompiler_OptimizeArgumentsArray_p1\n );\n markStateUpdateScheduled(fiber, JSCompiler_OptimizeArgumentsArray_p1);\n }\n function dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n ) {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot &&\n finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n }\n function dispatchOptimisticSetState(\n fiber,\n throwIfDuringRender,\n queue,\n action\n ) {\n null === ReactSharedInternals.T &&\n 0 === currentEntangledLane &&\n console.error(\n \"An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition.\"\n );\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender)\n throw Error(\"Cannot update optimistic state while rendering.\");\n console.error(\"Cannot call startTransition while rendering.\");\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n markStateUpdateScheduled(fiber, 2);\n }\n function isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber$1 ||\n (null !== alternate && alternate === currentlyRenderingFiber$1)\n );\n }\n function enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass =\n didScheduleRenderPhaseUpdate = !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n function entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194176)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function warnOnInvalidCallback(callback) {\n if (null !== callback && \"function\" !== typeof callback) {\n var key = String(callback);\n didWarnOnInvalidCallback.has(key) ||\n (didWarnOnInvalidCallback.add(key),\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ));\n }\n }\n function applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n ) {\n var prevState = workInProgress.memoizedState,\n partialState = getDerivedStateFromProps(nextProps, prevState);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState = getDerivedStateFromProps(nextProps, prevState);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === partialState &&\n ((ctor = getComponentNameFromType(ctor) || \"Component\"),\n didWarnAboutUndefinedDerivedState.has(ctor) ||\n (didWarnAboutUndefinedDerivedState.add(ctor),\n console.error(\n \"%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.\",\n ctor\n )));\n prevState =\n null === partialState || void 0 === partialState\n ? prevState\n : assign({}, prevState, partialState);\n workInProgress.memoizedState = prevState;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = prevState);\n }\n function checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n ) {\n var instance = workInProgress.stateNode;\n if (\"function\" === typeof instance.shouldComponentUpdate) {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === oldProps &&\n console.error(\n \"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.\",\n getComponentNameFromType(ctor) || \"Component\"\n );\n return oldProps;\n }\n return ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n }\n function callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n ) {\n var oldState = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== oldState &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Component\"),\n didWarnAboutStateAssignmentForComponent.has(workInProgress) ||\n (didWarnAboutStateAssignmentForComponent.add(workInProgress),\n console.error(\n \"%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n workInProgress\n )),\n classComponentUpdater.enqueueReplaceState(\n instance,\n instance.state,\n null\n ));\n }\n function resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var _propName in Component)\n void 0 === newProps[_propName] &&\n (newProps[_propName] = Component[_propName]);\n }\n return newProps;\n }\n function defaultOnUncaughtError(error, errorInfo) {\n reportGlobalError(error);\n error = componentName\n ? \"An error occurred in the <\" + componentName + \"> component.\"\n : \"An error occurred in one of your React components.\";\n var prevGetCurrentStack = ReactSharedInternals.getCurrentStack,\n componentStack =\n null != errorInfo.componentStack ? errorInfo.componentStack : \"\";\n ReactSharedInternals.getCurrentStack = function () {\n return componentStack;\n };\n try {\n console.warn(\n \"%s\\n\\n%s\\n\",\n error,\n \"Consider adding an error boundary to your tree to customize error handling behavior.\\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries.\"\n );\n } finally {\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function defaultOnCaughtError(error, errorInfo) {\n var componentNameMessage = componentName\n ? \"The above error occurred in the <\" + componentName + \"> component.\"\n : \"The above error occurred in one of your React components.\",\n recreateMessage =\n \"React will try to recreate this component tree from scratch using the error boundary you provided, \" +\n ((errorBoundaryName || \"Anonymous\") + \".\"),\n prevGetCurrentStack = ReactSharedInternals.getCurrentStack,\n componentStack =\n null != errorInfo.componentStack ? errorInfo.componentStack : \"\";\n ReactSharedInternals.getCurrentStack = function () {\n return componentStack;\n };\n try {\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.environmentName\n ? bindToConsole(\n \"error\",\n [\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n ],\n error.environmentName\n )()\n : console.error(\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n );\n } finally {\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function defaultOnRecoverableError(error) {\n reportGlobalError(error);\n }\n function logUncaughtError(root, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = null;\n var error = errorInfo.value;\n if (null !== ReactSharedInternals.actQueue)\n ReactSharedInternals.thrownErrors.push(error);\n else {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(error, { componentStack: errorInfo.stack });\n }\n } catch (e$4) {\n setTimeout(function () {\n throw e$4;\n });\n }\n }\n function logCaughtError(root, boundary, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = getComponentNameFromFiber(boundary);\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$5) {\n setTimeout(function () {\n throw e$5;\n });\n }\n }\n function createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n lane.payload = { element: null };\n lane.callback = function () {\n runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);\n };\n return lane;\n }\n function createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n return lane;\n }\n function initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n callComponentDidCatchInDEV(this, errorInfo);\n \"function\" === typeof getDerivedStateFromError ||\n (0 === (fiber.lanes & 2) &&\n console.error(\n \"%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.\",\n getComponentNameFromFiber(fiber) || \"Unknown\"\n ));\n });\n }\n function throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n ) {\n sourceFiber.flags |= 32768;\n isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n isHydrating && (didSuspendOrErrorDEV = !0);\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootSuspended),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n sourceFiber.tag +\n \"). This is a bug in React.\"\n );\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (didSuspendOrErrorDEV = !0),\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.\",\n { cause: value }\n ),\n sourceFiber\n )\n ))\n : (value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n )\n ),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored)),\n !1\n );\n var error = createCapturedValueAtFiber(\n Error(\n \"There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n );\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [error])\n : workInProgressRootConcurrentErrors.push(error);\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(\n sourceFiber.stateNode,\n value,\n root\n )),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (error = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== error &&\n \"function\" === typeof error.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(error)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n }\n function reconcileChildren(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n }\n function updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (Component = resolveFunctionForHotReloading(type)),\n (workInProgress.tag = 15),\n (workInProgress.type = Component),\n validateFunctionComponentInDev(workInProgress, type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (\n Component(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n return bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n function updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref &&\n workInProgress.type === current.type\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n }\n function updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n nextChildren = nextProps.children,\n nextIsDetached =\n 0 !==\n (workInProgress.stateNode._pendingVisibility & OffscreenDetached),\n prevState = null !== current ? current.memoizedState : null;\n markRef(current, workInProgress);\n if (\"hidden\" === nextProps.mode || nextIsDetached) {\n if (0 !== (workInProgress.flags & 128)) {\n nextProps =\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes;\n if (null !== current) {\n nextChildren = workInProgress.child = current.child;\n for (nextIsDetached = 0; null !== nextChildren; )\n (nextIsDetached =\n nextIsDetached | nextChildren.lanes | nextChildren.childLanes),\n (nextChildren = nextChildren.sibling);\n workInProgress.childLanes = nextIsDetached & ~nextProps;\n } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(workInProgress),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (workInProgress.lanes = workInProgress.childLanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes,\n renderLanes\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(workInProgress),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes\n ) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : {\n parent: CacheContext._currentValue,\n pool: JSCompiler_inline_result\n };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack(workInProgress);\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n return null;\n }\n function markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 2097664);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(\n \"Expected ref to be a function, an object returned by React.createRef(), or undefined/null.\"\n );\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 2097664;\n }\n }\n function updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (\n Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ) {\n var componentName = getComponentNameFromType(Component) || \"Unknown\";\n didWarnAboutBadClass[componentName] ||\n (console.error(\n \"The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.\",\n componentName,\n componentName\n ),\n (didWarnAboutBadClass[componentName] = !0));\n }\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n null\n );\n null === current &&\n (validateFunctionComponentInDev(workInProgress, workInProgress.type),\n Component.contextTypes &&\n ((componentName = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypes[componentName] ||\n ((didWarnAboutContextTypes[componentName] = !0),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)\",\n componentName\n ))));\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n }\n function replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n ) {\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current, workInProgress);\n Component = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateClassComponent(\n current$jscomp$0,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n switch (shouldErrorImpl(workInProgress)) {\n case !1:\n var _instance = workInProgress.stateNode,\n state = new workInProgress.type(\n workInProgress.memoizedProps,\n _instance.context\n ).state;\n _instance.updater.enqueueSetState(_instance, state, null);\n break;\n case !0:\n workInProgress.flags |= 128;\n workInProgress.flags |= 65536;\n _instance = Error(\"Simulated error coming from DevTools\");\n var lane = renderLanes & -renderLanes;\n workInProgress.lanes |= lane;\n state = workInProgressRoot;\n if (null === state)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n lane = createClassErrorUpdate(lane);\n initializeClassErrorUpdate(\n lane,\n state,\n workInProgress,\n createCapturedValueAtFiber(_instance, workInProgress)\n );\n enqueueCapturedUpdate(workInProgress, lane);\n }\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n state = emptyContextObject;\n _instance = Component.contextType;\n \"contextType\" in Component &&\n null !== _instance &&\n (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&\n !didWarnAboutInvalidateContextType.has(Component) &&\n (didWarnAboutInvalidateContextType.add(Component),\n (lane =\n void 0 === _instance\n ? \" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.\"\n : \"object\" !== typeof _instance\n ? \" However, it is set to a \" + typeof _instance + \".\"\n : _instance.$$typeof === REACT_CONSUMER_TYPE\n ? \" Did you accidentally pass the Context.Consumer instead?\"\n : \" However, it is set to an object with keys {\" +\n Object.keys(_instance).join(\", \") +\n \"}.\"),\n console.error(\n \"%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s\",\n getComponentNameFromType(Component) || \"Component\",\n lane\n ));\n \"object\" === typeof _instance &&\n null !== _instance &&\n (state = readContext(_instance));\n _instance = new Component(nextProps, state);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n _instance = new Component(nextProps, state);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n state = workInProgress.memoizedState =\n null !== _instance.state && void 0 !== _instance.state\n ? _instance.state\n : null;\n _instance.updater = classComponentUpdater;\n workInProgress.stateNode = _instance;\n _instance._reactInternals = workInProgress;\n _instance._reactInternalInstance = fakeInternalInstance;\n \"function\" === typeof Component.getDerivedStateFromProps &&\n null === state &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutUninitializedState.has(state) ||\n (didWarnAboutUninitializedState.add(state),\n console.error(\n \"`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.\",\n state,\n null === _instance.state ? \"null\" : \"undefined\",\n state\n )));\n if (\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate\n ) {\n var foundWillUpdateName = (lane = state = null);\n \"function\" === typeof _instance.componentWillMount &&\n !0 !== _instance.componentWillMount.__suppressDeprecationWarning\n ? (state = \"componentWillMount\")\n : \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n (state = \"UNSAFE_componentWillMount\");\n \"function\" === typeof _instance.componentWillReceiveProps &&\n !0 !==\n _instance.componentWillReceiveProps.__suppressDeprecationWarning\n ? (lane = \"componentWillReceiveProps\")\n : \"function\" ===\n typeof _instance.UNSAFE_componentWillReceiveProps &&\n (lane = \"UNSAFE_componentWillReceiveProps\");\n \"function\" === typeof _instance.componentWillUpdate &&\n !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning\n ? (foundWillUpdateName = \"componentWillUpdate\")\n : \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n (foundWillUpdateName = \"UNSAFE_componentWillUpdate\");\n if (null !== state || null !== lane || null !== foundWillUpdateName) {\n _instance = getComponentNameFromType(Component) || \"Component\";\n var newApiName =\n \"function\" === typeof Component.getDerivedStateFromProps\n ? \"getDerivedStateFromProps()\"\n : \"getSnapshotBeforeUpdate()\";\n didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||\n (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),\n console.error(\n \"Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\nhttps://react.dev/link/unsafe-component-lifecycles\",\n _instance,\n newApiName,\n null !== state ? \"\\n \" + state : \"\",\n null !== lane ? \"\\n \" + lane : \"\",\n null !== foundWillUpdateName ? \"\\n \" + foundWillUpdateName : \"\"\n ));\n }\n }\n _instance = workInProgress.stateNode;\n state = getComponentNameFromType(Component) || \"Component\";\n _instance.render ||\n (Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ? console.error(\n \"No `render` method found on the %s instance: did you accidentally return an object from the constructor?\",\n state\n )\n : console.error(\n \"No `render` method found on the %s instance: you may have forgotten to define `render`.\",\n state\n ));\n !_instance.getInitialState ||\n _instance.getInitialState.isReactClassApproved ||\n _instance.state ||\n console.error(\n \"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?\",\n state\n );\n _instance.getDefaultProps &&\n !_instance.getDefaultProps.isReactClassApproved &&\n console.error(\n \"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.\",\n state\n );\n _instance.contextType &&\n console.error(\n \"contextType was defined as an instance property on %s. Use a static property to define contextType instead.\",\n state\n );\n Component.childContextTypes &&\n !didWarnAboutChildContextTypes.has(Component) &&\n (didWarnAboutChildContextTypes.add(Component),\n console.error(\n \"%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n Component.contextTypes &&\n !didWarnAboutContextTypes$1.has(Component) &&\n (didWarnAboutContextTypes$1.add(Component),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n \"function\" === typeof _instance.componentShouldUpdate &&\n console.error(\n \"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.\",\n state\n );\n Component.prototype &&\n Component.prototype.isPureReactComponent &&\n \"undefined\" !== typeof _instance.shouldComponentUpdate &&\n console.error(\n \"%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.\",\n getComponentNameFromType(Component) || \"A pure component\"\n );\n \"function\" === typeof _instance.componentDidUnmount &&\n console.error(\n \"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?\",\n state\n );\n \"function\" === typeof _instance.componentDidReceiveProps &&\n console.error(\n \"%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().\",\n state\n );\n \"function\" === typeof _instance.componentWillRecieveProps &&\n console.error(\n \"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?\",\n state\n );\n \"function\" === typeof _instance.UNSAFE_componentWillRecieveProps &&\n console.error(\n \"%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?\",\n state\n );\n lane = _instance.props !== nextProps;\n void 0 !== _instance.props &&\n lane &&\n console.error(\n \"When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.\",\n state\n );\n _instance.defaultProps &&\n console.error(\n \"Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.\",\n state,\n state\n );\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n \"function\" === typeof _instance.componentDidUpdate ||\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||\n (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),\n console.error(\n \"%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.\",\n getComponentNameFromType(Component)\n ));\n \"function\" === typeof _instance.getDerivedStateFromProps &&\n console.error(\n \"%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof _instance.getDerivedStateFromError &&\n console.error(\n \"%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof Component.getSnapshotBeforeUpdate &&\n console.error(\n \"%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.\",\n state\n );\n (lane = _instance.state) &&\n (\"object\" !== typeof lane || isArrayImpl(lane)) &&\n console.error(\"%s.state: must be set to an object or null\", state);\n \"function\" === typeof _instance.getChildContext &&\n \"object\" !== typeof Component.childContextTypes &&\n console.error(\n \"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().\",\n state\n );\n _instance = workInProgress.stateNode;\n _instance.props = nextProps;\n _instance.state = workInProgress.memoizedState;\n _instance.refs = {};\n initializeUpdateQueue(workInProgress);\n state = Component.contextType;\n _instance.context =\n \"object\" === typeof state && null !== state\n ? readContext(state)\n : emptyContextObject;\n _instance.state === nextProps &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutDirectlyAssigningPropsToState.has(state) ||\n (didWarnAboutDirectlyAssigningPropsToState.add(state),\n console.error(\n \"%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.\",\n state\n )));\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n _instance\n );\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(\n workInProgress,\n _instance\n );\n _instance.state = workInProgress.memoizedState;\n state = Component.getDerivedStateFromProps;\n \"function\" === typeof state &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n state,\n nextProps\n ),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n ((state = _instance.state),\n \"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount(),\n state !== _instance.state &&\n (console.error(\n \"%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n getComponentNameFromFiber(workInProgress) || \"Component\"\n ),\n classComponentUpdater.enqueueReplaceState(\n _instance,\n _instance.state,\n null\n )),\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308);\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 67108864);\n _instance = !0;\n } else if (null === current$jscomp$0) {\n _instance = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps;\n lane = resolveClassComponentProps(Component, unresolvedOldProps);\n _instance.props = lane;\n var oldContext = _instance.context;\n foundWillUpdateName = Component.contextType;\n state = emptyContextObject;\n \"object\" === typeof foundWillUpdateName &&\n null !== foundWillUpdateName &&\n (state = readContext(foundWillUpdateName));\n newApiName = Component.getDerivedStateFromProps;\n foundWillUpdateName =\n \"function\" === typeof newApiName ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== state) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n state\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof newApiName &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n newApiName,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (lane =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n lane,\n nextProps,\n oldState,\n oldContext,\n state\n ))\n ? (foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n (\"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount()),\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 67108864))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 67108864),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (_instance.props = nextProps),\n (_instance.state = oldContext),\n (_instance.context = state),\n (_instance = lane))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 67108864),\n (_instance = !1));\n } else {\n _instance = workInProgress.stateNode;\n cloneUpdateQueue(current$jscomp$0, workInProgress);\n state = workInProgress.memoizedProps;\n foundWillUpdateName = resolveClassComponentProps(Component, state);\n _instance.props = foundWillUpdateName;\n newApiName = workInProgress.pendingProps;\n oldState = _instance.context;\n oldContext = Component.contextType;\n lane = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (lane = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((state !== newApiName || oldState !== lane) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n lane\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n state !== newApiName ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current$jscomp$0 &&\n null !== current$jscomp$0.dependencies &&\n checkIfContextChanged(current$jscomp$0.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (foundWillUpdateName =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n foundWillUpdateName,\n nextProps,\n oldState,\n newState,\n lane\n ) ||\n (null !== current$jscomp$0 &&\n null !== current$jscomp$0.dependencies &&\n checkIfContextChanged(current$jscomp$0.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof _instance.componentWillUpdate) ||\n (\"function\" === typeof _instance.componentWillUpdate &&\n _instance.componentWillUpdate(nextProps, newState, lane),\n \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n _instance.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n lane\n )),\n \"function\" === typeof _instance.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof _instance.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current$jscomp$0.memoizedProps &&\n oldState === current$jscomp$0.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current$jscomp$0.memoizedProps &&\n oldState === current$jscomp$0.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (_instance.props = nextProps),\n (_instance.state = newState),\n (_instance.context = lane),\n (_instance = foundWillUpdateName))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current$jscomp$0.memoizedProps &&\n oldState === current$jscomp$0.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current$jscomp$0.memoizedProps &&\n oldState === current$jscomp$0.memoizedState) ||\n (workInProgress.flags |= 1024),\n (_instance = !1));\n }\n lane = _instance;\n markRef(current$jscomp$0, workInProgress);\n state = 0 !== (workInProgress.flags & 128);\n if (lane || state) {\n lane = workInProgress.stateNode;\n ReactSharedInternals.getCurrentStack =\n null === workInProgress ? null : getCurrentFiberStackInDev;\n isRendering = !1;\n current = workInProgress;\n if (state && \"function\" !== typeof Component.getDerivedStateFromError)\n (Component = null), (profilerStartTime = -1);\n else {\n markComponentRenderStarted(workInProgress);\n Component = callRenderInDEV(lane);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n callRenderInDEV(lane);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n markComponentRenderStopped();\n }\n workInProgress.flags |= 1;\n null !== current$jscomp$0 && state\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current$jscomp$0.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(\n current$jscomp$0,\n workInProgress,\n Component,\n renderLanes\n );\n workInProgress.memoizedState = lane.state;\n current$jscomp$0 = workInProgress.child;\n } else\n current$jscomp$0 = bailoutOnAlreadyFinishedWork(\n current$jscomp$0,\n workInProgress,\n renderLanes\n );\n renderLanes = workInProgress.stateNode;\n _instance &&\n renderLanes.props !== nextProps &&\n (didWarnAboutReassigningProps ||\n console.error(\n \"It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.\",\n getComponentNameFromFiber(workInProgress) || \"a component\"\n ),\n (didWarnAboutReassigningProps = !0));\n return current$jscomp$0;\n }\n function mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function validateFunctionComponentInDev(workInProgress, Component) {\n Component &&\n Component.childContextTypes &&\n console.error(\n \"childContextTypes cannot be defined on a function component.\\n %s.childContextTypes = ...\",\n Component.displayName || Component.name || \"Component\"\n );\n \"function\" === typeof Component.getDerivedStateFromProps &&\n ((workInProgress = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||\n (console.error(\n \"%s: Function components do not support getDerivedStateFromProps.\",\n workInProgress\n ),\n (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =\n !0)));\n \"object\" === typeof Component.contextType &&\n null !== Component.contextType &&\n ((Component = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypeOnFunctionComponent[Component] ||\n (console.error(\n \"%s: Function components do not support contextType.\",\n Component\n ),\n (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));\n }\n function mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n }\n function getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n ) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n }\n function updateSuspenseComponent(current, workInProgress, renderLanes) {\n var JSCompiler_object_inline_digest_2317;\n var JSCompiler_object_inline_stack_2318 = workInProgress.pendingProps;\n shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);\n var JSCompiler_object_inline_componentStack_2319 = !1;\n var didSuspend = 0 !== (workInProgress.flags & 128);\n (JSCompiler_object_inline_digest_2317 = didSuspend) ||\n (JSCompiler_object_inline_digest_2317 =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));\n JSCompiler_object_inline_digest_2317 &&\n ((JSCompiler_object_inline_componentStack_2319 = !0),\n (workInProgress.flags &= -129));\n JSCompiler_object_inline_digest_2317 = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n JSCompiler_object_inline_componentStack_2319\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n if (isHydrating) {\n var JSCompiler_object_inline_message_2316 = nextHydratableInstance;\n var JSCompiler_temp;\n if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2316)) {\n c: {\n var instance = JSCompiler_object_inline_message_2316;\n for (\n JSCompiler_temp = rootOrSingletonContext;\n 8 !== instance.nodeType;\n\n ) {\n if (!JSCompiler_temp) {\n JSCompiler_temp = null;\n break c;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) {\n JSCompiler_temp = null;\n break c;\n }\n }\n JSCompiler_temp = instance;\n }\n null !== JSCompiler_temp\n ? (warnIfNotHydrating(),\n (workInProgress.memoizedState = {\n dehydrated: JSCompiler_temp,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912\n }),\n (instance = createFiber(18, null, null, NoMode)),\n (instance.stateNode = JSCompiler_temp),\n (instance.return = workInProgress),\n (workInProgress.child = instance),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (JSCompiler_temp = !0))\n : (JSCompiler_temp = !1);\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp &&\n (warnNonHydratedInstance(\n workInProgress,\n JSCompiler_object_inline_message_2316\n ),\n throwOnHydrationMismatch(workInProgress));\n }\n JSCompiler_object_inline_message_2316 = workInProgress.memoizedState;\n if (\n null !== JSCompiler_object_inline_message_2316 &&\n ((JSCompiler_object_inline_message_2316 =\n JSCompiler_object_inline_message_2316.dehydrated),\n null !== JSCompiler_object_inline_message_2316)\n )\n return (\n JSCompiler_object_inline_message_2316.data ===\n SUSPENSE_FALLBACK_START_DATA\n ? (workInProgress.lanes = 16)\n : (workInProgress.lanes = 536870912),\n null\n );\n popSuspenseHandler(workInProgress);\n }\n JSCompiler_object_inline_message_2316 =\n JSCompiler_object_inline_stack_2318.children;\n JSCompiler_object_inline_stack_2318 =\n JSCompiler_object_inline_stack_2318.fallback;\n if (JSCompiler_object_inline_componentStack_2319)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2319 =\n workInProgress.mode),\n (JSCompiler_object_inline_message_2316 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_message_2316\n },\n JSCompiler_object_inline_componentStack_2319\n )),\n (JSCompiler_object_inline_stack_2318 = createFiberFromFragment(\n JSCompiler_object_inline_stack_2318,\n JSCompiler_object_inline_componentStack_2319,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_message_2316.return = workInProgress),\n (JSCompiler_object_inline_stack_2318.return = workInProgress),\n (JSCompiler_object_inline_message_2316.sibling =\n JSCompiler_object_inline_stack_2318),\n (workInProgress.child = JSCompiler_object_inline_message_2316),\n (JSCompiler_object_inline_componentStack_2319 =\n workInProgress.child),\n (JSCompiler_object_inline_componentStack_2319.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_componentStack_2319.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2317,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2318\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_message_2316\n );\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((JSCompiler_object_inline_message_2316 = prevState.dehydrated),\n null !== JSCompiler_object_inline_message_2316)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2319 =\n JSCompiler_object_inline_stack_2318.fallback),\n (JSCompiler_object_inline_message_2316 = workInProgress.mode),\n (JSCompiler_object_inline_stack_2318 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2318.children\n },\n JSCompiler_object_inline_message_2316\n )),\n (JSCompiler_object_inline_componentStack_2319 =\n createFiberFromFragment(\n JSCompiler_object_inline_componentStack_2319,\n JSCompiler_object_inline_message_2316,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_componentStack_2319.flags |= 2),\n (JSCompiler_object_inline_stack_2318.return = workInProgress),\n (JSCompiler_object_inline_componentStack_2319.return =\n workInProgress),\n (JSCompiler_object_inline_stack_2318.sibling =\n JSCompiler_object_inline_componentStack_2319),\n (workInProgress.child = JSCompiler_object_inline_stack_2318),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (JSCompiler_object_inline_stack_2318 = workInProgress.child),\n (JSCompiler_object_inline_stack_2318.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_stack_2318.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2317,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress =\n JSCompiler_object_inline_componentStack_2319));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isHydrating &&\n console.error(\n \"We should not be hydrating here. This is a bug in React. Please file a bug.\"\n ),\n JSCompiler_object_inline_message_2316.data ===\n SUSPENSE_FALLBACK_START_DATA)\n ) {\n JSCompiler_object_inline_digest_2317 =\n JSCompiler_object_inline_message_2316.nextSibling &&\n JSCompiler_object_inline_message_2316.nextSibling.dataset;\n if (JSCompiler_object_inline_digest_2317) {\n JSCompiler_temp = JSCompiler_object_inline_digest_2317.dgst;\n var message = JSCompiler_object_inline_digest_2317.msg;\n instance = JSCompiler_object_inline_digest_2317.stck;\n var componentStack = JSCompiler_object_inline_digest_2317.cstck;\n }\n JSCompiler_object_inline_message_2316 = message;\n JSCompiler_object_inline_digest_2317 = JSCompiler_temp;\n JSCompiler_object_inline_stack_2318 = instance;\n JSCompiler_temp = JSCompiler_object_inline_componentStack_2319 =\n componentStack;\n JSCompiler_object_inline_componentStack_2319 =\n JSCompiler_object_inline_message_2316\n ? Error(JSCompiler_object_inline_message_2316)\n : Error(\n \"The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.\"\n );\n JSCompiler_object_inline_componentStack_2319.stack =\n JSCompiler_object_inline_stack_2318 || \"\";\n JSCompiler_object_inline_componentStack_2319.digest =\n JSCompiler_object_inline_digest_2317;\n JSCompiler_object_inline_digest_2317 =\n void 0 === JSCompiler_temp ? null : JSCompiler_temp;\n JSCompiler_object_inline_stack_2318 = {\n value: JSCompiler_object_inline_componentStack_2319,\n source: null,\n stack: JSCompiler_object_inline_digest_2317\n };\n \"string\" === typeof JSCompiler_object_inline_digest_2317 &&\n CapturedStacks.set(\n JSCompiler_object_inline_componentStack_2319,\n JSCompiler_object_inline_stack_2318\n );\n queueHydrationError(JSCompiler_object_inline_stack_2318);\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (JSCompiler_object_inline_digest_2317 =\n 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_object_inline_digest_2317)\n ) {\n JSCompiler_object_inline_digest_2317 = workInProgressRoot;\n if (null !== JSCompiler_object_inline_digest_2317) {\n JSCompiler_object_inline_stack_2318 = renderLanes & -renderLanes;\n if (0 !== (JSCompiler_object_inline_stack_2318 & 42))\n JSCompiler_object_inline_stack_2318 = 1;\n else\n switch (JSCompiler_object_inline_stack_2318) {\n case 2:\n JSCompiler_object_inline_stack_2318 = 1;\n break;\n case 8:\n JSCompiler_object_inline_stack_2318 = 4;\n break;\n case 32:\n JSCompiler_object_inline_stack_2318 = 16;\n break;\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n JSCompiler_object_inline_stack_2318 = 64;\n break;\n case 268435456:\n JSCompiler_object_inline_stack_2318 = 134217728;\n break;\n default:\n JSCompiler_object_inline_stack_2318 = 0;\n }\n JSCompiler_object_inline_stack_2318 =\n 0 !==\n (JSCompiler_object_inline_stack_2318 &\n (JSCompiler_object_inline_digest_2317.suspendedLanes |\n renderLanes))\n ? 0\n : JSCompiler_object_inline_stack_2318;\n if (\n 0 !== JSCompiler_object_inline_stack_2318 &&\n JSCompiler_object_inline_stack_2318 !== prevState.retryLane\n )\n throw (\n ((prevState.retryLane = JSCompiler_object_inline_stack_2318),\n enqueueConcurrentRenderForLane(\n current,\n JSCompiler_object_inline_stack_2318\n ),\n scheduleUpdateOnFiber(\n JSCompiler_object_inline_digest_2317,\n current,\n JSCompiler_object_inline_stack_2318\n ),\n SelectiveHydrationException)\n );\n }\n JSCompiler_object_inline_message_2316.data ===\n SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n JSCompiler_object_inline_message_2316.data ===\n SUSPENSE_PENDING_START_DATA\n ? ((workInProgress.flags |= 128),\n (workInProgress.child = current.child),\n (workInProgress = retryDehydratedSuspenseBoundary.bind(\n null,\n current\n )),\n (JSCompiler_object_inline_message_2316._reactRetry =\n workInProgress),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n JSCompiler_object_inline_message_2316.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (didSuspendOrErrorDEV = !1),\n (hydrationDiffRootDEV = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n (warnIfNotHydrating(),\n (idStack[idStackIndex++] = treeContextId),\n (idStack[idStackIndex++] = treeContextOverflow),\n (idStack[idStackIndex++] = treeContextProvider),\n (treeContextId = current.id),\n (treeContextOverflow = current.overflow),\n (treeContextProvider = workInProgress)),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_stack_2318.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (JSCompiler_object_inline_componentStack_2319)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2319 =\n JSCompiler_object_inline_stack_2318.fallback),\n (JSCompiler_object_inline_message_2316 = workInProgress.mode),\n (JSCompiler_temp = current.child),\n (instance = JSCompiler_temp.sibling),\n (JSCompiler_object_inline_stack_2318 = createWorkInProgress(\n JSCompiler_temp,\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_stack_2318.children\n }\n )),\n (JSCompiler_object_inline_stack_2318.subtreeFlags =\n JSCompiler_temp.subtreeFlags & 31457280),\n null !== instance\n ? (JSCompiler_object_inline_componentStack_2319 =\n createWorkInProgress(\n instance,\n JSCompiler_object_inline_componentStack_2319\n ))\n : ((JSCompiler_object_inline_componentStack_2319 =\n createFiberFromFragment(\n JSCompiler_object_inline_componentStack_2319,\n JSCompiler_object_inline_message_2316,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_componentStack_2319.flags |= 2)),\n (JSCompiler_object_inline_componentStack_2319.return =\n workInProgress),\n (JSCompiler_object_inline_stack_2318.return = workInProgress),\n (JSCompiler_object_inline_stack_2318.sibling =\n JSCompiler_object_inline_componentStack_2319),\n (workInProgress.child = JSCompiler_object_inline_stack_2318),\n (JSCompiler_object_inline_stack_2318 =\n JSCompiler_object_inline_componentStack_2319),\n (JSCompiler_object_inline_componentStack_2319 = workInProgress.child),\n (JSCompiler_object_inline_message_2316 = current.child.memoizedState),\n null === JSCompiler_object_inline_message_2316\n ? (JSCompiler_object_inline_message_2316 =\n mountSuspenseOffscreenState(renderLanes))\n : ((JSCompiler_temp =\n JSCompiler_object_inline_message_2316.cachePool),\n null !== JSCompiler_temp\n ? ((instance = CacheContext._currentValue),\n (JSCompiler_temp =\n JSCompiler_temp.parent !== instance\n ? { parent: instance, pool: instance }\n : JSCompiler_temp))\n : (JSCompiler_temp = getSuspendedCache()),\n (JSCompiler_object_inline_message_2316 = {\n baseLanes:\n JSCompiler_object_inline_message_2316.baseLanes | renderLanes,\n cachePool: JSCompiler_temp\n })),\n (JSCompiler_object_inline_componentStack_2319.memoizedState =\n JSCompiler_object_inline_message_2316),\n (JSCompiler_object_inline_componentStack_2319.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2317,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2318\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2318.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_object_inline_digest_2317 = workInProgress.deletions),\n null === JSCompiler_object_inline_digest_2317\n ? ((workInProgress.deletions = [current]),\n (workInProgress.flags |= 16))\n : JSCompiler_object_inline_digest_2317.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n }\n function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n }\n function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n return createFiberFromOffscreen(offscreenProps, mode, 0, null);\n }\n function retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n }\n function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n propagationRoot\n );\n }\n function validateSuspenseListNestedChild(childSlot, index) {\n var isAnArray = isArrayImpl(childSlot);\n childSlot = !isAnArray && \"function\" === typeof getIteratorFn(childSlot);\n return isAnArray || childSlot\n ? ((isAnArray = isAnArray ? \"array\" : \"iterable\"),\n console.error(\n \"A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>\",\n isAnArray,\n index,\n isAnArray\n ),\n !1)\n : !0;\n }\n function initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode\n ) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode));\n }\n function updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n if (\n void 0 !== revealOrder &&\n \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n \"together\" !== revealOrder &&\n !didWarnAboutRevealOrder[revealOrder]\n )\n if (\n ((didWarnAboutRevealOrder[revealOrder] = !0),\n \"string\" === typeof revealOrder)\n )\n switch (revealOrder.toLowerCase()) {\n case \"together\":\n case \"forwards\":\n case \"backwards\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n case \"forward\":\n case \"backward\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n default:\n console.error(\n '\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n }\n else\n console.error(\n '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n void 0 === tailMode ||\n didWarnAboutTailOptions[tailMode] ||\n (\"collapsed\" !== tailMode && \"hidden\" !== tailMode\n ? ((didWarnAboutTailOptions[tailMode] = !0),\n console.error(\n '\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"collapsed\" or \"hidden\"?',\n tailMode\n ))\n : \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n ((didWarnAboutTailOptions[tailMode] = !0),\n console.error(\n '<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?',\n tailMode\n )));\n a: if (\n (\"forwards\" === revealOrder || \"backwards\" === revealOrder) &&\n void 0 !== nextProps &&\n null !== nextProps &&\n !1 !== nextProps\n )\n if (isArrayImpl(nextProps))\n for (var i = 0; i < nextProps.length; i++) {\n if (!validateSuspenseListNestedChild(nextProps[i], i)) break a;\n }\n else if (((i = getIteratorFn(nextProps)), \"function\" === typeof i)) {\n if ((i = i.call(nextProps)))\n for (var step = i.next(), _i = 0; !step.done; step = i.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) break a;\n _i++;\n }\n } else\n console.error(\n 'A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',\n revealOrder\n );\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = suspenseStackCursor.current;\n if (0 !== (nextProps & ForceSuspenseFallback))\n (nextProps =\n (nextProps & SubtreeSuspenseContextMask) | ForceSuspenseFallback),\n (workInProgress.flags |= 128);\n else {\n if (null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(\n current,\n renderLanes,\n workInProgress\n );\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n nextProps &= SubtreeSuspenseContextMask;\n }\n push(suspenseStackCursor, nextProps, workInProgress);\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode\n );\n break;\n case \"backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode\n );\n break;\n case \"together\":\n initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n }\n function bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n profilerStartTime = -1;\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(\"Resuming work not yet implemented.\");\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n }\n function checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n }\n function attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n ) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 12:\n 0 !== (renderLanes & workInProgress.childLanes) &&\n (workInProgress.flags |= 4);\n workInProgress.flags |= 2048;\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = -0;\n stateNode.passiveEffectDuration = -0;\n break;\n case 13:\n stateNode = workInProgress.memoizedState;\n if (null !== stateNode) {\n if (null !== stateNode.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(\n current,\n workInProgress,\n renderLanes\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n stateNode = 0 !== (renderLanes & workInProgress.childLanes);\n stateNode ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (stateNode)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(\n suspenseStackCursor,\n suspenseStackCursor.current,\n workInProgress\n );\n if (stateNode) break;\n else return null;\n case 22:\n case 23:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(current, workInProgress, renderLanes)\n );\n case 24:\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n function beginWork(current, workInProgress, renderLanes) {\n if (workInProgress._debugNeedsRemount && null !== current) {\n renderLanes = createFiberFromTypeAndProps(\n workInProgress.type,\n workInProgress.key,\n workInProgress.pendingProps,\n workInProgress._debugOwner || null,\n workInProgress.mode,\n workInProgress.lanes\n );\n var returnFiber = workInProgress.return;\n if (null === returnFiber) throw Error(\"Cannot swap the root fiber.\");\n current.alternate = null;\n workInProgress.alternate = null;\n renderLanes.index = workInProgress.index;\n renderLanes.sibling = workInProgress.sibling;\n renderLanes.return = workInProgress.return;\n renderLanes.ref = workInProgress.ref;\n renderLanes._debugInfo = workInProgress._debugInfo;\n if (workInProgress === returnFiber.child)\n returnFiber.child = renderLanes;\n else {\n var prevSibling = returnFiber.child;\n if (null === prevSibling)\n throw Error(\"Expected parent to have a child.\");\n for (; prevSibling.sibling !== workInProgress; )\n if (((prevSibling = prevSibling.sibling), null === prevSibling))\n throw Error(\"Expected to find the previous sibling.\");\n prevSibling.sibling = renderLanes;\n }\n workInProgress = returnFiber.deletions;\n null === workInProgress\n ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))\n : workInProgress.push(current);\n renderLanes.flags |= 2;\n return renderLanes;\n }\n if (null !== current)\n if (\n current.memoizedProps !== workInProgress.pendingProps ||\n workInProgress.type !== current.type\n )\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else {\n didReceiveUpdate = !1;\n if ((returnFiber = isHydrating))\n warnIfNotHydrating(),\n (returnFiber = 0 !== (workInProgress.flags & 1048576));\n returnFiber &&\n ((returnFiber = workInProgress.index),\n warnIfNotHydrating(),\n pushTreeId(workInProgress, treeForkCount, returnFiber));\n }\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: if (\n ((returnFiber = workInProgress.pendingProps),\n (current = callLazyInitInDEV(workInProgress.elementType)),\n (workInProgress.type = current),\n \"function\" === typeof current)\n )\n shouldConstruct(current)\n ? ((returnFiber = resolveClassComponentProps(\n current,\n returnFiber\n )),\n (workInProgress.tag = 1),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n validateFunctionComponentInDev(workInProgress, current),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current)\n if (\n ((prevSibling = current.$$typeof),\n prevSibling === REACT_FORWARD_REF_TYPE)\n ) {\n workInProgress.tag = 11;\n workInProgress.type = current =\n resolveForwardRefForHotReloading(current);\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (prevSibling === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n }\n workInProgress = \"\";\n null !== current &&\n \"object\" === typeof current &&\n current.$$typeof === REACT_LAZY_TYPE &&\n (workInProgress =\n \" Did you wrap a component in React.lazy() more than once?\");\n current = getComponentNameFromType(current) || current;\n throw Error(\n \"Element type is invalid. Received a promise that resolves to: \" +\n current +\n \". Lazy element type must resolve to a class or function.\" +\n workInProgress\n );\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = resolveClassComponentProps(\n returnFiber,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n returnFiber,\n prevSibling,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current)\n throw Error(\n \"Should have a current fiber. This is a bug in React.\"\n );\n var nextProps = workInProgress.pendingProps;\n prevSibling = workInProgress.memoizedState;\n returnFiber = prevSibling.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextProps, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n nextProps = nextState.cache;\n pushProvider(workInProgress, CacheContext, nextProps);\n nextProps !== prevSibling.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n nextProps = nextState.element;\n if (prevSibling.isDehydrated)\n if (\n ((prevSibling = {\n element: nextProps,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevSibling),\n (workInProgress.memoizedState = prevSibling),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n break a;\n } else if (nextProps !== returnFiber) {\n returnFiber = createCapturedValueAtFiber(\n Error(\n \"This root received an early update, before anything was able hydrate. Switched the entire root to client rendering.\"\n ),\n workInProgress\n );\n queueHydrationError(returnFiber);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n break a;\n } else\n for (\n nextHydratableInstance = getNextHydratable(\n workInProgress.stateNode.containerInfo.firstChild\n ),\n hydrationParentFiber = workInProgress,\n isHydrating = !0,\n hydrationErrors = null,\n didSuspendOrErrorDEV = !1,\n hydrationDiffRootDEV = null,\n rootOrSingletonContext = !0,\n current = mountChildFibers(\n workInProgress,\n null,\n nextProps,\n renderLanes\n ),\n workInProgress.child = current;\n current;\n\n )\n (current.flags = (current.flags & -3) | 4096),\n (current = current.sibling);\n else {\n resetHydrationState();\n if (nextProps === returnFiber) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (current = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = current)\n : isHydrating ||\n ((current = workInProgress.type),\n (renderLanes = workInProgress.pendingProps),\n (returnFiber = requiredContext(\n rootInstanceStackCursor.current\n )),\n (returnFiber =\n getOwnerDocumentFromRootContainer(\n returnFiber\n ).createElement(current)),\n (returnFiber[internalInstanceKey] = workInProgress),\n (returnFiber[internalPropsKey] = renderLanes),\n setInitialProperties(returnFiber, current, renderLanes),\n markNodeAsHoistable(returnFiber),\n (workInProgress.stateNode = returnFiber))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((prevSibling = requiredContext(rootInstanceStackCursor.current)),\n (returnFiber = getHostContext()),\n (prevSibling = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n prevSibling,\n returnFiber,\n !1\n )),\n didSuspendOrErrorDEV ||\n ((returnFiber = diffHydratedProperties(\n prevSibling,\n workInProgress.type,\n workInProgress.pendingProps,\n returnFiber\n )),\n null !== returnFiber &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n returnFiber)),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n (nextHydratableInstance = getNextHydratable(\n prevSibling.firstChild\n ))),\n (returnFiber = workInProgress.pendingProps.children),\n null !== current || isHydrating\n ? reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n )\n : (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n )),\n markRef(current, workInProgress),\n workInProgress.child\n );\n case 5:\n return (\n null === current &&\n isHydrating &&\n ((nextProps = getHostContext()),\n (returnFiber = validateDOMNesting(\n workInProgress.type,\n nextProps.ancestorInfo\n )),\n (prevSibling = nextHydratableInstance),\n (nextState = !prevSibling) ||\n ((nextState = canHydrateInstance(\n prevSibling,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== nextState\n ? ((workInProgress.stateNode = nextState),\n didSuspendOrErrorDEV ||\n ((nextProps = diffHydratedProperties(\n nextState,\n workInProgress.type,\n workInProgress.pendingProps,\n nextProps\n )),\n null !== nextProps &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n nextProps)),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(\n nextState.firstChild\n )),\n (rootOrSingletonContext = !1),\n (nextProps = !0))\n : (nextProps = !1),\n (nextState = !nextProps)),\n nextState &&\n (returnFiber &&\n warnNonHydratedInstance(workInProgress, prevSibling),\n throwOnHydrationMismatch(workInProgress))),\n pushHostContext(workInProgress),\n (prevSibling = workInProgress.type),\n (nextProps = workInProgress.pendingProps),\n (nextState = null !== current ? current.memoizedProps : null),\n (returnFiber = nextProps.children),\n shouldSetTextContent(prevSibling, nextProps)\n ? (returnFiber = null)\n : null !== nextState &&\n shouldSetTextContent(prevSibling, nextState) &&\n (workInProgress.flags |= 32),\n null !== workInProgress.memoizedState &&\n ((prevSibling = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = prevSibling)),\n markRef(current, workInProgress),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 6:\n return (\n null === current &&\n isHydrating &&\n ((current = workInProgress.pendingProps),\n (renderLanes = getHostContext().ancestorInfo.current),\n (current =\n null != renderLanes\n ? validateTextNesting(current, renderLanes.tag)\n : !0),\n (renderLanes = nextHydratableInstance),\n (returnFiber = !renderLanes) ||\n ((returnFiber = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== returnFiber\n ? ((workInProgress.stateNode = returnFiber),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (returnFiber = !0))\n : (returnFiber = !1),\n (returnFiber = !returnFiber)),\n returnFiber &&\n (current &&\n warnNonHydratedInstance(workInProgress, renderLanes),\n throwOnHydrationMismatch(workInProgress))),\n null\n );\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (returnFiber = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n ))\n : reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n (workInProgress.flags |= 4),\n (workInProgress.flags |= 2048),\n (returnFiber = workInProgress.stateNode),\n (returnFiber.effectDuration = -0),\n (returnFiber.passiveEffectDuration = -0),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = workInProgress.pendingProps),\n (nextProps = prevSibling.value),\n \"value\" in prevSibling ||\n hasWarnedAboutUsingNoValuePropOnContextProvider ||\n ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),\n console.error(\n \"The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?\"\n )),\n pushProvider(workInProgress, returnFiber, nextProps),\n reconcileChildren(\n current,\n workInProgress,\n prevSibling.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 9:\n return (\n (prevSibling = workInProgress.type._context),\n (returnFiber = workInProgress.pendingProps.children),\n \"function\" !== typeof returnFiber &&\n console.error(\n \"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it.\"\n ),\n prepareToReadContext(workInProgress),\n (prevSibling = readContext(prevSibling)),\n markComponentRenderStarted(workInProgress),\n (returnFiber = callComponentInDEV(\n returnFiber,\n prevSibling,\n void 0\n )),\n markComponentRenderStopped(),\n (workInProgress.flags |= 1),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n case 22:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (returnFiber = readContext(CacheContext)),\n null === current\n ? ((prevSibling = peekCacheFromPool()),\n null === prevSibling &&\n ((prevSibling = workInProgressRoot),\n (nextProps = createCache()),\n (prevSibling.pooledCache = nextProps),\n retainCache(nextProps),\n null !== nextProps &&\n (prevSibling.pooledCacheLanes |= renderLanes),\n (prevSibling = nextProps)),\n (workInProgress.memoizedState = {\n parent: returnFiber,\n cache: prevSibling\n }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, prevSibling))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n (prevSibling = current.memoizedState),\n (nextProps = workInProgress.memoizedState),\n prevSibling.parent !== returnFiber\n ? ((prevSibling = {\n parent: returnFiber,\n cache: returnFiber\n }),\n (workInProgress.memoizedState = prevSibling),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n prevSibling),\n pushProvider(workInProgress, CacheContext, returnFiber))\n : ((returnFiber = nextProps.cache),\n pushProvider(workInProgress, CacheContext, returnFiber),\n returnFiber !== prevSibling.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function resetContextDependencies() {\n lastContextDependency = currentlyRenderingFiber = null;\n isDisallowedContextReadInDEV = !1;\n }\n function pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n push(rendererCursorDEV, context._currentRenderer, providerFiber);\n void 0 !== context._currentRenderer &&\n null !== context._currentRenderer &&\n context._currentRenderer !== rendererSigil &&\n console.error(\n \"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n );\n context._currentRenderer = rendererSigil;\n }\n function popProvider(context, providerFiber) {\n context._currentValue = valueCursor.current;\n var currentRenderer = rendererCursorDEV.current;\n pop(rendererCursorDEV, providerFiber);\n context._currentRenderer = currentRenderer;\n pop(valueCursor, providerFiber);\n }\n function scheduleContextWorkOnParentPath(\n parent,\n renderLanes,\n propagationRoot\n ) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n parent !== propagationRoot &&\n console.error(\n \"Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n ) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber)\n throw Error(\n \"We just came from a parent so we must have had a parent. This is a bug in React.\"\n );\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n nextFiber,\n renderLanes,\n workInProgress\n );\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n }\n function propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n ) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current\n ? current.push(context)\n : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n }\n function checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n }\n function prepareToReadContext(workInProgress) {\n currentlyRenderingFiber = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n }\n function readContext(context) {\n isDisallowedContextReadInDEV &&\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n return readContextForConsumer(currentlyRenderingFiber, context);\n }\n function readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n }\n function readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer)\n throw Error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n lastContextDependency = context;\n consumer.dependencies = {\n lanes: 0,\n firstContext: context,\n _debugThenableState: null\n };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n }\n function initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n }\n function cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n }\n function createUpdate(lane) {\n return {\n lane: lane,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n }\n function enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (\n currentlyProcessingQueue === updateQueue &&\n !didWarnUpdateInsideUpdate\n ) {\n var componentName = getComponentNameFromFiber(fiber);\n console.error(\n \"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\\n\\nPlease update the following component: %s\",\n componentName\n );\n didWarnUpdateInsideUpdate = !0;\n }\n if ((executionContext & RenderContext) !== NoContext)\n return (\n (componentName = updateQueue.pending),\n null === componentName\n ? (update.next = update)\n : ((update.next = componentName.next),\n (componentName.next = update)),\n (updateQueue.pending = update),\n (update = getRootForUpdatedFiber(fiber)),\n markUpdateLaneFromFiberToRoot(fiber, null, lane),\n update\n );\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194176))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n }\n function suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n }\n function processUpdateQueue(\n workInProgress,\n props,\n instance$jscomp$0,\n renderLanes\n ) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress.updateQueue;\n hasForceUpdate = !1;\n currentlyProcessingQueue = queue.shared;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n updateLane = workInProgress;\n var partialState = pendingQueue;\n var nextProps = props,\n instance = instance$jscomp$0;\n switch (partialState.tag) {\n case ReplaceState:\n partialState = partialState.payload;\n if (\"function\" === typeof partialState) {\n isDisallowedContextReadInDEV = !0;\n var nextState = partialState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n newState = nextState;\n break a;\n }\n newState = partialState;\n break a;\n case CaptureUpdate:\n updateLane.flags = (updateLane.flags & -65537) | 128;\n case UpdateState:\n nextState = partialState.payload;\n if (\"function\" === typeof nextState) {\n isDisallowedContextReadInDEV = !0;\n partialState = nextState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n nextState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n } else partialState = nextState;\n if (null === partialState || void 0 === partialState) break a;\n newState = assign({}, newState, partialState);\n break a;\n case ForceUpdate:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress.flags |= 64),\n isHiddenUpdate && (workInProgress.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress.lanes = lastBaseUpdate;\n workInProgress.memoizedState = newState;\n }\n currentlyProcessingQueue = null;\n }\n function callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(\n \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n callback\n );\n callback.call(context);\n }\n function commitHiddenCallbacks(updateQueue, context) {\n var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;\n updateQueue < hiddenCallbacks.length;\n updateQueue++\n )\n callCallback(hiddenCallbacks[updateQueue], context);\n }\n function commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n }\n function shouldProfile(current) {\n return (current.mode & ProfileMode) !== NoMode;\n }\n function commitHookLayoutEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookLayoutUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if (\n (updateQueue.tag & flags) === flags &&\n ((flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectMountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectMountStarted(\n finishedWork\n ),\n (lastEffect = void 0),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = runWithFiberInDEV(\n finishedWork,\n callCreateInDEV,\n updateQueue\n )),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectMountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectMountStopped(),\n void 0 !== lastEffect && \"function\" !== typeof lastEffect)\n ) {\n var hookName = void 0;\n hookName =\n 0 !== (updateQueue.tag & Layout)\n ? \"useLayoutEffect\"\n : 0 !== (updateQueue.tag & Insertion)\n ? \"useInsertionEffect\"\n : \"useEffect\";\n var addendum = void 0;\n addendum =\n null === lastEffect\n ? \" You returned null. If your effect does not require clean up, return undefined (or nothing).\"\n : \"function\" === typeof lastEffect.then\n ? \"\\n\\nIt looks like you wrote \" +\n hookName +\n \"(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\\n\\n\" +\n hookName +\n \"(() => {\\n async function fetchData() {\\n // You can await here\\n const response = await MyAPI.getData(someId);\\n // ...\\n }\\n fetchData();\\n}, [someId]); // Or [] if effect doesn't need props or state\\n\\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching\"\n : \" You returned: \" + lastEffect;\n runWithFiberInDEV(\n finishedWork,\n function (n, a) {\n console.error(\n \"%s must not return anything besides a function, which is used for clean-up.%s\",\n n,\n a\n );\n },\n hookName,\n addendum\n );\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor\n ) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n void 0 !== destroy &&\n ((inst.destroy = void 0),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(\n finishedWork\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n runWithFiberInDEV(\n finishedWork,\n callDestroyInDEV,\n finishedWork,\n nearestMountedAncestor,\n destroy\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookPassiveMountEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookPassiveUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (instance.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n instance.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n updateQueue,\n instance\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {\n return instance.getSnapshotBeforeUpdate(prevProps, prevState);\n }\n function commitClassSnapshot(finishedWork, current) {\n var prevProps = current.memoizedProps,\n prevState = current.memoizedState;\n current = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (current.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n current.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n finishedWork.type,\n prevProps,\n finishedWork.elementType === finishedWork.type\n );\n var snapshot = runWithFiberInDEV(\n finishedWork,\n callGetSnapshotBeforeUpdates,\n current,\n resolvedPrevProps,\n prevState\n );\n prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;\n void 0 !== snapshot ||\n prevProps.has(finishedWork.type) ||\n (prevProps.add(finishedWork.type),\n runWithFiberInDEV(finishedWork, function () {\n console.error(\n \"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.\",\n getComponentNameFromFiber(finishedWork)\n );\n }));\n current.__reactInternalSnapshotBeforeUpdate = snapshot;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n ) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n shouldProfile(current)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n );\n }\n function commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n if (null !== ref) {\n var instance = finishedWork.stateNode;\n if (\"function\" === typeof ref)\n if (shouldProfile(finishedWork))\n try {\n startEffectTimer(), (finishedWork.refCleanup = ref(instance));\n } finally {\n recordEffectDuration();\n }\n else finishedWork.refCleanup = ref(instance);\n else\n \"string\" === typeof ref\n ? console.error(\"String refs are no longer supported.\")\n : ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().\",\n getComponentNameFromFiber(finishedWork)\n ),\n (ref.current = instance);\n }\n }\n function safelyAttachRef(current, nearestMountedAncestor) {\n try {\n runWithFiberInDEV(current, commitAttachRef, current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n function safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, refCleanup);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, refCleanup);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, ref, null);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, ref, null);\n } catch (error$6) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$6);\n }\n else ref.current = null;\n }\n function commitProfiler(\n finishedWork,\n current,\n commitStartTime,\n effectDuration\n ) {\n var _finishedWork$memoize = finishedWork.memoizedProps,\n id = _finishedWork$memoize.id,\n onCommit = _finishedWork$memoize.onCommit;\n _finishedWork$memoize = _finishedWork$memoize.onRender;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize &&\n _finishedWork$memoize(\n id,\n current,\n finishedWork.actualDuration,\n finishedWork.treeBaseDuration,\n finishedWork.actualStartTime,\n commitStartTime\n );\n \"function\" === typeof onCommit &&\n onCommit(\n finishedWork.memoizedProps.id,\n current,\n effectDuration,\n commitStartTime\n );\n }\n function commitProfilerPostCommitImpl(\n finishedWork,\n current,\n commitStartTime,\n passiveEffectDuration\n ) {\n var _finishedWork$memoize2 = finishedWork.memoizedProps;\n finishedWork = _finishedWork$memoize2.id;\n _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize2 &&\n _finishedWork$memoize2(\n finishedWork,\n current,\n passiveEffectDuration,\n commitStartTime\n );\n }\n function commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitMount,\n instance,\n type,\n props,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n runWithFiberInDEV(\n finishedWork,\n commitUpdate,\n finishedWork.stateNode,\n finishedWork.type,\n oldProps,\n newProps,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n 27 === fiber.tag ||\n 4 === fiber.tag\n );\n }\n function getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag &&\n 6 !== fiber.tag &&\n 27 !== fiber.tag &&\n 18 !== fiber.tag;\n\n ) {\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n }\n function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? 8 === parent.nodeType\n ? parent.parentNode.insertBefore(node, before)\n : parent.insertBefore(node, before)\n : (8 === parent.nodeType\n ? ((before = parent.parentNode),\n before.insertBefore(node, parent))\n : ((before = parent), before.appendChild(node)),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (4 !== tag && 27 !== tag && ((node = node.child), null !== node))\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n }\n function insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (4 !== tag && 27 !== tag && ((node = node.child), null !== node))\n for (\n insertOrAppendPlacementNode(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent),\n (node = node.sibling);\n }\n function commitPlacement(finishedWork) {\n if (27 !== finishedWork.tag) {\n a: {\n for (var parent = finishedWork.return; null !== parent; ) {\n if (isHostParent(parent)) {\n var parentFiber = parent;\n break a;\n }\n parent = parent.return;\n }\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n switch (parentFiber.tag) {\n case 27:\n parent = parentFiber.stateNode;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, parentFiber, parent);\n break;\n case 5:\n parent = parentFiber.stateNode;\n parentFiber.flags & 32 &&\n (resetTextContent(parent), (parentFiber.flags &= -33));\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(finishedWork, parentFiber, parent);\n break;\n case 3:\n case 4:\n parent = parentFiber.stateNode.containerInfo;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n parentFiber,\n parent\n );\n break;\n default:\n throw Error(\n \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n }\n }\n function commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$2) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = {\n focusedElem: root,\n selectionRange: JSCompiler_temp\n };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n root = firstChild = nextEffect;\n JSCompiler_temp = root.alternate;\n anchorOffset = root.flags;\n switch (root.tag) {\n case 0:\n break;\n case 11:\n case 15:\n break;\n case 1:\n 0 !== (anchorOffset & 1024) &&\n null !== JSCompiler_temp &&\n commitClassSnapshot(root, JSCompiler_temp);\n break;\n case 3:\n if (0 !== (anchorOffset & 1024))\n if (\n ((root = root.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (anchorOffset & 1024))\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n firstChild = shouldFireAfterActiveInstanceBlur;\n shouldFireAfterActiveInstanceBlur = !1;\n return firstChild;\n }\n function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitHookLayoutEffects(finishedWork, Layout | HasEffect);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n )),\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n );\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n current = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((flags = finishedWork.updateQueue), null !== flags)\n ) {\n prevProps = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n prevProps = finishedWork.child.stateNode;\n break;\n case 1:\n prevProps = finishedWork.child.stateNode;\n }\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n flags,\n prevProps\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n finishedRoot.effectDuration += popNestedEffectDurations(current);\n break;\n case 26:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n finishedRoot = finishedWork.stateNode;\n finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n finishedRoot.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n prevProps =\n null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!prevProps) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevProps;\n (offscreenSubtreeWasHidden = current) &&\n !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n flags & 512 &&\n (\"manual\" === finishedWork.memoizedProps.mode\n ? safelyAttachRef(finishedWork, finishedWork.return)\n : safelyDetachRef(finishedWork, finishedWork.return));\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n }\n function detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber._debugOwner = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n }\n function recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ),\n (parent = parent.sibling);\n }\n function commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberUnmount\n )\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber = deletedFiber.stateNode;\n for (finishedRoot = deletedFiber.attributes; finishedRoot.length; )\n deletedFiber.removeAttributeNode(finishedRoot[0]);\n detachDeletedInstance(deletedFiber);\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChildFromContainer,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChild,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n (deletedFiber = deletedFiber.stateNode),\n 8 === finishedRoot.nodeType\n ? clearSuspenseBoundary(finishedRoot.parentNode, deletedFiber)\n : 1 === finishedRoot.nodeType &&\n clearSuspenseBoundary(finishedRoot, deletedFiber),\n retryIfBlockedOn(finishedRoot))\n : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(\n Insertion,\n deletedFiber,\n nearestMountedAncestor\n );\n offscreenSubtreeWasHidden ||\n commitHookLayoutUnmountEffects(\n deletedFiber,\n nearestMountedAncestor,\n Layout\n );\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n }\n function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedSuspenseInstance,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n finishedWork.tag +\n \"). This is a bug in React.\"\n );\n }\n }\n function attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n if (isDevToolsPresent)\n if (null !== inProgressLanes && null !== inProgressRoot)\n restorePendingUpdaters(inProgressRoot, inProgressLanes);\n else\n throw Error(\n \"Expected finished root and lanes to be set. This is a bug in React.\"\n );\n wakeable.then(retry, retry);\n }\n });\n }\n function commitMutationEffects(root, finishedWork, committedLanes) {\n inProgressLanes = committedLanes;\n inProgressRoot = root;\n commitMutationEffectsOnFiber(finishedWork, root);\n inProgressRoot = inProgressLanes = null;\n }\n function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var root = root$jscomp$0,\n returnFiber = parentFiber,\n deletedFiber = deletions[i],\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n hostParent = null;\n hostParentIsContainer = !1;\n root = deletedFiber;\n returnFiber = root.alternate;\n null !== returnFiber && (returnFiber.return = null);\n root.return = null;\n }\n if (parentFiber.subtreeFlags & 13878)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n }\n function commitMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(\n Insertion | HasEffect,\n finishedWork,\n finishedWork.return\n ),\n commitHookEffectListMount(Insertion | HasEffect, finishedWork),\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout | HasEffect\n ));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4)\n if (\n ((root = null !== current ? current.memoizedState : null),\n (flags = finishedWork.memoizedState),\n null === current)\n )\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n root = hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n hoistableRoot = root.getElementsByTagName(\"title\")[0];\n if (\n !hoistableRoot ||\n hoistableRoot[internalHoistableMarker] ||\n hoistableRoot[internalInstanceKey] ||\n hoistableRoot.namespaceURI === SVG_NAMESPACE ||\n hoistableRoot.hasAttribute(\"itemprop\")\n )\n (hoistableRoot = root.createElement(flags)),\n root.head.insertBefore(\n hoistableRoot,\n root.querySelector(\"head > title\")\n );\n setInitialProperties(hoistableRoot, flags, current);\n hoistableRoot[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(hoistableRoot);\n flags = hoistableRoot;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n root\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((hoistableRoot = maybeNodes[i]),\n hoistableRoot.getAttribute(\"href\") ===\n (null == current.href ? null : current.href) &&\n hoistableRoot.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n hoistableRoot.getAttribute(\"title\") ===\n (null == current.title\n ? null\n : current.title) &&\n hoistableRoot.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n hoistableRoot = root.createElement(flags);\n setInitialProperties(hoistableRoot, flags, current);\n root.head.appendChild(hoistableRoot);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n root\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((hoistableRoot = maybeNodes[i]),\n checkAttributeStringCoercion(\n current.content,\n \"content\"\n ),\n hoistableRoot.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n hoistableRoot.getAttribute(\"name\") ===\n (null == current.name\n ? null\n : current.name) &&\n hoistableRoot.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n hoistableRoot.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n hoistableRoot.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n hoistableRoot = root.createElement(flags);\n setInitialProperties(hoistableRoot, flags, current);\n root.head.appendChild(hoistableRoot);\n break;\n default:\n throw Error(\n 'getNodesForType encountered a type it did not expect: \"' +\n flags +\n '\". This is a bug in React.'\n );\n }\n hoistableRoot[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(hoistableRoot);\n flags = hoistableRoot;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n root !== flags\n ? (null === root\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : root.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 27:\n if (flags & 4 && null === finishedWork.alternate) {\n hoistableRoot = finishedWork.stateNode;\n maybeNodes = finishedWork.memoizedProps;\n try {\n for (i = hoistableRoot.firstChild; i; ) {\n var nextNode = i.nextSibling,\n nodeName = i.nodeName;\n i[internalHoistableMarker] ||\n \"HEAD\" === nodeName ||\n \"BODY\" === nodeName ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === i.rel.toLowerCase()) ||\n hoistableRoot.removeChild(i);\n i = nextNode;\n }\n runWithFiberInDEV(\n finishedWork,\n acquireSingletonInstance,\n finishedWork.type,\n maybeNodes,\n hoistableRoot,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n root = finishedWork.stateNode;\n try {\n runWithFiberInDEV(finishedWork, resetTextContent, root);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((root = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n root,\n null !== current ? current.memoizedProps : root\n ));\n flags & 1024 &&\n ((needsFormReset = !0),\n \"form\" !== finishedWork.type &&\n console.error(\n \"Unexpected host component type. Expected a form. This is a bug in React.\"\n ));\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(\n \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\"\n );\n flags = finishedWork.memoizedProps;\n current = null !== current ? current.memoizedProps : flags;\n root = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitTextUpdate,\n root,\n current,\n flags\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n hoistableRoot = pushNestedEffectDurations();\n tagCaches = null;\n maybeNodes = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = maybeNodes;\n commitReconciliationEffects(finishedWork);\n if (\n flags & 4 &&\n null !== current &&\n current.memoizedState.isDehydrated\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedContainer,\n root.containerInfo\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n root.effectDuration += popNestedEffectDurations(hoistableRoot);\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n flags = pushNestedEffectDurations();\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.stateNode.effectDuration +=\n bubbleNestedEffectDurations(flags);\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now$1());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n i = null !== finishedWork.memoizedState;\n nextNode = null !== current && null !== current.memoizedState;\n nodeName = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = nodeName || i;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || nextNode;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = nodeName;\n commitReconciliationEffects(finishedWork);\n root = finishedWork.stateNode;\n root._current = finishedWork;\n root._visibility &= ~OffscreenDetached;\n root._visibility |= root._pendingVisibility & OffscreenDetached;\n if (\n flags & 8192 &&\n ((root._visibility = i\n ? root._visibility & ~OffscreenVisible\n : root._visibility | OffscreenVisible),\n i &&\n ((root = offscreenSubtreeIsHidden || offscreenSubtreeWasHidden),\n null === current ||\n nextNode ||\n root ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n null === finishedWork.memoizedProps ||\n \"manual\" !== finishedWork.memoizedProps.mode)\n )\n a: for (current = null, root = finishedWork; ; ) {\n if (5 === root.tag || 26 === root.tag || 27 === root.tag) {\n if (null === current) {\n nextNode = current = root;\n try {\n (hoistableRoot = nextNode.stateNode),\n i\n ? runWithFiberInDEV(\n nextNode,\n hideInstance,\n hoistableRoot\n )\n : runWithFiberInDEV(\n nextNode,\n unhideInstance,\n nextNode.stateNode,\n nextNode.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(nextNode, nextNode.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n nextNode = root;\n try {\n (maybeNodes = nextNode.stateNode),\n i\n ? runWithFiberInDEV(\n nextNode,\n hideTextInstance,\n maybeNodes\n )\n : runWithFiberInDEV(\n nextNode,\n unhideTextInstance,\n maybeNodes,\n nextNode.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(nextNode, nextNode.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork)\n break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n }\n function commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n }\n function recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n }\n function commitLayoutEffects(finishedWork, root, committedLanes) {\n inProgressLanes = committedLanes;\n inProgressRoot = root;\n commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n inProgressRoot = inProgressLanes = null;\n }\n function recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disappearLayoutEffects(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 26:\n case 27:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n safelyDetachRef(finishedWork, finishedWork.return);\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n }\n function recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disappearLayoutEffects(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function reappearLayoutEffects(\n finishedRoot,\n current,\n finishedWork,\n includeWorkInProgressEffects\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookLayoutEffects(finishedWork, Layout);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork.stateNode;\n \"function\" === typeof current.componentDidMount &&\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n current\n );\n current = finishedWork.updateQueue;\n if (null !== current) {\n finishedRoot = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHiddenCallbacks,\n current,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 26:\n case 27:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (includeWorkInProgressEffects && flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects = finishedWork.stateNode;\n includeWorkInProgressEffects.effectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n includeWorkInProgressEffects.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n }\n function recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n parentFiber,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reappearLayoutEffects(\n finishedRoot,\n parentFiber.alternate,\n parentFiber,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && retainCache(current),\n null != previousCache && releaseCache(previousCache));\n }\n function commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (retainCache(finishedWork), null != current && releaseCache(current));\n }\n function recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);\n break;\n case 3:\n var prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((committedLanes = null),\n null !== finishedWork.alternate &&\n (committedLanes = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== committedLanes &&\n (retainCache(finishedWork),\n null != committedLanes && releaseCache(committedLanes)));\n finishedRoot.passiveEffectDuration +=\n popNestedEffectDurations(prevEffectDuration);\n break;\n case 12:\n if (flags & 2048) {\n prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n finishedRoot.passiveEffectDuration +=\n bubbleNestedEffectDurations(prevEffectDuration);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfilerPostCommitImpl,\n finishedWork,\n finishedWork.alternate,\n commitStartTime,\n finishedRoot.passiveEffectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n prevEffectDuration = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? prevEffectDuration._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : prevEffectDuration._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((prevEffectDuration._visibility |=\n OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256)\n ));\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n }\n function recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n 0 !== (parentFiber.subtreeFlags & 10256);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function reconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookPassiveMountEffects(finishedWork, Passive);\n break;\n case 23:\n break;\n case 22:\n var _instance2 = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? _instance2._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n }\n function recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(\n finishedWork.alternate,\n finishedWork\n );\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n }\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyAccumulateSuspenseyCommit(parentFiber) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function accumulateSuspenseyCommitOnFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(fiber);\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(fiber);\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n fiber.stateNode.containerInfo\n );\n recursivelyAccumulateSuspenseyCommit(fiber);\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(fiber),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(fiber));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(fiber);\n }\n }\n function detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n }\n function recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive | HasEffect\n );\n break;\n case 3:\n var prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n popNestedEffectDurations(prevEffectDuration);\n break;\n case 12:\n prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n bubbleNestedEffectDurations(prevEffectDuration);\n break;\n case 22:\n prevEffectDuration = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n prevEffectDuration._visibility & OffscreenPassiveEffectsConnected &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((prevEffectDuration._visibility &=\n ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n }\n function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disconnectPassiveEffect(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disconnectPassiveEffect(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive\n );\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n instance._visibility & OffscreenPassiveEffectsConnected &&\n ((instance._visibility &= ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n }\n }\n function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n ) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect,\n current = fiber;\n switch (current.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n current,\n nearestMountedAncestor,\n Passive\n );\n break;\n case 23:\n case 22:\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n ((current = current.memoizedState.cachePool.pool),\n null != current && retainCache(current));\n break;\n case 24:\n releaseCache(current.memoizedState.cache);\n }\n current = fiber.child;\n if (null !== current) (current.return = fiber), (nextEffect = current);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n current = nextEffect;\n var sibling = current.sibling,\n returnFiber = current.return;\n detachFiberAfterEffects(current);\n if (current === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n }\n function FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n this.actualDuration = -0;\n this.actualStartTime = -1.1;\n this.treeBaseDuration = this.selfBaseDuration = -0;\n this._debugOwner = this._debugInfo = null;\n this._debugNeedsRemount = !1;\n this._debugHookTypes = null;\n hasBadMapPolyfill ||\n \"function\" !== typeof Object.preventExtensions ||\n Object.preventExtensions(this);\n }\n function shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n }\n function createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiber(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress._debugOwner = current._debugOwner),\n (workInProgress._debugHookTypes = current._debugHookTypes),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.actualDuration = -0),\n (workInProgress.actualStartTime = -1.1));\n workInProgress.flags = current.flags & 31457280;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : {\n lanes: pendingProps.lanes,\n firstContext: pendingProps.firstContext,\n _debugThenableState: pendingProps._debugThenableState\n };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n workInProgress._debugInfo = current._debugInfo;\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n switch (workInProgress.tag) {\n case 0:\n case 15:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 1:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 11:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n }\n return workInProgress;\n }\n function resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 31457282;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null),\n (workInProgress.selfBaseDuration = 0),\n (workInProgress.treeBaseDuration = 0))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext,\n _debugThenableState: renderLanes._debugThenableState\n }),\n (workInProgress.selfBaseDuration = current.selfBaseDuration),\n (workInProgress.treeBaseDuration = current.treeBaseDuration));\n return workInProgress;\n }\n function createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n ) {\n var fiberTag = 0,\n resolvedType = type;\n if (\"function\" === typeof type)\n shouldConstruct(type) && (fiberTag = 1),\n (resolvedType = resolveFunctionForHotReloading(resolvedType));\n else if (\"string\" === typeof type)\n (fiberTag = getHostContext()),\n (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5);\n else\n a: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(\n pendingProps.children,\n mode,\n lanes,\n key\n );\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= StrictLegacyMode;\n mode |= StrictEffectsMode;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = pendingProps),\n (owner = mode),\n \"string\" !== typeof type.id &&\n console.error(\n 'Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.',\n typeof type.id\n ),\n (key = createFiber(12, type, key, owner | ProfileMode)),\n (key.elementType = REACT_PROFILER_TYPE),\n (key.lanes = lanes),\n (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),\n key\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (key = createFiber(13, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (key = createFiber(19, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_LIST_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_OFFSCREEN_TYPE:\n return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n resolvedType = null;\n break a;\n }\n resolvedType = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n resolvedType +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n null === type\n ? (pendingProps = \"null\")\n : isArrayImpl(type)\n ? (pendingProps = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((pendingProps =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (resolvedType =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (pendingProps = typeof type);\n (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&\n (resolvedType +=\n \"\\n\\nCheck the render method of `\" + fiberTag + \"`.\");\n fiberTag = 29;\n pendingProps = Error(\n \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n (pendingProps + \".\" + resolvedType)\n );\n resolvedType = null;\n }\n key = createFiber(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = resolvedType;\n key.lanes = lanes;\n key._debugOwner = owner;\n return key;\n }\n function createFiberFromElement(element, mode, lanes) {\n mode = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n element._owner,\n mode,\n lanes\n );\n mode._debugOwner = element._owner;\n return mode;\n }\n function createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiber(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n }\n function createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n pendingProps = createFiber(22, pendingProps, key, mode);\n pendingProps.elementType = REACT_OFFSCREEN_TYPE;\n pendingProps.lanes = lanes;\n var primaryChildInstance = {\n _visibility: OffscreenVisible,\n _pendingVisibility: OffscreenVisible,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null,\n _current: null,\n detach: function () {\n var instance = primaryChildInstance,\n fiber = instance._current;\n if (null === fiber)\n throw Error(\n \"Calling Offscreen.detach before instance handle has been set.\"\n );\n if (0 === (instance._pendingVisibility & OffscreenDetached)) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root &&\n ((instance._pendingVisibility |= OffscreenDetached),\n scheduleUpdateOnFiber(root, fiber, 2));\n }\n },\n attach: function () {\n var instance = primaryChildInstance,\n fiber = instance._current;\n if (null === fiber)\n throw Error(\n \"Calling Offscreen.detach before instance handle has been set.\"\n );\n if (0 !== (instance._pendingVisibility & OffscreenDetached)) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root &&\n ((instance._pendingVisibility &= ~OffscreenDetached),\n scheduleUpdateOnFiber(root, fiber, 2));\n }\n }\n };\n pendingProps.stateNode = primaryChildInstance;\n return pendingProps;\n }\n function createFiberFromText(content, mode, lanes) {\n content = createFiber(6, content, null, mode);\n content.lanes = lanes;\n return content;\n }\n function createFiberFromPortal(portal, mode, lanes) {\n mode = createFiber(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n }\n function markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n }\n function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\n \"stylesheet\" !== resource.type ||\n (resource.state.loading & Inserted) !== NotLoaded\n )\n workInProgress.flags &= -16777217;\n else if (\n ((workInProgress.flags |= 16777216), !preloadResource(resource))\n ) {\n resource = suspenseHandlerStackCursor.current;\n if (\n null !== resource &&\n ((workInProgressRootRenderLanes & 4194176) ===\n workInProgressRootRenderLanes\n ? null !== shellBoundary\n : ((workInProgressRootRenderLanes & 62914560) !==\n workInProgressRootRenderLanes &&\n 0 === (workInProgressRootRenderLanes & 536870912)) ||\n resource !== shellBoundary)\n )\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n workInProgress.flags |= 8192;\n }\n }\n function scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n }\n function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var _lastTailNode = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === _lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (_lastTailNode.sibling = null);\n }\n }\n function bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n if ((completedWork.mode & ProfileMode) !== NoMode) {\n for (\n var _treeBaseDuration = completedWork.selfBaseDuration,\n _child2 = completedWork.child;\n null !== _child2;\n\n )\n (newChildLanes |= _child2.lanes | _child2.childLanes),\n (subtreeFlags |= _child2.subtreeFlags & 31457280),\n (subtreeFlags |= _child2.flags & 31457280),\n (_treeBaseDuration += _child2.treeBaseDuration),\n (_child2 = _child2.sibling);\n completedWork.treeBaseDuration = _treeBaseDuration;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags & 31457280),\n (subtreeFlags |= _treeBaseDuration.flags & 31457280),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n else if ((completedWork.mode & ProfileMode) !== NoMode) {\n _treeBaseDuration = completedWork.actualDuration;\n _child2 = completedWork.selfBaseDuration;\n for (var child = completedWork.child; null !== child; )\n (newChildLanes |= child.lanes | child.childLanes),\n (subtreeFlags |= child.subtreeFlags),\n (subtreeFlags |= child.flags),\n (_treeBaseDuration += child.actualDuration),\n (_child2 += child.treeBaseDuration),\n (child = child.sibling);\n completedWork.actualDuration = _treeBaseDuration;\n completedWork.treeBaseDuration = _child2;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags),\n (subtreeFlags |= _treeBaseDuration.flags),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n }\n function completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n newProps = workInProgress.stateNode;\n renderLanes = null;\n null !== current && (renderLanes = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext, workInProgress);\n popHostContainer(workInProgress);\n newProps.pendingContext &&\n ((newProps.context = newProps.pendingContext),\n (newProps.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n null !== hydrationErrors &&\n (queueRecoverableErrors(hydrationErrors),\n (hydrationErrors = null)));\n bubbleProperties(workInProgress);\n return null;\n case 26:\n return (\n (renderLanes = workInProgress.memoizedState),\n null === current\n ? (markUpdate(workInProgress),\n null !== renderLanes\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n renderLanes\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217)))\n : renderLanes\n ? renderLanes !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n renderLanes\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : (current.memoizedProps !== newProps &&\n markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217)),\n null\n );\n case 27:\n popHostContext(workInProgress);\n renderLanes = requiredContext(rootInstanceStackCursor.current);\n var _type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n current = getHostContext();\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(\n _type,\n newProps,\n renderLanes,\n current,\n !0\n )),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n renderLanes = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n _type = getHostContext();\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, _type);\n else {\n current = requiredContext(rootInstanceStackCursor.current);\n validateDOMNesting(renderLanes, _type.ancestorInfo);\n _type = _type.context;\n current = getOwnerDocumentFromRootContainer(current);\n switch (_type) {\n case HostContextNamespaceSvg:\n current = current.createElementNS(SVG_NAMESPACE, renderLanes);\n break;\n case HostContextNamespaceMath:\n current = current.createElementNS(\n MATH_NAMESPACE,\n renderLanes\n );\n break;\n default:\n switch (renderLanes) {\n case \"svg\":\n current = current.createElementNS(\n SVG_NAMESPACE,\n renderLanes\n );\n break;\n case \"math\":\n current = current.createElementNS(\n MATH_NAMESPACE,\n renderLanes\n );\n break;\n case \"script\":\n current = current.createElement(\"div\");\n current.innerHTML = \"<script>\\x3c/script>\";\n current = current.removeChild(current.firstChild);\n break;\n case \"select\":\n current =\n \"string\" === typeof newProps.is\n ? current.createElement(\"select\", { is: newProps.is })\n : current.createElement(\"select\");\n newProps.multiple\n ? (current.multiple = !0)\n : newProps.size && (current.size = newProps.size);\n break;\n default:\n (current =\n \"string\" === typeof newProps.is\n ? current.createElement(renderLanes, {\n is: newProps.is\n })\n : current.createElement(renderLanes)),\n -1 === renderLanes.indexOf(\"-\") &&\n (renderLanes !== renderLanes.toLowerCase() &&\n console.error(\n \"<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.\",\n renderLanes\n ),\n \"[object HTMLUnknownElement]\" !==\n Object.prototype.toString.call(current) ||\n hasOwnProperty.call(\n warnedUnknownTags,\n renderLanes\n ) ||\n ((warnedUnknownTags[renderLanes] = !0),\n console.error(\n \"The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.\",\n renderLanes\n )));\n }\n }\n current[internalInstanceKey] = workInProgress;\n current[internalPropsKey] = newProps;\n a: for (_type = workInProgress.child; null !== _type; ) {\n if (5 === _type.tag || 6 === _type.tag)\n current.appendChild(_type.stateNode);\n else if (\n 4 !== _type.tag &&\n 27 !== _type.tag &&\n null !== _type.child\n ) {\n _type.child.return = _type;\n _type = _type.child;\n continue;\n }\n if (_type === workInProgress) break a;\n for (; null === _type.sibling; ) {\n if (null === _type.return || _type.return === workInProgress)\n break a;\n _type = _type.return;\n }\n _type.sibling.return = _type.return;\n _type = _type.sibling;\n }\n workInProgress.stateNode = current;\n a: switch (\n (setInitialProperties(current, renderLanes, newProps),\n renderLanes)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n current = !!newProps.autoFocus;\n break a;\n case \"img\":\n current = !0;\n break a;\n default:\n current = !1;\n }\n current && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n workInProgress.flags &= -16777217;\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\n \"string\" !== typeof newProps &&\n null === workInProgress.stateNode\n )\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current = requiredContext(rootInstanceStackCursor.current);\n renderLanes = getHostContext();\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n newProps = workInProgress.memoizedProps;\n _type = !didSuspendOrErrorDEV;\n renderLanes = null;\n var returnFiber = hydrationParentFiber;\n if (null !== returnFiber)\n switch (returnFiber.tag) {\n case 3:\n _type &&\n ((_type = diffHydratedTextForDevWarnings(\n current,\n newProps,\n renderLanes\n )),\n null !== _type &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n _type));\n break;\n case 27:\n case 5:\n (renderLanes = returnFiber.memoizedProps),\n _type &&\n ((_type = diffHydratedTextForDevWarnings(\n current,\n newProps,\n renderLanes\n )),\n null !== _type &&\n (buildHydrationDiffNode(\n workInProgress,\n 0\n ).serverProps = _type));\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === newProps ||\n (null !== renderLanes &&\n !0 === renderLanes.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, newProps)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress);\n } else\n (renderLanes = renderLanes.ancestorInfo.current),\n null != renderLanes &&\n validateTextNesting(newProps, renderLanes.tag),\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n _type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!_type)\n throw Error(\n \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n );\n _type = workInProgress.memoizedState;\n _type = null !== _type ? _type.dehydrated : null;\n if (!_type)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n _type[internalInstanceKey] = workInProgress;\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== newProps &&\n ((_type = workInProgress.child),\n null !== _type &&\n (workInProgress.treeBaseDuration -=\n _type.treeBaseDuration));\n } else\n emitPendingHydrationWarnings(),\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4),\n bubbleProperties(workInProgress),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== newProps &&\n ((_type = workInProgress.child),\n null !== _type &&\n (workInProgress.treeBaseDuration -=\n _type.treeBaseDuration));\n _type = !1;\n } else\n null !== hydrationErrors &&\n (queueRecoverableErrors(hydrationErrors),\n (hydrationErrors = null)),\n (_type = !0);\n if (!_type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (\n (workInProgress.lanes = renderLanes),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress\n );\n newProps = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n newProps &&\n ((renderLanes = workInProgress.child),\n (_type = null),\n null !== renderLanes.alternate &&\n null !== renderLanes.alternate.memoizedState &&\n null !== renderLanes.alternate.memoizedState.cachePool &&\n (_type = renderLanes.alternate.memoizedState.cachePool.pool),\n (returnFiber = null),\n null !== renderLanes.memoizedState &&\n null !== renderLanes.memoizedState.cachePool &&\n (returnFiber = renderLanes.memoizedState.cachePool.pool),\n returnFiber !== _type && (renderLanes.flags |= 2048));\n newProps !== current &&\n newProps &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n newProps &&\n ((current = workInProgress.child),\n null !== current &&\n (workInProgress.treeBaseDuration -= current.treeBaseDuration));\n return null;\n case 4:\n return (\n popHostContainer(workInProgress),\n null === current &&\n listenToAllSupportedEvents(\n workInProgress.stateNode.containerInfo\n ),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 19:\n pop(suspenseStackCursor, workInProgress);\n _type = workInProgress.memoizedState;\n if (null === _type) return bubbleProperties(workInProgress), null;\n newProps = 0 !== (workInProgress.flags & 128);\n returnFiber = _type.rendering;\n if (null === returnFiber)\n if (newProps) cutOffTailIfNeeded(_type, !1);\n else {\n if (\n workInProgressRootExitStatus !== RootInProgress ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n returnFiber = findFirstSuspended(current);\n if (null !== returnFiber) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(_type, !1);\n current = returnFiber.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (newProps = workInProgress.child; null !== newProps; )\n resetWorkInProgress(newProps, current),\n (newProps = newProps.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current &\n SubtreeSuspenseContextMask) |\n ForceSuspenseFallback,\n workInProgress\n );\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== _type.tail &&\n now$1() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(_type, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!newProps)\n if (\n ((current = findFirstSuspended(returnFiber)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (newProps = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(_type, !0),\n null === _type.tail &&\n \"hidden\" === _type.tailMode &&\n !returnFiber.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now$1() - _type.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(_type, !1),\n (workInProgress.lanes = 4194304));\n _type.isBackwards\n ? ((returnFiber.sibling = workInProgress.child),\n (workInProgress.child = returnFiber))\n : ((current = _type.last),\n null !== current\n ? (current.sibling = returnFiber)\n : (workInProgress.child = returnFiber),\n (_type.last = returnFiber));\n }\n if (null !== _type.tail)\n return (\n (current = _type.tail),\n (_type.rendering = current),\n (_type.tail = current.sibling),\n (_type.renderingStartTime = now$1()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n (renderLanes = newProps\n ? (renderLanes & SubtreeSuspenseContextMask) |\n ForceSuspenseFallback\n : renderLanes & SubtreeSuspenseContextMask),\n push(suspenseStackCursor, renderLanes, workInProgress),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 &&\n (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (newProps = workInProgress.updateQueue),\n null !== newProps &&\n scheduleRetryEffect(workInProgress, newProps.retryQueue),\n (newProps = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (newProps = current.memoizedState.cachePool.pool),\n (renderLanes = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (renderLanes = workInProgress.memoizedState.cachePool.pool),\n renderLanes !== newProps && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache, workInProgress),\n null\n );\n case 24:\n return (\n (newProps = null),\n null !== current && (newProps = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext, workInProgress),\n popHostContainer(workInProgress),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128),\n workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(\n \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n );\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor, workInProgress), null;\n case 4:\n return popHostContainer(workInProgress), null;\n case 10:\n return popProvider(workInProgress.type, workInProgress), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n null !== current && pop(resumedCache, workInProgress),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext, workInProgress), null;\n case 25:\n return null;\n default:\n return null;\n }\n }\n function unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext, interruptedWork);\n popHostContainer(interruptedWork);\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor, interruptedWork);\n break;\n case 10:\n popProvider(interruptedWork.type, interruptedWork);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext(interruptedWork);\n null !== current && pop(resumedCache, interruptedWork);\n break;\n case 24:\n popProvider(CacheContext, interruptedWork);\n }\n }\n function onCommitRoot() {\n commitHooks.forEach(function (commitHook) {\n return commitHook();\n });\n }\n function isConcurrentActEnvironment() {\n var isReactActEnvironmentGlobal =\n \"undefined\" !== typeof IS_REACT_ACT_ENVIRONMENT\n ? IS_REACT_ACT_ENVIRONMENT\n : void 0;\n isReactActEnvironmentGlobal ||\n null === ReactSharedInternals.actQueue ||\n console.error(\n \"The current testing environment is not configured to support act(...)\"\n );\n return isReactActEnvironmentGlobal;\n }\n function requestUpdateLane(fiber) {\n if (\n (executionContext & RenderContext) !== NoContext &&\n 0 !== workInProgressRootRenderLanes\n )\n return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n var transition = ReactSharedInternals.T;\n return null !== transition\n ? (transition._updatedFibers || (transition._updatedFibers = new Set()),\n transition._updatedFibers.add(fiber),\n (fiber = currentEntangledLane),\n 0 !== fiber ? fiber : requestTransitionLane())\n : resolveUpdatePriority();\n }\n function requestDeferredLane() {\n 0 === workInProgressDeferredLane &&\n (workInProgressDeferredLane =\n 0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n ? claimNextTransitionLane()\n : 536870912);\n var suspenseHandler = suspenseHandlerStackCursor.current;\n null !== suspenseHandler && (suspenseHandler.flags |= 32);\n return workInProgressDeferredLane;\n }\n function scheduleUpdateOnFiber(root, fiber, lane) {\n isRunningInsertionEffect &&\n console.error(\"useInsertionEffect must not schedule updates.\");\n isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);\n if (\n (root === workInProgressRoot &&\n workInProgressSuspendedReason === SuspendedOnData) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (\n 0 !== (executionContext & RenderContext) &&\n root === workInProgressRoot\n ) {\n if (isRendering)\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n root =\n (workInProgress && getComponentNameFromFiber(workInProgress)) ||\n \"Unknown\";\n didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||\n (didWarnAboutUpdateInRenderForAnotherComponent.add(root),\n (fiber = getComponentNameFromFiber(fiber) || \"Unknown\"),\n console.error(\n \"Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render\",\n fiber,\n root,\n root\n ));\n break;\n case 1:\n didWarnAboutUpdateInRender ||\n (console.error(\n \"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.\"\n ),\n (didWarnAboutUpdateInRender = !0));\n }\n } else\n isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),\n warnIfUpdatesNotWrappedWithActDEV(fiber),\n root === workInProgressRoot &&\n ((executionContext & RenderContext) === NoContext &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n workInProgressRootExitStatus === RootSuspendedWithDelay &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n }\n function performWorkOnRoot(root, lanes, forceSync) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 60) &&\n 0 === (lanes & root.expiredLanes)) ||\n checkIfRootIsPrerendering(root, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root, lanes)\n : renderRootSync(root, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (exitStatus === RootInProgress) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root, lanes, 0, !1);\n break;\n } else if (exitStatus === RootDidNotComplete)\n markRootSuspended(\n root,\n lanes,\n 0,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n else {\n forceSync = root.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (exitStatus === RootErrored) {\n renderWasConcurrent = lanes;\n if (root.errorRecoveryDisabledLanes & renderWasConcurrent)\n var errorRetryLanes = 0;\n else\n (errorRetryLanes = root.pendingLanes & -536870913),\n (errorRetryLanes =\n 0 !== errorRetryLanes\n ? errorRetryLanes\n : errorRetryLanes & 536870912\n ? 536870912\n : 0);\n if (0 !== errorRetryLanes) {\n lanes = errorRetryLanes;\n a: {\n exitStatus = root;\n var errorRetryLanes$jscomp$0 = errorRetryLanes;\n errorRetryLanes = workInProgressRootConcurrentErrors;\n var wasRootDehydrated =\n exitStatus.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(\n exitStatus,\n errorRetryLanes$jscomp$0\n ).flags |= 256);\n errorRetryLanes$jscomp$0 = renderRootSync(\n exitStatus,\n errorRetryLanes$jscomp$0,\n !1\n );\n if (errorRetryLanes$jscomp$0 !== RootErrored) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n exitStatus.errorRecoveryDisabledLanes |=\n renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = RootSuspendedWithDelay;\n break a;\n }\n exitStatus = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = errorRetryLanes;\n null !== exitStatus && queueRecoverableErrors(exitStatus);\n }\n exitStatus = errorRetryLanes$jscomp$0;\n }\n renderWasConcurrent = !1;\n if (exitStatus !== RootErrored) continue;\n }\n }\n if (exitStatus === RootFatalErrored) {\n prepareFreshStack(root, 0);\n markRootSuspended(root, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root;\n switch (exitStatus) {\n case RootInProgress:\n case RootFatalErrored:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case RootSuspendedWithDelay:\n if ((lanes & 4194176) === lanes) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n }\n break;\n case RootErrored:\n workInProgressRootRecoverableErrors = null;\n break;\n case RootSuspended:\n case RootCompleted:\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n shouldTimeSlice.finishedWork = forceSync;\n shouldTimeSlice.finishedLanes = lanes;\n if (null !== ReactSharedInternals.actQueue)\n commitRoot(\n shouldTimeSlice,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n IMMEDIATE_COMMIT,\n renderStartTime,\n 0\n );\n else {\n if (\n (lanes & 62914560) === lanes &&\n ((exitStatus =\n globalMostRecentFallbackTime +\n FALLBACK_THROTTLE_MS -\n now$1()),\n 10 < exitStatus)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0)) break a;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n THROTTLED_COMMIT,\n renderStartTime,\n 0\n ),\n exitStatus\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n IMMEDIATE_COMMIT,\n renderStartTime,\n 0\n );\n }\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root);\n }\n function queueRecoverableErrors(errors) {\n null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = errors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n errors\n );\n }\n function commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n ) {\n var subtreeFlags = finishedWork.subtreeFlags;\n if (subtreeFlags & 8192 || 16785408 === (subtreeFlags & 16785408))\n if (\n ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n accumulateSuspenseyCommitOnFiber(finishedWork),\n (finishedWork = waitForCommitToBeReady()),\n null !== finishedWork)\n ) {\n root.cancelPendingCommit = finishedWork(\n commitRoot.bind(\n null,\n root,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n SUSPENDED_COMMIT,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(\n root,\n lanes,\n spawnedLane,\n !didSkipSuspendedSiblings\n );\n return;\n }\n commitRoot(\n root,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n );\n }\n function isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n }\n function markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n ) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n didAttemptEntireTree[index] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n }\n function flushSyncWork$1() {\n return (executionContext & (RenderContext | CommitContext)) === NoContext\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n }\n function resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (workInProgressSuspendedReason === NotSuspended)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n resetContextDependencies(),\n resetHooksOnUnwind(interruptedWork),\n (thenableState$1 = null),\n (thenableIndexCounter$1 = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n }\n function prepareFreshStack(root, lanes) {\n root.finishedWork = null;\n root.finishedLanes = 0;\n var timeoutHandle = root.timeoutHandle;\n timeoutHandle !== noTimeout &&\n ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressRootExitStatus = RootInProgress;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index = 31 - clz32(allEntangledLanes),\n lane = 1 << index;\n lanes |= root[index];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n ReactStrictModeWarnings.discardPendingWarnings();\n return timeoutHandle;\n }\n function handleThrow(root, thrownValue) {\n currentlyRenderingFiber$1 = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n ReactSharedInternals.getCurrentStack = null;\n isRendering = !1;\n current = null;\n thrownValue === SuspenseException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnImmediate))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnInstance))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? SuspendedOnHydration\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? SuspendedOnDeprecatedThrowPromise\n : SuspendedOnError);\n workInProgressThrownValue = thrownValue;\n var erroredWork = workInProgress;\n if (null === erroredWork)\n (workInProgressRootExitStatus = RootFatalErrored),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n else\n switch (\n (erroredWork.mode & ProfileMode &&\n stopProfilerTimerIfRunningAndRecordDuration(erroredWork),\n markComponentRenderStopped(),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentErrored &&\n injectedProfilingHooks.markComponentErrored(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n break;\n case SuspendedOnData:\n case SuspendedOnImmediate:\n case SuspendedOnDeprecatedThrowPromise:\n case SuspendedAndReadyToContinue:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentSuspended &&\n injectedProfilingHooks.markComponentSuspended(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n }\n }\n function pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n }\n function pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n }\n function renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194176) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n }\n function renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n prepareFreshStack(root, lanes);\n }\n markRenderStarted(lanes);\n lanes = !1;\n memoizedUpdaters = workInProgressRootExitStatus;\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n ) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n memoizedUpdaters = RootDidNotComplete;\n break a;\n case SuspendedOnImmediate:\n case SuspendedOnData:\n case SuspendedOnDeprecatedThrowPromise:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n memoizedUpdaters = RootInProgress;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n memoizedUpdaters = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$8) {\n handleThrow(root, thrownValue$8);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n resetContextDependencies();\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n markRenderStopped();\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return memoizedUpdaters;\n }\n function workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n }\n function renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;\n prepareFreshStack(root, lanes);\n } else\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n );\n markRenderStarted(lanes);\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n )\n b: switch (\n ((lanes = workInProgress),\n (memoizedUpdaters = workInProgressThrownValue),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnError\n );\n break;\n case SuspendedOnData:\n if (isThenableResolved(memoizedUpdaters)) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n workInProgressSuspendedReason === SuspendedOnData &&\n workInProgressRoot === root &&\n (workInProgressSuspendedReason =\n SuspendedAndReadyToContinue);\n ensureRootIsScheduled(root);\n };\n memoizedUpdaters.then(lanes, lanes);\n break a;\n case SuspendedOnImmediate:\n workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n break a;\n case SuspendedOnInstance:\n workInProgressSuspendedReason =\n SuspendedOnInstanceAndReadyToContinue;\n break a;\n case SuspendedAndReadyToContinue:\n isThenableResolved(memoizedUpdaters)\n ? ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedAndReadyToContinue\n ));\n break;\n case SuspendedOnInstanceAndReadyToContinue:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (resource ? preloadResource(resource) : 1) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n break;\n default:\n console.error(\n \"Unexpected type of fiber triggered a suspensey commit. This is a bug in React.\"\n );\n }\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnInstanceAndReadyToContinue\n );\n break;\n case SuspendedOnDeprecatedThrowPromise:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnDeprecatedThrowPromise\n );\n break;\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = RootDidNotComplete;\n break a;\n default:\n throw Error(\n \"Unexpected SuspendedReason. This is a bug in React.\"\n );\n }\n null !== ReactSharedInternals.actQueue\n ? workLoopSync()\n : workLoopConcurrent();\n break;\n } catch (thrownValue$9) {\n handleThrow(root, thrownValue$9);\n }\n while (1);\n resetContextDependencies();\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress)\n return (\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderYielded &&\n injectedProfilingHooks.markRenderYielded(),\n RootInProgress\n );\n markRenderStopped();\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n }\n function workLoopConcurrent() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n }\n function performUnitOfWork(unitOfWork) {\n var current = unitOfWork.alternate;\n (unitOfWork.mode & ProfileMode) !== NoMode\n ? (startProfilerTimer(unitOfWork),\n (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n )),\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))\n : (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n ));\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === current\n ? completeUnitOfWork(unitOfWork)\n : (workInProgress = current);\n }\n function replaySuspendedUnitOfWork(unitOfWork) {\n var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n }\n function replayBeginWork(unitOfWork) {\n var current = unitOfWork.alternate,\n isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;\n isProfilingMode && startProfilerTimer(unitOfWork);\n switch (unitOfWork.tag) {\n case 15:\n case 0:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type.render,\n unitOfWork.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(unitOfWork);\n default:\n unwindInterruptedWork(current, unitOfWork),\n (unitOfWork = workInProgress =\n resetWorkInProgress(unitOfWork, entangledRenderLanes)),\n (current = beginWork(current, unitOfWork, entangledRenderLanes));\n }\n isProfilingMode &&\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);\n return current;\n }\n function throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n ) {\n resetContextDependencies();\n resetHooksOnUnwind(unitOfWork);\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || suspendedReason === SuspendedOnError) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n suspendedReason === SuspendedOnData ||\n suspendedReason === SuspendedOnImmediate ||\n suspendedReason === SuspendedOnDeprecatedThrowPromise)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n }\n function completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n var current = completedWork.alternate;\n unitOfWork = completedWork.return;\n startProfilerTimer(completedWork);\n current = runWithFiberInDEV(\n completedWork,\n completeWork,\n current,\n completedWork,\n entangledRenderLanes\n );\n (completedWork.mode & ProfileMode) !== NoMode &&\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);\n if (null !== current) {\n workInProgress = current;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootCompleted);\n }\n function unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n if ((unitOfWork.mode & ProfileMode) !== NoMode) {\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);\n next = unitOfWork.actualDuration;\n for (var child = unitOfWork.child; null !== child; )\n (next += child.actualDuration), (child = child.sibling);\n unitOfWork.actualDuration = next;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768),\n (next.subtreeFlags = 0),\n (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = RootDidNotComplete;\n workInProgress = null;\n }\n function commitRoot(\n root,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n ) {\n var prevTransition = ReactSharedInternals.T,\n previousUpdateLanePriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = DiscreteEventPriority),\n (ReactSharedInternals.T = null),\n commitRootImpl(\n root,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n previousUpdateLanePriority,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n );\n } finally {\n (ReactSharedInternals.T = prevTransition),\n (ReactDOMSharedInternals.p = previousUpdateLanePriority);\n }\n }\n function commitRootImpl(\n root,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n renderPriorityLevel,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n do flushPassiveEffects();\n while (null !== rootWithPendingPassiveEffects);\n ReactStrictModeWarnings.flushLegacyContextWarning();\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n var finishedWork = root.finishedWork;\n didIncludeRenderPhaseUpdate = root.finishedLanes;\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStarted &&\n injectedProfilingHooks.markCommitStarted(didIncludeRenderPhaseUpdate);\n if (null === finishedWork) return markCommitStopped(), null;\n 0 === didIncludeRenderPhaseUpdate &&\n console.error(\n \"root.finishedLanes should not be empty during a commit. This is a bug in React.\"\n );\n root.finishedWork = null;\n root.finishedLanes = 0;\n if (finishedWork === root.current)\n throw Error(\n \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n );\n root.callbackNode = null;\n root.callbackPriority = 0;\n root.cancelPendingCommit = null;\n var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n remainingLanes |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n didIncludeRenderPhaseUpdate,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n (0 === (finishedWork.subtreeFlags & 10256) &&\n 0 === (finishedWork.flags & 10256)) ||\n rootDoesHavePassiveEffects ||\n ((rootDoesHavePassiveEffects = !0),\n (pendingPassiveEffectsRemainingLanes = remainingLanes),\n (pendingPassiveTransitions = transitions),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects(!0);\n return null;\n }));\n commitStartTime = now();\n transitions = 0 !== (finishedWork.flags & 15990);\n 0 !== (finishedWork.subtreeFlags & 15990) || transitions\n ? ((transitions = ReactSharedInternals.T),\n (ReactSharedInternals.T = null),\n (spawnedLane = ReactDOMSharedInternals.p),\n (ReactDOMSharedInternals.p = DiscreteEventPriority),\n (updatedLanes = executionContext),\n (executionContext |= CommitContext),\n commitBeforeMutationEffects(root, finishedWork),\n commitMutationEffects(\n root,\n finishedWork,\n didIncludeRenderPhaseUpdate\n ),\n restoreSelection(selectionInformation, root.containerInfo),\n (_enabled = !!eventsEnabled),\n (selectionInformation = eventsEnabled = null),\n (root.current = finishedWork),\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStarted &&\n injectedProfilingHooks.markLayoutEffectsStarted(\n didIncludeRenderPhaseUpdate\n ),\n commitLayoutEffects(finishedWork, root, didIncludeRenderPhaseUpdate),\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStopped &&\n injectedProfilingHooks.markLayoutEffectsStopped(),\n requestPaint(),\n (executionContext = updatedLanes),\n (ReactDOMSharedInternals.p = spawnedLane),\n (ReactSharedInternals.T = transitions))\n : (root.current = finishedWork);\n (transitions = rootDoesHavePassiveEffects)\n ? ((rootDoesHavePassiveEffects = !1),\n (rootWithPendingPassiveEffects = root),\n (pendingPassiveEffectsLanes = didIncludeRenderPhaseUpdate))\n : (releaseRootPooledCache(root, remainingLanes),\n (nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null));\n remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n transitions || commitDoubleInvokeEffectsInDEV(root);\n onCommitRoot$1(finishedWork.stateNode, renderPriorityLevel);\n isDevToolsPresent && root.memoizedUpdaters.clear();\n onCommitRoot();\n ensureRootIsScheduled(root);\n if (null !== recoverableErrors)\n for (\n renderPriorityLevel = root.onRecoverableError, finishedWork = 0;\n finishedWork < recoverableErrors.length;\n finishedWork++\n )\n (remainingLanes = recoverableErrors[finishedWork]),\n (transitions = makeErrorInfo(remainingLanes.stack)),\n runWithFiberInDEV(\n remainingLanes.source,\n renderPriorityLevel,\n remainingLanes.value,\n transitions\n );\n 0 !== (pendingPassiveEffectsLanes & 3) && flushPassiveEffects();\n remainingLanes = root.pendingLanes;\n 0 !== (didIncludeRenderPhaseUpdate & 4194218) &&\n 0 !== (remainingLanes & 42)\n ? ((nestedUpdateScheduled = !0),\n root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n markCommitStopped();\n return null;\n }\n function makeErrorInfo(componentStack) {\n componentStack = { componentStack: componentStack };\n Object.defineProperty(componentStack, \"digest\", {\n get: function () {\n console.error(\n 'You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'\n );\n }\n });\n return componentStack;\n }\n function releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n }\n function flushPassiveEffects() {\n if (null !== rootWithPendingPassiveEffects) {\n var root = rootWithPendingPassiveEffects,\n remainingLanes = pendingPassiveEffectsRemainingLanes;\n pendingPassiveEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes),\n priority =\n 0 === DefaultEventPriority || DefaultEventPriority > renderPriority\n ? DefaultEventPriority\n : renderPriority;\n renderPriority = ReactSharedInternals.T;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = priority;\n ReactSharedInternals.T = null;\n if (null === rootWithPendingPassiveEffects)\n var JSCompiler_inline_result = !1;\n else {\n priority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = rootWithPendingPassiveEffects,\n lanes = pendingPassiveEffectsLanes;\n rootWithPendingPassiveEffects = null;\n pendingPassiveEffectsLanes = 0;\n if (\n (executionContext & (RenderContext | CommitContext)) !==\n NoContext\n )\n throw Error(\n \"Cannot flush passive effects while already rendering.\"\n );\n isFlushingPassiveEffects = !0;\n didScheduleUpdateDuringPassiveEffects = !1;\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStarted &&\n injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n priority\n );\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStopped &&\n injectedProfilingHooks.markPassiveEffectsStopped();\n commitDoubleInvokeEffectsInDEV(root$jscomp$0);\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n didScheduleUpdateDuringPassiveEffects\n ? root$jscomp$0 === rootWithPassiveNestedUpdates\n ? nestedPassiveUpdateCount++\n : ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = root$jscomp$0))\n : (nestedPassiveUpdateCount = 0);\n didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects =\n !1;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n var stateNode = root$jscomp$0.current.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n JSCompiler_inline_result = !0;\n }\n return JSCompiler_inline_result;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = renderPriority),\n releaseRootPooledCache(root, remainingLanes);\n }\n }\n return !1;\n }\n function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n }\n function captureCommitPhaseError(\n sourceFiber,\n nearestMountedAncestor,\n error\n ) {\n isRunningInsertionEffect = !1;\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else {\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n return;\n }\n if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n return;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n console.error(\n \"Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\\n\\nError message:\\n\\n%s\",\n error\n );\n }\n }\n function attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n isDevToolsPresent && restorePendingUpdaters(root, lanes),\n wakeable.then(pingCache, pingCache));\n }\n function pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n console.error(\n \"A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\\n\\nWhen testing, code that resolves suspended data should be wrapped into act(...):\\n\\nact(() => {\\n /* finish loading suspended data */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\"\n );\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (workInProgressRootExitStatus === RootSuspendedWithDelay ||\n (workInProgressRootExitStatus === RootSuspended &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)\n ? (executionContext & RenderContext) === NoContext &&\n prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n }\n function retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n }\n function retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(\n \"Pinged unknown suspense boundary type. This is probably a bug in React.\"\n );\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root$jscomp$0,\n parentFiber,\n isInStrictMode\n ) {\n if (0 !== (parentFiber.subtreeFlags & 33562624))\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var root = root$jscomp$0,\n fiber = parentFiber,\n isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;\n isStrictModeFiber = isInStrictMode || isStrictModeFiber;\n 22 !== fiber.tag\n ? fiber.flags & 33554432\n ? isStrictModeFiber &&\n runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber,\n (fiber.mode & NoStrictPassiveEffectsMode) === NoMode\n )\n : recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n fiber,\n isStrictModeFiber\n )\n : null === fiber.memoizedState &&\n (isStrictModeFiber && fiber.flags & 8192\n ? runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber\n )\n : fiber.subtreeFlags & 33554432 &&\n runWithFiberInDEV(\n fiber,\n recursivelyTraverseAndDoubleInvokeEffectsInDEV,\n root,\n fiber,\n isStrictModeFiber\n ));\n parentFiber = parentFiber.sibling;\n }\n }\n function doubleInvokeEffectsOnFiber(root, fiber) {\n var shouldDoubleInvokePassiveEffects =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !0;\n setIsStrictModeForDevtools(!0);\n try {\n disappearLayoutEffects(fiber),\n shouldDoubleInvokePassiveEffects && disconnectPassiveEffect(fiber),\n reappearLayoutEffects(root, fiber.alternate, fiber, !1),\n shouldDoubleInvokePassiveEffects &&\n reconnectPassiveEffects(root, fiber, 0, null, !1);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n function commitDoubleInvokeEffectsInDEV(root) {\n var doubleInvokeEffects = !0;\n root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||\n (doubleInvokeEffects = !1);\n recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n root.current,\n doubleInvokeEffects\n );\n }\n function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n if ((executionContext & RenderContext) === NoContext) {\n var tag = fiber.tag;\n if (\n 3 === tag ||\n 1 === tag ||\n 0 === tag ||\n 11 === tag ||\n 14 === tag ||\n 15 === tag\n ) {\n tag = getComponentNameFromFiber(fiber) || \"ReactComponent\";\n if (null !== didWarnStateUpdateForNotYetMountedComponent) {\n if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;\n didWarnStateUpdateForNotYetMountedComponent.add(tag);\n } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead.\"\n );\n });\n }\n }\n }\n function restorePendingUpdaters(root, lanes) {\n isDevToolsPresent &&\n root.memoizedUpdaters.forEach(function (schedulingFiber) {\n addFiberToLanesMap(root, schedulingFiber, lanes);\n });\n }\n function scheduleCallback$1(priorityLevel, callback) {\n var actQueue = ReactSharedInternals.actQueue;\n return null !== actQueue\n ? (actQueue.push(callback), fakeActCallbackNode$1)\n : scheduleCallback$3(priorityLevel, callback);\n }\n function warnIfUpdatesNotWrappedWithActDEV(fiber) {\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"An update to %s inside a test was not wrapped in act(...).\\n\\nWhen testing, code that causes React state updates should be wrapped into act(...):\\n\\nact(() => {\\n /* fire events that update state */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\",\n getComponentNameFromFiber(fiber)\n );\n });\n }\n function ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n null !== ReactSharedInternals.actQueue\n ? didScheduleMicrotask_act ||\n ((didScheduleMicrotask_act = !0),\n scheduleImmediateTask(processRootScheduleInMicrotask))\n : didScheduleMicrotask ||\n ((didScheduleMicrotask = !0),\n scheduleImmediateTask(processRootScheduleInMicrotask));\n }\n function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root = firstScheduledRoot; null !== root; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) var nextLanes = 0;\n else {\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n nextLanes =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);\n nextLanes =\n nextLanes & 201326677\n ? (nextLanes & 201326677) | 1\n : nextLanes\n ? nextLanes | 2\n : 0;\n }\n 0 !== nextLanes &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n } else\n (nextLanes = workInProgressRootRenderLanes),\n (nextLanes = getNextLanes(\n root,\n root === workInProgressRoot ? nextLanes : 0\n )),\n 0 === (nextLanes & 3) ||\n checkIfRootIsPrerendering(root, nextLanes) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n root = root.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n }\n function processRootScheduleInMicrotask() {\n mightHavePendingSyncWork =\n didScheduleMicrotask_act =\n didScheduleMicrotask =\n !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n (shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane),\n (currentEventTransitionLane = 0));\n for (\n var currentTime = now$1(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n }\n function scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index,\n expirationTime = expirationTimes[index];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n workInProgressSuspendedReason === SuspendedOnData) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes && cancelCallback(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (\n currentTime !== root.callbackPriority ||\n (null !== ReactSharedInternals.actQueue &&\n pingedLanes !== fakeActCallbackNode)\n )\n cancelCallback(pingedLanes);\n else return currentTime;\n switch (lanesToEventPriority(suspendedLanes)) {\n case DiscreteEventPriority:\n case ContinuousEventPriority:\n suspendedLanes = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n suspendedLanes = NormalPriority$1;\n break;\n case IdleEventPriority:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n null !== ReactSharedInternals.actQueue\n ? (ReactSharedInternals.actQueue.push(pingedLanes),\n (suspendedLanes = fakeActCallbackNode))\n : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && cancelCallback(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n }\n function performWorkOnRootViaSchedulerTask(root, didTimeout) {\n nestedUpdateScheduled = currentUpdateIsNested = !1;\n var originalCallbackNode = root.callbackNode;\n if (flushPassiveEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 =\n workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(\n root,\n workInProgressRootRenderLanes$jscomp$0,\n didTimeout\n );\n scheduleTaskForRootDuringMicrotask(root, now$1());\n return null != root.callbackNode &&\n root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n }\n function performSyncWorkOnRoot(root, lanes) {\n if (flushPassiveEffects()) return null;\n currentUpdateIsNested = nestedUpdateScheduled;\n nestedUpdateScheduled = !1;\n performWorkOnRoot(root, lanes, !0);\n }\n function cancelCallback(callbackNode) {\n callbackNode !== fakeActCallbackNode &&\n null !== callbackNode &&\n cancelCallback$1(callbackNode);\n }\n function scheduleImmediateTask(cb) {\n null !== ReactSharedInternals.actQueue &&\n ReactSharedInternals.actQueue.push(function () {\n cb();\n return null;\n });\n scheduleMicrotask(function () {\n (executionContext & (RenderContext | CommitContext)) !== NoContext\n ? scheduleCallback$3(ImmediatePriority, cb)\n : cb();\n });\n }\n function requestTransitionLane() {\n 0 === currentEventTransitionLane &&\n (currentEventTransitionLane = claimNextTransitionLane());\n return currentEventTransitionLane;\n }\n function coerceFormActionProp(actionProp) {\n if (\n null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n )\n return null;\n if (\"function\" === typeof actionProp) return actionProp;\n checkAttributeStringCoercion(actionProp, \"action\");\n return sanitizeURL(\"\" + actionProp);\n }\n function createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n }\n function extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName &&\n ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget),\n pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n };\n Object.freeze(pendingState);\n startHostTransition(\n maybeTargetInst,\n pendingState,\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget)),\n (pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n }),\n Object.freeze(pendingState),\n startHostTransition(\n maybeTargetInst,\n pendingState,\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n }\n function processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i];\n a: {\n var previousInstance = void 0,\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = event;\n previousInstance.currentTarget = currentTarget;\n try {\n _dispatchListeners$i(previousInstance);\n } catch (error) {\n reportGlobalError(error);\n }\n previousInstance.currentTarget = null;\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = event;\n previousInstance.currentTarget = currentTarget;\n try {\n _dispatchListeners$i(previousInstance);\n } catch (error) {\n reportGlobalError(error);\n }\n previousInstance.currentTarget = null;\n previousInstance = instance;\n }\n }\n }\n }\n function listenToNonDelegatedEvent(domEventName, targetElement) {\n nonDelegatedEvents.has(domEventName) ||\n console.error(\n 'Did not expect a listenToNonDelegatedEvent() call for \"%s\". This is a bug in React. Please file an issue.',\n domEventName\n );\n var listenerSet = targetElement[internalEventHandlersKey];\n void 0 === listenerSet &&\n (listenerSet = targetElement[internalEventHandlersKey] = new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n listenerSet.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n listenerSet.add(listenerSetKey));\n }\n function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n nonDelegatedEvents.has(domEventName) &&\n !isCapturePhaseListener &&\n console.error(\n 'Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. This is a bug in React. Please file an issue.',\n domEventName\n );\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n }\n function listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n }\n function addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n ) {\n switch (getEventPriority(domEventName)) {\n case DiscreteEventPriority:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case ContinuousEventPriority:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(\n domEventName,\n eventSystemFlags,\n !1\n );\n }\n function dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n ) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (\n container === targetContainer ||\n (8 === container.nodeType &&\n container.parentNode === targetContainer)\n )\n break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (3 === grandTag || 4 === grandTag)\n if (\n ((grandTag = nodeTag.stateNode.containerInfo),\n grandTag === targetContainer ||\n (8 === grandTag.nodeType &&\n grandTag.parentNode === targetContainer))\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance2 = instance;\n lastHostComponent = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance2 = getListener(instance, reactEventName)),\n null != _instance2 &&\n inCapturePhase.push(\n createDispatchListener(\n instance,\n _instance2,\n lastHostComponent\n )\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: reactName,\n listeners: inCapturePhase\n }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance2 = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\n \"pointerout\" === domEventName ||\n \"pointerover\" === domEventName\n )\n (inCapturePhase = SyntheticPointerEvent),\n (_instance2 = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance2,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance2 = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance2 = inCapturePhase));\n accumulateTargetOnly = _instance2;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = SyntheticEventCtor;\n reactEventName = reactEventType;\n instance = 0;\n for (\n lastHostComponent = inCapturePhase;\n lastHostComponent;\n lastHostComponent = getParent(lastHostComponent)\n )\n instance++;\n lastHostComponent = 0;\n for (\n _instance2 = reactEventName;\n _instance2;\n _instance2 = getParent(_instance2)\n )\n lastHostComponent++;\n for (; 0 < instance - lastHostComponent; )\n (inCapturePhase = getParent(inCapturePhase)), instance--;\n for (; 0 < lastHostComponent - instance; )\n (reactEventName = getParent(reactEventName)),\n lastHostComponent--;\n for (; instance--; ) {\n if (\n inCapturePhase === reactEventName ||\n (null !== reactEventName &&\n inCapturePhase === reactEventName.alternate)\n )\n break b;\n inCapturePhase = getParent(inCapturePhase);\n reactEventName = getParent(reactEventName);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc &&\n handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst\n ? getNodeFromInstance(targetInst)\n : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n nativeEvent.keyCode === START_KEYCODE &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(\n targetInst,\n eventType\n )),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: eventType,\n listeners: handleEventFunc\n }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(\n targetInst,\n \"onBeforeInput\"\n )),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticInputEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n }\n function createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n }\n function accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance3 = targetFiber,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((_instance3 = getListener(targetFiber, captureName)),\n null != _instance3 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ),\n (_instance3 = getListener(targetFiber, reactName)),\n null != _instance3 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ));\n targetFiber = targetFiber.return;\n }\n return listeners;\n }\n function getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n }\n function accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n ) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance4 = target,\n alternate = _instance4.alternate,\n stateNode = _instance4.stateNode;\n _instance4 = _instance4.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n }\n function validatePropertiesInDevelopment(type, props) {\n validateProperties$2(type, props);\n (\"input\" !== type && \"textarea\" !== type && \"select\" !== type) ||\n null == props ||\n null !== props.value ||\n didWarnValueNull ||\n ((didWarnValueNull = !0),\n \"select\" === type && props.multiple\n ? console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.\",\n type\n )\n : console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.\",\n type\n ));\n var eventRegistry = {\n registrationNameDependencies: registrationNameDependencies,\n possibleRegistrationNames: possibleRegistrationNames\n };\n isCustomElement(type) ||\n \"string\" === typeof props.is ||\n warnUnknownProperties(type, props, eventRegistry);\n props.contentEditable &&\n !props.suppressContentEditableWarning &&\n null != props.children &&\n console.error(\n \"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.\"\n );\n }\n function warnForPropDifference(\n propName,\n serverValue,\n clientValue,\n serverDifferences\n ) {\n serverValue !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&\n (serverDifferences[propName] = serverValue));\n }\n function warnForExtraAttributes(\n domElement,\n attributeNames,\n serverDifferences\n ) {\n attributeNames.forEach(function (attributeName) {\n serverDifferences[getPropNameFromAttributeName(attributeName)] =\n \"style\" === attributeName\n ? getStylesObjectFromElement(domElement)\n : domElement.getAttribute(attributeName);\n });\n }\n function warnForInvalidEventListener(registrationName, listener) {\n !1 === listener\n ? console.error(\n \"Expected `%s` listener to be a function, instead got `false`.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.\",\n registrationName,\n registrationName,\n registrationName\n )\n : console.error(\n \"Expected `%s` listener to be a function, instead got a value of `%s` type.\",\n registrationName,\n typeof listener\n );\n }\n function normalizeHTML(parent, html) {\n parent =\n parent.namespaceURI === MATH_NAMESPACE ||\n parent.namespaceURI === SVG_NAMESPACE\n ? parent.ownerDocument.createElementNS(\n parent.namespaceURI,\n parent.tagName\n )\n : parent.ownerDocument.createElement(parent.tagName);\n parent.innerHTML = html;\n return parent.innerHTML;\n }\n function normalizeMarkupForTextOrAttribute(markup) {\n willCoercionThrow(markup) &&\n (console.error(\n \"The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.\",\n typeName(markup)\n ),\n testStringCoercion(markup));\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n }\n function checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText\n ? !0\n : !1;\n }\n function noop$1() {}\n function setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n if (\"string\" === typeof value)\n validateTextNesting(value, tag),\n \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value);\n else if (\"number\" === typeof value || \"bigint\" === typeof value)\n validateTextNesting(\"\" + value, tag),\n \"body\" !== tag && setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n \"src\" === key\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n );\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n null != value &&\n (\"form\" === tag\n ? \"formAction\" === key\n ? console.error(\n \"You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>.\"\n )\n : \"function\" === typeof value &&\n ((null == props.encType && null == props.method) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden.\"\n )),\n null == props.target ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window.\"\n )))\n : \"input\" === tag || \"button\" === tag\n ? \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>.\"\n )\n : \"input\" !== tag ||\n \"submit\" === props.type ||\n \"image\" === props.type ||\n didWarnFormActionType\n ? \"button\" !== tag ||\n null == props.type ||\n \"submit\" === props.type ||\n didWarnFormActionType\n ? \"function\" === typeof value &&\n (null == props.name ||\n didWarnFormActionName ||\n ((didWarnFormActionName = !0),\n console.error(\n 'Cannot specify a \"name\" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'\n )),\n (null == props.formEncType &&\n null == props.formMethod) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden.\"\n )),\n null == props.formTarget ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window.\"\n )))\n : ((didWarnFormActionType = !0),\n console.error(\n 'A button can only specify a formAction along with type=\"submit\" or no type.'\n ))\n : ((didWarnFormActionType = !0),\n console.error(\n 'An input can only specify a formAction along with type=\"submit\" or type=\"image\".'\n ))\n : \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>.\"\n )\n : console.error(\n \"You can only pass the formAction prop to <input> or <button>.\"\n ));\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(\n domElement,\n tag,\n \"encType\",\n props.encType,\n props,\n null\n ),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(\n domElement,\n tag,\n \"target\",\n props.target,\n props,\n null\n )));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n checkAttributeStringCoercion(value, key);\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(xlinkNamespace, \"xlink:href\", key);\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, \"\" + value))\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n \"\" !== value ||\n didWarnForNewBooleanPropsWithEmptyValue[key] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n key\n ));\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value));\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n null != prevValue &&\n console.error(\n 'Cannot update the \"is\" prop after it has been initialized.'\n );\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n case \"popoverTarget\":\n didWarnPopoverTargetObject ||\n null == value ||\n \"object\" !== typeof value ||\n ((didWarnPopoverTargetObject = !0),\n console.error(\n \"The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.\",\n value\n ));\n default:\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n ? ((key = getAttributeAlias(key)),\n setValueForAttribute(domElement, key, value))\n : registrationNameDependencies.hasOwnProperty(key) &&\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n }\n }\n function setPropOnCustomElement(\n domElement,\n tag,\n key,\n value,\n props,\n prevValue\n ) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (registrationNameDependencies.hasOwnProperty(key))\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n else\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n }\n function setInitialProperties(domElement, tag, props) {\n validatePropertiesInDevelopment(tag, props);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var _propValue = props[hasSrc];\n if (null != _propValue)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = _propValue;\n break;\n case \"type\":\n propValue = _propValue;\n break;\n case \"checked\":\n checked = _propValue;\n break;\n case \"defaultChecked\":\n defaultChecked = _propValue;\n break;\n case \"value\":\n propKey = _propValue;\n break;\n case \"defaultValue\":\n defaultValue = _propValue;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propValue)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(domElement, tag, hasSrc, _propValue, props, null);\n }\n }\n validateInputProps(domElement, props);\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n track(domElement);\n return;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(\n domElement,\n tag,\n hasSrcSet,\n defaultValue,\n props,\n null\n );\n }\n validateSelectProps(domElement, props);\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n propValue,\n defaultValue,\n props,\n null\n );\n }\n validateTextareaProps(domElement, props);\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n track(domElement);\n return;\n case \"option\":\n validateOptionProps(domElement, props);\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (_propValue in props)\n props.hasOwnProperty(_propValue) &&\n ((hasSrc = props[_propValue]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propValue,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n }\n function updateProperties(domElement, tag, lastProps, nextProps) {\n validatePropertiesInDevelopment(tag, nextProps);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(\n domElement,\n tag,\n propKey,\n null,\n nextProps,\n lastProp\n );\n }\n }\n for (var _propKey8 in nextProps) {\n var propKey = nextProps[_propKey8];\n lastProp = lastProps[_propKey8];\n if (\n nextProps.hasOwnProperty(_propKey8) &&\n (null != propKey || null != lastProp)\n )\n switch (_propKey8) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n _propKey8,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n tag =\n \"checkbox\" === lastProps.type || \"radio\" === lastProps.type\n ? null != lastProps.checked\n : null != lastProps.value;\n nextProps =\n \"checkbox\" === nextProps.type || \"radio\" === nextProps.type\n ? null != nextProps.checked\n : null != nextProps.value;\n tag ||\n !nextProps ||\n didWarnUncontrolledToControlled ||\n (console.error(\n \"A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnUncontrolledToControlled = !0));\n !tag ||\n nextProps ||\n didWarnControlledToUncontrolled ||\n (console.error(\n \"A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnControlledToUncontrolled = !0));\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = _propKey8 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n _propKey8 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n nextProps = defaultValue;\n tag = value;\n lastProps = propKey;\n null != _propKey8\n ? updateOptions(domElement, !!tag, _propKey8, !1)\n : !!lastProps !== !!tag &&\n (null != nextProps\n ? updateOptions(domElement, !!tag, nextProps, !0)\n : updateOptions(domElement, !!tag, tag ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = _propKey8 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n _propKey8 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, _propKey8, propKey);\n return;\n case \"option\":\n for (var _propKey13 in lastProps)\n if (\n ((_propKey8 = lastProps[_propKey13]),\n lastProps.hasOwnProperty(_propKey13) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey13))\n )\n switch (_propKey13) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n _propKey13,\n null,\n nextProps,\n _propKey8\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((_propKey8 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n _propKey8 &&\n \"function\" !== typeof _propKey8 &&\n \"symbol\" !== typeof _propKey8;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var _propKey15 in lastProps)\n (_propKey8 = lastProps[_propKey15]),\n lastProps.hasOwnProperty(_propKey15) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey15) &&\n setProp(\n domElement,\n tag,\n _propKey15,\n null,\n nextProps,\n _propKey8\n );\n for (checked in nextProps)\n if (\n ((_propKey8 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propKey8)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var _propKey17 in lastProps)\n (_propKey8 = lastProps[_propKey17]),\n lastProps.hasOwnProperty(_propKey17) &&\n void 0 !== _propKey8 &&\n !nextProps.hasOwnProperty(_propKey17) &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propKey17,\n void 0,\n nextProps,\n _propKey8\n );\n for (defaultChecked in nextProps)\n (_propKey8 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n _propKey8 === propKey ||\n (void 0 === _propKey8 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n _propKey8,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var _propKey19 in lastProps)\n (_propKey8 = lastProps[_propKey19]),\n lastProps.hasOwnProperty(_propKey19) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey19) &&\n setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);\n for (lastProp in nextProps)\n (_propKey8 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n _propKey8 === propKey ||\n (null == _propKey8 && null == propKey) ||\n setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);\n }\n function getPropNameFromAttributeName(attrName) {\n switch (attrName) {\n case \"class\":\n return \"className\";\n case \"for\":\n return \"htmlFor\";\n default:\n return attrName;\n }\n }\n function getStylesObjectFromElement(domElement) {\n var serverValueInObjectForm = {};\n domElement = domElement.style;\n for (var i = 0; i < domElement.length; i++) {\n var styleName = domElement[i];\n serverValueInObjectForm[styleName] =\n domElement.getPropertyValue(styleName);\n }\n return serverValueInObjectForm;\n }\n function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {\n if (null != value$jscomp$0 && \"object\" !== typeof value$jscomp$0)\n console.error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n else if (canDiffStyleForHydrationWarning) {\n var clientValue;\n var delimiter = (clientValue = \"\"),\n styleName;\n for (styleName in value$jscomp$0)\n if (value$jscomp$0.hasOwnProperty(styleName)) {\n var value = value$jscomp$0[styleName];\n null != value &&\n \"boolean\" !== typeof value &&\n \"\" !== value &&\n (0 === styleName.indexOf(\"--\")\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter + styleName + \":\" + (\"\" + value).trim()))\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n (\"\" + value).trim()))\n : (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n value +\n \"px\"),\n (delimiter = \";\"));\n }\n clientValue = clientValue || null;\n value$jscomp$0 = domElement.getAttribute(\"style\");\n value$jscomp$0 !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&\n (serverDifferences.style = getStylesObjectFromElement(domElement)));\n }\n }\n function hydrateAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement) {\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n return;\n }\n if (!value) return;\n } else\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (value) return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanishAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, attributeName),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateNumericAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n default:\n if (isNaN(value)) return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !isNaN(value) &&\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateSanitizedAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n (attributeName = sanitizeURL(\"\" + value)),\n domElement === attributeName)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function diffHydratedProperties(domElement, tag, props, hostContext) {\n for (\n var serverDifferences = {},\n extraAttributes = new Set(),\n attributes = domElement.attributes,\n i = 0;\n i < attributes.length;\n i++\n )\n switch (attributes[i].name.toLowerCase()) {\n case \"value\":\n break;\n case \"checked\":\n break;\n case \"selected\":\n break;\n default:\n extraAttributes.add(attributes[i].name);\n }\n if (isCustomElement(tag))\n for (var propKey in props) {\n if (props.hasOwnProperty(propKey)) {\n var value = props[propKey];\n if (null != value)\n if (registrationNameDependencies.hasOwnProperty(propKey))\n \"function\" !== typeof value &&\n warnForInvalidEventListener(propKey, value);\n else if (!0 !== props.suppressHydrationWarning)\n switch (propKey) {\n case \"children\":\n (\"string\" !== typeof value && \"number\" !== typeof value) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n value,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n value = value ? value.__html : void 0;\n null != value &&\n ((value = normalizeHTML(domElement, value)),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n ));\n continue;\n case \"style\":\n extraAttributes.delete(propKey);\n diffHydratedStyles(domElement, value, serverDifferences);\n continue;\n case \"offsetParent\":\n case \"offsetTop\":\n case \"offsetLeft\":\n case \"offsetWidth\":\n case \"offsetHeight\":\n case \"isContentEditable\":\n case \"outerText\":\n case \"outerHTML\":\n extraAttributes.delete(propKey.toLowerCase());\n console.error(\n \"Assignment to read-only property will result in a no-op: `%s`\",\n propKey\n );\n continue;\n case \"className\":\n extraAttributes.delete(\"class\");\n attributes = getValueForAttributeOnCustomComponent(\n domElement,\n \"class\",\n value\n );\n warnForPropDifference(\n \"className\",\n attributes,\n value,\n serverDifferences\n );\n continue;\n default:\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(propKey.toLowerCase())\n : extraAttributes.delete(propKey),\n (attributes = getValueForAttributeOnCustomComponent(\n domElement,\n propKey,\n value\n )),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n );\n }\n }\n }\n else\n for (value in props)\n if (\n props.hasOwnProperty(value) &&\n ((propKey = props[value]), null != propKey)\n )\n if (registrationNameDependencies.hasOwnProperty(value))\n \"function\" !== typeof propKey &&\n warnForInvalidEventListener(value, propKey);\n else if (!0 !== props.suppressHydrationWarning)\n switch (value) {\n case \"children\":\n (\"string\" !== typeof propKey &&\n \"number\" !== typeof propKey) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n propKey,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"value\":\n case \"checked\":\n case \"selected\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n propKey = propKey ? propKey.__html : void 0;\n null != propKey &&\n ((propKey = normalizeHTML(domElement, propKey)),\n attributes !== propKey &&\n (serverDifferences[value] = { __html: attributes }));\n continue;\n case \"className\":\n hydrateAttribute(\n domElement,\n value,\n \"class\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"tabIndex\":\n hydrateAttribute(\n domElement,\n value,\n \"tabindex\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"style\":\n extraAttributes.delete(value);\n diffHydratedStyles(domElement, propKey, serverDifferences);\n continue;\n case \"multiple\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.multiple,\n propKey,\n serverDifferences\n );\n continue;\n case \"muted\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.muted,\n propKey,\n serverDifferences\n );\n continue;\n case \"autoFocus\":\n extraAttributes.delete(\"autofocus\");\n warnForPropDifference(\n value,\n domElement.autofocus,\n propKey,\n serverDifferences\n );\n continue;\n case \"data\":\n if (\"object\" !== tag) {\n extraAttributes.delete(value);\n attributes = domElement.getAttribute(\"data\");\n warnForPropDifference(\n value,\n attributes,\n propKey,\n serverDifferences\n );\n continue;\n }\n case \"src\":\n case \"href\":\n if (\n !(\n \"\" !== propKey ||\n (\"a\" === tag && \"href\" === value) ||\n (\"object\" === tag && \"data\" === value)\n )\n ) {\n \"src\" === value\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n );\n hydrateSanitizedAttribute(\n domElement,\n value,\n value,\n null,\n extraAttributes,\n serverDifferences\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"action\":\n case \"formAction\":\n attributes = domElement.getAttribute(value);\n if (\"function\" === typeof propKey) {\n extraAttributes.delete(value.toLowerCase());\n \"formAction\" === value\n ? (extraAttributes.delete(\"name\"),\n extraAttributes.delete(\"formenctype\"),\n extraAttributes.delete(\"formmethod\"),\n extraAttributes.delete(\"formtarget\"))\n : (extraAttributes.delete(\"enctype\"),\n extraAttributes.delete(\"method\"),\n extraAttributes.delete(\"target\"));\n continue;\n } else if (attributes === EXPECTED_FORM_ACTION_URL) {\n extraAttributes.delete(value.toLowerCase());\n warnForPropDifference(\n value,\n \"function\",\n propKey,\n serverDifferences\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkHref\":\n hydrateSanitizedAttribute(\n domElement,\n value,\n \"xlink:href\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"contentEditable\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"contenteditable\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"spellCheck\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"spellcheck\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"draggable\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n hydrateBooleanAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"capture\":\n case \"download\":\n a: {\n i = domElement;\n var attributeName = (attributes = value),\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n break a;\n default:\n if (!1 === propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n break;\n case \"boolean\":\n if (!0 === propKey && \"\" === i) break a;\n break;\n default:\n if (\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n a: {\n i = domElement;\n attributeName = attributes = value;\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break a;\n default:\n if (isNaN(propKey) || 1 > propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !(isNaN(propKey) || 1 > propKey) &&\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"rowSpan\":\n hydrateNumericAttribute(\n domElement,\n value,\n \"rowspan\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"start\":\n hydrateNumericAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xHeight\":\n hydrateAttribute(\n domElement,\n value,\n \"x-height\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkActuate\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:actuate\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkArcrole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:arcrole\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkRole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:role\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkShow\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:show\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkTitle\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:title\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkType\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:type\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlBase\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:base\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlLang\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:lang\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlSpace\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:space\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"inert\":\n \"\" !== propKey ||\n didWarnForNewBooleanPropsWithEmptyValue[value] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n value\n ));\n hydrateBooleanAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n default:\n if (\n !(2 < value.length) ||\n (\"o\" !== value[0] && \"O\" !== value[0]) ||\n (\"n\" !== value[1] && \"N\" !== value[1])\n ) {\n i = getAttributeAlias(value);\n attributes = !1;\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(i.toLowerCase())\n : ((attributeName = value.toLowerCase()),\n (attributeName = possibleStandardNames.hasOwnProperty(\n attributeName\n )\n ? possibleStandardNames[attributeName] || null\n : null),\n null !== attributeName &&\n attributeName !== value &&\n ((attributes = !0),\n extraAttributes.delete(attributeName)),\n extraAttributes.delete(i));\n a: if (\n ((attributeName = domElement),\n (serverDifferences$jscomp$0 = i),\n (i = propKey),\n isAttributeNameSafe(serverDifferences$jscomp$0))\n )\n if (\n attributeName.hasAttribute(serverDifferences$jscomp$0)\n )\n (attributeName = attributeName.getAttribute(\n serverDifferences$jscomp$0\n )),\n checkAttributeStringCoercion(\n i,\n serverDifferences$jscomp$0\n ),\n (i = attributeName === \"\" + i ? i : attributeName);\n else {\n switch (typeof i) {\n case \"function\":\n case \"symbol\":\n break a;\n case \"boolean\":\n if (\n ((attributeName = serverDifferences$jscomp$0\n .toLowerCase()\n .slice(0, 5)),\n \"data-\" !== attributeName &&\n \"aria-\" !== attributeName)\n )\n break a;\n }\n i = void 0 === i ? void 0 : null;\n }\n else i = void 0;\n attributes ||\n warnForPropDifference(\n value,\n i,\n propKey,\n serverDifferences\n );\n }\n }\n 0 < extraAttributes.size &&\n !0 !== props.suppressHydrationWarning &&\n warnForExtraAttributes(domElement, extraAttributes, serverDifferences);\n return 0 === Object.keys(serverDifferences).length\n ? null\n : serverDifferences;\n }\n function propNamesListJoin(list, combinator) {\n switch (list.length) {\n case 0:\n return \"\";\n case 1:\n return list[0];\n case 2:\n return list[0] + \" \" + combinator + \" \" + list[1];\n default:\n return (\n list.slice(0, -1).join(\", \") +\n \", \" +\n combinator +\n \" \" +\n list[list.length - 1]\n );\n }\n }\n function getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n }\n function getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case SVG_NAMESPACE:\n return HostContextNamespaceSvg;\n case MATH_NAMESPACE:\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n }\n function getChildHostContextProd(parentNamespace, type) {\n if (parentNamespace === HostContextNamespaceNone)\n switch (type) {\n case \"svg\":\n return HostContextNamespaceSvg;\n case \"math\":\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n return parentNamespace === HostContextNamespaceSvg &&\n \"foreignObject\" === type\n ? HostContextNamespaceNone\n : parentNamespace;\n }\n function shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n }\n function shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n }\n function handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n }\n function commitMount(domElement, type, newProps) {\n switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps.autoFocus && domElement.focus();\n break;\n case \"img\":\n newProps.src\n ? (domElement.src = newProps.src)\n : newProps.srcSet && (domElement.srcset = newProps.srcSet);\n }\n }\n function commitUpdate(domElement, type, oldProps, newProps) {\n updateProperties(domElement, type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n }\n function resetTextContent(domElement) {\n setTextContent(domElement, \"\");\n }\n function commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n }\n function removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n }\n function removeChildFromContainer(container, child) {\n 8 === container.nodeType\n ? container.parentNode.removeChild(child)\n : container.removeChild(child);\n }\n function clearSuspenseBoundary(parentInstance, suspenseInstance) {\n var node = suspenseInstance,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), node === SUSPENSE_END_DATA)) {\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(suspenseInstance);\n return;\n }\n depth--;\n } else\n (node !== SUSPENSE_START_DATA &&\n node !== SUSPENSE_PENDING_START_DATA &&\n node !== SUSPENSE_FALLBACK_START_DATA) ||\n depth++;\n node = nextNode;\n } while (node);\n retryIfBlockedOn(suspenseInstance);\n }\n function hideInstance(instance) {\n instance = instance.style;\n \"function\" === typeof instance.setProperty\n ? instance.setProperty(\"display\", \"none\", \"important\")\n : (instance.display = \"none\");\n }\n function hideTextInstance(textInstance) {\n textInstance.nodeValue = \"\";\n }\n function unhideInstance(instance, props) {\n props = props[STYLE];\n props =\n void 0 !== props && null !== props && props.hasOwnProperty(\"display\")\n ? props.display\n : null;\n instance.style.display =\n null == props || \"boolean\" === typeof props ? \"\" : (\"\" + props).trim();\n }\n function unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n }\n function clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n }\n function canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n checkAttributeStringCoercion(anyProps.name, \"name\");\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\n \"stylesheet\" === name &&\n instance.hasAttribute(\"data-precedence\")\n )\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href ? null : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n }\n function canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n }\n function getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n nodeType === SUSPENSE_START_DATA ||\n nodeType === SUSPENSE_FALLBACK_START_DATA ||\n nodeType === SUSPENSE_PENDING_START_DATA ||\n nodeType === FORM_STATE_IS_MATCHING ||\n nodeType === FORM_STATE_IS_NOT_MATCHING\n )\n break;\n if (nodeType === SUSPENSE_END_DATA) return null;\n }\n }\n return node;\n }\n function describeHydratableInstanceForDevWarnings(instance) {\n if (1 === instance.nodeType) {\n for (\n var JSCompiler_temp_const = instance.nodeName.toLowerCase(),\n serverDifferences = {},\n attributes = instance.attributes,\n i = 0;\n i < attributes.length;\n i++\n ) {\n var attr = attributes[i];\n serverDifferences[getPropNameFromAttributeName(attr.name)] =\n \"style\" === attr.name.toLowerCase()\n ? getStylesObjectFromElement(instance)\n : attr.value;\n }\n return { type: JSCompiler_temp_const, props: serverDifferences };\n }\n return 8 === instance.nodeType\n ? { type: \"Suspense\", props: {} }\n : instance.nodeValue;\n }\n function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {\n return null === parentProps ||\n !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]\n ? (textInstance.nodeValue === text\n ? (textInstance = null)\n : ((text = normalizeMarkupForTextOrAttribute(text)),\n (textInstance =\n normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===\n text\n ? null\n : textInstance.nodeValue)),\n textInstance)\n : null;\n }\n function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n suspenseInstance = suspenseInstance.nextSibling;\n for (var depth = 0; suspenseInstance; ) {\n if (8 === suspenseInstance.nodeType) {\n var data = suspenseInstance.data;\n if (data === SUSPENSE_END_DATA) {\n if (0 === depth)\n return getNextHydratable(suspenseInstance.nextSibling);\n depth--;\n } else\n (data !== SUSPENSE_START_DATA &&\n data !== SUSPENSE_FALLBACK_START_DATA &&\n data !== SUSPENSE_PENDING_START_DATA) ||\n depth++;\n }\n suspenseInstance = suspenseInstance.nextSibling;\n }\n return null;\n }\n function getParentSuspenseInstance(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n data === SUSPENSE_START_DATA ||\n data === SUSPENSE_FALLBACK_START_DATA ||\n data === SUSPENSE_PENDING_START_DATA\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else data === SUSPENSE_END_DATA && depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n }\n function commitHydratedContainer(container) {\n retryIfBlockedOn(container);\n }\n function commitHydratedSuspenseInstance(suspenseInstance) {\n retryIfBlockedOn(suspenseInstance);\n }\n function resolveSingletonInstance(\n type,\n props,\n rootContainerInstance,\n hostContext,\n validateDOMNestingDev\n ) {\n validateDOMNestingDev &&\n validateDOMNesting(type, hostContext.ancestorInfo);\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type)\n throw Error(\n \"React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"head\":\n type = props.head;\n if (!type)\n throw Error(\n \"React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"body\":\n type = props.body;\n if (!type)\n throw Error(\n \"React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n default:\n throw Error(\n \"resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n }\n function acquireSingletonInstance(\n type,\n props,\n instance,\n internalInstanceHandle\n ) {\n if (getInstanceFromNode(instance)) {\n var tagName = instance.tagName.toLowerCase();\n console.error(\n \"You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.\",\n tagName,\n tagName,\n tagName\n );\n }\n switch (type) {\n case \"html\":\n case \"head\":\n case \"body\":\n break;\n default:\n console.error(\n \"acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n for (tagName = instance.attributes; tagName.length; )\n instance.removeAttributeNode(tagName[0]);\n setInitialProperties(instance, type, props);\n instance[internalInstanceKey] = internalInstanceHandle;\n instance[internalPropsKey] = props;\n }\n function getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : container.ownerDocument;\n }\n function preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n }\n function getResource(type, currentProps, pendingProps, currentResource) {\n var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)\n ? getHoistableRoot(resourceRoot)\n : null;\n if (!resourceRoot)\n throw Error(\n '\"resourceRoot\" was expected to exist. This is a bug in React.'\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((pendingProps = getStyleKey(pendingProps.href)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableStyles),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,\n _resource = _styles.get(type);\n if (\n !_resource &&\n ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),\n (_resource = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: NotLoaded, preload: null }\n }),\n _styles.set(type, _resource),\n (_styles = resourceRoot.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !_styles._p &&\n ((_resource.instance = _styles),\n (_resource.state.loading = Loaded | Inserted)),\n !preloadPropsMap.has(type))\n ) {\n var preloadProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n };\n preloadPropsMap.set(type, preloadProps);\n _styles ||\n preloadStylesheet(\n resourceRoot,\n type,\n preloadProps,\n _resource.state\n );\n }\n if (currentProps && null === currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return _resource;\n }\n if (currentProps && null !== currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((pendingProps = getScriptKey(pendingProps)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableScripts),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(\n 'getResource encountered a type it did not expect: \"' +\n type +\n '\". this is a bug in React.'\n );\n }\n }\n function describeLinkForResourceErrorDEV(props) {\n var describedProps = 0,\n description = \"<link\";\n \"string\" === typeof props.rel\n ? (describedProps++, (description += ' rel=\"' + props.rel + '\"'))\n : hasOwnProperty.call(props, \"rel\") &&\n (describedProps++,\n (description +=\n ' rel=\"' +\n (null === props.rel ? \"null\" : \"invalid type \" + typeof props.rel) +\n '\"'));\n \"string\" === typeof props.href\n ? (describedProps++, (description += ' href=\"' + props.href + '\"'))\n : hasOwnProperty.call(props, \"href\") &&\n (describedProps++,\n (description +=\n ' href=\"' +\n (null === props.href\n ? \"null\"\n : \"invalid type \" + typeof props.href) +\n '\"'));\n \"string\" === typeof props.precedence\n ? (describedProps++,\n (description += ' precedence=\"' + props.precedence + '\"'))\n : hasOwnProperty.call(props, \"precedence\") &&\n (describedProps++,\n (description +=\n \" precedence={\" +\n (null === props.precedence\n ? \"null\"\n : \"invalid type \" + typeof props.precedence) +\n \"}\"));\n Object.getOwnPropertyNames(props).length > describedProps &&\n (description += \" ...\");\n return description + \" />\";\n }\n function getStyleKey(href) {\n return (\n 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"'\n );\n }\n function getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n }\n function stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n }\n function preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector(\n 'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n )\n ? (state.loading = Loaded)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= Loaded);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= Errored);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n }\n function getScriptKey(src) {\n return (\n '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]'\n );\n }\n function getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n }\n function acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"style\");\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var _instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (_instance)\n return (\n (resource.state.loading |= Inserted),\n (resource.instance = _instance),\n markNodeAsHoistable(_instance),\n _instance\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n _instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(_instance);\n var linkInstance = _instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(_instance, \"link\", instance);\n resource.state.loading |= Inserted;\n insertStylesheet(_instance, props.precedence, hoistableRoot);\n return (resource.instance = _instance);\n case \"script\":\n _instance = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(_instance)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(_instance)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(\n 'acquireResource encountered a resource type it did not expect: \"' +\n resource.type +\n '\". this is a bug in React.'\n );\n }\n else\n \"stylesheet\" === resource.type &&\n (resource.state.loading & Inserted) === NotLoaded &&\n ((instance = resource.instance),\n (resource.state.loading |= Inserted),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n }\n function insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n }\n function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title &&\n (stylesheetProps.title = preloadProps.title);\n }\n function adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n }\n function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n node.namespaceURI !== SVG_NAMESPACE\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n }\n function mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n }\n function isHostHoistableType(type, props, hostContext) {\n var outsideHostContainerContext =\n !hostContext.ancestorInfo.containerTagInScope;\n if (\n hostContext.context === HostContextNamespaceSvg ||\n null != props.itemProp\n )\n return (\n !outsideHostContainerContext ||\n null == props.itemProp ||\n (\"meta\" !== type &&\n \"title\" !== type &&\n \"style\" !== type &&\n \"link\" !== type &&\n \"script\" !== type) ||\n console.error(\n \"Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.\",\n type,\n type\n ),\n !1\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ) {\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflic with the `href` values used in any other hoisted <style> or <link rel=\"stylesheet\" ...> tags. Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence=\"default\"` and `href=\"some unique resource identifier\"`, or move the <style> to the <style> tag.'\n );\n break;\n }\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n ) {\n if (\n \"stylesheet\" === props.rel &&\n \"string\" === typeof props.precedence\n ) {\n type = props.href;\n var onError = props.onError,\n disabled = props.disabled;\n hostContext = [];\n props.onLoad && hostContext.push(\"`onLoad`\");\n onError && hostContext.push(\"`onError`\");\n null != disabled && hostContext.push(\"`disabled`\");\n onError = propNamesListJoin(hostContext, \"and\");\n onError += 1 === hostContext.length ? \" prop\" : \" props\";\n disabled =\n 1 === hostContext.length ? \"an \" + onError : \"the \" + onError;\n hostContext.length &&\n console.error(\n 'React encountered a <link rel=\"stylesheet\" href=\"%s\" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',\n type,\n disabled,\n onError\n );\n }\n outsideHostContainerContext &&\n (\"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ? console.error(\n \"Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag\"\n )\n : (props.onError || props.onLoad) &&\n console.error(\n \"Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n ));\n break;\n }\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.precedence),\n (props = props.disabled),\n \"string\" !== typeof type &&\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <link rel=\"stylesheet\" /> outside the main document without knowing its precedence. Consider adding precedence=\"default\" or moving it into the root <head> tag.'\n ),\n \"string\" === typeof type && null == props\n );\n default:\n return !0;\n }\n case \"script\":\n type =\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async;\n if (\n !type ||\n props.onLoad ||\n props.onError ||\n !props.src ||\n \"string\" !== typeof props.src\n ) {\n outsideHostContainerContext &&\n (type\n ? props.onLoad || props.onError\n ? console.error(\n \"Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n \"Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n 'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async=\"\" or moving it into the root <head> tag.'\n ));\n break;\n }\n return !0;\n case \"noscript\":\n case \"template\":\n outsideHostContainerContext &&\n console.error(\n \"Cannot render <%s> outside the main document. Try moving it into the root <head> tag.\",\n type\n );\n }\n return !1;\n }\n function preloadResource(resource) {\n return \"stylesheet\" === resource.type &&\n (resource.state.loading & Settled) === NotLoaded\n ? !1\n : !0;\n }\n function noop() {}\n function suspendResource(hoistableRoot, resource, props) {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n (resource.state.loading & Inserted) === NotLoaded\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= Inserted;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n (resource.state.loading & Settled) === NotLoaded &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n }\n function waitForCommitToBeReady() {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4);\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n };\n }\n : null;\n }\n function onUnsuspend() {\n this.count--;\n if (0 === this.count)\n if (this.stylesheets)\n insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n }\n function insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n }\n function insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & Inserted)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(LAST_PRECEDENCE);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(LAST_PRECEDENCE, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(LAST_PRECEDENCE, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= Inserted;\n }\n }\n function bindToConsole(methodName, args, badgeName) {\n var offset = 0;\n switch (methodName) {\n case \"dir\":\n case \"dirxml\":\n case \"groupEnd\":\n case \"table\":\n return bind.apply(console[methodName], [console].concat(args));\n case \"assert\":\n offset = 1;\n }\n args = args.slice(0);\n \"string\" === typeof args[offset]\n ? args.splice(\n offset,\n 1,\n badgeFormat + args[offset],\n badgeStyle,\n pad + badgeName + pad,\n resetStyle\n )\n : args.splice(\n offset,\n 0,\n badgeFormat,\n badgeStyle,\n pad + badgeName + pad,\n resetStyle\n );\n args.unshift(console);\n return bind.apply(console[methodName], args);\n }\n function FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n formState\n ) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.finishedWork =\n this.pingCache =\n this.current =\n this.pendingChildren =\n null;\n this.timeoutHandle = noTimeout;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.finishedLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n this.passiveEffectDuration = this.effectDuration = -0;\n this.memoizedUpdaters = new Set();\n containerInfo = this.pendingUpdatersLaneMap = [];\n for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());\n this._debugRootType = hydrate ? \"hydrateRoot()\" : \"createRoot()\";\n }\n function createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n formState\n ) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n formState\n );\n tag = ConcurrentMode;\n !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);\n isDevToolsPresent && (tag |= ProfileMode);\n isStrictMode = createFiber(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n retainCache(tag);\n containerInfo.pooledCache = tag;\n retainCache(tag);\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n }\n function getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n }\n function updateContainerSync(\n element,\n container,\n parentComponent,\n callback\n ) {\n 0 === container.tag && flushPassiveEffects();\n updateContainerImpl(\n container.current,\n 2,\n element,\n container,\n parentComponent,\n callback\n );\n return 2;\n }\n function updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onScheduleFiberRoot\n )\n try {\n injectedHook.onScheduleFiberRoot(rendererID, container, element);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderScheduled &&\n injectedProfilingHooks.markRenderScheduled(lane);\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n isRendering &&\n null !== current &&\n !didWarnAboutNestedUpdates &&\n ((didWarnAboutNestedUpdates = !0),\n console.error(\n \"Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\\n\\nCheck the render method of %s.\",\n getComponentNameFromFiber(current) || \"Unknown\"\n ));\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback &&\n (\"function\" !== typeof callback &&\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ),\n (container.callback = callback));\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n }\n function markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n }\n function markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n }\n function attemptContinuousHydration(fiber) {\n if (13 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n }\n function getCurrentFiberForDevTools() {\n return current;\n }\n function getLaneLabelMap() {\n for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {\n var label = getLabelForLane(lane);\n map.set(lane, label);\n lane *= 2;\n }\n return map;\n }\n function dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = DiscreteEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = ContinuousEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n (executionContext & (RenderContext | CommitContext)) ===\n NoContext &&\n ((workInProgressRootRenderTargetTime =\n now$1() + RENDER_TIMEOUT_MS),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n }\n function findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n }\n function findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n }\n function getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return DiscreteEventPriority;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return ContinuousEventPriority;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return DiscreteEventPriority;\n case UserBlockingPriority:\n return ContinuousEventPriority;\n case NormalPriority$1:\n case LowPriority:\n return DefaultEventPriority;\n case IdlePriority:\n return IdleEventPriority;\n default:\n return DefaultEventPriority;\n }\n default:\n return DefaultEventPriority;\n }\n }\n function clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n }\n function accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n }\n function queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n }\n function attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n if (13 === nearestMounted.tag) {\n var lane = requestUpdateLane(nearestMounted),\n root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n null !== root &&\n scheduleUpdateOnFiber(root, nearestMounted, lane);\n markRetryLaneIfNotHydrated(nearestMounted, lane);\n }\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n }\n function attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n ),\n event = nativeEventClone;\n null !== currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = event;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n null === currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n }\n function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n }\n function replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n }\n function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n }\n function scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (\n null === findInstanceBlockingTarget(submitterOrAction || form)\n )\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n (form = {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n }),\n Object.freeze(form),\n startHostTransition(\n formInst,\n form,\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n }\n function retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus &&\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse &&\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (\n submitterOrAction &&\n submitterOrAction.hasAttribute(\"formAction\")\n )\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n }\n function ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function warnIfReactDOMContainerInDEV(container) {\n container[internalContainerInstanceKey] &&\n (container._reactRootContainer\n ? console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported.\"\n )\n : console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.\"\n ));\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var Scheduler = __webpack_require__(/*! scheduler */ \"./node_modules/scheduler/index.js\"),\n React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\"),\n ReactDOM = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"),\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n Symbol.for(\"react.scope\");\n Symbol.for(\"react.debug_trace_mode\");\n var REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\");\n Symbol.for(\"react.legacy_hidden\");\n Symbol.for(\"react.tracing_marker\");\n var REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n assign = Object.assign,\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var current = null,\n isRendering = !1,\n isArrayImpl = Array.isArray,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n NotPending = Object.freeze({\n pending: !1,\n data: null,\n method: null,\n action: null\n }),\n valueStack = [];\n var fiberStack = [];\n var index$jscomp$0 = -1,\n contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null),\n hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now$1 = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null,\n injectedProfilingHooks = null,\n hasLoggedError = !1,\n isDevToolsPresent = \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,\n clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2,\n nextTransitionLane = 128,\n nextRetryLane = 4194304,\n DiscreteEventPriority = 2,\n ContinuousEventPriority = 8,\n DefaultEventPriority = 32,\n IdleEventPriority = 268435456,\n randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n allNativeEvents = new Set(),\n registrationNameDependencies = {},\n possibleRegistrationNames = {},\n canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n hasReadOnlyValue = {\n button: !0,\n checkbox: !0,\n image: !0,\n hidden: !0,\n radio: !0,\n reset: !0,\n submit: !0\n },\n VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {},\n escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g,\n didWarnValueDefaultValue$1 = !1,\n didWarnCheckedDefaultChecked = !1,\n didWarnSelectedSetOnOption = !1,\n didWarnInvalidChild = !1,\n didWarnInvalidInnerHTML = !1;\n var didWarnValueDefaultValue = !1;\n var valuePropNames = [\"value\", \"defaultValue\"],\n didWarnValDefaultVal = !1,\n needsEscaping = /[\"'&<>\\n\\t]|^\\s|\\s$/,\n specialTags =\n \"address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp\".split(\n \" \"\n ),\n inScopeTags =\n \"applet caption html table td th marquee object template foreignObject desc title\".split(\n \" \"\n ),\n buttonScopeTags = inScopeTags.concat([\"button\"]),\n impliedEndTags = \"dd dt li option optgroup p rp rt\".split(\" \"),\n emptyAncestorInfoDev = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null,\n containerTagInScope: null\n },\n didWarn = {},\n MATH_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\",\n SVG_NAMESPACE = \"http://www.w3.org/2000/svg\",\n shorthandToLonghand = {\n animation:\n \"animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction\".split(\n \" \"\n ),\n background:\n \"backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize\".split(\n \" \"\n ),\n backgroundPosition: [\"backgroundPositionX\", \"backgroundPositionY\"],\n border:\n \"borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth\".split(\n \" \"\n ),\n borderBlockEnd: [\n \"borderBlockEndColor\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\"\n ],\n borderBlockStart: [\n \"borderBlockStartColor\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\"\n ],\n borderBottom: [\n \"borderBottomColor\",\n \"borderBottomStyle\",\n \"borderBottomWidth\"\n ],\n borderColor: [\n \"borderBottomColor\",\n \"borderLeftColor\",\n \"borderRightColor\",\n \"borderTopColor\"\n ],\n borderImage: [\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\"\n ],\n borderInlineEnd: [\n \"borderInlineEndColor\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\"\n ],\n borderInlineStart: [\n \"borderInlineStartColor\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\"\n ],\n borderLeft: [\"borderLeftColor\", \"borderLeftStyle\", \"borderLeftWidth\"],\n borderRadius: [\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\"\n ],\n borderRight: [\n \"borderRightColor\",\n \"borderRightStyle\",\n \"borderRightWidth\"\n ],\n borderStyle: [\n \"borderBottomStyle\",\n \"borderLeftStyle\",\n \"borderRightStyle\",\n \"borderTopStyle\"\n ],\n borderTop: [\"borderTopColor\", \"borderTopStyle\", \"borderTopWidth\"],\n borderWidth: [\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderRightWidth\",\n \"borderTopWidth\"\n ],\n columnRule: [\"columnRuleColor\", \"columnRuleStyle\", \"columnRuleWidth\"],\n columns: [\"columnCount\", \"columnWidth\"],\n flex: [\"flexBasis\", \"flexGrow\", \"flexShrink\"],\n flexFlow: [\"flexDirection\", \"flexWrap\"],\n font: \"fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight\".split(\n \" \"\n ),\n fontVariant:\n \"fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition\".split(\n \" \"\n ),\n gap: [\"columnGap\", \"rowGap\"],\n grid: \"gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows\".split(\n \" \"\n ),\n gridArea: [\n \"gridColumnEnd\",\n \"gridColumnStart\",\n \"gridRowEnd\",\n \"gridRowStart\"\n ],\n gridColumn: [\"gridColumnEnd\", \"gridColumnStart\"],\n gridColumnGap: [\"columnGap\"],\n gridGap: [\"columnGap\", \"rowGap\"],\n gridRow: [\"gridRowEnd\", \"gridRowStart\"],\n gridRowGap: [\"rowGap\"],\n gridTemplate: [\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\"\n ],\n listStyle: [\"listStyleImage\", \"listStylePosition\", \"listStyleType\"],\n margin: [\"marginBottom\", \"marginLeft\", \"marginRight\", \"marginTop\"],\n marker: [\"markerEnd\", \"markerMid\", \"markerStart\"],\n mask: \"maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize\".split(\n \" \"\n ),\n maskPosition: [\"maskPositionX\", \"maskPositionY\"],\n outline: [\"outlineColor\", \"outlineStyle\", \"outlineWidth\"],\n overflow: [\"overflowX\", \"overflowY\"],\n padding: [\"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"paddingTop\"],\n placeContent: [\"alignContent\", \"justifyContent\"],\n placeItems: [\"alignItems\", \"justifyItems\"],\n placeSelf: [\"alignSelf\", \"justifySelf\"],\n textDecoration: [\n \"textDecorationColor\",\n \"textDecorationLine\",\n \"textDecorationStyle\"\n ],\n textEmphasis: [\"textEmphasisColor\", \"textEmphasisStyle\"],\n transition: [\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\"\n ],\n wordWrap: [\"overflowWrap\"]\n },\n uppercasePattern = /([A-Z])/g,\n msPattern$1 = /^ms-/,\n badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,\n msPattern = /^-ms-/,\n hyphenPattern = /-(.)/g,\n badStyleValueWithSemicolonPattern = /;\\s*$/,\n warnedStyleNames = {},\n warnedStyleValues = {},\n warnedForNaNValue = !1,\n warnedForInfinityValue = !1,\n unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n ),\n aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n possibleStandardNames = {\n accept: \"accept\",\n acceptcharset: \"acceptCharset\",\n \"accept-charset\": \"acceptCharset\",\n accesskey: \"accessKey\",\n action: \"action\",\n allowfullscreen: \"allowFullScreen\",\n alt: \"alt\",\n as: \"as\",\n async: \"async\",\n autocapitalize: \"autoCapitalize\",\n autocomplete: \"autoComplete\",\n autocorrect: \"autoCorrect\",\n autofocus: \"autoFocus\",\n autoplay: \"autoPlay\",\n autosave: \"autoSave\",\n capture: \"capture\",\n cellpadding: \"cellPadding\",\n cellspacing: \"cellSpacing\",\n challenge: \"challenge\",\n charset: \"charSet\",\n checked: \"checked\",\n children: \"children\",\n cite: \"cite\",\n class: \"className\",\n classid: \"classID\",\n classname: \"className\",\n cols: \"cols\",\n colspan: \"colSpan\",\n content: \"content\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n controls: \"controls\",\n controlslist: \"controlsList\",\n coords: \"coords\",\n crossorigin: \"crossOrigin\",\n dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n data: \"data\",\n datetime: \"dateTime\",\n default: \"default\",\n defaultchecked: \"defaultChecked\",\n defaultvalue: \"defaultValue\",\n defer: \"defer\",\n dir: \"dir\",\n disabled: \"disabled\",\n disablepictureinpicture: \"disablePictureInPicture\",\n disableremoteplayback: \"disableRemotePlayback\",\n download: \"download\",\n draggable: \"draggable\",\n enctype: \"encType\",\n enterkeyhint: \"enterKeyHint\",\n fetchpriority: \"fetchPriority\",\n for: \"htmlFor\",\n form: \"form\",\n formmethod: \"formMethod\",\n formaction: \"formAction\",\n formenctype: \"formEncType\",\n formnovalidate: \"formNoValidate\",\n formtarget: \"formTarget\",\n frameborder: \"frameBorder\",\n headers: \"headers\",\n height: \"height\",\n hidden: \"hidden\",\n high: \"high\",\n href: \"href\",\n hreflang: \"hrefLang\",\n htmlfor: \"htmlFor\",\n httpequiv: \"httpEquiv\",\n \"http-equiv\": \"httpEquiv\",\n icon: \"icon\",\n id: \"id\",\n imagesizes: \"imageSizes\",\n imagesrcset: \"imageSrcSet\",\n inert: \"inert\",\n innerhtml: \"innerHTML\",\n inputmode: \"inputMode\",\n integrity: \"integrity\",\n is: \"is\",\n itemid: \"itemID\",\n itemprop: \"itemProp\",\n itemref: \"itemRef\",\n itemscope: \"itemScope\",\n itemtype: \"itemType\",\n keyparams: \"keyParams\",\n keytype: \"keyType\",\n kind: \"kind\",\n label: \"label\",\n lang: \"lang\",\n list: \"list\",\n loop: \"loop\",\n low: \"low\",\n manifest: \"manifest\",\n marginwidth: \"marginWidth\",\n marginheight: \"marginHeight\",\n max: \"max\",\n maxlength: \"maxLength\",\n media: \"media\",\n mediagroup: \"mediaGroup\",\n method: \"method\",\n min: \"min\",\n minlength: \"minLength\",\n multiple: \"multiple\",\n muted: \"muted\",\n name: \"name\",\n nomodule: \"noModule\",\n nonce: \"nonce\",\n novalidate: \"noValidate\",\n open: \"open\",\n optimum: \"optimum\",\n pattern: \"pattern\",\n placeholder: \"placeholder\",\n playsinline: \"playsInline\",\n poster: \"poster\",\n preload: \"preload\",\n profile: \"profile\",\n radiogroup: \"radioGroup\",\n readonly: \"readOnly\",\n referrerpolicy: \"referrerPolicy\",\n rel: \"rel\",\n required: \"required\",\n reversed: \"reversed\",\n role: \"role\",\n rows: \"rows\",\n rowspan: \"rowSpan\",\n sandbox: \"sandbox\",\n scope: \"scope\",\n scoped: \"scoped\",\n scrolling: \"scrolling\",\n seamless: \"seamless\",\n selected: \"selected\",\n shape: \"shape\",\n size: \"size\",\n sizes: \"sizes\",\n span: \"span\",\n spellcheck: \"spellCheck\",\n src: \"src\",\n srcdoc: \"srcDoc\",\n srclang: \"srcLang\",\n srcset: \"srcSet\",\n start: \"start\",\n step: \"step\",\n style: \"style\",\n summary: \"summary\",\n tabindex: \"tabIndex\",\n target: \"target\",\n title: \"title\",\n type: \"type\",\n usemap: \"useMap\",\n value: \"value\",\n width: \"width\",\n wmode: \"wmode\",\n wrap: \"wrap\",\n about: \"about\",\n accentheight: \"accentHeight\",\n \"accent-height\": \"accentHeight\",\n accumulate: \"accumulate\",\n additive: \"additive\",\n alignmentbaseline: \"alignmentBaseline\",\n \"alignment-baseline\": \"alignmentBaseline\",\n allowreorder: \"allowReorder\",\n alphabetic: \"alphabetic\",\n amplitude: \"amplitude\",\n arabicform: \"arabicForm\",\n \"arabic-form\": \"arabicForm\",\n ascent: \"ascent\",\n attributename: \"attributeName\",\n attributetype: \"attributeType\",\n autoreverse: \"autoReverse\",\n azimuth: \"azimuth\",\n basefrequency: \"baseFrequency\",\n baselineshift: \"baselineShift\",\n \"baseline-shift\": \"baselineShift\",\n baseprofile: \"baseProfile\",\n bbox: \"bbox\",\n begin: \"begin\",\n bias: \"bias\",\n by: \"by\",\n calcmode: \"calcMode\",\n capheight: \"capHeight\",\n \"cap-height\": \"capHeight\",\n clip: \"clip\",\n clippath: \"clipPath\",\n \"clip-path\": \"clipPath\",\n clippathunits: \"clipPathUnits\",\n cliprule: \"clipRule\",\n \"clip-rule\": \"clipRule\",\n color: \"color\",\n colorinterpolation: \"colorInterpolation\",\n \"color-interpolation\": \"colorInterpolation\",\n colorinterpolationfilters: \"colorInterpolationFilters\",\n \"color-interpolation-filters\": \"colorInterpolationFilters\",\n colorprofile: \"colorProfile\",\n \"color-profile\": \"colorProfile\",\n colorrendering: \"colorRendering\",\n \"color-rendering\": \"colorRendering\",\n contentscripttype: \"contentScriptType\",\n contentstyletype: \"contentStyleType\",\n cursor: \"cursor\",\n cx: \"cx\",\n cy: \"cy\",\n d: \"d\",\n datatype: \"datatype\",\n decelerate: \"decelerate\",\n descent: \"descent\",\n diffuseconstant: \"diffuseConstant\",\n direction: \"direction\",\n display: \"display\",\n divisor: \"divisor\",\n dominantbaseline: \"dominantBaseline\",\n \"dominant-baseline\": \"dominantBaseline\",\n dur: \"dur\",\n dx: \"dx\",\n dy: \"dy\",\n edgemode: \"edgeMode\",\n elevation: \"elevation\",\n enablebackground: \"enableBackground\",\n \"enable-background\": \"enableBackground\",\n end: \"end\",\n exponent: \"exponent\",\n externalresourcesrequired: \"externalResourcesRequired\",\n fill: \"fill\",\n fillopacity: \"fillOpacity\",\n \"fill-opacity\": \"fillOpacity\",\n fillrule: \"fillRule\",\n \"fill-rule\": \"fillRule\",\n filter: \"filter\",\n filterres: \"filterRes\",\n filterunits: \"filterUnits\",\n floodopacity: \"floodOpacity\",\n \"flood-opacity\": \"floodOpacity\",\n floodcolor: \"floodColor\",\n \"flood-color\": \"floodColor\",\n focusable: \"focusable\",\n fontfamily: \"fontFamily\",\n \"font-family\": \"fontFamily\",\n fontsize: \"fontSize\",\n \"font-size\": \"fontSize\",\n fontsizeadjust: \"fontSizeAdjust\",\n \"font-size-adjust\": \"fontSizeAdjust\",\n fontstretch: \"fontStretch\",\n \"font-stretch\": \"fontStretch\",\n fontstyle: \"fontStyle\",\n \"font-style\": \"fontStyle\",\n fontvariant: \"fontVariant\",\n \"font-variant\": \"fontVariant\",\n fontweight: \"fontWeight\",\n \"font-weight\": \"fontWeight\",\n format: \"format\",\n from: \"from\",\n fx: \"fx\",\n fy: \"fy\",\n g1: \"g1\",\n g2: \"g2\",\n glyphname: \"glyphName\",\n \"glyph-name\": \"glyphName\",\n glyphorientationhorizontal: \"glyphOrientationHorizontal\",\n \"glyph-orientation-horizontal\": \"glyphOrientationHorizontal\",\n glyphorientationvertical: \"glyphOrientationVertical\",\n \"glyph-orientation-vertical\": \"glyphOrientationVertical\",\n glyphref: \"glyphRef\",\n gradienttransform: \"gradientTransform\",\n gradientunits: \"gradientUnits\",\n hanging: \"hanging\",\n horizadvx: \"horizAdvX\",\n \"horiz-adv-x\": \"horizAdvX\",\n horizoriginx: \"horizOriginX\",\n \"horiz-origin-x\": \"horizOriginX\",\n ideographic: \"ideographic\",\n imagerendering: \"imageRendering\",\n \"image-rendering\": \"imageRendering\",\n in2: \"in2\",\n in: \"in\",\n inlist: \"inlist\",\n intercept: \"intercept\",\n k1: \"k1\",\n k2: \"k2\",\n k3: \"k3\",\n k4: \"k4\",\n k: \"k\",\n kernelmatrix: \"kernelMatrix\",\n kernelunitlength: \"kernelUnitLength\",\n kerning: \"kerning\",\n keypoints: \"keyPoints\",\n keysplines: \"keySplines\",\n keytimes: \"keyTimes\",\n lengthadjust: \"lengthAdjust\",\n letterspacing: \"letterSpacing\",\n \"letter-spacing\": \"letterSpacing\",\n lightingcolor: \"lightingColor\",\n \"lighting-color\": \"lightingColor\",\n limitingconeangle: \"limitingConeAngle\",\n local: \"local\",\n markerend: \"markerEnd\",\n \"marker-end\": \"markerEnd\",\n markerheight: \"markerHeight\",\n markermid: \"markerMid\",\n \"marker-mid\": \"markerMid\",\n markerstart: \"markerStart\",\n \"marker-start\": \"markerStart\",\n markerunits: \"markerUnits\",\n markerwidth: \"markerWidth\",\n mask: \"mask\",\n maskcontentunits: \"maskContentUnits\",\n maskunits: \"maskUnits\",\n mathematical: \"mathematical\",\n mode: \"mode\",\n numoctaves: \"numOctaves\",\n offset: \"offset\",\n opacity: \"opacity\",\n operator: \"operator\",\n order: \"order\",\n orient: \"orient\",\n orientation: \"orientation\",\n origin: \"origin\",\n overflow: \"overflow\",\n overlineposition: \"overlinePosition\",\n \"overline-position\": \"overlinePosition\",\n overlinethickness: \"overlineThickness\",\n \"overline-thickness\": \"overlineThickness\",\n paintorder: \"paintOrder\",\n \"paint-order\": \"paintOrder\",\n panose1: \"panose1\",\n \"panose-1\": \"panose1\",\n pathlength: \"pathLength\",\n patterncontentunits: \"patternContentUnits\",\n patterntransform: \"patternTransform\",\n patternunits: \"patternUnits\",\n pointerevents: \"pointerEvents\",\n \"pointer-events\": \"pointerEvents\",\n points: \"points\",\n pointsatx: \"pointsAtX\",\n pointsaty: \"pointsAtY\",\n pointsatz: \"pointsAtZ\",\n popover: \"popover\",\n popovertarget: \"popoverTarget\",\n popovertargetaction: \"popoverTargetAction\",\n prefix: \"prefix\",\n preservealpha: \"preserveAlpha\",\n preserveaspectratio: \"preserveAspectRatio\",\n primitiveunits: \"primitiveUnits\",\n property: \"property\",\n r: \"r\",\n radius: \"radius\",\n refx: \"refX\",\n refy: \"refY\",\n renderingintent: \"renderingIntent\",\n \"rendering-intent\": \"renderingIntent\",\n repeatcount: \"repeatCount\",\n repeatdur: \"repeatDur\",\n requiredextensions: \"requiredExtensions\",\n requiredfeatures: \"requiredFeatures\",\n resource: \"resource\",\n restart: \"restart\",\n result: \"result\",\n results: \"results\",\n rotate: \"rotate\",\n rx: \"rx\",\n ry: \"ry\",\n scale: \"scale\",\n security: \"security\",\n seed: \"seed\",\n shaperendering: \"shapeRendering\",\n \"shape-rendering\": \"shapeRendering\",\n slope: \"slope\",\n spacing: \"spacing\",\n specularconstant: \"specularConstant\",\n specularexponent: \"specularExponent\",\n speed: \"speed\",\n spreadmethod: \"spreadMethod\",\n startoffset: \"startOffset\",\n stddeviation: \"stdDeviation\",\n stemh: \"stemh\",\n stemv: \"stemv\",\n stitchtiles: \"stitchTiles\",\n stopcolor: \"stopColor\",\n \"stop-color\": \"stopColor\",\n stopopacity: \"stopOpacity\",\n \"stop-opacity\": \"stopOpacity\",\n strikethroughposition: \"strikethroughPosition\",\n \"strikethrough-position\": \"strikethroughPosition\",\n strikethroughthickness: \"strikethroughThickness\",\n \"strikethrough-thickness\": \"strikethroughThickness\",\n string: \"string\",\n stroke: \"stroke\",\n strokedasharray: \"strokeDasharray\",\n \"stroke-dasharray\": \"strokeDasharray\",\n strokedashoffset: \"strokeDashoffset\",\n \"stroke-dashoffset\": \"strokeDashoffset\",\n strokelinecap: \"strokeLinecap\",\n \"stroke-linecap\": \"strokeLinecap\",\n strokelinejoin: \"strokeLinejoin\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n strokemiterlimit: \"strokeMiterlimit\",\n \"stroke-miterlimit\": \"strokeMiterlimit\",\n strokewidth: \"strokeWidth\",\n \"stroke-width\": \"strokeWidth\",\n strokeopacity: \"strokeOpacity\",\n \"stroke-opacity\": \"strokeOpacity\",\n suppresscontenteditablewarning: \"suppressContentEditableWarning\",\n suppresshydrationwarning: \"suppressHydrationWarning\",\n surfacescale: \"surfaceScale\",\n systemlanguage: \"systemLanguage\",\n tablevalues: \"tableValues\",\n targetx: \"targetX\",\n targety: \"targetY\",\n textanchor: \"textAnchor\",\n \"text-anchor\": \"textAnchor\",\n textdecoration: \"textDecoration\",\n \"text-decoration\": \"textDecoration\",\n textlength: \"textLength\",\n textrendering: \"textRendering\",\n \"text-rendering\": \"textRendering\",\n to: \"to\",\n transform: \"transform\",\n transformorigin: \"transformOrigin\",\n \"transform-origin\": \"transformOrigin\",\n typeof: \"typeof\",\n u1: \"u1\",\n u2: \"u2\",\n underlineposition: \"underlinePosition\",\n \"underline-position\": \"underlinePosition\",\n underlinethickness: \"underlineThickness\",\n \"underline-thickness\": \"underlineThickness\",\n unicode: \"unicode\",\n unicodebidi: \"unicodeBidi\",\n \"unicode-bidi\": \"unicodeBidi\",\n unicoderange: \"unicodeRange\",\n \"unicode-range\": \"unicodeRange\",\n unitsperem: \"unitsPerEm\",\n \"units-per-em\": \"unitsPerEm\",\n unselectable: \"unselectable\",\n valphabetic: \"vAlphabetic\",\n \"v-alphabetic\": \"vAlphabetic\",\n values: \"values\",\n vectoreffect: \"vectorEffect\",\n \"vector-effect\": \"vectorEffect\",\n version: \"version\",\n vertadvy: \"vertAdvY\",\n \"vert-adv-y\": \"vertAdvY\",\n vertoriginx: \"vertOriginX\",\n \"vert-origin-x\": \"vertOriginX\",\n vertoriginy: \"vertOriginY\",\n \"vert-origin-y\": \"vertOriginY\",\n vhanging: \"vHanging\",\n \"v-hanging\": \"vHanging\",\n videographic: \"vIdeographic\",\n \"v-ideographic\": \"vIdeographic\",\n viewbox: \"viewBox\",\n viewtarget: \"viewTarget\",\n visibility: \"visibility\",\n vmathematical: \"vMathematical\",\n \"v-mathematical\": \"vMathematical\",\n vocab: \"vocab\",\n widths: \"widths\",\n wordspacing: \"wordSpacing\",\n \"word-spacing\": \"wordSpacing\",\n writingmode: \"writingMode\",\n \"writing-mode\": \"writingMode\",\n x1: \"x1\",\n x2: \"x2\",\n x: \"x\",\n xchannelselector: \"xChannelSelector\",\n xheight: \"xHeight\",\n \"x-height\": \"xHeight\",\n xlinkactuate: \"xlinkActuate\",\n \"xlink:actuate\": \"xlinkActuate\",\n xlinkarcrole: \"xlinkArcrole\",\n \"xlink:arcrole\": \"xlinkArcrole\",\n xlinkhref: \"xlinkHref\",\n \"xlink:href\": \"xlinkHref\",\n xlinkrole: \"xlinkRole\",\n \"xlink:role\": \"xlinkRole\",\n xlinkshow: \"xlinkShow\",\n \"xlink:show\": \"xlinkShow\",\n xlinktitle: \"xlinkTitle\",\n \"xlink:title\": \"xlinkTitle\",\n xlinktype: \"xlinkType\",\n \"xlink:type\": \"xlinkType\",\n xmlbase: \"xmlBase\",\n \"xml:base\": \"xmlBase\",\n xmllang: \"xmlLang\",\n \"xml:lang\": \"xmlLang\",\n xmlns: \"xmlns\",\n \"xml:space\": \"xmlSpace\",\n xmlnsxlink: \"xmlnsXlink\",\n \"xmlns:xlink\": \"xmlnsXlink\",\n xmlspace: \"xmlSpace\",\n y1: \"y1\",\n y2: \"y2\",\n y: \"y\",\n ychannelselector: \"yChannelSelector\",\n z: \"z\",\n zoomandpan: \"zoomAndPan\"\n },\n ariaProperties = {\n \"aria-current\": 0,\n \"aria-description\": 0,\n \"aria-details\": 0,\n \"aria-disabled\": 0,\n \"aria-hidden\": 0,\n \"aria-invalid\": 0,\n \"aria-keyshortcuts\": 0,\n \"aria-label\": 0,\n \"aria-roledescription\": 0,\n \"aria-autocomplete\": 0,\n \"aria-checked\": 0,\n \"aria-expanded\": 0,\n \"aria-haspopup\": 0,\n \"aria-level\": 0,\n \"aria-modal\": 0,\n \"aria-multiline\": 0,\n \"aria-multiselectable\": 0,\n \"aria-orientation\": 0,\n \"aria-placeholder\": 0,\n \"aria-pressed\": 0,\n \"aria-readonly\": 0,\n \"aria-required\": 0,\n \"aria-selected\": 0,\n \"aria-sort\": 0,\n \"aria-valuemax\": 0,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": 0,\n \"aria-valuetext\": 0,\n \"aria-atomic\": 0,\n \"aria-busy\": 0,\n \"aria-live\": 0,\n \"aria-relevant\": 0,\n \"aria-dropeffect\": 0,\n \"aria-grabbed\": 0,\n \"aria-activedescendant\": 0,\n \"aria-colcount\": 0,\n \"aria-colindex\": 0,\n \"aria-colspan\": 0,\n \"aria-controls\": 0,\n \"aria-describedby\": 0,\n \"aria-errormessage\": 0,\n \"aria-flowto\": 0,\n \"aria-labelledby\": 0,\n \"aria-owns\": 0,\n \"aria-posinset\": 0,\n \"aria-rowcount\": 0,\n \"aria-rowindex\": 0,\n \"aria-rowspan\": 0,\n \"aria-setsize\": 0\n },\n warnedProperties$1 = {},\n rARIA$1 = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel$1 = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n didWarnValueNull = !1,\n warnedProperties = {},\n EVENT_NAME_REGEX = /^on./,\n INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,\n rARIA = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i,\n currentReplayingEvent = null,\n restoreTarget = null,\n restoreQueue = null,\n isInsideEventHandler = !1,\n passiveBrowserEventsSupported = !1;\n if (canUseDOM)\n try {\n var options$jscomp$0 = {};\n Object.defineProperty(options$jscomp$0, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n window.removeEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\n var root = null,\n startText = null,\n fallbackText = null,\n EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(\n CompositionEventInterface\n ),\n SyntheticInputEvent = SyntheticCompositionEvent,\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n },\n KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n START_KEYCODE = 229,\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\n canUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\n var canUseTextInputEvent =\n canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CODE = 32,\n SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),\n hasSpaceKeypress = !1,\n isComposing = !1,\n supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n },\n activeElement$1 = null,\n activeElementInst$1 = null,\n isInputEventSupported = !1;\n canUseDOM &&\n (isInputEventSupported =\n isEventSupported(\"input\") &&\n (!document.documentMode || 9 < document.documentMode));\n var objectIs = \"function\" === typeof Object.is ? Object.is : is,\n skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1,\n vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\n canUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\n var ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel\".split(\n \" \"\n ),\n OffscreenVisible = 1,\n OffscreenDetached = 2,\n OffscreenPassiveEffectsConnected = 4,\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0,\n emptyContextObject = {};\n Object.freeze(emptyContextObject);\n var resolveFamily = null,\n failedBoundaries = null,\n NoMode = 0,\n ConcurrentMode = 1,\n ProfileMode = 2,\n StrictLegacyMode = 8,\n StrictEffectsMode = 16,\n NoStrictPassiveEffectsMode = 64,\n now = Scheduler.unstable_now,\n renderStartTime = -0,\n commitStartTime = -0,\n profilerStartTime = -1.1,\n profilerEffectDuration = -0,\n currentUpdateIsNested = !1,\n nestedUpdateScheduled = !1,\n ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function () {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function () {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n },\n pendingComponentWillMountWarnings = [],\n pendingUNSAFE_ComponentWillMountWarnings = [],\n pendingComponentWillReceivePropsWarnings = [],\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [],\n pendingComponentWillUpdateWarnings = [],\n pendingUNSAFE_ComponentWillUpdateWarnings = [],\n didWarnAboutUnsafeLifecycles = new Set();\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (\n fiber,\n instance\n ) {\n didWarnAboutUnsafeLifecycles.has(fiber.type) ||\n (\"function\" === typeof instance.componentWillMount &&\n !0 !== instance.componentWillMount.__suppressDeprecationWarning &&\n pendingComponentWillMountWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber),\n \"function\" === typeof instance.componentWillReceiveProps &&\n !0 !==\n instance.componentWillReceiveProps.__suppressDeprecationWarning &&\n pendingComponentWillReceivePropsWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),\n \"function\" === typeof instance.componentWillUpdate &&\n !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&\n pendingComponentWillUpdateWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));\n };\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n var componentWillMountUniqueNames = new Set();\n 0 < pendingComponentWillMountWarnings.length &&\n (pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillMountWarnings = []));\n var UNSAFE_componentWillMountUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillMountWarnings.length &&\n (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillMountWarnings = []));\n var componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingComponentWillReceivePropsWarnings.length &&\n (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillReceivePropsWarnings = []));\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&\n (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(\n function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }\n ),\n (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));\n var componentWillUpdateUniqueNames = new Set();\n 0 < pendingComponentWillUpdateWarnings.length &&\n (pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillUpdateWarnings = []));\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&\n (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillUpdateWarnings = []));\n if (0 < UNSAFE_componentWillMountUniqueNames.size) {\n var sortedNames = setToSortedString(\n UNSAFE_componentWillMountUniqueNames\n );\n console.error(\n \"Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n\\nPlease update the following components: %s\",\n sortedNames\n );\n }\n 0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillReceivePropsUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < UNSAFE_componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillUpdateUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillMountUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillMountUniqueNames)),\n console.warn(\n \"componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n componentWillReceivePropsUniqueNames\n )),\n console.warn(\n \"componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),\n console.warn(\n \"componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n };\n var pendingLegacyContextWarning = new Map(),\n didWarnAboutLegacyContext = new Set();\n ReactStrictModeWarnings.recordLegacyContextWarning = function (\n fiber,\n instance\n ) {\n var strictRoot = null;\n for (var node = fiber; null !== node; )\n node.mode & StrictLegacyMode && (strictRoot = node),\n (node = node.return);\n null === strictRoot\n ? console.error(\n \"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.\"\n )\n : !didWarnAboutLegacyContext.has(fiber.type) &&\n ((node = pendingLegacyContextWarning.get(strictRoot)),\n null != fiber.type.contextTypes ||\n null != fiber.type.childContextTypes ||\n (null !== instance &&\n \"function\" === typeof instance.getChildContext)) &&\n (void 0 === node &&\n ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),\n node.push(fiber));\n };\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray) {\n if (0 !== fiberArray.length) {\n var firstFiber = fiberArray[0],\n uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentNameFromFiber(fiber) || \"Component\");\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n runWithFiberInDEV(firstFiber, function () {\n console.error(\n \"Legacy context API has been detected within a strict-mode tree.\\n\\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\\n\\nPlease update the following components: %s\\n\\nLearn more about this warning here: https://react.dev/link/legacy-context\",\n sortedNames\n );\n });\n }\n });\n };\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n var CapturedStacks = new WeakMap(),\n forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\",\n hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n didSuspendOrErrorDEV = !1,\n hydrationDiffRootDEV = null,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(\n \"Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n SuspenseException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`\"\n ),\n SuspenseyCommitException = Error(\n \"Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n noopSuspenseyCommitThenable = {\n then: function () {\n console.error(\n 'Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue.'\n );\n }\n },\n suspendedThenable = null,\n needsToResetSuspendedThenableDEV = !1,\n callComponent = {\n \"react-stack-bottom-frame\": function (Component, props, secondArg) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return Component(props, secondArg);\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callComponentInDEV =\n callComponent[\"react-stack-bottom-frame\"].bind(callComponent),\n callRender = {\n \"react-stack-bottom-frame\": function (instance) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return instance.render();\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callRenderInDEV = callRender[\"react-stack-bottom-frame\"].bind(callRender),\n callComponentDidMount = {\n \"react-stack-bottom-frame\": function (finishedWork, instance) {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidMountInDEV = callComponentDidMount[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidMount),\n callComponentDidUpdate = {\n \"react-stack-bottom-frame\": function (\n finishedWork,\n instance,\n prevProps,\n prevState,\n snapshot\n ) {\n try {\n instance.componentDidUpdate(prevProps, prevState, snapshot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidUpdateInDEV = callComponentDidUpdate[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidUpdate),\n callComponentDidCatch = {\n \"react-stack-bottom-frame\": function (instance, errorInfo) {\n var stack = errorInfo.stack;\n instance.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n }\n },\n callComponentDidCatchInDEV = callComponentDidCatch[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidCatch),\n callComponentWillUnmount = {\n \"react-stack-bottom-frame\": function (\n current,\n nearestMountedAncestor,\n instance\n ) {\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callComponentWillUnmountInDEV = callComponentWillUnmount[\n \"react-stack-bottom-frame\"\n ].bind(callComponentWillUnmount),\n callCreate = {\n \"react-stack-bottom-frame\": function (effect) {\n var create = effect.create;\n effect = effect.inst;\n create = create();\n return (effect.destroy = create);\n }\n },\n callCreateInDEV = callCreate[\"react-stack-bottom-frame\"].bind(callCreate),\n callDestroy = {\n \"react-stack-bottom-frame\": function (\n current,\n nearestMountedAncestor,\n destroy\n ) {\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callDestroyInDEV =\n callDestroy[\"react-stack-bottom-frame\"].bind(callDestroy),\n callLazyInit = {\n \"react-stack-bottom-frame\": function (lazy) {\n var init = lazy._init;\n return init(lazy._payload);\n }\n },\n callLazyInitInDEV =\n callLazyInit[\"react-stack-bottom-frame\"].bind(callLazyInit),\n thenableState$1 = null,\n thenableIndexCounter$1 = 0,\n currentDebugInfo = null,\n didWarnAboutMaps;\n var didWarnAboutGenerators = (didWarnAboutMaps = !1);\n var ownerHasKeyUseWarning = {};\n var ownerHasFunctionTypeWarning = {};\n var ownerHasSymbolTypeWarning = {};\n warnForMissingKey = function (returnFiber, workInProgress, child) {\n if (\n null !== child &&\n \"object\" === typeof child &&\n child._store &&\n ((!child._store.validated && null == child.key) ||\n 2 === child._store.validated)\n ) {\n if (\"object\" !== typeof child._store)\n throw Error(\n \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\"\n );\n child._store.validated = 1;\n var componentName = getComponentNameFromFiber(returnFiber),\n componentKey = componentName || \"null\";\n if (!ownerHasKeyUseWarning[componentKey]) {\n ownerHasKeyUseWarning[componentKey] = !0;\n child = child._owner;\n returnFiber = returnFiber._debugOwner;\n var currentComponentErrorInfo = \"\";\n returnFiber &&\n \"number\" === typeof returnFiber.tag &&\n (componentKey = getComponentNameFromFiber(returnFiber)) &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the render method of `\" + componentKey + \"`.\");\n currentComponentErrorInfo ||\n (componentName &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the top-level render call using <\" +\n componentName +\n \">.\"));\n var childOwnerAppendix = \"\";\n null != child &&\n returnFiber !== child &&\n ((componentName = null),\n \"number\" === typeof child.tag\n ? (componentName = getComponentNameFromFiber(child))\n : \"string\" === typeof child.name && (componentName = child.name),\n componentName &&\n (childOwnerAppendix =\n \" It was passed a child from \" + componentName + \".\"));\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n currentComponentErrorInfo,\n childOwnerAppendix\n );\n });\n }\n }\n };\n var reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0),\n suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null,\n SubtreeSuspenseContextMask = 1,\n ForceSuspenseFallback = 2,\n suspenseStackCursor = createCursor(0),\n NoFlags = 0,\n HasEffect = 1,\n Insertion = 2,\n Layout = 4,\n Passive = 8,\n AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n _currentRenderer: null,\n _currentRenderer2: null\n },\n currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null,\n prevOnStartTransitionFinish = ReactSharedInternals.S;\n ReactSharedInternals.S = function (transition, returnValue) {\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n };\n var resumedCache = createCursor(null),\n didWarnUncachedGetSnapshot;\n var didWarnAboutMismatchedHooksForComponent = new Set();\n var didWarnAboutUseWrappedInTryCatch = new Set();\n var didWarnAboutAsyncClientComponent = new Set();\n var didWarnAboutUseFormState = new Set();\n var renderLanes = 0,\n currentlyRenderingFiber$1 = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0,\n RE_RENDER_LIMIT = 25,\n currentHookNameInDev = null,\n hookTypesDev = null,\n hookTypesUpdateIndexDev = -1,\n ignorePreviousDependencies = !1;\n var createFunctionComponentUpdateQueue = function () {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n };\n var ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError\n };\n ContextOnlyDispatcher.useCacheRefresh = throwInvalidHookError;\n ContextOnlyDispatcher.useMemoCache = throwInvalidHookError;\n ContextOnlyDispatcher.useHostTransitionStatus = throwInvalidHookError;\n ContextOnlyDispatcher.useFormState = throwInvalidHookError;\n ContextOnlyDispatcher.useActionState = throwInvalidHookError;\n ContextOnlyDispatcher.useOptimistic = throwInvalidHookError;\n var HooksDispatcherOnMountInDEV = null,\n HooksDispatcherOnMountWithHookTypesInDEV = null,\n HooksDispatcherOnUpdateInDEV = null,\n HooksDispatcherOnRerenderInDEV = null,\n InvalidNestedHooksDispatcherOnMountInDEV = null,\n InvalidNestedHooksDispatcherOnUpdateInDEV = null,\n InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n HooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n mountHookTypesDev();\n return mountId();\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnMountInDEV.useMemoCache = useMemoCache;\n HooksDispatcherOnMountInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n HooksDispatcherOnMountInDEV.useFormState = function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n mountHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n };\n HooksDispatcherOnMountInDEV.useActionState = function (\n action,\n initialState\n ) {\n currentHookNameInDev = \"useActionState\";\n mountHookTypesDev();\n return mountActionState(action, initialState);\n };\n HooksDispatcherOnMountInDEV.useOptimistic = function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n };\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return mountId();\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnMountWithHookTypesInDEV.useMemoCache = useMemoCache;\n HooksDispatcherOnMountWithHookTypesInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n HooksDispatcherOnMountWithHookTypesInDEV.useFormState = function (\n action,\n initialState\n ) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n };\n HooksDispatcherOnMountWithHookTypesInDEV.useActionState = function (\n action,\n initialState\n ) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return mountActionState(action, initialState);\n };\n HooksDispatcherOnMountWithHookTypesInDEV.useOptimistic = function (\n passthrough\n ) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return mountOptimistic(passthrough);\n };\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n HooksDispatcherOnUpdateInDEV.useMemoCache = useMemoCache;\n HooksDispatcherOnUpdateInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n HooksDispatcherOnUpdateInDEV.useFormState = function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return updateActionState(action);\n };\n HooksDispatcherOnUpdateInDEV.useActionState = function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return updateActionState(action);\n };\n HooksDispatcherOnUpdateInDEV.useOptimistic = function (\n passthrough,\n reducer\n ) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n };\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n HooksDispatcherOnRerenderInDEV.useMemoCache = useMemoCache;\n HooksDispatcherOnRerenderInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n HooksDispatcherOnRerenderInDEV.useFormState = function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return rerenderActionState(action);\n };\n HooksDispatcherOnRerenderInDEV.useActionState = function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return rerenderActionState(action);\n };\n HooksDispatcherOnRerenderInDEV.useOptimistic = function (\n passthrough,\n reducer\n ) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n };\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountId();\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n }\n };\n InvalidNestedHooksDispatcherOnMountInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n InvalidNestedHooksDispatcherOnMountInDEV.useFormState = function (\n action,\n initialState\n ) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n };\n InvalidNestedHooksDispatcherOnMountInDEV.useActionState = function (\n action,\n initialState\n ) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n };\n InvalidNestedHooksDispatcherOnMountInDEV.useOptimistic = function (\n passthrough\n ) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n }\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n InvalidNestedHooksDispatcherOnUpdateInDEV.useFormState = function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV.useActionState = function (\n action\n ) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV.useOptimistic = function (\n passthrough,\n reducer\n ) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n }\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV.useHostTransitionStatus =\n useHostTransitionStatus;\n InvalidNestedHooksDispatcherOnRerenderInDEV.useFormState = function (\n action\n ) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV.useActionState = function (\n action\n ) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV.useOptimistic = function (\n passthrough,\n reducer\n ) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n };\n var fakeInternalInstance = {};\n var didWarnAboutStateAssignmentForComponent = new Set();\n var didWarnAboutUninitializedState = new Set();\n var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n var didWarnAboutDirectlyAssigningPropsToState = new Set();\n var didWarnAboutUndefinedDerivedState = new Set();\n var didWarnAboutContextTypes$1 = new Set();\n var didWarnAboutChildContextTypes = new Set();\n var didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n Object.freeze(fakeInternalInstance);\n var classComponentUpdater = {\n isMounted: function (component) {\n var owner = current;\n if (null !== owner && isRendering && 1 === owner.tag) {\n var instance = owner.stateNode;\n instance._warnedAboutRefsInRender ||\n console.error(\n \"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.\",\n getComponentNameFromFiber(owner) || \"A component\"\n );\n instance._warnedAboutRefsInRender = !0;\n }\n return (component = component._reactInternals)\n ? getNearestMountedFiber(component) === component\n : !1;\n },\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ReplaceState;\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ForceUpdate;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markForceUpdateScheduled &&\n injectedProfilingHooks.markForceUpdateScheduled(inst, lane);\n }\n },\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n componentName = null,\n errorBoundaryName = null,\n SelectiveHydrationException = Error(\n \"This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue.\"\n ),\n didReceiveUpdate = !1;\n var didWarnAboutBadClass = {};\n var didWarnAboutContextTypeOnFunctionComponent = {};\n var didWarnAboutContextTypes = {};\n var didWarnAboutGetDerivedStateOnFunctionComponent = {};\n var didWarnAboutReassigningProps = !1;\n var didWarnAboutRevealOrder = {};\n var didWarnAboutTailOptions = {};\n var SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0\n },\n hasWarnedAboutUsingNoValuePropOnContextProvider = !1,\n valueCursor = createCursor(null);\n var rendererCursorDEV = createCursor(null);\n var rendererSigil = {};\n var currentlyRenderingFiber = null,\n lastContextDependency = null,\n isDisallowedContextReadInDEV = !1,\n UpdateState = 0,\n ReplaceState = 1,\n ForceUpdate = 2,\n CaptureUpdate = 3,\n hasForceUpdate = !1;\n var didWarnUpdateInsideUpdate = !1;\n var currentlyProcessingQueue = null;\n var didReadFromEntangledAsyncAction = !1,\n didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n var offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null,\n inProgressLanes = null,\n inProgressRoot = null,\n shouldFireAfterActiveInstanceBlur = !1,\n hostParent = null,\n hostParentIsContainer = !1,\n currentHoistableRoot = null,\n suspenseyCommitFlag = 8192;\n var hasBadMapPolyfill = !1;\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n new Map([[nonExtensibleObject, null]]);\n new Set([nonExtensibleObject]);\n } catch (e$7) {\n hasBadMapPolyfill = !0;\n }\n var DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n getOwner: function () {\n return current;\n }\n };\n if (\"function\" === typeof Symbol && Symbol.for) {\n var symbolFor = Symbol.for;\n symbolFor(\"selector.component\");\n symbolFor(\"selector.has_pseudo_class\");\n symbolFor(\"selector.role\");\n symbolFor(\"selector.test_id\");\n symbolFor(\"selector.text\");\n }\n var commitHooks = [],\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n NoContext = 0,\n RenderContext = 2,\n CommitContext = 4,\n RootInProgress = 0,\n RootFatalErrored = 1,\n RootErrored = 2,\n RootSuspended = 3,\n RootSuspendedWithDelay = 4,\n RootCompleted = 5,\n RootDidNotComplete = 6,\n executionContext = NoContext,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n NotSuspended = 0,\n SuspendedOnError = 1,\n SuspendedOnData = 2,\n SuspendedOnImmediate = 3,\n SuspendedOnInstance = 4,\n SuspendedOnInstanceAndReadyToContinue = 5,\n SuspendedOnDeprecatedThrowPromise = 6,\n SuspendedAndReadyToContinue = 7,\n SuspendedOnHydration = 8,\n workInProgressSuspendedReason = NotSuspended,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = RootInProgress,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n FALLBACK_THROTTLE_MS = 300,\n workInProgressRootRenderTargetTime = Infinity,\n RENDER_TIMEOUT_MS = 500,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n rootDoesHavePassiveEffects = !1,\n rootWithPendingPassiveEffects = null,\n pendingPassiveEffectsLanes = 0,\n pendingPassiveEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n NESTED_UPDATE_LIMIT = 50,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null,\n isFlushingPassiveEffects = !1,\n didScheduleUpdateDuringPassiveEffects = !1,\n NESTED_PASSIVE_UPDATE_LIMIT = 50,\n nestedPassiveUpdateCount = 0,\n rootWithPassiveNestedUpdates = null,\n isRunningInsertionEffect = !1,\n IMMEDIATE_COMMIT = 0,\n SUSPENDED_COMMIT = 1,\n THROTTLED_COMMIT = 2,\n didWarnStateUpdateForNotYetMountedComponent = null,\n didWarnAboutUpdateInRender = !1;\n var didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n var fakeActCallbackNode$1 = {},\n firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n didScheduleMicrotask_act = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0,\n fakeActCallbackNode = {};\n (function () {\n for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n var eventName = simpleEventPluginEvents[i],\n domEventName = eventName.toLowerCase();\n eventName = eventName[0].toUpperCase() + eventName.slice(1);\n registerSimpleEvent(domEventName, \"on\" + eventName);\n }\n registerSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\n registerSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\n registerSimpleEvent(ANIMATION_START, \"onAnimationStart\");\n registerSimpleEvent(\"dblclick\", \"onDoubleClick\");\n registerSimpleEvent(\"focusin\", \"onFocus\");\n registerSimpleEvent(\"focusout\", \"onBlur\");\n registerSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\n registerSimpleEvent(TRANSITION_START, \"onTransitionStart\");\n registerSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\n registerSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\n })();\n registerDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\n registerDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\n registerTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n ]);\n registerTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n );\n var mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n ),\n listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2),\n didWarnControlledToUncontrolled = !1,\n didWarnUncontrolledToControlled = !1,\n didWarnFormActionType = !1,\n didWarnFormActionName = !1,\n didWarnFormActionTarget = !1,\n didWarnFormActionMethod = !1,\n didWarnPopoverTargetObject = !1;\n var didWarnForNewBooleanPropsWithEmptyValue = {};\n var canDiffStyleForHydrationWarning = !0;\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g,\n xlinkNamespace = \"http://www.w3.org/1999/xlink\",\n xmlNamespace = \"http://www.w3.org/XML/1998/namespace\",\n EXPECTED_FORM_ACTION_URL =\n \"javascript:throw new Error('React form unexpectedly submitted.')\",\n SUPPRESS_HYDRATION_WARNING = \"suppressHydrationWarning\",\n SUSPENSE_START_DATA = \"$\",\n SUSPENSE_END_DATA = \"/$\",\n SUSPENSE_PENDING_START_DATA = \"$?\",\n SUSPENSE_FALLBACK_START_DATA = \"$!\",\n FORM_STATE_IS_MATCHING = \"F!\",\n FORM_STATE_IS_NOT_MATCHING = \"F\",\n STYLE = \"style\",\n HostContextNamespaceNone = 0,\n HostContextNamespaceSvg = 1,\n HostContextNamespaceMath = 2,\n eventsEnabled = null,\n selectionInformation = null,\n warnedUnknownTags = { dialog: !0, webview: !0 },\n currentPopstateTransitionEvent = null,\n scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n noTimeout = -1,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout,\n NotLoaded = 0,\n Loaded = 1,\n Errored = 2,\n Settled = 3,\n Inserted = 4,\n preloadPropsMap = new Map(),\n preconnectsSet = new Set(),\n previousDispatcher = ReactDOMSharedInternals.d;\n ReactDOMSharedInternals.d = {\n f: function () {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n },\n r: function (form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n },\n D: function (href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n },\n C: function (href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n },\n L: function (href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet\n ? void 0\n : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n )) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n },\n m: function (href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as =\n options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n },\n X: function (src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n },\n S: function (href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: NotLoaded, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = Loaded | Inserted;\n else {\n href = assign(\n {\n rel: \"stylesheet\",\n href: href,\n \"data-precedence\": precedence\n },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= Loaded;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= Errored;\n });\n state.loading |= Inserted;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n },\n M: function (src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n }\n };\n var globalDocument = \"undefined\" === typeof document ? null : document,\n tagCaches = null,\n suspendedState = null,\n LAST_PRECEDENCE = null,\n precedencesByRoot = null,\n NotPendingTransition = NotPending,\n HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: NotPendingTransition,\n _currentValue2: NotPendingTransition,\n _threadCount: 0\n },\n badgeFormat = \"%c%s%c \",\n badgeStyle =\n \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n resetStyle = \"\",\n pad = \" \",\n bind = Function.prototype.bind;\n var didWarnAboutNestedUpdates = !1;\n var overrideHookState = null,\n overrideHookStateDeletePath = null,\n overrideHookStateRenamePath = null,\n overrideProps = null,\n overridePropsDeletePath = null,\n overridePropsRenamePath = null,\n scheduleUpdate = null,\n setErrorHandler = null,\n setSuspenseHandler = null;\n overrideHookState = function (fiber, id, path, value) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateDeletePath = function (fiber, id, path) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n id = findHook(fiber, id);\n null !== id &&\n ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),\n (id.memoizedState = oldPath),\n (id.baseState = oldPath),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));\n };\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsDeletePath = function (fiber, path) {\n fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsRenamePath = function (fiber, oldPath, newPath) {\n fiber.pendingProps = copyWithRename(\n fiber.memoizedProps,\n oldPath,\n newPath\n );\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n oldPath = enqueueConcurrentRenderForLane(fiber, 2);\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);\n };\n scheduleUpdate = function (fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n };\n setErrorHandler = function (newShouldErrorImpl) {\n shouldErrorImpl = newShouldErrorImpl;\n };\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n var _enabled = !0,\n return_targetInst = null,\n hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n ),\n lastScheduledReplayQueue = null;\n ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children, JSCompiler_OptimizeArgumentsArray_p2) {\n var root = this._internalRoot;\n if (null === root) throw Error(\"Cannot update an unmounted root.\");\n \"function\" === typeof JSCompiler_OptimizeArgumentsArray_p2\n ? console.error(\n \"does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n )\n : isValidContainer(JSCompiler_OptimizeArgumentsArray_p2)\n ? console.error(\n \"You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root.\"\n )\n : \"undefined\" !== typeof JSCompiler_OptimizeArgumentsArray_p2 &&\n console.error(\n \"You passed a second argument to root.render(...) but it only accepts one argument.\"\n );\n JSCompiler_OptimizeArgumentsArray_p2 = root.current;\n var lane = requestUpdateLane(JSCompiler_OptimizeArgumentsArray_p2);\n updateContainerImpl(\n JSCompiler_OptimizeArgumentsArray_p2,\n lane,\n children,\n root,\n null,\n null\n );\n };\n ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function (JSCompiler_OptimizeArgumentsArray_p3) {\n \"function\" === typeof JSCompiler_OptimizeArgumentsArray_p3 &&\n console.error(\n \"does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n );\n JSCompiler_OptimizeArgumentsArray_p3 = this._internalRoot;\n if (null !== JSCompiler_OptimizeArgumentsArray_p3) {\n this._internalRoot = null;\n var container = JSCompiler_OptimizeArgumentsArray_p3.containerInfo;\n (executionContext & (RenderContext | CommitContext)) !== NoContext &&\n console.error(\n \"Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition.\"\n );\n updateContainerSync(\n null,\n JSCompiler_OptimizeArgumentsArray_p3,\n null,\n null\n );\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\n ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (\n target\n ) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n };\n (function () {\n var isomorphicReactPackageVersion = React.version;\n if (\"19.0.0\" !== isomorphicReactPackageVersion)\n throw Error(\n 'Incompatible React versions: The \"react\" and \"react-dom\" packages must have the exact same version. Instead got:\\n - react: ' +\n (isomorphicReactPackageVersion +\n \"\\n - react-dom: 19.0.0\\nLearn more: https://react.dev/warnings/version-mismatch\")\n );\n })();\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills\"\n );\n ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(\"Unable to find node on an unmounted component.\");\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(\n \"Argument appears to not be a ReactComponent. Keys: \" +\n componentOrElement\n );\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n };\n if (\n !(function () {\n var internals = {\n bundleType: 1,\n version: \"19.0.0\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n findFiberByHostInstance: getClosestInstanceFromNode,\n reconcilerVersion: \"19.0.0\"\n };\n internals.overrideHookState = overrideHookState;\n internals.overrideHookStateDeletePath = overrideHookStateDeletePath;\n internals.overrideHookStateRenamePath = overrideHookStateRenamePath;\n internals.overrideProps = overrideProps;\n internals.overridePropsDeletePath = overridePropsDeletePath;\n internals.overridePropsRenamePath = overridePropsRenamePath;\n internals.scheduleUpdate = scheduleUpdate;\n internals.setErrorHandler = setErrorHandler;\n internals.setSuspenseHandler = setSuspenseHandler;\n internals.scheduleRefresh = scheduleRefresh;\n internals.scheduleRoot = scheduleRoot;\n internals.setRefreshHandler = setRefreshHandler;\n internals.getCurrentFiber = getCurrentFiberForDevTools;\n internals.getLaneLabelMap = getLaneLabelMap;\n internals.injectProfilingHooks = injectProfilingHooks;\n return injectInternals(internals);\n })() &&\n canUseDOM &&\n window.top === window.self &&\n ((-1 < navigator.userAgent.indexOf(\"Chrome\") &&\n -1 === navigator.userAgent.indexOf(\"Edge\")) ||\n -1 < navigator.userAgent.indexOf(\"Firefox\"))\n ) {\n var protocol = window.location.protocol;\n /^(https?|file):$/.test(protocol) &&\n console.info(\n \"%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools\" +\n (\"file:\" === protocol\n ? \"\\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq\"\n : \"\"),\n \"font-weight:bold\"\n );\n }\n exports.createRoot = function (container, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n transitionCallbacks = null;\n null !== options &&\n void 0 !== options &&\n (options.hydrate\n ? console.warn(\n \"hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.\"\n )\n : \"object\" === typeof options &&\n null !== options &&\n options.$$typeof === REACT_ELEMENT_TYPE &&\n console.error(\n \"You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\\n\\n let root = createRoot(domContainer);\\n root.render(<App />);\"\n ),\n !0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.unstable_transitionCallbacks &&\n (transitionCallbacks = options.unstable_transitionCallbacks));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n null\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(\n 8 === container.nodeType ? container.parentNode : container\n );\n return new ReactDOMRoot(options);\n };\n exports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n void 0 === initialChildren &&\n console.error(\n \"Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)\"\n );\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n transitionCallbacks = null,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.unstable_transitionCallbacks &&\n (transitionCallbacks = options.unstable_transitionCallbacks),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n formState\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane(options);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n initialChildren.current.lanes = isStrictMode;\n markRootUpdated$1(initialChildren, isStrictMode);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n };\n exports.version = \"19.0.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ2E7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0Esd0NBQXdDLDBCQUEwQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxhQUFhO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxRQUFRO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsUUFBUTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxvQkFBb0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFdBQVc7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5REFBeUQ7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUNBQWlDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEIsa0JBQWtCLDRDQUE0QztBQUM5RCxnQkFBZ0IsZ0JBQWdCO0FBQ2hDO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDRDQUE0QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsT0FBTztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGlCQUFpQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtIQUFrSCw4QkFBOEI7QUFDaEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ05BQWdOO0FBQ2hOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtKQUFrSixpQkFBaUI7QUFDbks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSkFBa0osaUJBQWlCLG1EQUFtRCxtQkFBbUIsV0FBVywrQkFBK0I7QUFDblI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEZBQTRGLEdBQUc7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGtCQUFrQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsK0JBQStCO0FBQy9CO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHFDQUFxQztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE1BQU07QUFDOUI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGtEQUFrRDtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxvQ0FBb0M7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxpQkFBaUI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsaUJBQWlCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrREFBa0Q7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUNBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3Q0FBd0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QiwrQkFBK0I7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Qsc0JBQXNCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsYUFBYTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxpQkFBaUI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMseUNBQXlDO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlNQUFpTSxHQUFHO0FBQ3BNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNEJBQTRCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsNEJBQTRCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2QkFBNkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsNEJBQTRCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwwQkFBMEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw4QkFBOEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBNEM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsMENBQTBDLG9CQUFvQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsaUJBQWlCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVCQUF1QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLG9DQUFvQztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvQkFBb0IscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsbUJBQW1CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGlDQUFpQztBQUNwRTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx1QkFBdUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QywrQkFBK0I7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw0Q0FBNEM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBNQUEwTSxHQUFHO0FBQzdNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHNCQUFzQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELDBCQUEwQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0NBQXdDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQztBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnREFBZ0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0NBQWdDLDhFQUE4RSxpQkFBaUIsZ0JBQWdCLEdBQUcsYUFBYTtBQUM5TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELHFCQUFxQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUJBQXFCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHFCQUFxQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNkNBQTZDO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLG1DQUFtQztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsdUJBQXVCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsZ0JBQWdCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELGlCQUFpQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGtCQUFrQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsbUJBQW1CO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw4Q0FBOEM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsV0FBVztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLGdCQUFnQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlDQUFpQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2TUFBNk0sMENBQTBDLEVBQUU7QUFDelA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZLQUE2SywwQ0FBMEMsRUFBRTtBQUN6TjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxlQUFlO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGtCQUFrQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixrQ0FBa0M7QUFDN0Q7QUFDQSwyQkFBMkIsa0NBQWtDO0FBQzdEO0FBQ0E7QUFDQSwyQkFBMkIsWUFBWTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixvQ0FBb0M7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0SEFBNEgsbUJBQW1CLFdBQVcsK0JBQStCO0FBQ3pMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLFlBQVk7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsWUFBWTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVCQUF1QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSEFBa0gsOEJBQThCO0FBQ2hKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Qsb0JBQW9CO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGtCQUFrQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnREFBZ0Q7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsK0JBQStCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkhBQTZILEtBQUssYUFBYSxLQUFLO0FBQ3BKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUlBQWlJLEtBQUssYUFBYSxLQUFLO0FBQ3hKO0FBQ0E7QUFDQSwwRkFBMEYsS0FBSztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsT0FBTztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsK0JBQStCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwyQ0FBMkM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix5QkFBeUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLG9EQUFXO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyw0Q0FBTztBQUM3QixpQkFBaUIsbUJBQU8sQ0FBQyxvREFBVztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QyxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsMkJBQTJCO0FBQzNCLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLGtDQUFrQyxvQkFBb0Isb0JBQW9CO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxvQ0FBb0MseUJBQXlCLGlCQUFpQjtBQUM5RTtBQUNBLHFDQUFxQyxzQkFBc0Isa0JBQWtCO0FBQzdFO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsMkNBQTJDLG9CQUFvQixTQUFTO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELDJEQUEyRDtBQUMzRCxrREFBa0Q7QUFDbEQsaURBQWlEO0FBQ2pEO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixlQUFlO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQjtBQUNoQixvQ0FBb0MsT0FBTztBQUMzQyxzQ0FBc0MsT0FBTztBQUM3QztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixvQ0FBb0M7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrQ0FBa0M7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHFCQUFxQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixxQ0FBcUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSw2QkFBNkIsZ0VBQWdFLGVBQWUsb0NBQW9DO0FBQ2hKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtKQUErSix5QkFBeUI7QUFDeEw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUJBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzP2RhYjkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtZG9tLWNsaWVudC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGZpbmRIb29rKGZpYmVyLCBpZCkge1xuICAgICAgZm9yIChmaWJlciA9IGZpYmVyLm1lbW9pemVkU3RhdGU7IG51bGwgIT09IGZpYmVyICYmIDAgPCBpZDsgKVxuICAgICAgICAoZmliZXIgPSBmaWJlci5uZXh0KSwgaWQtLTtcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHJldHVybiB2YWx1ZTtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XSxcbiAgICAgICAgdXBkYXRlZCA9IGlzQXJyYXlJbXBsKG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcbiAgICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhSZW5hbWUob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKVxuICAgICAgICBjb25zb2xlLndhcm4oXCJjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspXG4gICAgICAgICAgaWYgKG9sZFBhdGhbaV0gIT09IG5ld1BhdGhbaV0pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XSxcbiAgICAgICAgdXBkYXRlZCA9IGlzQXJyYXlJbXBsKG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcbiAgICAgIGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGhcbiAgICAgICAgPyAoKHVwZGF0ZWRbbmV3UGF0aFtpbmRleF1dID0gdXBkYXRlZFtvbGRLZXldKSxcbiAgICAgICAgICBpc0FycmF5SW1wbCh1cGRhdGVkKVxuICAgICAgICAgICAgPyB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpXG4gICAgICAgICAgICA6IGRlbGV0ZSB1cGRhdGVkW29sZEtleV0pXG4gICAgICAgIDogKHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbChcbiAgICAgICAgICAgIG9ialtvbGRLZXldLFxuICAgICAgICAgICAgb2xkUGF0aCxcbiAgICAgICAgICAgIG5ld1BhdGgsXG4gICAgICAgICAgICBpbmRleCArIDFcbiAgICAgICAgICApKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdLFxuICAgICAgICB1cGRhdGVkID0gaXNBcnJheUltcGwob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuICAgICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaXNBcnJheUltcGwodXBkYXRlZCkgPyB1cGRhdGVkLnNwbGljZShrZXksIDEpIDogZGVsZXRlIHVwZGF0ZWRba2V5XSxcbiAgICAgICAgICB1cGRhdGVkXG4gICAgICAgICk7XG4gICAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU3VzcGVuZEltcGwoKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEVycm9ySW1wbCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlcih0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gICAgICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkludmFsaWRIb29rQWNjZXNzKCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuIFlvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3J1bGVzLW9mLWhvb2tzXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMigpIHt9XG4gICAgZnVuY3Rpb24gd2FybkZvck1pc3NpbmdLZXkoKSB7fVxuICAgIGZ1bmN0aW9uIHNldFRvU29ydGVkU3RyaW5nKHNldCkge1xuICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbihcIiwgXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVJvb3Qocm9vdCwgZWxlbWVudCkge1xuICAgICAgcm9vdC5jb250ZXh0ID09PSBlbXB0eUNvbnRleHRPYmplY3QgJiZcbiAgICAgICAgKHVwZGF0ZUNvbnRhaW5lclN5bmMoZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCksIGZsdXNoU3luY1dvcmskMSgpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZWZyZXNoKHJvb3QsIHVwZGF0ZSkge1xuICAgICAgaWYgKG51bGwgIT09IHJlc29sdmVGYW1pbHkpIHtcbiAgICAgICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcztcbiAgICAgICAgdXBkYXRlID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIHJvb3QuY3VycmVudCxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UmVmcmVzaEhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgICFub2RlIHx8XG4gICAgICAgICgxICE9PSBub2RlLm5vZGVUeXBlICYmIDkgIT09IG5vZGUubm9kZVR5cGUgJiYgMTEgIT09IG5vZGUubm9kZVR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIG1heWJlSXRlcmFibGUgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSA/IG1heWJlSXRlcmFibGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21Pd25lcihvd25lcikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCIgPT09IHR5cGVvZiBvd25lci50YWdcbiAgICAgICAgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKG93bmVyKVxuICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvd25lci5uYW1lXG4gICAgICAgICAgPyBvd25lci5uYW1lXG4gICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiBcIkNhY2hlXCI7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuUHJvdmlkZXJcIjtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICByZXR1cm4gXCJEZWh5ZHJhdGVkRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZpYmVyID0gdHlwZS5yZW5kZXIpLFxuICAgICAgICAgICAgKGZpYmVyID0gZmliZXIuZGlzcGxheU5hbWUgfHwgZmliZXIubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgICAgKFwiXCIgIT09IGZpYmVyID8gXCJGb3J3YXJkUmVmKFwiICsgZmliZXIgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBcIlJvb3RcIjtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBcIlRleHRcIjtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPyBcIlN0cmljdE1vZGVcIiA6IFwiTW9kZVwiO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiBcIk9mZnNjcmVlblwiO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgcmV0dXJuIFwiU2NvcGVcIjtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHJldHVybiBcIlRyYWNpbmdNYXJrZXJcIjtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHR5cGUgPSBmaWJlci5fZGVidWdJbmZvO1xuICAgICAgICAgIGlmIChudWxsICE9IHR5cGUpXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdHlwZS5sZW5ndGggLSAxOyAwIDw9IGk7IGktLSlcbiAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlW2ldLm5hbWUpIHJldHVybiB0eXBlW2ldLm5hbWU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyLnJldHVybilcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyLnJldHVybik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuICAgIGZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7XG4gICAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgICB3cml0YWJsZTogITBcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGlzYWJsZWREZXB0aCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gICAgICBkaXNhYmxlZERlcHRoLS07XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICB2YXIgcHJvcHMgPSB7IGNvbmZpZ3VyYWJsZTogITAsIGVudW1lcmFibGU6ICEwLCB3cml0YWJsZTogITAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkxvZyB9KSxcbiAgICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2SW5mbyB9KSxcbiAgICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2V2FybiB9KSxcbiAgICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkVycm9yIH0pLFxuICAgICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXAgfSksXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZCB9KSxcbiAgICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwRW5kIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgMCA+IGRpc2FibGVkRGVwdGggJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcImRpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBwcmVmaXgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgICAgcHJlZml4ID0gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCBcIlwiO1xuICAgICAgICAgIHN1ZmZpeCA9XG4gICAgICAgICAgICAtMSA8IHguc3RhY2suaW5kZXhPZihcIlxcbiAgICBhdFwiKVxuICAgICAgICAgICAgICA/IFwiICg8YW5vbnltb3VzPilcIlxuICAgICAgICAgICAgICA6IC0xIDwgeC5zdGFjay5pbmRleE9mKFwiQFwiKVxuICAgICAgICAgICAgICAgID8gXCJAdW5rbm93bjowOjBcIlxuICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXFxuXCIgKyBwcmVmaXggKyBuYW1lICsgc3VmZml4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgICAgIGlmICghZm4gfHwgcmVlbnRyeSkgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG4gICAgICBpZiAodm9pZCAwICE9PSBmcmFtZSkgcmV0dXJuIGZyYW1lO1xuICAgICAgcmVlbnRyeSA9ICEwO1xuICAgICAgZnJhbWUgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdm9pZCAwO1xuICAgICAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlciA9IG51bGw7XG4gICAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IG51bGw7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIFJ1bkluUm9vdEZyYW1lID0ge1xuICAgICAgICAgIERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgXCJwcm9wc1wiLCB7XG4gICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIFJlZmxlY3QgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSB4O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChGYWtlID0gZm4oKSkgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEZha2UuY2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgIEZha2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzYW1wbGUuc3RhY2spXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZSA9XG4gICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIjtcbiAgICAgICAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgIFwibmFtZVwiXG4gICAgICAgICk7XG4gICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci5jb25maWd1cmFibGUgJiZcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgICAgIHsgdmFsdWU6IFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCIgfVxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPVxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksXG4gICAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgICAgY29udHJvbFN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzFdO1xuICAgICAgICBpZiAoc2FtcGxlU3RhY2sgJiYgY29udHJvbFN0YWNrKSB7XG4gICAgICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlU3RhY2suc3BsaXQoXCJcXG5cIiksXG4gICAgICAgICAgICBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IG5hbWVQcm9wRGVzY3JpcHRvciA9IDA7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yKys7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA8IGNvbnRyb2xMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlcisrO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9PT0gc2FtcGxlTGluZXMubGVuZ3RoIHx8XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPT09IGNvbnRyb2xMaW5lcy5sZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlciAmJlxuICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJiAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlcjtcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci0tLCBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoMSAhPT0gbmFtZVByb3BEZXNjcmlwdG9yIHx8IDEgIT09IF9SdW5JblJvb3RGcmFtZSREZXRlcikge1xuICAgICAgICAgICAgICAgIGRvXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChuYW1lUHJvcERlc2NyaXB0b3ItLSxcbiAgICAgICAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyLS0sXG4gICAgICAgICAgICAgICAgICAgIDAgPiBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgbmV3IFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBmbi5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF9mcmFtZS5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgKF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKFwiPGFub255bW91cz5cIiwgZm4uZGlzcGxheU5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAocmVlbnRyeSA9ICExKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZpb3VzRGlzcGF0Y2hlciksXG4gICAgICAgICAgcmVlbmFibGVMb2dzKCksXG4gICAgICAgICAgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnJhbWUpO1xuICAgICAgfVxuICAgICAgc2FtcGxlTGluZXMgPSAoc2FtcGxlTGluZXMgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiBcIlwiKVxuICAgICAgICA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHNhbXBsZUxpbmVzKVxuICAgICAgICA6IFwiXCI7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmbiAmJiBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc2FtcGxlTGluZXMpO1xuICAgICAgcmV0dXJuIHNhbXBsZUxpbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkxhenlcIik7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VMaXN0XCIpO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmV0dXJuIChmaWJlciA9IGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSwgITEpKSwgZmliZXI7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChmaWJlciA9IGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIsICExKSksIGZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAoZmliZXIgPSBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUsICEwKSksIGZpYmVyO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBpbmZvID0gXCJcIjtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIGRlYnVnSW5mbyA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0luZm87XG4gICAgICAgICAgaWYgKGRlYnVnSW5mbylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWJ1Z0luZm8ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZGVidWdJbmZvW2ldO1xuICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVudHJ5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gaW5mbyxcbiAgICAgICAgICAgICAgICAgIGVudiA9IGVudHJ5LmVudjtcbiAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXG4gICAgICAgICAgICAgICAgICBlbnRyeS5uYW1lICsgKGVudiA/IFwiIFtcIiArIGVudiArIFwiXVwiIDogXCJcIilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGluZm8gPSBKU0NvbXBpbGVyX3RlbXBfY29uc3QgKyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIgKyB4Lm1lc3NhZ2UgKyBcIlxcblwiICsgeC5zdGFjaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgcmV0dXJuIG51bGwgIT0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lRnJvbU93bmVyKG93bmVyKSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gY3VycmVudCA/IFwiXCIgOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bldpdGhGaWJlckluREVWKGZpYmVyLCBjYWxsYmFjaywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID1cbiAgICAgICAgbnVsbCA9PT0gZmliZXIgPyBudWxsIDogZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldjtcbiAgICAgIGlzUmVuZGVyaW5nID0gITE7XG4gICAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50ID0gcHJldmlvdXNGaWJlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcInJ1bldpdGhGaWJlckluREVWIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICAgICAgdmFyIG5vZGUgPSBmaWJlcixcbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcbiAgICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIGZvciAoOyBub2RlLnJldHVybjsgKSBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmliZXIgPSBub2RlO1xuICAgICAgICBkb1xuICAgICAgICAgIChub2RlID0gZmliZXIpLFxuICAgICAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJiAobmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybiksXG4gICAgICAgICAgICAoZmliZXIgPSBub2RlLnJldHVybik7XG4gICAgICAgIHdoaWxlIChmaWJlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gMyA9PT0gbm9kZS50YWcgPyBuZWFyZXN0TW91bnRlZCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgICAgIGlmICgxMyA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgbnVsbCA9PT0gc3VzcGVuc2VTdGF0ZSAmJlxuICAgICAgICAgICgoZmliZXIgPSBmaWJlci5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT09IGZpYmVyICYmIChzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBpZiAobnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSkgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgICAgIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpXG4gICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBpZiAoIWFsdGVybmF0ZSkge1xuICAgICAgICBhbHRlcm5hdGUgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGFsdGVybmF0ZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIHJldHVybiBhbHRlcm5hdGUgIT09IGZpYmVyID8gbnVsbCA6IGZpYmVyO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgYSA9IGZpYmVyLCBiID0gYWx0ZXJuYXRlOyA7ICkge1xuICAgICAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuICAgICAgICBpZiAobnVsbCA9PT0gcGFyZW50QSkgYnJlYWs7XG4gICAgICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG4gICAgICAgIGlmIChudWxsID09PSBwYXJlbnRCKSB7XG4gICAgICAgICAgYiA9IHBhcmVudEEucmV0dXJuO1xuICAgICAgICAgIGlmIChudWxsICE9PSBiKSB7XG4gICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgICAgIGZvciAocGFyZW50QiA9IHBhcmVudEEuY2hpbGQ7IHBhcmVudEI7ICkge1xuICAgICAgICAgICAgaWYgKHBhcmVudEIgPT09IGEpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGZpYmVyO1xuICAgICAgICAgICAgaWYgKHBhcmVudEIgPT09IGIpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGFsdGVybmF0ZTtcbiAgICAgICAgICAgIHBhcmVudEIgPSBwYXJlbnRCLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSAoYSA9IHBhcmVudEEpLCAoYiA9IHBhcmVudEIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBkaWRGaW5kQ2hpbGQgPSAhMSwgX2NoaWxkID0gcGFyZW50QS5jaGlsZDsgX2NoaWxkOyApIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgICBmb3IgKF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7IF9jaGlsZDsgKSB7XG4gICAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKDMgIT09IGEudGFnKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICByZXR1cm4gYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSA/IGZpYmVyIDogYWx0ZXJuYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCAyNiA9PT0gdGFnIHx8IDI3ID09PSB0YWcgfHwgNiA9PT0gdGFnKSByZXR1cm4gbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IG5vZGUuY2hpbGQ7IG51bGwgIT09IG5vZGU7ICkge1xuICAgICAgICB0YWcgPSBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSk7XG4gICAgICAgIGlmIChudWxsICE9PSB0YWcpIHJldHVybiB0YWc7XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHsgY3VycmVudDogZGVmYXVsdFZhbHVlIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gICAgICAwID4gaW5kZXgkanNjb21wJDBcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFwiVW5leHBlY3RlZCBwb3AuXCIpXG4gICAgICAgIDogKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4JGpzY29tcCQwXSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlVuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLlwiKSxcbiAgICAgICAgICAoY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4JGpzY29tcCQwXSksXG4gICAgICAgICAgKHZhbHVlU3RhY2tbaW5kZXgkanNjb21wJDBdID0gbnVsbCksXG4gICAgICAgICAgKGZpYmVyU3RhY2tbaW5kZXgkanNjb21wJDBdID0gbnVsbCksXG4gICAgICAgICAgaW5kZXgkanNjb21wJDAtLSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgICAgIGluZGV4JGpzY29tcCQwKys7XG4gICAgICB2YWx1ZVN0YWNrW2luZGV4JGpzY29tcCQwXSA9IGN1cnNvci5jdXJyZW50O1xuICAgICAgZmliZXJTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBmaWJlcjtcbiAgICAgIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gICAgICBudWxsID09PSBjICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAgICAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBudWxsLCBmaWJlcik7XG4gICAgICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gbmV4dFJvb3RJbnN0YW5jZS5ub2RlVHlwZTtcbiAgICAgIHN3aXRjaCAobmV4dFJvb3RDb250ZXh0KSB7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBuZXh0Um9vdENvbnRleHQgPSA5ID09PSBuZXh0Um9vdENvbnRleHQgPyBcIiNkb2N1bWVudFwiIDogXCIjZnJhZ21lbnRcIjtcbiAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gKG5leHRSb290SW5zdGFuY2UgPVxuICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICA/IChuZXh0Um9vdEluc3RhbmNlID0gbmV4dFJvb3RJbnN0YW5jZS5uYW1lc3BhY2VVUkkpXG4gICAgICAgICAgICAgID8gZ2V0T3duSG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSlcbiAgICAgICAgICAgICAgOiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmVcbiAgICAgICAgICAgIDogSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgobmV4dFJvb3RJbnN0YW5jZSA9XG4gICAgICAgICAgICAgIDggPT09IG5leHRSb290Q29udGV4dFxuICAgICAgICAgICAgICAgID8gbmV4dFJvb3RJbnN0YW5jZS5wYXJlbnROb2RlXG4gICAgICAgICAgICAgICAgOiBuZXh0Um9vdEluc3RhbmNlKSxcbiAgICAgICAgICAgIChuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdEluc3RhbmNlLnRhZ05hbWUpLFxuICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBuZXh0Um9vdEluc3RhbmNlLm5hbWVzcGFjZVVSSSkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBnZXRPd25Ib3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKSksXG4gICAgICAgICAgICAgIChuZXh0Um9vdEluc3RhbmNlID0gZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QoXG4gICAgICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBuZXh0Um9vdENvbnRleHRcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChuZXh0Um9vdENvbnRleHQpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdENvbnRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIG5leHRSb290Q29udGV4dCA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYobnVsbCwgbmV4dFJvb3RDb250ZXh0KTtcbiAgICAgIG5leHRSb290Q29udGV4dCA9IHtcbiAgICAgICAgY29udGV4dDogbmV4dFJvb3RJbnN0YW5jZSxcbiAgICAgICAgYW5jZXN0b3JJbmZvOiBuZXh0Um9vdENvbnRleHRcbiAgICAgIH07XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICAgICAgbnVsbCAhPT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBwdXNoKGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChjb250ZXh0LmNvbnRleHQsIHR5cGUpO1xuICAgICAgdHlwZSA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYoY29udGV4dC5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgbmV4dENvbnRleHQgPSB7IGNvbnRleHQ6IG5leHRDb250ZXh0LCBhbmNlc3RvckluZm86IHR5cGUgfTtcbiAgICAgIGNvbnRleHQgIT09IG5leHRDb250ZXh0ICYmXG4gICAgICAgIChwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpLFxuICAgICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dENvbnRleHQsIGZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gICAgICBjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ID09PSBmaWJlciAmJlxuICAgICAgICAocG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpLCBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKSk7XG4gICAgICBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgICAgIChwb3AoaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciwgZmliZXIpLFxuICAgICAgICAoSG9zdFRyYW5zaXRpb25Db250ZXh0Ll9jdXJyZW50VmFsdWUgPSBOb3RQZW5kaW5nVHJhbnNpdGlvbikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgXCJPYmplY3RcIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpLCAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGAlc2AgYXR0cmlidXRlIGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gICAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBwcm92aWRlZCBgJXNgIENTUyBwcm9wZXJ0eSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgdHlwZU5hbWUodmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJGb3JtIGZpZWxkIHZhbHVlcyAodmFsdWUsIGNoZWNrZWQsIGRlZmF1bHRWYWx1ZSwgb3IgZGVmYXVsdENoZWNrZWQgcHJvcHMpIG11c3QgYmUgc3RyaW5ncywgbm90ICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykgcmV0dXJuICExO1xuICAgICAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gICAgICBpZiAoaG9vay5pc0Rpc2FibGVkKSByZXR1cm4gITA7XG4gICAgICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtZGV2dG9vbHNcIlxuICAgICAgICAgICksXG4gICAgICAgICAgITBcbiAgICAgICAgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIChyZW5kZXJlcklEID0gaG9vay5pbmplY3QoaW50ZXJuYWxzKSksIChpbmplY3RlZEhvb2sgPSBob29rKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy5cIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBob29rLmNoZWNrRENFID8gITAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Db21taXRSb290JDEocm9vdCwgZXZlbnRQcmlvcml0eSkge1xuICAgICAgaWYgKGluamVjdGVkSG9vayAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGRpZEVycm9yID0gMTI4ID09PSAocm9vdC5jdXJyZW50LmZsYWdzICYgMTI4KTtcbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICAgICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVmYXVsdEV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIElkbGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChcbiAgICAgICAgICAgIHJlbmRlcmVySUQsXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHksXG4gICAgICAgICAgICBkaWRFcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAoKGhhc0xvZ2dlZEVycm9yID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMobmV3SXNTdHJpY3RNb2RlKSB7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsb2ckMSAmJlxuICAgICAgICB1bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZShuZXdJc1N0cmljdE1vZGUpO1xuICAgICAgaWYgKGluamVjdGVkSG9vayAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2suc2V0U3RyaWN0TW9kZSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2suc2V0U3RyaWN0TW9kZShyZW5kZXJlcklELCBuZXdJc1N0cmljdE1vZGUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluamVjdFByb2ZpbGluZ0hvb2tzKHByb2ZpbGluZ0hvb2tzKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzID0gcHJvZmlsaW5nSG9va3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtDb21taXRTdG9wcGVkKCkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdG9wcGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQoZmliZXIpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RhcnRlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JlbmRlclN0b3BwZWQoKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0b3BwZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RvcHBlZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbHozMkZhbGxiYWNrKHgpIHtcbiAgICAgIHggPj4+PSAwO1xuICAgICAgcmV0dXJuIDAgPT09IHggPyAzMiA6ICgzMSAtICgobG9nKHgpIC8gTE4yKSB8IDApKSB8IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExhYmVsRm9yTGFuZShsYW5lKSB7XG4gICAgICBpZiAobGFuZSAmIDEpIHJldHVybiBcIlN5bmNIeWRyYXRpb25MYW5lXCI7XG4gICAgICBpZiAobGFuZSAmIDIpIHJldHVybiBcIlN5bmNcIjtcbiAgICAgIGlmIChsYW5lICYgNCkgcmV0dXJuIFwiSW5wdXRDb250aW51b3VzSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDgpIHJldHVybiBcIklucHV0Q29udGludW91c1wiO1xuICAgICAgaWYgKGxhbmUgJiAxNikgcmV0dXJuIFwiRGVmYXVsdEh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiAzMikgcmV0dXJuIFwiRGVmYXVsdFwiO1xuICAgICAgaWYgKGxhbmUgJiA2NCkgcmV0dXJuIFwiVHJhbnNpdGlvbkh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiA0MTk0MTc2KSByZXR1cm4gXCJUcmFuc2l0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDYyOTE0NTYwKSByZXR1cm4gXCJSZXRyeVwiO1xuICAgICAgaWYgKGxhbmUgJiA2NzEwODg2NCkgcmV0dXJuIFwiU2VsZWN0aXZlSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDEzNDIxNzcyOCkgcmV0dXJuIFwiSWRsZUh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiAyNjg0MzU0NTYpIHJldHVybiBcIklkbGVcIjtcbiAgICAgIGlmIChsYW5lICYgNTM2ODcwOTEyKSByZXR1cm4gXCJPZmZzY3JlZW5cIjtcbiAgICAgIGlmIChsYW5lICYgMTA3Mzc0MTgyNCkgcmV0dXJuIFwiRGVmZXJyZWRcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgICAgIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiA0MjtcbiAgICAgIGlmICgwICE9PSBwZW5kaW5nU3luY0xhbmVzKSByZXR1cm4gcGVuZGluZ1N5bmNMYW5lcztcbiAgICAgIHN3aXRjaCAobGFuZXMgJiAtbGFuZXMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgIGNhc2UgNTEyOlxuICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgIGNhc2UgMTYzODQ6XG4gICAgICAgIGNhc2UgMzI3Njg6XG4gICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgIGNhc2UgMTMxMDcyOlxuICAgICAgICBjYXNlIDI2MjE0NDpcbiAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgIGNhc2UgMTA0ODU3NjpcbiAgICAgICAgY2FzZSAyMDk3MTUyOlxuICAgICAgICAgIHJldHVybiBsYW5lcyAmIDQxOTQxNzY7XG4gICAgICAgIGNhc2UgNDE5NDMwNDpcbiAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICBjYXNlIDE2Nzc3MjE2OlxuICAgICAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgICAgIHJldHVybiBsYW5lcyAmIDYyOTE0NTYwO1xuICAgICAgICBjYXNlIDY3MTA4ODY0OlxuICAgICAgICAgIHJldHVybiA2NzEwODg2NDtcbiAgICAgICAgY2FzZSAxMzQyMTc3Mjg6XG4gICAgICAgICAgcmV0dXJuIDEzNDIxNzcyODtcbiAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgICAgcmV0dXJuIDI2ODQzNTQ1NjtcbiAgICAgICAgY2FzZSA1MzY4NzA5MTI6XG4gICAgICAgICAgcmV0dXJuIDUzNjg3MDkxMjtcbiAgICAgICAgY2FzZSAxMDczNzQxODI0OlxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlNob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgICAgIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgIGlmICgwID09PSBwZW5kaW5nTGFuZXMpIHJldHVybiAwO1xuICAgICAgdmFyIG5leHRMYW5lcyA9IDAsXG4gICAgICAgIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzLFxuICAgICAgICB3YXJtTGFuZXMgPSByb290Lndhcm1MYW5lcztcbiAgICAgIHJvb3QgPSAwICE9PSByb290LmZpbmlzaGVkTGFuZXM7XG4gICAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIDEzNDIxNzcyNztcbiAgICAgIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICAgICAgPyAoKHBlbmRpbmdMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXMpLFxuICAgICAgICAgIDAgIT09IHBlbmRpbmdMYW5lc1xuICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgICAgIDogKChwaW5nZWRMYW5lcyAmPSBub25JZGxlUGVuZGluZ0xhbmVzKSxcbiAgICAgICAgICAgICAgMCAhPT0gcGluZ2VkTGFuZXNcbiAgICAgICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICAgICAgOiByb290IHx8XG4gICAgICAgICAgICAgICAgICAoKHdhcm1MYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+d2FybUxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIDAgIT09IHdhcm1MYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgICAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2FybUxhbmVzKSkpKSlcbiAgICAgICAgOiAoKG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXMpLFxuICAgICAgICAgIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQZW5kaW5nTGFuZXMpKVxuICAgICAgICAgICAgOiAwICE9PSBwaW5nZWRMYW5lc1xuICAgICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICAgIDogcm9vdCB8fFxuICAgICAgICAgICAgICAgICgod2FybUxhbmVzID0gcGVuZGluZ0xhbmVzICYgfndhcm1MYW5lcyksXG4gICAgICAgICAgICAgICAgMCAhPT0gd2FybUxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2FybUxhbmVzKSkpKTtcbiAgICAgIHJldHVybiAwID09PSBuZXh0TGFuZXNcbiAgICAgICAgPyAwXG4gICAgICAgIDogMCAhPT0gd2lwTGFuZXMgJiZcbiAgICAgICAgICAgIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiZcbiAgICAgICAgICAgIDAgPT09ICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSAmJlxuICAgICAgICAgICAgKChzdXNwZW5kZWRMYW5lcyA9IG5leHRMYW5lcyAmIC1uZXh0TGFuZXMpLFxuICAgICAgICAgICAgKHdhcm1MYW5lcyA9IHdpcExhbmVzICYgLXdpcExhbmVzKSxcbiAgICAgICAgICAgIHN1c3BlbmRlZExhbmVzID49IHdhcm1MYW5lcyB8fFxuICAgICAgICAgICAgICAoMzIgPT09IHN1c3BlbmRlZExhbmVzICYmIDAgIT09ICh3YXJtTGFuZXMgJiA0MTk0MTc2KSkpXG4gICAgICAgICAgPyB3aXBMYW5lc1xuICAgICAgICAgIDogbmV4dExhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QsIHJlbmRlckxhbmVzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAwID09PVxuICAgICAgICAocm9vdC5wZW5kaW5nTGFuZXMgJlxuICAgICAgICAgIH4ocm9vdC5zdXNwZW5kZWRMYW5lcyAmIH5yb290LnBpbmdlZExhbmVzKSAmXG4gICAgICAgICAgcmVuZGVyTGFuZXMpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgICAgIHN3aXRjaCAobGFuZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICBjYXNlIDMyOlxuICAgICAgICBjYXNlIDY0OlxuICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgIGNhc2UgNTEyOlxuICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgIGNhc2UgMTYzODQ6XG4gICAgICAgIGNhc2UgMzI3Njg6XG4gICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgIGNhc2UgMTMxMDcyOlxuICAgICAgICBjYXNlIDI2MjE0NDpcbiAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgIGNhc2UgMTA0ODU3NjpcbiAgICAgICAgY2FzZSAyMDk3MTUyOlxuICAgICAgICAgIHJldHVybiBjdXJyZW50VGltZSArIDVlMztcbiAgICAgICAgY2FzZSA0MTk0MzA0OlxuICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBjYXNlIDY3MTA4ODY0OlxuICAgICAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgIGNhc2UgNTM2ODcwOTEyOlxuICAgICAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlNob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgLTFcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpIHtcbiAgICAgIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICAgICAgbmV4dFRyYW5zaXRpb25MYW5lIDw8PSAxO1xuICAgICAgMCA9PT0gKG5leHRUcmFuc2l0aW9uTGFuZSAmIDQxOTQxNzYpICYmIChuZXh0VHJhbnNpdGlvbkxhbmUgPSAxMjgpO1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsYWltTmV4dFJldHJ5TGFuZSgpIHtcbiAgICAgIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgICAgIG5leHRSZXRyeUxhbmUgPDw9IDE7XG4gICAgICAwID09PSAobmV4dFJldHJ5TGFuZSAmIDYyOTE0NTYwKSAmJiAobmV4dFJldHJ5TGFuZSA9IDQxOTQzMDQpO1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAgICAgZm9yICh2YXIgbGFuZU1hcCA9IFtdLCBpID0gMDsgMzEgPiBpOyBpKyspIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgICAgIHJldHVybiBsYW5lTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQkMShyb290LCB1cGRhdGVMYW5lKSB7XG4gICAgICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lO1xuICAgICAgMjY4NDM1NDU2ICE9PSB1cGRhdGVMYW5lICYmXG4gICAgICAgICgocm9vdC5zdXNwZW5kZWRMYW5lcyA9IDApLFxuICAgICAgICAocm9vdC5waW5nZWRMYW5lcyA9IDApLFxuICAgICAgICAocm9vdC53YXJtTGFuZXMgPSAwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQoXG4gICAgICByb290LFxuICAgICAgZmluaXNoZWRMYW5lcyxcbiAgICAgIHJlbWFpbmluZ0xhbmVzLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldmlvdXNseVBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICAgICAgcm9vdC5waW5nZWRMYW5lcyA9IDA7XG4gICAgICByb290Lndhcm1MYW5lcyA9IDA7XG4gICAgICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzLFxuICAgICAgICBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcyxcbiAgICAgICAgaGlkZGVuVXBkYXRlcyA9IHJvb3QuaGlkZGVuVXBkYXRlcztcbiAgICAgIGZvciAoXG4gICAgICAgIHJlbWFpbmluZ0xhbmVzID0gcHJldmlvdXNseVBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgICAgICAgMCA8IHJlbWFpbmluZ0xhbmVzO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihyZW1haW5pbmdMYW5lcyksXG4gICAgICAgICAgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gMDtcbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IC0xO1xuICAgICAgICB2YXIgaGlkZGVuVXBkYXRlc0ZvckxhbmUgPSBoaWRkZW5VcGRhdGVzW2luZGV4XTtcbiAgICAgICAgaWYgKG51bGwgIT09IGhpZGRlblVwZGF0ZXNGb3JMYW5lKVxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBoaWRkZW5VcGRhdGVzW2luZGV4XSA9IG51bGwsIGluZGV4ID0gMDtcbiAgICAgICAgICAgIGluZGV4IDwgaGlkZGVuVXBkYXRlc0ZvckxhbmUubGVuZ3RoO1xuICAgICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGhpZGRlblVwZGF0ZXNGb3JMYW5lW2luZGV4XTtcbiAgICAgICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJiAodXBkYXRlLmxhbmUgJj0gLTUzNjg3MDkxMyk7XG4gICAgICAgICAgfVxuICAgICAgICByZW1haW5pbmdMYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICAgIDAgIT09IHNwYXduZWRMYW5lICYmIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKHJvb3QsIHNwYXduZWRMYW5lLCAwKTtcbiAgICAgIDAgIT09IHN1c3BlbmRlZFJldHJ5TGFuZXMgJiZcbiAgICAgICAgMCA9PT0gdXBkYXRlZExhbmVzICYmXG4gICAgICAgIDAgIT09IHJvb3QudGFnICYmXG4gICAgICAgIChyb290LnN1c3BlbmRlZExhbmVzIHw9XG4gICAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyAmIH4ocHJldmlvdXNseVBlbmRpbmdMYW5lcyAmIH5maW5pc2hlZExhbmVzKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKHJvb3QsIHNwYXduZWRMYW5lLCBlbnRhbmdsZWRMYW5lcykge1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gc3Bhd25lZExhbmU7XG4gICAgICByb290LnN1c3BlbmRlZExhbmVzICY9IH5zcGF3bmVkTGFuZTtcbiAgICAgIHZhciBzcGF3bmVkTGFuZUluZGV4ID0gMzEgLSBjbHozMihzcGF3bmVkTGFuZSk7XG4gICAgICByb290LmVudGFuZ2xlZExhbmVzIHw9IHNwYXduZWRMYW5lO1xuICAgICAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdID1cbiAgICAgICAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdIHxcbiAgICAgICAgMTA3Mzc0MTgyNCB8XG4gICAgICAgIChlbnRhbmdsZWRMYW5lcyAmIDQxOTQyMTgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICAgICAgdmFyIHJvb3RFbnRhbmdsZWRMYW5lcyA9IChyb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgICAgIGZvciAocm9vdCA9IHJvb3QuZW50YW5nbGVtZW50czsgcm9vdEVudGFuZ2xlZExhbmVzOyApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihyb290RW50YW5nbGVkTGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICAobGFuZSAmIGVudGFuZ2xlZExhbmVzKSB8IChyb290W2luZGV4XSAmIGVudGFuZ2xlZExhbmVzKSAmJlxuICAgICAgICAgIChyb290W2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgICAgIHJvb3RFbnRhbmdsZWRMYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lcykge1xuICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KVxuICAgICAgICBmb3IgKHJvb3QgPSByb290LnBlbmRpbmdVcGRhdGVyc0xhbmVNYXA7IDAgPCBsYW5lczsgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyksXG4gICAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgICByb290W2luZGV4XS5hZGQoZmliZXIpO1xuICAgICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcykge1xuICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gcm9vdC5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwLFxuICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbGFuZXM7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyk7XG4gICAgICAgICAgcm9vdCA9IDEgPDwgaW5kZXg7XG4gICAgICAgICAgaW5kZXggPSBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwW2luZGV4XTtcbiAgICAgICAgICAwIDwgaW5kZXguc2l6ZSAmJlxuICAgICAgICAgICAgKGluZGV4LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgbWVtb2l6ZWRVcGRhdGVycy5oYXMoYWx0ZXJuYXRlKSkgfHxcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmFkZChmaWJlcik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluZGV4LmNsZWFyKCkpO1xuICAgICAgICAgIGxhbmVzICY9IH5yb290O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKSB7XG4gICAgICBsYW5lcyAmPSAtbGFuZXM7XG4gICAgICByZXR1cm4gMCAhPT0gRGlzY3JldGVFdmVudFByaW9yaXR5ICYmIERpc2NyZXRlRXZlbnRQcmlvcml0eSA8IGxhbmVzXG4gICAgICAgID8gMCAhPT0gQ29udGludW91c0V2ZW50UHJpb3JpdHkgJiYgQ29udGludW91c0V2ZW50UHJpb3JpdHkgPCBsYW5lc1xuICAgICAgICAgID8gMCAhPT0gKGxhbmVzICYgMTM0MjE3NzI3KVxuICAgICAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICAgICAgOiBJZGxlRXZlbnRQcmlvcml0eVxuICAgICAgICAgIDogQ29udGludW91c0V2ZW50UHJpb3JpdHlcbiAgICAgICAgOiBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVVcGRhdGVQcmlvcml0eSgpIHtcbiAgICAgIHZhciB1cGRhdGVQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICBpZiAoMCAhPT0gdXBkYXRlUHJpb3JpdHkpIHJldHVybiB1cGRhdGVQcmlvcml0eTtcbiAgICAgIHVwZGF0ZVByaW9yaXR5ID0gd2luZG93LmV2ZW50O1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gdXBkYXRlUHJpb3JpdHlcbiAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICA6IGdldEV2ZW50UHJpb3JpdHkodXBkYXRlUHJpb3JpdHkudHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eShwcmlvcml0eSwgZm4pIHtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByaW9yaXR5KSwgZm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRhY2hEZWxldGVkSW5zdGFuY2Uobm9kZSkge1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbFByb3BzS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlc1NldEtleV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgICAgIHZhciB0YXJnZXRJbnN0ID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcbiAgICAgIGlmICh0YXJnZXRJbnN0KSByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICAgIGZvciAodmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7IHBhcmVudE5vZGU7ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldEluc3QgPVxuICAgICAgICAgICAgcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fFxuICAgICAgICAgICAgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50Tm9kZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgIT09IHRhcmdldEluc3QuY2hpbGQgfHxcbiAgICAgICAgICAgIChudWxsICE9PSBwYXJlbnROb2RlICYmIG51bGwgIT09IHBhcmVudE5vZGUuY2hpbGQpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgIG51bGwgIT09IHRhcmdldE5vZGU7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoKHBhcmVudE5vZGUgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChub2RlID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldKVxuICAgICAgKSB7XG4gICAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDUgPT09IHRhZyB8fFxuICAgICAgICAgIDYgPT09IHRhZyB8fFxuICAgICAgICAgIDEzID09PSB0YWcgfHxcbiAgICAgICAgICAyNiA9PT0gdGFnIHx8XG4gICAgICAgICAgMjcgPT09IHRhZyB8fFxuICAgICAgICAgIDMgPT09IHRhZ1xuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSB7XG4gICAgICB2YXIgdGFnID0gaW5zdC50YWc7XG4gICAgICBpZiAoNSA9PT0gdGFnIHx8IDI2ID09PSB0YWcgfHwgMjcgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZTtcbiAgICAgIHRocm93IEVycm9yKFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJlc291cmNlc0Zyb21Sb290KHJvb3QpIHtcbiAgICAgIHZhciByZXNvdXJjZXMgPSByb290W2ludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXldO1xuICAgICAgcmVzb3VyY2VzIHx8XG4gICAgICAgIChyZXNvdXJjZXMgPSByb290W2ludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXldID1cbiAgICAgICAgICB7IGhvaXN0YWJsZVN0eWxlczogbmV3IE1hcCgpLCBob2lzdGFibGVTY3JpcHRzOiBuZXcgTWFwKCkgfSk7XG4gICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrTm9kZUFzSG9pc3RhYmxlKG5vZGUpIHtcbiAgICAgIG5vZGVbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdID0gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArIFwiQ2FwdHVyZVwiLCBkZXBlbmRlbmNpZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXZlbnRSZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgcmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuXCIsXG4gICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZVxuICAgICAgICApO1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcbiAgICAgIFwib25Eb3VibGVDbGlja1wiID09PSByZWdpc3RyYXRpb25OYW1lICYmXG4gICAgICAgIChwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIGZvciAoXG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgPSAwO1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSsrXG4gICAgICApXG4gICAgICAgIGFsbE5hdGl2ZUV2ZW50cy5hZGQoZGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICAgICAgaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fFxuICAgICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICBwcm9wcy5vbklucHV0IHx8XG4gICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgIHByb3BzLmRpc2FibGVkIHx8XG4gICAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgKFwic2VsZWN0XCIgPT09IHRhZ05hbWVcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuIGBvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgdGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCBzZXQgYG9uQ2hhbmdlYC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLlwiXG4gICAgICAgICAgICApKTtcbiAgICAgIHByb3BzLm9uQ2hhbmdlIHx8XG4gICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgIHByb3BzLmRpc2FibGVkIHx8XG4gICAgICAgIG51bGwgPT0gcHJvcHMuY2hlY2tlZCB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpXG4gICAgICAgIHJldHVybiAodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gITApO1xuICAgICAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9ICEwO1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2BcIiwgYXR0cmlidXRlTmFtZSk7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRm9yQXR0cmlidXRlT25DdXN0b21Db21wb25lbnQobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAgICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBleHBlY3RlZCkge1xuICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgaWYgKCExID09PSBleHBlY3RlZCkgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBleHBlY3RlZCA/IHZvaWQgMCA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgICAgICBpZiAoXCJcIiA9PT0gbm9kZSAmJiAhMCA9PT0gZXhwZWN0ZWQpIHJldHVybiAhMDtcbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihleHBlY3RlZCwgbmFtZSk7XG4gICAgICAgIHJldHVybiBub2RlID09PSBcIlwiICsgZXhwZWN0ZWQgPyBleHBlY3RlZCA6IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yQXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSlcbiAgICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICAgICAgaWYgKFwiZGF0YS1cIiAhPT0gcHJlZml4ICYmIFwiYXJpYS1cIiAhPT0gcHJlZml4KSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBcIlwiICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUobm9kZSwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgXCJcIiArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIHJldHVybiBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpLCB2YWx1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICAgICAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZWxlbSA9IGVsZW0ubm9kZU5hbWUpICYmXG4gICAgICAgIFwiaW5wdXRcIiA9PT0gZWxlbS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgIChcImNoZWNrYm94XCIgPT09IHR5cGUgfHwgXCJyYWRpb1wiID09PSB0eXBlKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gICAgICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5vZGUpID8gXCJjaGVja2VkXCIgOiBcInZhbHVlXCIsXG4gICAgICAgIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICAgICAgIHZhbHVlRmllbGRcbiAgICAgICAgKTtcbiAgICAgIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbihub2RlW3ZhbHVlRmllbGRdKTtcbiAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBcIlwiICsgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgIW5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgJiZcbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRlc2NyaXB0b3IgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGVzY3JpcHRvci5nZXQgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGVzY3JpcHRvci5zZXRcbiAgICAgICkge1xuICAgICAgICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gXCJcIiArIHZhbHVlO1xuICAgICAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IFwiXCIgKyB2YWx1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICAgICAgbm9kZS5fdmFsdWVUcmFja2VyIHx8IChub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm4gITE7XG4gICAgICB2YXIgdHJhY2tlciA9IG5vZGUuX3ZhbHVlVHJhY2tlcjtcbiAgICAgIGlmICghdHJhY2tlcikgcmV0dXJuICEwO1xuICAgICAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgICAgIHZhciB2YWx1ZSA9IFwiXCI7XG4gICAgICBub2RlICYmXG4gICAgICAgICh2YWx1ZSA9IGlzQ2hlY2thYmxlKG5vZGUpXG4gICAgICAgICAgPyBub2RlLmNoZWNrZWRcbiAgICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICAgIDogXCJmYWxzZVwiXG4gICAgICAgICAgOiBub2RlLnZhbHVlKTtcbiAgICAgIG5vZGUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiBub2RlICE9PSBsYXN0VmFsdWUgPyAodHJhY2tlci5zZXRWYWx1ZShub2RlKSwgITApIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gICAgICBkb2MgPSBkb2MgfHwgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBkb2N1bWVudCA/IGRvY3VtZW50IDogdm9pZCAwKTtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgZG9jKSByZXR1cm4gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5ib2R5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShcbiAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlc1JlZ2V4LFxuICAgICAgICBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSArIFwiIFwiO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMuY2hlY2tlZCB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRDaGVja2VkIHx8XG4gICAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90IGJvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIixcbiAgICAgICAgICBwcm9wcy50eXBlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gITApKTtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgdm9pZCAwID09PSBwcm9wcy5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzXCIsXG4gICAgICAgICAgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCBcIkEgY29tcG9uZW50XCIsXG4gICAgICAgICAgcHJvcHMudHlwZVxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVJbnB1dChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGxhc3REZWZhdWx0VmFsdWUsXG4gICAgICBjaGVja2VkLFxuICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICB0eXBlLFxuICAgICAgbmFtZVxuICAgICkge1xuICAgICAgZWxlbWVudC5uYW1lID0gXCJcIjtcbiAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZVxuICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHR5cGUsIFwidHlwZVwiKSwgKGVsZW1lbnQudHlwZSA9IHR5cGUpKVxuICAgICAgICA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICAgIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZSkge1xuICAgICAgICAgIGlmICgoMCA9PT0gdmFsdWUgJiYgXCJcIiA9PT0gZWxlbWVudC52YWx1ZSkgfHwgZWxlbWVudC52YWx1ZSAhPSB2YWx1ZSlcbiAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGVsZW1lbnQudmFsdWUgIT09IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpO1xuICAgICAgZWxzZVxuICAgICAgICAoXCJzdWJtaXRcIiAhPT0gdHlwZSAmJiBcInJlc2V0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgIG51bGwgIT0gdmFsdWVcbiAgICAgICAgPyBzZXREZWZhdWx0VmFsdWUoZWxlbWVudCwgdHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpXG4gICAgICAgIDogbnVsbCAhPSBkZWZhdWx0VmFsdWVcbiAgICAgICAgICA/IHNldERlZmF1bHRWYWx1ZShlbGVtZW50LCB0eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkpXG4gICAgICAgICAgOiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgIG51bGwgPT0gY2hlY2tlZCAmJlxuICAgICAgICBudWxsICE9IGRlZmF1bHRDaGVja2VkICYmXG4gICAgICAgIChlbGVtZW50LmRlZmF1bHRDaGVja2VkID0gISFkZWZhdWx0Q2hlY2tlZCk7XG4gICAgICBudWxsICE9IGNoZWNrZWQgJiZcbiAgICAgICAgKGVsZW1lbnQuY2hlY2tlZCA9XG4gICAgICAgICAgY2hlY2tlZCAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNoZWNrZWQgJiZcbiAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgY2hlY2tlZCk7XG4gICAgICBudWxsICE9IG5hbWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICBcImJvb2xlYW5cIiAhPT0gdHlwZW9mIG5hbWVcbiAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCBcIm5hbWVcIiksXG4gICAgICAgICAgKGVsZW1lbnQubmFtZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKG5hbWUpKSlcbiAgICAgICAgOiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRJbnB1dChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lLFxuICAgICAgaXNIeWRyYXRpbmdcbiAgICApIHtcbiAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih0eXBlLCBcInR5cGVcIiksIChlbGVtZW50LnR5cGUgPSB0eXBlKSk7XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSB8fCBudWxsICE9IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIChcInN1Ym1pdFwiICE9PSB0eXBlICYmIFwicmVzZXRcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgICAgICh2b2lkIDAgIT09IHZhbHVlICYmIG51bGwgIT09IHZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdFZhbHVlID1cbiAgICAgICAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xuICAgICAgICB2YWx1ZSA9IG51bGwgIT0gdmFsdWUgPyBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIGlzSHlkcmF0aW5nIHx8IHZhbHVlID09PSBlbGVtZW50LnZhbHVlIHx8IChlbGVtZW50LnZhbHVlID0gdmFsdWUpO1xuICAgICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgY2hlY2tlZCA9IG51bGwgIT0gY2hlY2tlZCA/IGNoZWNrZWQgOiBkZWZhdWx0Q2hlY2tlZDtcbiAgICAgIGNoZWNrZWQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjaGVja2VkICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkICYmXG4gICAgICAgICEhY2hlY2tlZDtcbiAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGlzSHlkcmF0aW5nID8gZWxlbWVudC5jaGVja2VkIDogISFjaGVja2VkO1xuICAgICAgZWxlbWVudC5kZWZhdWx0Q2hlY2tlZCA9ICEhY2hlY2tlZDtcbiAgICAgIG51bGwgIT0gbmFtZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCBcIm5hbWVcIiksIChlbGVtZW50Lm5hbWUgPSBuYW1lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGUgJiYgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpID09PSBub2RlKSB8fFxuICAgICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIiArIHZhbHVlIHx8XG4gICAgICAgIChub2RlLmRlZmF1bHRWYWx1ZSA9IFwiXCIgKyB2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgJiZcbiAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiAmJiBudWxsICE9PSBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgID8gUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgIG51bGwgPT0gY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkIHx8XG4gICAgICAgICAgICAgICAgKChkaWRXYXJuSW52YWxpZENoaWxkID0gITApLFxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCBpbmZlciB0aGUgb3B0aW9uIHZhbHVlIG9mIGNvbXBsZXggY2hpbGRyZW4uIFBhc3MgYSBgdmFsdWVgIHByb3Agb3IgdXNlIGEgcGxhaW4gc3RyaW5nIGFzIGNoaWxkcmVuIHRvIDxvcHRpb24+LlwiXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbCA9PSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCB8fFxuICAgICAgICAgICAgZGlkV2FybkludmFsaWRJbm5lckhUTUwgfHxcbiAgICAgICAgICAgICgoZGlkV2FybkludmFsaWRJbm5lckhUTUwgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlBhc3MgYSBgdmFsdWVgIHByb3AgaWYgeW91IHNldCBkYW5nZXJvdXNseUlubmVySFRNTCBzbyBSZWFjdCBrbm93cyB3aGljaCB2YWx1ZSBzaG91bGQgYmUgc2VsZWN0ZWQuXCJcbiAgICAgICAgICAgICkpKTtcbiAgICAgIG51bGwgPT0gcHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiBzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uXCJcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG4gICAgICByZXR1cm4gb3duZXJOYW1lXG4gICAgICAgID8gXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBvd25lck5hbWUgKyBcImAuXCJcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgbm9kZSA9IG5vZGUub3B0aW9ucztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBtdWx0aXBsZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICBtdWx0aXBsZVtcIiRcIiArIHByb3BWYWx1ZVtpXV0gPSAhMDtcbiAgICAgICAgZm9yIChwcm9wVmFsdWUgPSAwOyBwcm9wVmFsdWUgPCBub2RlLmxlbmd0aDsgcHJvcFZhbHVlKyspXG4gICAgICAgICAgKGkgPSBtdWx0aXBsZS5oYXNPd25Qcm9wZXJ0eShcIiRcIiArIG5vZGVbcHJvcFZhbHVlXS52YWx1ZSkpLFxuICAgICAgICAgICAgbm9kZVtwcm9wVmFsdWVdLnNlbGVjdGVkICE9PSBpICYmIChub2RlW3Byb3BWYWx1ZV0uc2VsZWN0ZWQgPSBpKSxcbiAgICAgICAgICAgIGkgJiYgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW3Byb3BWYWx1ZV0uZGVmYXVsdFNlbGVjdGVkID0gITApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcFZhbHVlID0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKTtcbiAgICAgICAgbXVsdGlwbGUgPSBudWxsO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChub2RlW2ldLnZhbHVlID09PSBwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIG5vZGVbaV0uc2VsZWN0ZWQgPSAhMDtcbiAgICAgICAgICAgIHNldERlZmF1bHRTZWxlY3RlZCAmJiAobm9kZVtpXS5kZWZhdWx0U2VsZWN0ZWQgPSAhMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IG11bHRpcGxlIHx8IG5vZGVbaV0uZGlzYWJsZWQgfHwgKG11bHRpcGxlID0gbm9kZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCAhPT0gbXVsdGlwbGUgJiYgKG11bHRpcGxlLnNlbGVjdGVkID0gITApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVNlbGVjdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgICBmb3IgKGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBlbGVtZW50KyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbZWxlbWVudF07XG4gICAgICAgIGlmIChudWxsICE9IHByb3BzW3Byb3BOYW1lXSkge1xuICAgICAgICAgIHZhciBwcm9wTmFtZUlzQXJyYXkgPSBpc0FycmF5SW1wbChwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICAgIHByb3BzLm11bHRpcGxlICYmICFwcm9wTmFtZUlzQXJyYXlcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiBgbXVsdGlwbGVgIGlzIHRydWUuJXNcIixcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6ICFwcm9wcy5tdWx0aXBsZSAmJlxuICAgICAgICAgICAgICBwcm9wTmFtZUlzQXJyYXkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciB2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzXCIsXG4gICAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdm9pZCAwID09PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRWYWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUZXh0YXJlYVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgICB2b2lkIDAgPT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsIHx8XG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbERlZmF1bHRWYWwgPSAhMCkpO1xuICAgICAgbnVsbCAhPSBwcm9wcy5jaGlsZHJlbiAmJlxuICAgICAgICBudWxsID09IHByb3BzLnZhbHVlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nIGNoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVGV4dGFyZWEoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICgodmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpLFxuICAgICAgICB2YWx1ZSAhPT0gZWxlbWVudC52YWx1ZSAmJiAoZWxlbWVudC52YWx1ZSA9IHZhbHVlKSxcbiAgICAgICAgbnVsbCA9PSBkZWZhdWx0VmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT09IHZhbHVlICYmIChlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgPVxuICAgICAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0VGV4dGFyZWEoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsID09IHZhbHVlKSB7XG4gICAgICAgIGlmIChudWxsICE9IGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGlmICgxIDwgY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIik7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09IGRlZmF1bHRWYWx1ZSAmJiAoZGVmYXVsdFZhbHVlID0gXCJcIik7XG4gICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGNoaWxkcmVuID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgIGNoaWxkcmVuID09PSBkZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgXCJcIiAhPT0gY2hpbGRyZW4gJiZcbiAgICAgICAgbnVsbCAhPT0gY2hpbGRyZW4gJiZcbiAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBjaGlsZHJlbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmROb3RhYmxlTm9kZShub2RlLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IG5vZGUuc2VydmVyUHJvcHMgJiZcbiAgICAgICAgMCA9PT0gbm9kZS5zZXJ2ZXJUYWlsLmxlbmd0aCAmJlxuICAgICAgICAxID09PSBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgICAzIDwgbm9kZS5kaXN0YW5jZUZyb21MZWFmICYmXG4gICAgICAgIG5vZGUuZGlzdGFuY2VGcm9tTGVhZiA+IDE1IC0gaW5kZW50XG4gICAgICAgID8gZmluZE5vdGFibGVOb2RlKG5vZGUuY2hpbGRyZW5bMF0sIGluZGVudClcbiAgICAgICAgOiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmRlbnRhdGlvbihpbmRlbnQpIHtcbiAgICAgIHJldHVybiBcIiAgXCIgKyBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZGVkKGluZGVudCkge1xuICAgICAgcmV0dXJuIFwiKyBcIiArIFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlZChpbmRlbnQpIHtcbiAgICAgIHJldHVybiBcIi0gXCIgKyBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRmliZXJUeXBlKGZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGZpYmVyLnR5cGU7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgcmV0dXJuIFwiTGF6eVwiO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZXR1cm4gKGZpYmVyID0gZmliZXIudHlwZSksIGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZpYmVyID0gZmliZXIudHlwZS5yZW5kZXIpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIChmaWJlciA9IGZpYmVyLnR5cGUpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVGV4dE5vZGUoY29udGVudCwgbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmVlZHNFc2NhcGluZy50ZXN0KGNvbnRlbnQpXG4gICAgICAgID8gKChjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoY29udGVudCkpLFxuICAgICAgICAgIGNvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoIC0gMlxuICAgICAgICAgICAgPyA4ID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICAgID8gJ3tcIi4uLlwifSdcbiAgICAgICAgICAgICAgOiBcIntcIiArIGNvbnRlbnQuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNykgKyAnLi4uXCJ9J1xuICAgICAgICAgICAgOiBcIntcIiArIGNvbnRlbnQgKyBcIn1cIilcbiAgICAgICAgOiBjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgID8gNSA+IG1heExlbmd0aFxuICAgICAgICAgICAgPyAne1wiLi4uXCJ9J1xuICAgICAgICAgICAgOiBjb250ZW50LnNsaWNlKDAsIG1heExlbmd0aCAtIDMpICsgXCIuLi5cIlxuICAgICAgICAgIDogY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVUZXh0RGlmZihjbGllbnRUZXh0LCBzZXJ2ZXJQcm9wcywgaW5kZW50KSB7XG4gICAgICB2YXIgbWF4TGVuZ3RoID0gMTIwIC0gMiAqIGluZGVudDtcbiAgICAgIGlmIChudWxsID09PSBzZXJ2ZXJQcm9wcylcbiAgICAgICAgcmV0dXJuIGFkZGVkKGluZGVudCkgKyBkZXNjcmliZVRleHROb2RlKGNsaWVudFRleHQsIG1heExlbmd0aCkgKyBcIlxcblwiO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZXJ2ZXJQcm9wcykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBmaXJzdERpZmYgPSAwO1xuICAgICAgICAgIGZpcnN0RGlmZiA8IHNlcnZlclByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGZpcnN0RGlmZiA8IGNsaWVudFRleHQubGVuZ3RoICYmXG4gICAgICAgICAgc2VydmVyUHJvcHMuY2hhckNvZGVBdChmaXJzdERpZmYpID09PVxuICAgICAgICAgICAgY2xpZW50VGV4dC5jaGFyQ29kZUF0KGZpcnN0RGlmZik7XG4gICAgICAgICAgZmlyc3REaWZmKytcbiAgICAgICAgKTtcbiAgICAgICAgZmlyc3REaWZmID4gbWF4TGVuZ3RoIC0gOCAmJlxuICAgICAgICAgIDEwIDwgZmlyc3REaWZmICYmXG4gICAgICAgICAgKChjbGllbnRUZXh0ID0gXCIuLi5cIiArIGNsaWVudFRleHQuc2xpY2UoZmlyc3REaWZmIC0gOCkpLFxuICAgICAgICAgIChzZXJ2ZXJQcm9wcyA9IFwiLi4uXCIgKyBzZXJ2ZXJQcm9wcy5zbGljZShmaXJzdERpZmYgLSA4KSkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGFkZGVkKGluZGVudCkgK1xuICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoY2xpZW50VGV4dCwgbWF4TGVuZ3RoKSArXG4gICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgcmVtb3ZlZChpbmRlbnQpICtcbiAgICAgICAgICBkZXNjcmliZVRleHROb2RlKHNlcnZlclByb3BzLCBtYXhMZW5ndGgpICtcbiAgICAgICAgICBcIlxcblwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpICsgZGVzY3JpYmVUZXh0Tm9kZShjbGllbnRUZXh0LCBtYXhMZW5ndGgpICsgXCJcXG5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb2JqZWN0TmFtZShvYmplY3QpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICAgIC5jYWxsKG9iamVjdClcbiAgICAgICAgLnJlcGxhY2UoL15cXFtvYmplY3QgKC4qKVxcXSQvLCBmdW5jdGlvbiAobSwgcDApIHtcbiAgICAgICAgICByZXR1cm4gcDA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVZhbHVlKHZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSxcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgICAgICA/ICdcIi4uLlwiJ1xuICAgICAgICAgICAgICAgIDogdmFsdWUuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNCkgKyAnLi4uXCInXG4gICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKHZhbHVlKSkgcmV0dXJuIFwiWy4uLl1cIjtcbiAgICAgICAgICBpZiAodmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiAobWF4TGVuZ3RoID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHZhbHVlLnR5cGUpKVxuICAgICAgICAgICAgICA/IFwiPFwiICsgbWF4TGVuZ3RoICsgXCI+XCJcbiAgICAgICAgICAgICAgOiBcIjwuLi4+XCI7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvYmplY3ROYW1lKHZhbHVlKTtcbiAgICAgICAgICBpZiAoXCJPYmplY3RcIiA9PT0gbmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICBtYXhMZW5ndGggLT0gMjtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHZhbHVlKVxuICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGpzb25Qcm9wTmFtZSA9IEpTT04uc3RyaW5naWZ5KHByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICBqc29uUHJvcE5hbWUgIT09ICdcIicgKyBwcm9wTmFtZSArICdcIicgJiZcbiAgICAgICAgICAgICAgICAgIChwcm9wTmFtZSA9IGpzb25Qcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAganNvblByb3BOYW1lID0gZGVzY3JpYmVWYWx1ZShcbiAgICAgICAgICAgICAgICAgIHZhbHVlW3Byb3BOYW1lXSxcbiAgICAgICAgICAgICAgICAgIDE1ID4gbWF4TGVuZ3RoID8gbWF4TGVuZ3RoIDogMTVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG1heExlbmd0aCAtPSBqc29uUHJvcE5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICgwID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBuYW1lICs9IFwiXCIgPT09IG5hbWUgPyBcIi4uLlwiIDogXCIsIC4uLlwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWUgKz1cbiAgICAgICAgICAgICAgICAgIChcIlwiID09PSBuYW1lID8gXCJcIiA6IFwiLFwiKSArIHByb3BOYW1lICsgXCI6XCIgKyBqc29uUHJvcE5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIHJldHVybiAobWF4TGVuZ3RoID0gdmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUubmFtZSlcbiAgICAgICAgICAgID8gXCJmdW5jdGlvbiBcIiArIG1heExlbmd0aFxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlUHJvcFZhbHVlKHZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWUgfHwgbmVlZHNFc2NhcGluZy50ZXN0KHZhbHVlKVxuICAgICAgICA/IFwie1wiICsgZGVzY3JpYmVWYWx1ZSh2YWx1ZSwgbWF4TGVuZ3RoIC0gMikgKyBcIn1cIlxuICAgICAgICA6IHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCAtIDJcbiAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgID8gJ1wiLi4uXCInXG4gICAgICAgICAgICA6ICdcIicgKyB2YWx1ZS5zbGljZSgwLCBtYXhMZW5ndGggLSA1KSArICcuLi5cIidcbiAgICAgICAgICA6ICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwYW5kZWRFbGVtZW50KHR5cGUsIHByb3BzLCByb3dQcmVmaXgpIHtcbiAgICAgIHZhciByZW1haW5pbmdSb3dMZW5ndGggPSAxMjAgLSByb3dQcmVmaXgubGVuZ3RoIC0gdHlwZS5sZW5ndGgsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcE5hbWU7XG4gICAgICBmb3IgKHByb3BOYW1lIGluIHByb3BzKVxuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmIFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICBwcm9wc1twcm9wTmFtZV0sXG4gICAgICAgICAgICAxMjAgLSByb3dQcmVmaXgubGVuZ3RoIC0gcHJvcE5hbWUubGVuZ3RoIC0gMVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVtYWluaW5nUm93TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCArIHByb3BWYWx1ZS5sZW5ndGggKyAyO1xuICAgICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wTmFtZSArIFwiPVwiICsgcHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIDAgPT09IHByb3BlcnRpZXMubGVuZ3RoXG4gICAgICAgID8gcm93UHJlZml4ICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCJcbiAgICAgICAgOiAwIDwgcmVtYWluaW5nUm93TGVuZ3RoXG4gICAgICAgICAgPyByb3dQcmVmaXggKyBcIjxcIiArIHR5cGUgKyBcIiBcIiArIHByb3BlcnRpZXMuam9pbihcIiBcIikgKyBcIj5cXG5cIlxuICAgICAgICAgIDogcm93UHJlZml4ICtcbiAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICByb3dQcmVmaXggK1xuICAgICAgICAgICAgXCIgIFwiICtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuam9pbihcIlxcblwiICsgcm93UHJlZml4ICsgXCIgIFwiKSArXG4gICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgIHJvd1ByZWZpeCArXG4gICAgICAgICAgICBcIj5cXG5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVQcm9wZXJ0aWVzRGlmZihjbGllbnRPYmplY3QsIHNlcnZlck9iamVjdCwgaW5kZW50KSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IFwiXCIsXG4gICAgICAgIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXMgPSBhc3NpZ24oe30sIHNlcnZlck9iamVjdCksXG4gICAgICAgIHByb3BOYW1lO1xuICAgICAgZm9yIChwcm9wTmFtZSBpbiBjbGllbnRPYmplY3QpXG4gICAgICAgIGlmIChjbGllbnRPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgZGVsZXRlIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogaW5kZW50IC0gcHJvcE5hbWUubGVuZ3RoIC0gMixcbiAgICAgICAgICAgIGNsaWVudFByb3BWYWx1ZSA9IGRlc2NyaWJlVmFsdWUoY2xpZW50T2JqZWN0W3Byb3BOYW1lXSwgbWF4TGVuZ3RoKTtcbiAgICAgICAgICBzZXJ2ZXJPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpXG4gICAgICAgICAgICA/ICgobWF4TGVuZ3RoID0gZGVzY3JpYmVWYWx1ZShzZXJ2ZXJPYmplY3RbcHJvcE5hbWVdLCBtYXhMZW5ndGgpKSxcbiAgICAgICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICBhZGRlZChpbmRlbnQpICsgcHJvcE5hbWUgKyBcIjogXCIgKyBjbGllbnRQcm9wVmFsdWUgKyBcIlxcblwiKSxcbiAgICAgICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIG1heExlbmd0aCArIFwiXFxuXCIpKVxuICAgICAgICAgICAgOiAocHJvcGVydGllcyArPVxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudFByb3BWYWx1ZSArIFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gcmVtYWluaW5nU2VydmVyUHJvcGVydGllcylcbiAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpICYmXG4gICAgICAgICAgKChjbGllbnRPYmplY3QgPSBkZXNjcmliZVZhbHVlKFxuICAgICAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllc1tfcHJvcE5hbWVdLFxuICAgICAgICAgICAgMTIwIC0gMiAqIGluZGVudCAtIF9wcm9wTmFtZS5sZW5ndGggLSAyXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50KSArIF9wcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudE9iamVjdCArIFwiXFxuXCIpKTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUVsZW1lbnREaWZmKHR5cGUsIGNsaWVudFByb3BzLCBzZXJ2ZXJQcm9wcywgaW5kZW50KSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCIsXG4gICAgICAgIHNlcnZlclByb3BOYW1lcyA9IG5ldyBNYXAoKTtcbiAgICAgIGZvciAocHJvcE5hbWUkanNjb21wJDAgaW4gc2VydmVyUHJvcHMpXG4gICAgICAgIHNlcnZlclByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lJGpzY29tcCQwKSAmJlxuICAgICAgICAgIHNlcnZlclByb3BOYW1lcy5zZXQoXG4gICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgcHJvcE5hbWUkanNjb21wJDBcbiAgICAgICAgICApO1xuICAgICAgaWYgKDEgPT09IHNlcnZlclByb3BOYW1lcy5zaXplICYmIHNlcnZlclByb3BOYW1lcy5oYXMoXCJjaGlsZHJlblwiKSlcbiAgICAgICAgY29udGVudCArPSBkZXNjcmliZUV4cGFuZGVkRWxlbWVudChcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGNsaWVudFByb3BzLFxuICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudClcbiAgICAgICAgKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfcHJvcE5hbWUyIGluIGNsaWVudFByb3BzKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNsaWVudFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wTmFtZTIpICYmXG4gICAgICAgICAgICBcImNoaWxkcmVuXCIgIT09IF9wcm9wTmFtZTJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBtYXhMZW5ndGgkanNjb21wJDAgPVxuICAgICAgICAgICAgICAgIDEyMCAtIDIgKiAoaW5kZW50ICsgMSkgLSBfcHJvcE5hbWUyLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lID0gc2VydmVyUHJvcE5hbWVzLmdldChfcHJvcE5hbWUyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gc2VydmVyUHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWVzLmRlbGV0ZShfcHJvcE5hbWUyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUkanNjb21wJDAgPSBjbGllbnRQcm9wc1tfcHJvcE5hbWUyXTtcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUgPSBzZXJ2ZXJQcm9wc1tzZXJ2ZXJQcm9wTmFtZV07XG4gICAgICAgICAgICAgIHZhciBjbGllbnRQcm9wVmFsdWUgPSBkZXNjcmliZVByb3BWYWx1ZShcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGgkanNjb21wJDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wTmFtZSRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBwcm9wTmFtZSRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygc2VydmVyUHJvcE5hbWUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gc2VydmVyUHJvcE5hbWUgJiZcbiAgICAgICAgICAgICAgXCJPYmplY3RcIiA9PT0gb2JqZWN0TmFtZShwcm9wTmFtZSRqc2NvbXAkMCkgJiZcbiAgICAgICAgICAgICAgXCJPYmplY3RcIiA9PT0gb2JqZWN0TmFtZShzZXJ2ZXJQcm9wTmFtZSkgJiZcbiAgICAgICAgICAgICAgKDIgPCBPYmplY3Qua2V5cyhwcm9wTmFtZSRqc2NvbXAkMCkubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgMiA8IE9iamVjdC5rZXlzKHNlcnZlclByb3BOYW1lKS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAtMSA8IGNsaWVudFByb3BWYWx1ZS5pbmRleE9mKFwiLi4uXCIpIHx8XG4gICAgICAgICAgICAgICAgLTEgPCBtYXhMZW5ndGgkanNjb21wJDAuaW5kZXhPZihcIi4uLlwiKSlcbiAgICAgICAgICAgICAgICA/IChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPXt7XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmliZVByb3BlcnRpZXNEaWZmKFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArIDJcbiAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgXCJ9fVxcblwiKVxuICAgICAgICAgICAgICAgIDogKChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50UHJvcFZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiksXG4gICAgICAgICAgICAgICAgICAoY29udGVudCArPVxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cIikpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICAgIGRlc2NyaWJlUHJvcFZhbHVlKGNsaWVudFByb3BzW19wcm9wTmFtZTJdLCBtYXhMZW5ndGgkanNjb21wJDApICtcbiAgICAgICAgICAgICAgICBcIlxcblwiO1xuICAgICAgICAgIH1cbiAgICAgICAgc2VydmVyUHJvcE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgaWYgKFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogKGluZGVudCArIDEpIC0gcHJvcE5hbWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgIHByb3BOYW1lICtcbiAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICBkZXNjcmliZVByb3BWYWx1ZShzZXJ2ZXJQcm9wc1twcm9wTmFtZV0sIG1heExlbmd0aCkgK1xuICAgICAgICAgICAgICBcIlxcblwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRlbnQgPVxuICAgICAgICAgIFwiXCIgPT09IGNvbnRlbnRcbiAgICAgICAgICAgID8gaW5kZW50YXRpb24oaW5kZW50KSArIFwiPFwiICsgdHlwZSArIFwiPlxcblwiXG4gICAgICAgICAgICA6IGluZGVudGF0aW9uKGluZGVudCkgK1xuICAgICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgICAgY29udGVudCArXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgK1xuICAgICAgICAgICAgICBcIj5cXG5cIjtcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBzZXJ2ZXJQcm9wcy5jaGlsZHJlbjtcbiAgICAgIGNsaWVudFByb3BzID0gY2xpZW50UHJvcHMuY2hpbGRyZW47XG4gICAgICBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICApIHtcbiAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjbGllbnRQcm9wc1xuICAgICAgICApXG4gICAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gXCJcIiArIGNsaWVudFByb3BzO1xuICAgICAgICBjb250ZW50ICs9IGRlc2NyaWJlVGV4dERpZmYoc2VydmVyUHJvcE5hbWVzLCBcIlwiICsgdHlwZSwgaW5kZW50ICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2xpZW50UHJvcHMgfHxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjbGllbnRQcm9wc1xuICAgICAgKVxuICAgICAgICBjb250ZW50ID1cbiAgICAgICAgICBudWxsID09IHR5cGVcbiAgICAgICAgICAgID8gY29udGVudCArIGRlc2NyaWJlVGV4dERpZmYoXCJcIiArIGNsaWVudFByb3BzLCBudWxsLCBpbmRlbnQgKyAxKVxuICAgICAgICAgICAgOiBjb250ZW50ICsgZGVzY3JpYmVUZXh0RGlmZihcIlwiICsgY2xpZW50UHJvcHMsIHZvaWQgMCwgaW5kZW50ICsgMSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVTaWJsaW5nRmliZXIoZmliZXIsIGluZGVudCkge1xuICAgICAgdmFyIHR5cGUgPSBkZXNjcmliZUZpYmVyVHlwZShmaWJlcik7XG4gICAgICBpZiAobnVsbCA9PT0gdHlwZSkge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgICAgZm9yIChmaWJlciA9IGZpYmVyLmNoaWxkOyBmaWJlcjsgKVxuICAgICAgICAgICh0eXBlICs9IGRlc2NyaWJlU2libGluZ0ZpYmVyKGZpYmVyLCBpbmRlbnQpKSxcbiAgICAgICAgICAgIChmaWJlciA9IGZpYmVyLnNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlTm9kZShub2RlLCBpbmRlbnQpIHtcbiAgICAgIHZhciBza2lwVG9Ob2RlID0gZmluZE5vdGFibGVOb2RlKG5vZGUsIGluZGVudCk7XG4gICAgICBpZiAoXG4gICAgICAgIHNraXBUb05vZGUgIT09IG5vZGUgJiZcbiAgICAgICAgKDEgIT09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoIHx8IG5vZGUuY2hpbGRyZW5bMF0gIT09IHNraXBUb05vZGUpXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KSArIFwiLi4uXFxuXCIgKyBkZXNjcmliZU5vZGUoc2tpcFRvTm9kZSwgaW5kZW50ICsgMSlcbiAgICAgICAgKTtcbiAgICAgIHNraXBUb05vZGUgPSBcIlwiO1xuICAgICAgdmFyIGRlYnVnSW5mbyA9IG5vZGUuZmliZXIuX2RlYnVnSW5mbztcbiAgICAgIGlmIChkZWJ1Z0luZm8pXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVidWdJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHNlcnZlckNvbXBvbmVudE5hbWUgPSBkZWJ1Z0luZm9baV0ubmFtZTtcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyQ29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgICAgKChza2lwVG9Ob2RlICs9XG4gICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgKyBcIjxcIiArIHNlcnZlckNvbXBvbmVudE5hbWUgKyBcIj5cXG5cIiksXG4gICAgICAgICAgICBpbmRlbnQrKyk7XG4gICAgICAgIH1cbiAgICAgIGRlYnVnSW5mbyA9IFwiXCI7XG4gICAgICBpID0gbm9kZS5maWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICBpZiAoNiA9PT0gbm9kZS5maWJlci50YWcpXG4gICAgICAgIChkZWJ1Z0luZm8gPSBkZXNjcmliZVRleHREaWZmKGksIG5vZGUuc2VydmVyUHJvcHMsIGluZGVudCkpLCBpbmRlbnQrKztcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoKHNlcnZlckNvbXBvbmVudE5hbWUgPSBkZXNjcmliZUZpYmVyVHlwZShub2RlLmZpYmVyKSksXG4gICAgICAgIG51bGwgIT09IHNlcnZlckNvbXBvbmVudE5hbWUpXG4gICAgICApXG4gICAgICAgIGlmICh2b2lkIDAgPT09IG5vZGUuc2VydmVyUHJvcHMpIHtcbiAgICAgICAgICBkZWJ1Z0luZm8gPSBpbmRlbnQ7XG4gICAgICAgICAgdmFyIG1heExlbmd0aCA9IDEyMCAtIDIgKiBkZWJ1Z0luZm8gLSBzZXJ2ZXJDb21wb25lbnROYW1lLmxlbmd0aCAtIDIsXG4gICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcbiAgICAgICAgICBmb3IgKHByb3BOYW1lIGluIGkpXG4gICAgICAgICAgICBpZiAoaS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiYgXCJjaGlsZHJlblwiICE9PSBwcm9wTmFtZSkge1xuICAgICAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoaVtwcm9wTmFtZV0sIDE1KTtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCArIHByb3BWYWx1ZS5sZW5ndGggKyAyO1xuICAgICAgICAgICAgICBpZiAoMCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gXCIgLi4uXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGVudCArPSBcIiBcIiArIHByb3BOYW1lICsgXCI9XCIgKyBwcm9wVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZGVidWdJbmZvID1cbiAgICAgICAgICAgIGluZGVudGF0aW9uKGRlYnVnSW5mbykgK1xuICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSArXG4gICAgICAgICAgICBjb250ZW50ICtcbiAgICAgICAgICAgIFwiPlxcblwiO1xuICAgICAgICAgIGluZGVudCsrO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBudWxsID09PSBub2RlLnNlcnZlclByb3BzXG4gICAgICAgICAgICA/ICgoZGVidWdJbmZvID0gZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudClcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGluZGVudCsrKVxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygbm9kZS5zZXJ2ZXJQcm9wc1xuICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlNob3VsZCBub3QgaGF2ZSBtYXRjaGVkIGEgbm9uIEhvc3RUZXh0IGZpYmVyIHRvIGEgVGV4dCBub2RlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6ICgoZGVidWdJbmZvID0gZGVzY3JpYmVFbGVtZW50RGlmZihcbiAgICAgICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgbm9kZS5zZXJ2ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGluZGVudFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGluZGVudCsrKTtcbiAgICAgIHZhciBwcm9wTmFtZSA9IFwiXCI7XG4gICAgICBpID0gbm9kZS5maWJlci5jaGlsZDtcbiAgICAgIGZvciAoXG4gICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUgPSAwO1xuICAgICAgICBpICYmIHNlcnZlckNvbXBvbmVudE5hbWUgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgKVxuICAgICAgICAobWF4TGVuZ3RoID0gbm9kZS5jaGlsZHJlbltzZXJ2ZXJDb21wb25lbnROYW1lXSksXG4gICAgICAgICAgbWF4TGVuZ3RoLmZpYmVyID09PSBpXG4gICAgICAgICAgICA/ICgocHJvcE5hbWUgKz0gZGVzY3JpYmVOb2RlKG1heExlbmd0aCwgaW5kZW50KSksXG4gICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUrKylcbiAgICAgICAgICAgIDogKHByb3BOYW1lICs9IGRlc2NyaWJlU2libGluZ0ZpYmVyKGksIGluZGVudCkpLFxuICAgICAgICAgIChpID0gaS5zaWJsaW5nKTtcbiAgICAgIGkgJiZcbiAgICAgICAgMCA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAgIChwcm9wTmFtZSArPSBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCIuLi5cXG5cIik7XG4gICAgICBpID0gbm9kZS5zZXJ2ZXJUYWlsO1xuICAgICAgbnVsbCA9PT0gbm9kZS5zZXJ2ZXJQcm9wcyAmJiBpbmRlbnQtLTtcbiAgICAgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBpLmxlbmd0aDsgbm9kZSsrKVxuICAgICAgICAoc2VydmVyQ29tcG9uZW50TmFtZSA9IGlbbm9kZV0pLFxuICAgICAgICAgIChwcm9wTmFtZSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyQ29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICA/IHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICAocmVtb3ZlZChpbmRlbnQpICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoc2VydmVyQ29tcG9uZW50TmFtZSwgMTIwIC0gMiAqIGluZGVudCkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG5cIilcbiAgICAgICAgICAgICAgOiBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLnR5cGUsXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLnByb3BzLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICByZXR1cm4gc2tpcFRvTm9kZSArIGRlYnVnSW5mbyArIHByb3BOYW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZURpZmYocm9vdE5vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBcIlxcblxcblwiICsgZGVzY3JpYmVOb2RlKHJvb3ROb2RlLCAwKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQW5jZXN0b3JzKGFuY2VzdG9yLCBjaGlsZCwgcHJvcHMpIHtcbiAgICAgIGZvciAodmFyIGZpYmVyID0gY2hpbGQsIG5vZGUgPSBudWxsLCBkaXN0YW5jZUZyb21MZWFmID0gMDsgZmliZXI7IClcbiAgICAgICAgZmliZXIgPT09IGFuY2VzdG9yICYmIChkaXN0YW5jZUZyb21MZWFmID0gMCksXG4gICAgICAgICAgKG5vZGUgPSB7XG4gICAgICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogbnVsbCAhPT0gbm9kZSA/IFtub2RlXSA6IFtdLFxuICAgICAgICAgICAgc2VydmVyUHJvcHM6XG4gICAgICAgICAgICAgIGZpYmVyID09PSBjaGlsZCA/IHByb3BzIDogZmliZXIgPT09IGFuY2VzdG9yID8gbnVsbCA6IHZvaWQgMCxcbiAgICAgICAgICAgIHNlcnZlclRhaWw6IFtdLFxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRpc3RhbmNlRnJvbUxlYWYrKyxcbiAgICAgICAgICAoZmliZXIgPSBmaWJlci5yZXR1cm4pO1xuICAgICAgcmV0dXJuIG51bGwgIT09IG5vZGUgPyBkZXNjcmliZURpZmYobm9kZSkucmVwbGFjZUFsbCgvXlsrLV0vZ20sIFwiPlwiKSA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZWRBbmNlc3RvckluZm9EZXYob2xkSW5mbywgdGFnKSB7XG4gICAgICBvbGRJbmZvID0gYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvRGV2KTtcbiAgICAgIHZhciBpbmZvID0geyB0YWc6IHRhZyB9O1xuICAgICAgLTEgIT09IGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAmJlxuICAgICAgICAoKG9sZEluZm8uYVRhZ0luU2NvcGUgPSBudWxsKSxcbiAgICAgICAgKG9sZEluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGwpLFxuICAgICAgICAob2xkSW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGwpKTtcbiAgICAgIC0xICE9PSBidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICYmIChvbGRJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbCk7XG4gICAgICAtMSAhPT0gc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICYmXG4gICAgICAgIFwiYWRkcmVzc1wiICE9PSB0YWcgJiZcbiAgICAgICAgXCJkaXZcIiAhPT0gdGFnICYmXG4gICAgICAgIFwicFwiICE9PSB0YWcgJiZcbiAgICAgICAgKChvbGRJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsKSxcbiAgICAgICAgKG9sZEluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsKSk7XG4gICAgICBvbGRJbmZvLmN1cnJlbnQgPSBpbmZvO1xuICAgICAgXCJmb3JtXCIgPT09IHRhZyAmJiAob2xkSW5mby5mb3JtVGFnID0gaW5mbyk7XG4gICAgICBcImFcIiA9PT0gdGFnICYmIChvbGRJbmZvLmFUYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBcImJ1dHRvblwiID09PSB0YWcgJiYgKG9sZEluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJub2JyXCIgPT09IHRhZyAmJiAob2xkSW5mby5ub2JyVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJwXCIgPT09IHRhZyAmJiAob2xkSW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm8pO1xuICAgICAgXCJsaVwiID09PSB0YWcgJiYgKG9sZEluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm8pO1xuICAgICAgaWYgKFwiZGRcIiA9PT0gdGFnIHx8IFwiZHRcIiA9PT0gdGFnKSBvbGRJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICAgIFwiI2RvY3VtZW50XCIgPT09IHRhZyB8fCBcImh0bWxcIiA9PT0gdGFnXG4gICAgICAgID8gKG9sZEluZm8uY29udGFpbmVyVGFnSW5TY29wZSA9IG51bGwpXG4gICAgICAgIDogb2xkSW5mby5jb250YWluZXJUYWdJblNjb3BlIHx8IChvbGRJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGUgPSBpbmZvKTtcbiAgICAgIHJldHVybiBvbGRJbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RhZ1ZhbGlkV2l0aFBhcmVudCh0YWcsIHBhcmVudFRhZykge1xuICAgICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImhyXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJvcHRpb25cIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm9wdGdyb3VwXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCIjdGV4dFwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib3B0Z3JvdXBcIjpcbiAgICAgICAgICByZXR1cm4gXCJvcHRpb25cIiA9PT0gdGFnIHx8IFwiI3RleHRcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgcmV0dXJuIFwiI3RleHRcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwidHJcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJ0aFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJ0Ym9keVwiOlxuICAgICAgICBjYXNlIFwidGhlYWRcIjpcbiAgICAgICAgY2FzZSBcInRmb290XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwidHJcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJjb2xncm91cFwiOlxuICAgICAgICAgIHJldHVybiBcImNvbFwiID09PSB0YWcgfHwgXCJ0ZW1wbGF0ZVwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImNhcHRpb25cIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcImNvbGdyb3VwXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0Ym9keVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGZvb3RcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRoZWFkXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImJhc2VcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcImJhc2Vmb250XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJiZ3NvdW5kXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJsaW5rXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJtZXRhXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0aXRsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibm9zY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm5vZnJhbWVzXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIHJldHVybiBcImhlYWRcIiA9PT0gdGFnIHx8IFwiYm9keVwiID09PSB0YWcgfHwgXCJmcmFtZXNldFwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJmcmFtZXNldFwiOlxuICAgICAgICAgIHJldHVybiBcImZyYW1lXCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcIiNkb2N1bWVudFwiOlxuICAgICAgICAgIHJldHVybiBcImh0bWxcIiA9PT0gdGFnO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImgxXCI6XG4gICAgICAgIGNhc2UgXCJoMlwiOlxuICAgICAgICBjYXNlIFwiaDNcIjpcbiAgICAgICAgY2FzZSBcImg0XCI6XG4gICAgICAgIGNhc2UgXCJoNVwiOlxuICAgICAgICBjYXNlIFwiaDZcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJoMVwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDJcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImgzXCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoNFwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDVcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImg2XCIgIT09IHBhcmVudFRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJycFwiOlxuICAgICAgICBjYXNlIFwicnRcIjpcbiAgICAgICAgICByZXR1cm4gLTEgPT09IGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKTtcbiAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgY2FzZSBcImNhcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbFwiOlxuICAgICAgICBjYXNlIFwiY29sZ3JvdXBcIjpcbiAgICAgICAgY2FzZSBcImZyYW1lc2V0XCI6XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICBjYXNlIFwidGJvZHlcIjpcbiAgICAgICAgY2FzZSBcInRkXCI6XG4gICAgICAgIGNhc2UgXCJ0Zm9vdFwiOlxuICAgICAgICBjYXNlIFwidGhcIjpcbiAgICAgICAgY2FzZSBcInRoZWFkXCI6XG4gICAgICAgIGNhc2UgXCJ0clwiOlxuICAgICAgICAgIHJldHVybiBudWxsID09IHBhcmVudFRhZztcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEludmFsaWRBbmNlc3RvckZvclRhZyh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImFkZHJlc3NcIjpcbiAgICAgICAgY2FzZSBcImFydGljbGVcIjpcbiAgICAgICAgY2FzZSBcImFzaWRlXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja3F1b3RlXCI6XG4gICAgICAgIGNhc2UgXCJjZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcImRldGFpbHNcIjpcbiAgICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgIGNhc2UgXCJkaXZcIjpcbiAgICAgICAgY2FzZSBcImRsXCI6XG4gICAgICAgIGNhc2UgXCJmaWVsZHNldFwiOlxuICAgICAgICBjYXNlIFwiZmlnY2FwdGlvblwiOlxuICAgICAgICBjYXNlIFwiZmlndXJlXCI6XG4gICAgICAgIGNhc2UgXCJmb290ZXJcIjpcbiAgICAgICAgY2FzZSBcImhlYWRlclwiOlxuICAgICAgICBjYXNlIFwiaGdyb3VwXCI6XG4gICAgICAgIGNhc2UgXCJtYWluXCI6XG4gICAgICAgIGNhc2UgXCJtZW51XCI6XG4gICAgICAgIGNhc2UgXCJuYXZcIjpcbiAgICAgICAgY2FzZSBcIm9sXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJzZWN0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJzdW1tYXJ5XCI6XG4gICAgICAgIGNhc2UgXCJ1bFwiOlxuICAgICAgICBjYXNlIFwicHJlXCI6XG4gICAgICAgIGNhc2UgXCJsaXN0aW5nXCI6XG4gICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICBjYXNlIFwiaHJcIjpcbiAgICAgICAgY2FzZSBcInhtcFwiOlxuICAgICAgICBjYXNlIFwiaDFcIjpcbiAgICAgICAgY2FzZSBcImgyXCI6XG4gICAgICAgIGNhc2UgXCJoM1wiOlxuICAgICAgICBjYXNlIFwiaDRcIjpcbiAgICAgICAgY2FzZSBcImg1XCI6XG4gICAgICAgIGNhc2UgXCJoNlwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG4gICAgICAgIGNhc2UgXCJmb3JtXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcbiAgICAgICAgY2FzZSBcImxpXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuICAgICAgICBjYXNlIFwiZGRcIjpcbiAgICAgICAgY2FzZSBcImR0XCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcbiAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuICAgICAgICBjYXNlIFwibm9iclwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEFuY2VzdG9yKHBhcmVudCwgdGFnTmFtZSkge1xuICAgICAgZm9yICg7IHBhcmVudDsgKSB7XG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09IHRhZ05hbWUpIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZURPTU5lc3RpbmcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbykge1xuICAgICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvRGV2O1xuICAgICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICAgIGFuY2VzdG9ySW5mbyA9IChwYXJlbnRJbmZvID0gaXNUYWdWYWxpZFdpdGhQYXJlbnQoXG4gICAgICAgIGNoaWxkVGFnLFxuICAgICAgICBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnXG4gICAgICApXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHBhcmVudEluZm8pXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgICBhbmNlc3RvckluZm8gPSBwYXJlbnRJbmZvIHx8IGFuY2VzdG9ySW5mbztcbiAgICAgIGlmICghYW5jZXN0b3JJbmZvKSByZXR1cm4gITA7XG4gICAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8udGFnO1xuICAgICAgdmFyIHdhcm5LZXkgPSBTdHJpbmcoISFwYXJlbnRJbmZvKSArIFwifFwiICsgY2hpbGRUYWcgKyBcInxcIiArIGFuY2VzdG9ySW5mbztcbiAgICAgIGlmIChkaWRXYXJuW3dhcm5LZXldKSByZXR1cm4gITE7XG4gICAgICBkaWRXYXJuW3dhcm5LZXldID0gITA7XG4gICAgICB2YXIgYW5jZXN0b3IgPSAod2FybktleSA9IGN1cnJlbnQpXG4gICAgICAgID8gZmluZEFuY2VzdG9yKHdhcm5LZXkucmV0dXJuLCBhbmNlc3RvckluZm8pXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHdhcm5LZXkgPVxuICAgICAgICBudWxsICE9PSB3YXJuS2V5ICYmIG51bGwgIT09IGFuY2VzdG9yXG4gICAgICAgICAgPyBkZXNjcmliZUFuY2VzdG9ycyhhbmNlc3Rvciwgd2FybktleSwgbnVsbClcbiAgICAgICAgICA6IFwiXCI7XG4gICAgICBhbmNlc3RvciA9IFwiPFwiICsgY2hpbGRUYWcgKyBcIj5cIjtcbiAgICAgIHBhcmVudEluZm9cbiAgICAgICAgPyAoKHBhcmVudEluZm8gPSBcIlwiKSxcbiAgICAgICAgICBcInRhYmxlXCIgPT09IGFuY2VzdG9ySW5mbyAmJlxuICAgICAgICAgICAgXCJ0clwiID09PSBjaGlsZFRhZyAmJlxuICAgICAgICAgICAgKHBhcmVudEluZm8gKz1cbiAgICAgICAgICAgICAgXCIgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5IHRoZSBicm93c2VyLlwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCAlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8JXM+LiVzXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICBhbmNlc3RvcixcbiAgICAgICAgICAgIGFuY2VzdG9ySW5mbyxcbiAgICAgICAgICAgIHBhcmVudEluZm8sXG4gICAgICAgICAgICB3YXJuS2V5XG4gICAgICAgICAgKSlcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCAlcyBjYW5ub3QgYmUgYSBkZXNjZW5kYW50IG9mIDwlcz4uXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICBhbmNlc3RvcixcbiAgICAgICAgICAgIGFuY2VzdG9ySW5mbyxcbiAgICAgICAgICAgIHdhcm5LZXlcbiAgICAgICAgICApO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVRleHROZXN0aW5nKGNoaWxkVGV4dCwgcGFyZW50VGFnKSB7XG4gICAgICBpZiAoaXNUYWdWYWxpZFdpdGhQYXJlbnQoXCIjdGV4dFwiLCBwYXJlbnRUYWcpKSByZXR1cm4gITA7XG4gICAgICB2YXIgd2FybktleSA9IFwiI3RleHR8XCIgKyBwYXJlbnRUYWc7XG4gICAgICBpZiAoZGlkV2Fyblt3YXJuS2V5XSkgcmV0dXJuICExO1xuICAgICAgZGlkV2Fyblt3YXJuS2V5XSA9ICEwO1xuICAgICAgdmFyIGFuY2VzdG9yID0gKHdhcm5LZXkgPSBjdXJyZW50KVxuICAgICAgICA/IGZpbmRBbmNlc3Rvcih3YXJuS2V5LCBwYXJlbnRUYWcpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHdhcm5LZXkgPVxuICAgICAgICBudWxsICE9PSB3YXJuS2V5ICYmIG51bGwgIT09IGFuY2VzdG9yXG4gICAgICAgICAgPyBkZXNjcmliZUFuY2VzdG9ycyhcbiAgICAgICAgICAgICAgYW5jZXN0b3IsXG4gICAgICAgICAgICAgIHdhcm5LZXksXG4gICAgICAgICAgICAgIDYgIT09IHdhcm5LZXkudGFnID8geyBjaGlsZHJlbjogbnVsbCB9IDogbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJcIjtcbiAgICAgIC9cXFMvLnRlc3QoY2hpbGRUZXh0KVxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkluIEhUTUwsIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCVzPi5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3IuJXNcIixcbiAgICAgICAgICAgIHBhcmVudFRhZyxcbiAgICAgICAgICAgIHdhcm5LZXlcbiAgICAgICAgICApXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW4gSFRNTCwgd2hpdGVzcGFjZSB0ZXh0IG5vZGVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwlcz4uIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICBwYXJlbnRUYWcsXG4gICAgICAgICAgICB3YXJuS2V5XG4gICAgICAgICAgKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaXJzdENoaWxkICYmXG4gICAgICAgICAgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiZcbiAgICAgICAgICAzID09PSBmaXJzdENoaWxkLm5vZGVUeXBlXG4gICAgICAgICkge1xuICAgICAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlKHN0eWxlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIik7XG4gICAgICBpc0N1c3RvbVByb3BlcnR5IHx8XG4gICAgICAgICgtMSA8IHN0eWxlTmFtZS5pbmRleE9mKFwiLVwiKVxuICAgICAgICAgID8gKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICB3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0pIHx8XG4gICAgICAgICAgICAoKHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz9cIixcbiAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICBjYW1lbGl6ZShzdHlsZU5hbWUucmVwbGFjZShtc1BhdHRlcm4sIFwibXMtXCIpKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6IGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KHN0eWxlTmFtZSlcbiAgICAgICAgICAgID8gKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICAgIHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSkgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz9cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3R5bGVOYW1lLnNsaWNlKDEpXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICFiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1N0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuXFwndCBjb250YWluIGEgc2VtaWNvbG9uLiBUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCBcIlwiKVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgKGlzTmFOKHZhbHVlKVxuICAgICAgICAgICAgPyB3YXJuZWRGb3JOYU5WYWx1ZSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZEZvck5hTlZhbHVlID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LlwiLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBpc0Zpbml0ZSh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS5cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgKSkpKTtcbiAgICAgIG51bGwgPT0gdmFsdWUgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcIlwiID09PSB2YWx1ZVxuICAgICAgICA/IGlzQ3VzdG9tUHJvcGVydHlcbiAgICAgICAgICA/IHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgICAgICA6IFwiZmxvYXRcIiA9PT0gc3R5bGVOYW1lXG4gICAgICAgICAgICA/IChzdHlsZS5jc3NGbG9hdCA9IFwiXCIpXG4gICAgICAgICAgICA6IChzdHlsZVtzdHlsZU5hbWVdID0gXCJcIilcbiAgICAgICAgOiBpc0N1c3RvbVByb3BlcnR5XG4gICAgICAgICAgPyBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHZhbHVlKVxuICAgICAgICAgIDogXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICAgIDAgPT09IHZhbHVlIHx8XG4gICAgICAgICAgICAgIHVuaXRsZXNzTnVtYmVycy5oYXMoc3R5bGVOYW1lKVxuICAgICAgICAgICAgPyBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgICA/IChzdHlsZS5jc3NGbG9hdCA9IHZhbHVlKVxuICAgICAgICAgICAgICA6IChjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSksXG4gICAgICAgICAgICAgICAgKHN0eWxlW3N0eWxlTmFtZV0gPSAoXCJcIiArIHZhbHVlKS50cmltKCkpKVxuICAgICAgICAgICAgOiAoc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlICsgXCJweFwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzLCBwcmV2U3R5bGVzKSB7XG4gICAgICBpZiAobnVsbCAhPSBzdHlsZXMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHN0eWxlcylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCJcbiAgICAgICAgKTtcbiAgICAgIHN0eWxlcyAmJiBPYmplY3QuZnJlZXplKHN0eWxlcyk7XG4gICAgICBub2RlID0gbm9kZS5zdHlsZTtcbiAgICAgIGlmIChudWxsICE9IHByZXZTdHlsZXMpIHtcbiAgICAgICAgaWYgKHN0eWxlcykge1xuICAgICAgICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICBpZiAocHJldlN0eWxlcylcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwcmV2U3R5bGVzKVxuICAgICAgICAgICAgICBpZiAocHJldlN0eWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFzdHlsZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XSwgaSA9IDA7XG4gICAgICAgICAgICAgICAgICBpIDwgbG9uZ2hhbmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgIGkrK1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkVXBkYXRlc1tsb25naGFuZHNbaV1dID0ga2V5O1xuICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gc3R5bGVzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoX2tleSkgJiZcbiAgICAgICAgICAgICAgKCFwcmV2U3R5bGVzIHx8IHByZXZTdHlsZXNbX2tleV0gIT09IHN0eWxlc1tfa2V5XSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBrZXkgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW19rZXldIHx8IFtfa2V5XSwgbG9uZ2hhbmRzID0gMDtcbiAgICAgICAgICAgICAgICBsb25naGFuZHMgPCBrZXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxvbmdoYW5kcysrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBleHBhbmRlZFVwZGF0ZXNba2V5W2xvbmdoYW5kc11dID0gX2tleTtcbiAgICAgICAgICBfa2V5ID0ge307XG4gICAgICAgICAgZm9yICh2YXIga2V5JGpzY29tcCQwIGluIHN0eWxlcylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGtleSA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5JGpzY29tcCQwXSB8fCBba2V5JGpzY29tcCQwXSxcbiAgICAgICAgICAgICAgICBsb25naGFuZHMgPSAwO1xuICAgICAgICAgICAgICBsb25naGFuZHMgPCBrZXkubGVuZ3RoO1xuICAgICAgICAgICAgICBsb25naGFuZHMrK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfa2V5W2tleVtsb25naGFuZHNdXSA9IGtleSRqc2NvbXAkMDtcbiAgICAgICAgICBrZXkkanNjb21wJDAgPSB7fTtcbiAgICAgICAgICBmb3IgKHZhciBfa2V5MiBpbiBleHBhbmRlZFVwZGF0ZXMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoa2V5ID0gZXhwYW5kZWRVcGRhdGVzW19rZXkyXSksXG4gICAgICAgICAgICAgIChsb25naGFuZHMgPSBfa2V5W19rZXkyXSkgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IGxvbmdoYW5kcyAmJlxuICAgICAgICAgICAgICAgICgoaSA9IGtleSArIFwiLFwiICsgbG9uZ2hhbmRzKSwgIWtleSRqc2NvbXAkMFtpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAga2V5JGpzY29tcCQwW2ldID0gITA7XG4gICAgICAgICAgICAgIGkgPSBjb25zb2xlO1xuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZXNba2V5XTtcbiAgICAgICAgICAgICAgaS5lcnJvci5jYWxsKFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgXCIlcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSBjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvIGF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoIHNlcGFyYXRlIHZhbHVlcy5cIixcbiAgICAgICAgICAgICAgICBudWxsID09IHZhbHVlIHx8IFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgID8gXCJSZW1vdmluZ1wiXG4gICAgICAgICAgICAgICAgICA6IFwiVXBkYXRpbmdcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbG9uZ2hhbmRzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHByZXZTdHlsZXMpXG4gICAgICAgICAgIXByZXZTdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSB8fFxuICAgICAgICAgICAgKG51bGwgIT0gc3R5bGVzICYmIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB8fFxuICAgICAgICAgICAgKDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIilcbiAgICAgICAgICAgICAgPyBub2RlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgICAgICAgICAgOiBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgICAgID8gKG5vZGUuY3NzRmxvYXQgPSBcIlwiKVxuICAgICAgICAgICAgICAgIDogKG5vZGVbc3R5bGVOYW1lXSA9IFwiXCIpKTtcbiAgICAgICAgZm9yICh2YXIgX3N0eWxlTmFtZSBpbiBzdHlsZXMpXG4gICAgICAgICAgKF9rZXkyID0gc3R5bGVzW19zdHlsZU5hbWVdKSxcbiAgICAgICAgICAgIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShfc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICBwcmV2U3R5bGVzW19zdHlsZU5hbWVdICE9PSBfa2V5MiAmJlxuICAgICAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlKG5vZGUsIF9zdHlsZU5hbWUsIF9rZXkyKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBmb3IgKGV4cGFuZGVkVXBkYXRlcyBpbiBzdHlsZXMpXG4gICAgICAgICAgc3R5bGVzLmhhc093blByb3BlcnR5KGV4cGFuZGVkVXBkYXRlcykgJiZcbiAgICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGUobm9kZSwgZXhwYW5kZWRVcGRhdGVzLCBzdHlsZXNbZXhwYW5kZWRVcGRhdGVzXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ3VzdG9tRWxlbWVudCh0YWdOYW1lKSB7XG4gICAgICBpZiAoLTEgPT09IHRhZ05hbWUuaW5kZXhPZihcIi1cIikpIHJldHVybiAhMTtcbiAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICBjYXNlIFwiYW5ub3RhdGlvbi14bWxcIjpcbiAgICAgICAgY2FzZSBcImNvbG9yLXByb2ZpbGVcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLXNyY1wiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLXVyaVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLWZvcm1hdFwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLW5hbWVcIjpcbiAgICAgICAgY2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVBbGlhcyhuYW1lKSB7XG4gICAgICByZXR1cm4gYWxpYXNlcy5nZXQobmFtZSkgfHwgbmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSQxKHRhZ05hbWUsIG5hbWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXVxuICAgICAgKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAockFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGFnTmFtZSA9IFwiYXJpYS1cIiArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGFnTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHRhZ05hbWUpID8gdGFnTmFtZSA6IG51bGw7XG4gICAgICAgIGlmIChudWxsID09IHRhZ05hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IHRhZ05hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdGFnTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSkge1xuICAgICAgICB0YWdOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0YWdOYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgPyB0YWdOYW1lIDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgPT0gdGFnTmFtZSkgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMCksICExO1xuICAgICAgICBuYW1lICE9PSB0YWdOYW1lICYmXG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlVua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/XCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGFnTmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9ICEwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzKSB7XG4gICAgICB2YXIgaW52YWxpZFByb3BzID0gW10sXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoa2V5IGluIHByb3BzKVxuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5KSB8fCBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgcHJvcHMgPSBpbnZhbGlkUHJvcHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiBcImBcIiArIHByb3AgKyBcImBcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIDEgPT09IGludmFsaWRQcm9wcy5sZW5ndGhcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtYXJpYS1wcm9wc1wiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKVxuICAgICAgICA6IDEgPCBpbnZhbGlkUHJvcHMubGVuZ3RoICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1hcmlhLXByb3BzXCIsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoXCJvbmZvY3VzaW5cIiA9PT0gbG93ZXJDYXNlZE5hbWUgfHwgXCJvbmZvY3Vzb3V0XCIgPT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiBBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0IGFyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgKChcImZvcm1cIiA9PT0gdGFnTmFtZSAmJiBcImFjdGlvblwiID09PSBuYW1lKSB8fFxuICAgICAgICAgIChcImlucHV0XCIgPT09IHRhZ05hbWUgJiYgXCJmb3JtQWN0aW9uXCIgPT09IG5hbWUpIHx8XG4gICAgICAgICAgKFwiYnV0dG9uXCIgPT09IHRhZ05hbWUgJiYgXCJmb3JtQWN0aW9uXCIgPT09IG5hbWUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAobnVsbCAhPSBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICAgIHRhZ05hbWUgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICAgIGlmIChldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpXG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBldmVudFJlZ2lzdHJ5ID0gdGFnTmFtZS5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgICA/IHRhZ05hbWVbbG93ZXJDYXNlZE5hbWVdXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPSBldmVudFJlZ2lzdHJ5KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRSZWdpc3RyeVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIFJlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAockFSSUEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsLnRlc3QobmFtZSkpIHJldHVybiAhMDtcbiAgICAgIGlmIChcImlubmVyaHRtbFwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFwiYXJpYVwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcImlzXCIgPT09IGxvd2VyQ2FzZWROYW1lICYmXG4gICAgICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgICAgIHZvaWQgMCAhPT0gdmFsdWUgJiZcbiAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlICYmIGlzTmFOKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgobG93ZXJDYXNlZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdKSxcbiAgICAgICAgICBsb3dlckNhc2VkTmFtZSAhPT0gbmFtZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgP1wiLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBsb3dlckNhc2VkTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91IGludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSBhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuIElmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgICAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c2FibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgICAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNjb3BlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICAgICAgY2FzZSBcImRvd25sb2FkXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgICAgIGlmIChcImRhdGEtXCIgPT09IGxvd2VyQ2FzZWROYW1lIHx8IFwiYXJpYS1cIiA9PT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAlcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAlcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbklmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCBwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApLCAhMTtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGlmIChcImZhbHNlXCIgPT09IHZhbHVlIHx8IFwidHJ1ZVwiID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImluZXJ0XCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAlcyBEaWQgeW91IG1lYW4gJXM9eyVzfT9cIixcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIFwiZmFsc2VcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IFwiVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuXCJcbiAgICAgICAgICAgICAgICA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICB2YXIgdW5rbm93blByb3BzID0gW10sXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoa2V5IGluIHByb3BzKVxuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSkgfHxcbiAgICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgcHJvcHMgPSB1bmtub3duUHJvcHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiBcImBcIiArIHByb3AgKyBcImBcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIDEgPT09IHVua25vd25Qcm9wcy5sZW5ndGhcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsIG9yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciBcIixcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIClcbiAgICAgICAgOiAxIDwgdW5rbm93blByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsIG9yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yIFwiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gICAgICByZXR1cm4gaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdChcIlwiICsgdXJsKVxuICAgICAgICA/IFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGhhcyBibG9ja2VkIGEgamF2YXNjcmlwdDogVVJMIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4nKVwiXG4gICAgICAgIDogdXJsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAgICAgbmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7XG4gICAgICBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCAmJlxuICAgICAgICAobmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7XG4gICAgICByZXR1cm4gMyA9PT0gbmF0aXZlRXZlbnQubm9kZVR5cGUgPyBuYXRpdmVFdmVudC5wYXJlbnROb2RlIDogbmF0aXZlRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAmJiAodGFyZ2V0ID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHRhcmdldFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICBhOiBzd2l0Y2ggKFxuICAgICAgICAgICgodGFyZ2V0ID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgICAgdXBkYXRlSW5wdXQoXG4gICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgcHJvcHMudHlwZSxcbiAgICAgICAgICAgICAgcHJvcHMubmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSBwcm9wcy5uYW1lO1xuICAgICAgICAgICAgaWYgKFwicmFkaW9cIiA9PT0gcHJvcHMudHlwZSAmJiBudWxsICE9IGludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgZm9yIChwcm9wcyA9IHRhcmdldDsgcHJvcHMucGFyZW50Tm9kZTsgKSBwcm9wcyA9IHByb3BzLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oaW50ZXJuYWxJbnN0YW5jZSwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgJ2lucHV0W25hbWU9XCInICtcbiAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgIFwiXCIgKyBpbnRlcm5hbEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICdcIl1bdHlwZT1cInJhZGlvXCJdJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSAwO1xuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPCBwcm9wcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXTtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB0YXJnZXQgJiYgb3RoZXJOb2RlLmZvcm0gPT09IHRhcmdldC5mb3JtKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgb3RoZXJQcm9wcyA9IG90aGVyTm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlclByb3BzKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJOb2RlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLm5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA8IHByb3BzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIChvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXSksXG4gICAgICAgICAgICAgICAgICBvdGhlck5vZGUuZm9ybSA9PT0gdGFyZ2V0LmZvcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgICB1cGRhdGVUZXh0YXJlYSh0YXJnZXQsIHByb3BzLnZhbHVlLCBwcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAoaW50ZXJuYWxJbnN0YW5jZSA9IHByb3BzLnZhbHVlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBpbnRlcm5hbEluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgdXBkYXRlT3B0aW9ucyh0YXJnZXQsICEhcHJvcHMubXVsdGlwbGUsIGludGVybmFsSW5zdGFuY2UsICExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhLCBiKSB7XG4gICAgICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHJldHVybiBmbihhLCBiKTtcbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gZm4oYSk7XG4gICAgICAgIHJldHVybiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKChpc0luc2lkZUV2ZW50SGFuZGxlciA9ICExKSxcbiAgICAgICAgICBudWxsICE9PSByZXN0b3JlVGFyZ2V0IHx8IG51bGwgIT09IHJlc3RvcmVRdWV1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgICAgIHJlc3RvcmVUYXJnZXQgJiZcbiAgICAgICAgICAgICAgKChhID0gcmVzdG9yZVRhcmdldCksXG4gICAgICAgICAgICAgIChmbiA9IHJlc3RvcmVRdWV1ZSksXG4gICAgICAgICAgICAgIChyZXN0b3JlUXVldWUgPSByZXN0b3JlVGFyZ2V0ID0gbnVsbCksXG4gICAgICAgICAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KGEpLFxuICAgICAgICAgICAgICBmbikpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChhID0gMDsgYSA8IGZuLmxlbmd0aDsgYSsrKSByZXN0b3JlU3RhdGVPZlRhcmdldChmblthXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcbiAgICAgIGlmIChudWxsID09PSBzdGF0ZU5vZGUpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHByb3BzID0gc3RhdGVOb2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICBpZiAobnVsbCA9PT0gcHJvcHMpIHJldHVybiBudWxsO1xuICAgICAgc3RhdGVOb2RlID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICBhOiBzd2l0Y2ggKHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZURvd25cIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VEb3duQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZU1vdmVcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZVVwXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlVXBDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlRW50ZXJcIjpcbiAgICAgICAgICAocHJvcHMgPSAhcHJvcHMuZGlzYWJsZWQpIHx8XG4gICAgICAgICAgICAoKGluc3QgPSBpbnN0LnR5cGUpLFxuICAgICAgICAgICAgKHByb3BzID0gIShcbiAgICAgICAgICAgICAgXCJidXR0b25cIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcImlucHV0XCIgPT09IGluc3QgfHxcbiAgICAgICAgICAgICAgXCJzZWxlY3RcIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcInRleHRhcmVhXCIgPT09IGluc3RcbiAgICAgICAgICAgICkpKTtcbiAgICAgICAgICBpbnN0ID0gIXByb3BzO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW5zdCA9ICExO1xuICAgICAgfVxuICAgICAgaWYgKGluc3QpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHN0YXRlTm9kZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBzdGF0ZU5vZGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYFwiICtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICtcbiAgICAgICAgICAgIHR5cGVvZiBzdGF0ZU5vZGUgK1xuICAgICAgICAgICAgXCJgIHR5cGUuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZU5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICBpZiAoZmFsbGJhY2tUZXh0KSByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICAgICAgdmFyIHN0YXJ0LFxuICAgICAgICBzdGFydFZhbHVlID0gc3RhcnRUZXh0LFxuICAgICAgICBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoLFxuICAgICAgICBlbmQsXG4gICAgICAgIGVuZFZhbHVlID0gXCJ2YWx1ZVwiIGluIHJvb3QgPyByb290LnZhbHVlIDogcm9vdC50ZXh0Q29udGVudCxcbiAgICAgICAgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuICAgICAgZm9yIChcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBzdGFydCA8IHN0YXJ0TGVuZ3RoICYmIHN0YXJ0VmFsdWVbc3RhcnRdID09PSBlbmRWYWx1ZVtzdGFydF07XG4gICAgICAgIHN0YXJ0KytcbiAgICAgICk7XG4gICAgICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgICAgIGZvciAoXG4gICAgICAgIGVuZCA9IDE7XG4gICAgICAgIGVuZCA8PSBtaW5FbmQgJiZcbiAgICAgICAgc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gPT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF07XG4gICAgICAgIGVuZCsrXG4gICAgICApO1xuICAgICAgcmV0dXJuIChmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgMSA8IGVuZCA/IDEgLSBlbmQgOiB2b2lkIDApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICAgICAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuICAgICAgXCJjaGFyQ29kZVwiIGluIG5hdGl2ZUV2ZW50XG4gICAgICAgID8gKChuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlKSxcbiAgICAgICAgICAwID09PSBuYXRpdmVFdmVudCAmJiAxMyA9PT0ga2V5Q29kZSAmJiAobmF0aXZlRXZlbnQgPSAxMykpXG4gICAgICAgIDogKG5hdGl2ZUV2ZW50ID0ga2V5Q29kZSk7XG4gICAgICAxMCA9PT0gbmF0aXZlRXZlbnQgJiYgKG5hdGl2ZUV2ZW50ID0gMTMpO1xuICAgICAgcmV0dXJuIDMyIDw9IG5hdGl2ZUV2ZW50IHx8IDEzID09PSBuYXRpdmVFdmVudCA/IG5hdGl2ZUV2ZW50IDogMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gICAgICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQoXG4gICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICAgICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgICAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSlcbiAgICAgICAgICBJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgICAoKHJlYWN0TmFtZSA9IEludGVyZmFjZVtwcm9wTmFtZV0pLFxuICAgICAgICAgICAgKHRoaXNbcHJvcE5hbWVdID0gcmVhY3ROYW1lXG4gICAgICAgICAgICAgID8gcmVhY3ROYW1lKG5hdGl2ZUV2ZW50KVxuICAgICAgICAgICAgICA6IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXSkpO1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IChcbiAgICAgICAgICBudWxsICE9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICAgICAgICAgID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgOiAhMSA9PT0gbmF0aXZlRXZlbnQucmV0dXJuVmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgID8gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgICAgICAgICA6IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBhc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9ICEwO1xuICAgICAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgZXZlbnQgJiZcbiAgICAgICAgICAgIChldmVudC5wcmV2ZW50RGVmYXVsdFxuICAgICAgICAgICAgICA/IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50LnJldHVyblZhbHVlID0gITEpLFxuICAgICAgICAgICAgKHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICA/IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIDogXCJ1bmtub3duXCIgIT09IHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQuY2FuY2VsQnViYmxlID0gITApLFxuICAgICAgICAgICAgKHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlXG4gICAgICAgID8gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpXG4gICAgICAgIDogKGtleUFyZyA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ10pXG4gICAgICAgICAgPyAhIW5hdGl2ZUV2ZW50W2tleUFyZ11cbiAgICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUoKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJrZXl1cFwiOlxuICAgICAgICAgIHJldHVybiAtMSAhPT0gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSk7XG4gICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgICAgIG5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuICAgICAgcmV0dXJuIFwib2JqZWN0XCIgPT09IHR5cGVvZiBuYXRpdmVFdmVudCAmJiBcImRhdGFcIiBpbiBuYXRpdmVFdmVudFxuICAgICAgICA/IG5hdGl2ZUV2ZW50LmRhdGFcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBoYXNTcGFjZUtleXByZXNzID0gITA7XG4gICAgICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG4gICAgICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGRvbUV2ZW50TmFtZSA9IG5hdGl2ZUV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3NcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogZG9tRXZlbnROYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZylcbiAgICAgICAgcmV0dXJuIFwiY29tcG9zaXRpb25lbmRcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmXG4gICAgICAgICAgICBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICAgICAgPyAoKGRvbUV2ZW50TmFtZSA9IGdldERhdGEoKSksXG4gICAgICAgICAgICAoZmFsbGJhY2tUZXh0ID0gc3RhcnRUZXh0ID0gcm9vdCA9IG51bGwpLFxuICAgICAgICAgICAgKGlzQ29tcG9zaW5nID0gITEpLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jdHJsS2V5IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmFsdEtleSB8fFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5tZXRhS2V5XG4gICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiAxIDwgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGgpXG4gICAgICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKVxuICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgXCJrb1wiICE9PSBuYXRpdmVFdmVudC5sb2NhbGVcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBcImlucHV0XCIgPT09IG5vZGVOYW1lXG4gICAgICAgID8gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV1cbiAgICAgICAgOiBcInRleHRhcmVhXCIgPT09IG5vZGVOYW1lXG4gICAgICAgICAgPyAhMFxuICAgICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gICAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuICExO1xuICAgICAgZXZlbnROYW1lU3VmZml4ID0gXCJvblwiICsgZXZlbnROYW1lU3VmZml4O1xuICAgICAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lU3VmZml4IGluIGRvY3VtZW50O1xuICAgICAgaXNTdXBwb3J0ZWQgfHxcbiAgICAgICAgKChpc1N1cHBvcnRlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLFxuICAgICAgICBpc1N1cHBvcnRlZC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lU3VmZml4LCBcInJldHVybjtcIiksXG4gICAgICAgIChpc1N1cHBvcnRlZCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGlzU3VwcG9ydGVkW2V2ZW50TmFtZVN1ZmZpeF0pKTtcbiAgICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGluc3QsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIHRhcmdldFxuICAgICkge1xuICAgICAgcmVzdG9yZVRhcmdldFxuICAgICAgICA/IHJlc3RvcmVRdWV1ZVxuICAgICAgICAgID8gcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KVxuICAgICAgICAgIDogKHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdKVxuICAgICAgICA6IChyZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0KTtcbiAgICAgIGluc3QgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgXCJvbkNoYW5nZVwiKTtcbiAgICAgIDAgPCBpbnN0Lmxlbmd0aCAmJlxuICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgICAgICBcImNoYW5nZVwiLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgICkpLFxuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogaW5zdCB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gICAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgICAgIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcbiAgICAgIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgICAgIGlmIChcImNoYW5nZVwiID09PSBkb21FdmVudE5hbWUpIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSAmJlxuICAgICAgICAoYWN0aXZlRWxlbWVudCQxLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSksXG4gICAgICAgIChhY3RpdmVFbGVtZW50SW5zdCQxID0gYWN0aXZlRWxlbWVudCQxID0gbnVsbCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICAgICAgaWYgKFxuICAgICAgICBcInZhbHVlXCIgPT09IG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAmJlxuICAgICAgICBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICAgICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KVxuICAgICAgICApO1xuICAgICAgICBiYXRjaGVkVXBkYXRlcyQxKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHRhcmdldEluc3RcbiAgICApIHtcbiAgICAgIFwiZm9jdXNpblwiID09PSBkb21FdmVudE5hbWVcbiAgICAgICAgPyAoc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSxcbiAgICAgICAgICAoYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0KSxcbiAgICAgICAgICAoYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3QpLFxuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQkMS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIiwgaGFuZGxlUHJvcGVydHlDaGFuZ2UpKVxuICAgICAgICA6IFwiZm9jdXNvdXRcIiA9PT0gZG9tRXZlbnROYW1lICYmIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwic2VsZWN0aW9uY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICBcImtleXVwXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICBcImtleWRvd25cIiA9PT0gZG9tRXZlbnROYW1lXG4gICAgICApXG4gICAgICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiY2xpY2tcIiA9PT0gZG9tRXZlbnROYW1lKSByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiaW5wdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSlcbiAgICAgICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgICAgcmV0dXJuICh4ID09PSB5ICYmICgwICE9PSB4IHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICAgICAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSByZXR1cm4gITA7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvYmpBIHx8XG4gICAgICAgIG51bGwgPT09IG9iakEgfHxcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakIgfHxcbiAgICAgICAgbnVsbCA9PT0gb2JqQlxuICAgICAgKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKSxcbiAgICAgICAga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuICExO1xuICAgICAgZm9yIChrZXlzQiA9IDA7IGtleXNCIDwga2V5c0EubGVuZ3RoOyBrZXlzQisrKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c0Fba2V5c0JdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwgY3VycmVudEtleSkgfHxcbiAgICAgICAgICAhb2JqZWN0SXMob2JqQVtjdXJyZW50S2V5XSwgb2JqQltjdXJyZW50S2V5XSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICAgICAgZm9yICg7IG5vZGUgJiYgbm9kZS5maXJzdENoaWxkOyApIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgICAgIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gICAgICByb290ID0gMDtcbiAgICAgIGZvciAodmFyIG5vZGVFbmQ7IG5vZGU7ICkge1xuICAgICAgICBpZiAoMyA9PT0gbm9kZS5ub2RlVHlwZSkge1xuICAgICAgICAgIG5vZGVFbmQgPSByb290ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgaWYgKHJvb3QgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KVxuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogbm9kZSwgb2Zmc2V0OiBvZmZzZXQgLSByb290IH07XG4gICAgICAgICAgcm9vdCA9IG5vZGVFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgYToge1xuICAgICAgICAgIGZvciAoOyBub2RlOyApIHtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZSA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gZ2V0TGVhZk5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICAgICAgcmV0dXJuIG91dGVyTm9kZSAmJiBpbm5lck5vZGVcbiAgICAgICAgPyBvdXRlck5vZGUgPT09IGlubmVyTm9kZVxuICAgICAgICAgID8gITBcbiAgICAgICAgICA6IG91dGVyTm9kZSAmJiAzID09PSBvdXRlck5vZGUubm9kZVR5cGVcbiAgICAgICAgICAgID8gITFcbiAgICAgICAgICAgIDogaW5uZXJOb2RlICYmIDMgPT09IGlubmVyTm9kZS5ub2RlVHlwZVxuICAgICAgICAgICAgICA/IGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICA6IFwiY29udGFpbnNcIiBpbiBvdXRlck5vZGVcbiAgICAgICAgICAgICAgICA/IG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpXG4gICAgICAgICAgICAgICAgOiBvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgICAgID8gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNilcbiAgICAgICAgICAgICAgICAgIDogITFcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoY29udGFpbmVySW5mbykge1xuICAgICAgY29udGFpbmVySW5mbyA9XG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mbyAmJlxuICAgICAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudCAmJlxuICAgICAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICAgICAgID8gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3XG4gICAgICAgICAgOiB3aW5kb3c7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBjb250YWluZXJJbmZvLkhUTUxJRnJhbWVFbGVtZW50O1xuXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkgY29udGFpbmVySW5mbyA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgICAgIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBub2RlTmFtZSAmJlxuICAgICAgICAoKFwiaW5wdXRcIiA9PT0gbm9kZU5hbWUgJiZcbiAgICAgICAgICAoXCJ0ZXh0XCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJzZWFyY2hcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInRlbFwiID09PSBlbGVtLnR5cGUgfHxcbiAgICAgICAgICAgIFwidXJsXCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJwYXNzd29yZFwiID09PSBlbGVtLnR5cGUpKSB8fFxuICAgICAgICAgIFwidGV4dGFyZWFcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICBcInRydWVcIiA9PT0gZWxlbS5jb250ZW50RWRpdGFibGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24sIGNvbnRhaW5lckluZm8pIHtcbiAgICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKGNvbnRhaW5lckluZm8pO1xuICAgICAgY29udGFpbmVySW5mbyA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gICAgICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG4gICAgICBpZiAoXG4gICAgICAgIGN1ckZvY3VzZWRFbGVtICE9PSBjb250YWluZXJJbmZvICYmXG4gICAgICAgIGNvbnRhaW5lckluZm8gJiZcbiAgICAgICAgY29udGFpbmVySW5mby5vd25lckRvY3VtZW50ICYmXG4gICAgICAgIGNvbnRhaW5zTm9kZShjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBjb250YWluZXJJbmZvKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsICE9PSBwcmlvclNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGNvbnRhaW5lckluZm8pXG4gICAgICAgIClcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24gPSBwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICAgIChjdXJGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kKSxcbiAgICAgICAgICAgIHZvaWQgMCA9PT0gY3VyRm9jdXNlZEVsZW0gJiZcbiAgICAgICAgICAgICAgKGN1ckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbiksXG4gICAgICAgICAgICBcInNlbGVjdGlvblN0YXJ0XCIgaW4gY29udGFpbmVySW5mbylcbiAgICAgICAgICApXG4gICAgICAgICAgICAoY29udGFpbmVySW5mby5zZWxlY3Rpb25TdGFydCA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pLFxuICAgICAgICAgICAgICAoY29udGFpbmVySW5mby5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBjdXJGb2N1c2VkRWxlbSxcbiAgICAgICAgICAgICAgICBjb250YWluZXJJbmZvLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICgoY3VyRm9jdXNlZEVsZW0gPVxuICAgICAgICAgICAgICAoKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24gPVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkgJiZcbiAgICAgICAgICAgICAgICBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmRlZmF1bHRWaWV3KSB8fFxuICAgICAgICAgICAgICB3aW5kb3cpLFxuICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uZ2V0U2VsZWN0aW9uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0gPSBjdXJGb2N1c2VkRWxlbS5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBjb250YWluZXJJbmZvLnRleHRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0LCBsZW5ndGgpO1xuICAgICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZSA9XG4gICAgICAgICAgICAgIHZvaWQgMCA9PT0gcHJpb3JTZWxlY3Rpb25SYW5nZS5lbmRcbiAgICAgICAgICAgICAgICA/IHN0YXJ0XG4gICAgICAgICAgICAgICAgOiBNYXRoLm1pbihwcmlvclNlbGVjdGlvblJhbmdlLmVuZCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICFjdXJGb2N1c2VkRWxlbS5leHRlbmQgJiZcbiAgICAgICAgICAgICAgc3RhcnQgPiBwcmlvclNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICAgICgobGVuZ3RoID0gcHJpb3JTZWxlY3Rpb25SYW5nZSksXG4gICAgICAgICAgICAgIChwcmlvclNlbGVjdGlvblJhbmdlID0gc3RhcnQpLFxuICAgICAgICAgICAgICAoc3RhcnQgPSBsZW5ndGgpKTtcbiAgICAgICAgICAgIGxlbmd0aCA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQoY29udGFpbmVySW5mbywgc3RhcnQpO1xuICAgICAgICAgICAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQoXG4gICAgICAgICAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZW5ndGggJiZcbiAgICAgICAgICAgICAgZW5kTWFya2VyICYmXG4gICAgICAgICAgICAgICgxICE9PSBjdXJGb2N1c2VkRWxlbS5yYW5nZUNvdW50IHx8XG4gICAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uYW5jaG9yTm9kZSAhPT0gbGVuZ3RoLm5vZGUgfHxcbiAgICAgICAgICAgICAgICBjdXJGb2N1c2VkRWxlbS5hbmNob3JPZmZzZXQgIT09IGxlbmd0aC5vZmZzZXQgfHxcbiAgICAgICAgICAgICAgICBjdXJGb2N1c2VkRWxlbS5mb2N1c05vZGUgIT09IGVuZE1hcmtlci5ub2RlIHx8XG4gICAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uZm9jdXNPZmZzZXQgIT09IGVuZE1hcmtlci5vZmZzZXQpICYmXG4gICAgICAgICAgICAgICgocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbiA9XG4gICAgICAgICAgICAgICAgcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5jcmVhdGVSYW5nZSgpKSxcbiAgICAgICAgICAgICAgcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZXRTdGFydChsZW5ndGgubm9kZSwgbGVuZ3RoLm9mZnNldCksXG4gICAgICAgICAgICAgIGN1ckZvY3VzZWRFbGVtLnJlbW92ZUFsbFJhbmdlcygpLFxuICAgICAgICAgICAgICBzdGFydCA+IHByaW9yU2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgICAgICAgICA/IChjdXJGb2N1c2VkRWxlbS5hZGRSYW5nZShwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSxcbiAgICAgICAgICAgICAgICAgIGN1ckZvY3VzZWRFbGVtLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCkpXG4gICAgICAgICAgICAgICAgOiAocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZXRFbmQoXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmtlci5ub2RlLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrZXIub2Zmc2V0XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0uYWRkUmFuZ2UocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikpKTtcbiAgICAgICAgICB9XG4gICAgICAgIHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24gPSBbXTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBjdXJGb2N1c2VkRWxlbSA9IGNvbnRhaW5lckluZm87XG4gICAgICAgICAgKGN1ckZvY3VzZWRFbGVtID0gY3VyRm9jdXNlZEVsZW0ucGFyZW50Tm9kZSk7XG5cbiAgICAgICAgKVxuICAgICAgICAgIDEgPT09IGN1ckZvY3VzZWRFbGVtLm5vZGVUeXBlICYmXG4gICAgICAgICAgICBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnB1c2goe1xuICAgICAgICAgICAgICBlbGVtZW50OiBjdXJGb2N1c2VkRWxlbSxcbiAgICAgICAgICAgICAgbGVmdDogY3VyRm9jdXNlZEVsZW0uc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgdG9wOiBjdXJGb2N1c2VkRWxlbS5zY3JvbGxUb3BcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250YWluZXJJbmZvLmZvY3VzICYmIGNvbnRhaW5lckluZm8uZm9jdXMoKTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBjb250YWluZXJJbmZvID0gMDtcbiAgICAgICAgICBjb250YWluZXJJbmZvIDwgcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5sZW5ndGg7XG4gICAgICAgICAgY29udGFpbmVySW5mbysrXG4gICAgICAgIClcbiAgICAgICAgICAoY3VyRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uW2NvbnRhaW5lckluZm9dKSxcbiAgICAgICAgICAgIChjdXJGb2N1c2VkRWxlbS5lbGVtZW50LnNjcm9sbExlZnQgPSBjdXJGb2N1c2VkRWxlbS5sZWZ0KSxcbiAgICAgICAgICAgIChjdXJGb2N1c2VkRWxlbS5lbGVtZW50LnNjcm9sbFRvcCA9IGN1ckZvY3VzZWRFbGVtLnRvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHZhciBkb2MgPVxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldC5kb2N1bWVudFxuICAgICAgICAgIDogOSA9PT0gbmF0aXZlRXZlbnRUYXJnZXQubm9kZVR5cGVcbiAgICAgICAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgIDogbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIG1vdXNlRG93biB8fFxuICAgICAgICBudWxsID09IGFjdGl2ZUVsZW1lbnQgfHxcbiAgICAgICAgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHx8XG4gICAgICAgICgoZG9jID0gYWN0aXZlRWxlbWVudCksXG4gICAgICAgIFwic2VsZWN0aW9uU3RhcnRcIiBpbiBkb2MgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGRvYylcbiAgICAgICAgICA/IChkb2MgPSB7IHN0YXJ0OiBkb2Muc2VsZWN0aW9uU3RhcnQsIGVuZDogZG9jLnNlbGVjdGlvbkVuZCB9KVxuICAgICAgICAgIDogKChkb2MgPSAoXG4gICAgICAgICAgICAgIChkb2Mub3duZXJEb2N1bWVudCAmJiBkb2Mub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICAgICAgd2luZG93XG4gICAgICAgICAgICApLmdldFNlbGVjdGlvbigpKSxcbiAgICAgICAgICAgIChkb2MgPSB7XG4gICAgICAgICAgICAgIGFuY2hvck5vZGU6IGRvYy5hbmNob3JOb2RlLFxuICAgICAgICAgICAgICBhbmNob3JPZmZzZXQ6IGRvYy5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgIGZvY3VzTm9kZTogZG9jLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgZm9jdXNPZmZzZXQ6IGRvYy5mb2N1c09mZnNldFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAobGFzdFNlbGVjdGlvbiAmJiBzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgZG9jKSkgfHxcbiAgICAgICAgICAoKGxhc3RTZWxlY3Rpb24gPSBkb2MpLFxuICAgICAgICAgIChkb2MgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QsIFwib25TZWxlY3RcIikpLFxuICAgICAgICAgIDAgPCBkb2MubGVuZ3RoICYmXG4gICAgICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgICAgICAgICBcIm9uU2VsZWN0XCIsXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogZG9jIH0pLFxuICAgICAgICAgICAgKG5hdGl2ZUV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQpKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gICAgICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgICAgIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcHJlZml4ZXNbXCJXZWJraXRcIiArIHN0eWxlUHJvcF0gPSBcIndlYmtpdFwiICsgZXZlbnROYW1lO1xuICAgICAgcHJlZml4ZXNbXCJNb3pcIiArIHN0eWxlUHJvcF0gPSBcIm1velwiICsgZXZlbnROYW1lO1xuICAgICAgcmV0dXJuIHByZWZpeGVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICAgICAgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSByZXR1cm4gZXZlbnROYW1lO1xuICAgICAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0sXG4gICAgICAgIHN0eWxlUHJvcDtcbiAgICAgIGZvciAoc3R5bGVQcm9wIGluIHByZWZpeE1hcClcbiAgICAgICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSlcbiAgICAgICAgICByZXR1cm4gKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF0pO1xuICAgICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSkge1xuICAgICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KGRvbUV2ZW50TmFtZSwgcmVhY3ROYW1lKTtcbiAgICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFtkb21FdmVudE5hbWVdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBlbmRJbmRleCA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleCxcbiAgICAgICAgICBpID0gKGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDApO1xuICAgICAgICBpIDwgZW5kSW5kZXg7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgZmliZXIgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgcXVldWUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgdXBkYXRlID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgdmFyIGxhbmUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gcXVldWUgJiYgbnVsbCAhPT0gdXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuICAgICAgICAgIG51bGwgPT09IHBlbmRpbmdcbiAgICAgICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICAgICAgOiAoKHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0KSwgKHBlbmRpbmcubmV4dCA9IHVwZGF0ZSkpO1xuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgMCAhPT0gbGFuZSAmJiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgdXBkYXRlLCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGZpYmVyO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBxdWV1ZTtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gdXBkYXRlO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBsYW5lO1xuICAgICAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzIHw9IGxhbmU7XG4gICAgICBmaWJlci5sYW5lcyB8PSBsYW5lO1xuICAgICAgZmliZXIgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBmaWJlciAmJiAoZmliZXIubGFuZXMgfD0gbGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKSB7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIG51bGwsIG51bGwsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICBzb3VyY2VGaWJlci5sYW5lcyB8PSBsYW5lO1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmxhbmVzIHw9IGxhbmUpO1xuICAgICAgZm9yICh2YXIgaXNIaWRkZW4gPSAhMSwgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICAgICAgKHBhcmVudC5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgICAgIChhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgICAgIDIyID09PSBwYXJlbnQudGFnICYmXG4gICAgICAgICAgICAoKHNvdXJjZUZpYmVyID0gcGFyZW50LnN0YXRlTm9kZSksXG4gICAgICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlciB8fFxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblZpc2libGUgfHxcbiAgICAgICAgICAgICAgKGlzSGlkZGVuID0gITApKSxcbiAgICAgICAgICAoc291cmNlRmliZXIgPSBwYXJlbnQpLFxuICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQucmV0dXJuKTtcbiAgICAgIGlzSGlkZGVuICYmXG4gICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJlxuICAgICAgICAzID09PSBzb3VyY2VGaWJlci50YWcgJiZcbiAgICAgICAgKChwYXJlbnQgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAoaXNIaWRkZW4gPSAzMSAtIGNsejMyKGxhbmUpKSxcbiAgICAgICAgKHBhcmVudCA9IHBhcmVudC5oaWRkZW5VcGRhdGVzKSxcbiAgICAgICAgKHNvdXJjZUZpYmVyID0gcGFyZW50W2lzSGlkZGVuXSksXG4gICAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyXG4gICAgICAgICAgPyAocGFyZW50W2lzSGlkZGVuXSA9IFt1cGRhdGVdKVxuICAgICAgICAgIDogc291cmNlRmliZXIucHVzaCh1cGRhdGUpLFxuICAgICAgICAodXBkYXRlLmxhbmUgPSBsYW5lIHwgNTM2ODcwOTEyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoc291cmNlRmliZXIpIHtcbiAgICAgIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IG5lc3RlZFVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgKHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsKSxcbiAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiXG4gICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCAmJlxuICAgICAgICAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IGNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gZXZlcnkgcmVuZGVyLlwiXG4gICAgICAgICkpO1xuICAgICAgbnVsbCA9PT0gc291cmNlRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgIDAgIT09IChzb3VyY2VGaWJlci5mbGFncyAmIDQwOTgpICYmXG4gICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgZm9yICh2YXIgbm9kZSA9IHNvdXJjZUZpYmVyLCBwYXJlbnQgPSBub2RlLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIG51bGwgPT09IG5vZGUuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJlxuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpLFxuICAgICAgICAgIChub2RlID0gcGFyZW50KSxcbiAgICAgICAgICAocGFyZW50ID0gbm9kZS5yZXR1cm4pO1xuICAgICAgcmV0dXJuIDMgPT09IG5vZGUudGFnID8gbm9kZS5zdGF0ZU5vZGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiB0eXBlO1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBmYW1pbHkgPyB0eXBlIDogZmFtaWx5LmN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09PSByZXNvbHZlRmFtaWx5KSByZXR1cm4gdHlwZTtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZmFtaWx5XG4gICAgICAgID8gbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUucmVuZGVyICYmXG4gICAgICAgICAgKChmYW1pbHkgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpKSxcbiAgICAgICAgICB0eXBlLnJlbmRlciAhPT0gZmFtaWx5KVxuICAgICAgICAgID8gKChmYW1pbHkgPSB7ICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLCByZW5kZXI6IGZhbWlseSB9KSxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZS5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAoZmFtaWx5LmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSksXG4gICAgICAgICAgICBmYW1pbHkpXG4gICAgICAgICAgOiB0eXBlXG4gICAgICAgIDogZmFtaWx5LmN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiAhMTtcbiAgICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQudHlwZTtcbiAgICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICExLFxuICAgICAgICAkJHR5cGVvZk5leHRUeXBlID1cbiAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudCAmJiBudWxsICE9PSBlbGVtZW50XG4gICAgICAgICAgICA/IGVsZW1lbnQuJCR0eXBlb2ZcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGVsZW1lbnRcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRVxuICAgICAgICAgICAgPyAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMClcbiAgICAgICAgICAgIDogJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5lZWRzQ29tcGFyZUZhbWlsaWVzICYmXG4gICAgICAgICgoZmliZXIgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKSksXG4gICAgICAgIHZvaWQgMCAhPT0gZmliZXIgJiYgZmliZXIgPT09IHJlc29sdmVGYW1pbHkoZWxlbWVudCkpXG4gICAgICAgID8gITBcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAgICAgIG51bGwgIT09IHJlc29sdmVGYW1pbHkgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha1NldCAmJlxuICAgICAgICAobnVsbCA9PT0gZmFpbGVkQm91bmRhcmllcyAmJiAoZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCkpLFxuICAgICAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgZmliZXIsXG4gICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICBzdGFsZUZhbWlsaWVzXG4gICAgKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZSxcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb2x2ZUZhbWlseSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC5cIik7XG4gICAgICB2YXIgbmVlZHNSZW5kZXIgPSAhMTtcbiAgICAgIHR5cGUgPSAhMTtcbiAgICAgIG51bGwgIT09IGNhbmRpZGF0ZVR5cGUgJiZcbiAgICAgICAgKChjYW5kaWRhdGVUeXBlID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKSksXG4gICAgICAgIHZvaWQgMCAhPT0gY2FuZGlkYXRlVHlwZSAmJlxuICAgICAgICAgIChzdGFsZUZhbWlsaWVzLmhhcyhjYW5kaWRhdGVUeXBlKVxuICAgICAgICAgICAgPyAodHlwZSA9ICEwKVxuICAgICAgICAgICAgOiB1cGRhdGVkRmFtaWxpZXMuaGFzKGNhbmRpZGF0ZVR5cGUpICYmXG4gICAgICAgICAgICAgICgxID09PSB0YWcgPyAodHlwZSA9ICEwKSA6IChuZWVkc1JlbmRlciA9ICEwKSkpKTtcbiAgICAgIG51bGwgIT09IGZhaWxlZEJvdW5kYXJpZXMgJiZcbiAgICAgICAgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fFxuICAgICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkpICYmXG4gICAgICAgICh0eXBlID0gITApO1xuICAgICAgdHlwZSAmJiAoZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gITApO1xuICAgICAgaWYgKHR5cGUgfHwgbmVlZHNSZW5kZXIpXG4gICAgICAgIChhbHRlcm5hdGUgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGFsdGVybmF0ZSwgZmliZXIsIDIpO1xuICAgICAgbnVsbCA9PT0gY2hpbGQgfHxcbiAgICAgICAgdHlwZSB8fFxuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICk7XG4gICAgICBudWxsICE9PSBzaWJsaW5nICYmXG4gICAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgc2libGluZyxcbiAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCkge1xuICAgICAgdmFyIHByZXZFZmZlY3REdXJhdGlvbiA9IHByb2ZpbGVyRWZmZWN0RHVyYXRpb247XG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgIHJldHVybiBwcmV2RWZmZWN0RHVyYXRpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2RWZmZWN0RHVyYXRpb24pIHtcbiAgICAgIHZhciBlbGFwc2VkVGltZSA9IHByb2ZpbGVyRWZmZWN0RHVyYXRpb247XG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKSB7XG4gICAgICB2YXIgZWxhcHNlZFRpbWUgPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiArPSBwcmV2RWZmZWN0RHVyYXRpb247XG4gICAgICByZXR1cm4gZWxhcHNlZFRpbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3coKTtcbiAgICAgIDAgPiBmaWJlci5hY3R1YWxTdGFydFRpbWUgJiYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IHByb2ZpbGVyU3RhcnRUaW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbihmaWJlcikge1xuICAgICAgaWYgKDAgPD0gcHJvZmlsZXJTdGFydFRpbWUpIHtcbiAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0gbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICAgICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvcmRFZmZlY3REdXJhdGlvbigpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0RWZmZWN0VGltZXIoKSB7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBmb3IgKHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkOyBjaGlsZDsgKVxuICAgICAgICAoZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLCAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZSkge1xuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBudWxsICE9PSB2YWx1ZSkge1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBDYXB0dXJlZFN0YWNrcy5nZXQodmFsdWUpO1xuICAgICAgICBpZiAodm9pZCAwICE9PSBleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICAgICAgICB9O1xuICAgICAgICBDYXB0dXJlZFN0YWNrcy5zZXQodmFsdWUsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgdG90YWxDaGlsZHJlbikge1xuICAgICAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gICAgICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXgrK10gPSB0cmVlRm9ya0NvdW50O1xuICAgICAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4KytdID0gdHJlZUZvcmtQcm92aWRlcjtcbiAgICAgIHRyZWVGb3JrUHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHRyZWVGb3JrQ291bnQgPSB0b3RhbENoaWxkcmVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCB0b3RhbENoaWxkcmVuLCBpbmRleCkge1xuICAgICAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gICAgICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0SWQ7XG4gICAgICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gICAgICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0UHJvdmlkZXI7XG4gICAgICB0cmVlQ29udGV4dFByb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB2YXIgYmFzZUlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgdmFyIGJhc2VMZW5ndGggPSAzMiAtIGNsejMyKGJhc2VJZFdpdGhMZWFkaW5nQml0KSAtIDE7XG4gICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdCAmPSB+KDEgPDwgYmFzZUxlbmd0aCk7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgdmFyIGxlbmd0aCA9IDMyIC0gY2x6MzIodG90YWxDaGlsZHJlbikgKyBiYXNlTGVuZ3RoO1xuICAgICAgaWYgKDMwIDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBudW1iZXJPZk92ZXJmbG93Qml0cyA9IGJhc2VMZW5ndGggLSAoYmFzZUxlbmd0aCAlIDUpO1xuICAgICAgICBsZW5ndGggPSAoXG4gICAgICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgJlxuICAgICAgICAgICgoMSA8PCBudW1iZXJPZk92ZXJmbG93Qml0cykgLSAxKVxuICAgICAgICApLnRvU3RyaW5nKDMyKTtcbiAgICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgPj49IG51bWJlck9mT3ZlcmZsb3dCaXRzO1xuICAgICAgICBiYXNlTGVuZ3RoIC09IG51bWJlck9mT3ZlcmZsb3dCaXRzO1xuICAgICAgICB0cmVlQ29udGV4dElkID1cbiAgICAgICAgICAoMSA8PCAoMzIgLSBjbHozMih0b3RhbENoaWxkcmVuKSArIGJhc2VMZW5ndGgpKSB8XG4gICAgICAgICAgKGluZGV4IDw8IGJhc2VMZW5ndGgpIHxcbiAgICAgICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdDtcbiAgICAgICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IGxlbmd0aCArIHdvcmtJblByb2dyZXNzO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh0cmVlQ29udGV4dElkID1cbiAgICAgICAgICAoMSA8PCBsZW5ndGgpIHwgKGluZGV4IDw8IGJhc2VMZW5ndGgpIHwgYmFzZUlkV2l0aExlYWRpbmdCaXQpLFxuICAgICAgICAgICh0cmVlQ29udGV4dE92ZXJmbG93ID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLnJldHVybiAmJlxuICAgICAgICAocHVzaFRyZWVGb3JrKHdvcmtJblByb2dyZXNzLCAxKSwgcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgMSwgMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgZm9yICg7IHdvcmtJblByb2dyZXNzID09PSB0cmVlRm9ya1Byb3ZpZGVyOyApXG4gICAgICAgICh0cmVlRm9ya1Byb3ZpZGVyID0gZm9ya1N0YWNrWy0tZm9ya1N0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGwpLFxuICAgICAgICAgICh0cmVlRm9ya0NvdW50ID0gZm9ya1N0YWNrWy0tZm9ya1N0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGwpO1xuICAgICAgZm9yICg7IHdvcmtJblByb2dyZXNzID09PSB0cmVlQ29udGV4dFByb3ZpZGVyOyApXG4gICAgICAgICh0cmVlQ29udGV4dFByb3ZpZGVyID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsKSxcbiAgICAgICAgICAodHJlZUNvbnRleHRPdmVyZmxvdyA9IGlkU3RhY2tbLS1pZFN0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbCksXG4gICAgICAgICAgKHRyZWVDb250ZXh0SWQgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XSksXG4gICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4XSA9IG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuSWZOb3RIeWRyYXRpbmcoKSB7XG4gICAgICBpc0h5ZHJhdGluZyB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gYmUgaHlkcmF0aW5nLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKGZpYmVyLCBkaXN0YW5jZUZyb21MZWFmKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZmliZXIucmV0dXJuKSB7XG4gICAgICAgIGlmIChudWxsID09PSBoeWRyYXRpb25EaWZmUm9vdERFVilcbiAgICAgICAgICBoeWRyYXRpb25EaWZmUm9vdERFViA9IHtcbiAgICAgICAgICAgIGZpYmVyOiBmaWJlcixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIHNlcnZlclByb3BzOiB2b2lkIDAsXG4gICAgICAgICAgICBzZXJ2ZXJUYWlsOiBbXSxcbiAgICAgICAgICAgIGRpc3RhbmNlRnJvbUxlYWY6IGRpc3RhbmNlRnJvbUxlYWZcbiAgICAgICAgICB9O1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoaHlkcmF0aW9uRGlmZlJvb3RERVYuZmliZXIgIT09IGZpYmVyKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiU2F3IG11bHRpcGxlIGh5ZHJhdGlvbiBkaWZmIHJvb3RzIGluIGEgcGFzcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBoeWRyYXRpb25EaWZmUm9vdERFVi5kaXN0YW5jZUZyb21MZWFmID4gZGlzdGFuY2VGcm9tTGVhZiAmJlxuICAgICAgICAgICAgKGh5ZHJhdGlvbkRpZmZSb290REVWLmRpc3RhbmNlRnJvbUxlYWYgPSBkaXN0YW5jZUZyb21MZWFmKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHlkcmF0aW9uRGlmZlJvb3RERVY7XG4gICAgICB9XG4gICAgICB2YXIgc2libGluZ3MgPSBidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKFxuICAgICAgICBmaWJlci5yZXR1cm4sXG4gICAgICAgIGRpc3RhbmNlRnJvbUxlYWYgKyAxXG4gICAgICApLmNoaWxkcmVuO1xuICAgICAgaWYgKDAgPCBzaWJsaW5ncy5sZW5ndGggJiYgc2libGluZ3Nbc2libGluZ3MubGVuZ3RoIC0gMV0uZmliZXIgPT09IGZpYmVyKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChzaWJsaW5ncyA9IHNpYmxpbmdzW3NpYmxpbmdzLmxlbmd0aCAtIDFdKSxcbiAgICAgICAgICBzaWJsaW5ncy5kaXN0YW5jZUZyb21MZWFmID4gZGlzdGFuY2VGcm9tTGVhZiAmJlxuICAgICAgICAgICAgKHNpYmxpbmdzLmRpc3RhbmNlRnJvbUxlYWYgPSBkaXN0YW5jZUZyb21MZWFmKSxcbiAgICAgICAgICBzaWJsaW5nc1xuICAgICAgICApO1xuICAgICAgZGlzdGFuY2VGcm9tTGVhZiA9IHtcbiAgICAgICAgZmliZXI6IGZpYmVyLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHNlcnZlclByb3BzOiB2b2lkIDAsXG4gICAgICAgIHNlcnZlclRhaWw6IFtdLFxuICAgICAgICBkaXN0YW5jZUZyb21MZWFmOiBkaXN0YW5jZUZyb21MZWFmXG4gICAgICB9O1xuICAgICAgc2libGluZ3MucHVzaChkaXN0YW5jZUZyb21MZWFmKTtcbiAgICAgIHJldHVybiBkaXN0YW5jZUZyb21MZWFmO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZShmaWJlciwgcmVqZWN0ZWRDYW5kaWRhdGUpIHtcbiAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWIHx8XG4gICAgICAgICgoZmliZXIgPSBidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKGZpYmVyLCAwKSksXG4gICAgICAgIChmaWJlci5zZXJ2ZXJQcm9wcyA9IG51bGwpLFxuICAgICAgICBudWxsICE9PSByZWplY3RlZENhbmRpZGF0ZSAmJlxuICAgICAgICAgICgocmVqZWN0ZWRDYW5kaWRhdGUgPVxuICAgICAgICAgICAgZGVzY3JpYmVIeWRyYXRhYmxlSW5zdGFuY2VGb3JEZXZXYXJuaW5ncyhyZWplY3RlZENhbmRpZGF0ZSkpLFxuICAgICAgICAgIGZpYmVyLnNlcnZlclRhaWwucHVzaChyZWplY3RlZENhbmRpZGF0ZSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKSB7XG4gICAgICB2YXIgZGlmZiA9IFwiXCIsXG4gICAgICAgIGRpZmZSb290ID0gaHlkcmF0aW9uRGlmZlJvb3RERVY7XG4gICAgICBudWxsICE9PSBkaWZmUm9vdCAmJlxuICAgICAgICAoKGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCksIChkaWZmID0gZGVzY3JpYmVEaWZmKGRpZmZSb290KSkpO1xuICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihcbiAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICBcIkh5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQuIEFzIGEgcmVzdWx0IHRoaXMgdHJlZSB3aWxsIGJlIHJlZ2VuZXJhdGVkIG9uIHRoZSBjbGllbnQuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIFNTUi1lZCBDbGllbnQgQ29tcG9uZW50IHVzZWQ6XFxuXFxuLSBBIHNlcnZlci9jbGllbnQgYnJhbmNoIGBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpYC5cXG4tIFZhcmlhYmxlIGlucHV0IHN1Y2ggYXMgYERhdGUubm93KClgIG9yIGBNYXRoLnJhbmRvbSgpYCB3aGljaCBjaGFuZ2VzIGVhY2ggdGltZSBpdCdzIGNhbGxlZC5cXG4tIERhdGUgZm9ybWF0dGluZyBpbiBhIHVzZXIncyBsb2NhbGUgd2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgc2VydmVyLlxcbi0gRXh0ZXJuYWwgY2hhbmdpbmcgZGF0YSB3aXRob3V0IHNlbmRpbmcgYSBzbmFwc2hvdCBvZiBpdCBhbG9uZyB3aXRoIHRoZSBIVE1MLlxcbi0gSW52YWxpZCBIVE1MIHRhZyBuZXN0aW5nLlxcblxcbkl0IGNhbiBhbHNvIGhhcHBlbiBpZiB0aGUgY2xpZW50IGhhcyBhIGJyb3dzZXIgZXh0ZW5zaW9uIGluc3RhbGxlZCB3aGljaCBtZXNzZXMgd2l0aCB0aGUgSFRNTCBiZWZvcmUgUmVhY3QgbG9hZGVkLlxcblxcbmh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoXCIgK1xuICAgICAgICAgICAgICBkaWZmXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmaWJlclxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhyb3cgSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIpIHtcbiAgICAgIHZhciBkaWRIeWRyYXRlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlLFxuICAgICAgICBwcm9wcyA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICBkaWRIeWRyYXRlW2ludGVybmFsSW5zdGFuY2VLZXldID0gZmliZXI7XG4gICAgICBkaWRIeWRyYXRlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHR5cGUsIHByb3BzKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNhbmNlbFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2xvc2VcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpZnJhbWVcIjpcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBjYXNlIFwiZW1iZWRcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInZpZGVvXCI6XG4gICAgICAgIGNhc2UgXCJhdWRpb1wiOlxuICAgICAgICAgIGZvciAodHlwZSA9IDA7IHR5cGUgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyB0eXBlKyspXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1t0eXBlXSwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzb3VyY2VcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgY2FzZSBcImltYWdlXCI6XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJpbnB1dFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgdmFsaWRhdGVJbnB1dFByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKTtcbiAgICAgICAgICBpbml0SW5wdXQoXG4gICAgICAgICAgICBkaWRIeWRyYXRlLFxuICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICBwcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICBwcm9wcy50eXBlLFxuICAgICAgICAgICAgcHJvcHMubmFtZSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFjayhkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIHZhbGlkYXRlT3B0aW9uUHJvcHMoZGlkSHlkcmF0ZSwgcHJvcHMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcInNlbGVjdFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgdmFsaWRhdGVTZWxlY3RQcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJ0ZXh0YXJlYVwiLCBwcm9wcyksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkaWRIeWRyYXRlKSxcbiAgICAgICAgICAgIHZhbGlkYXRlVGV4dGFyZWFQcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyksXG4gICAgICAgICAgICBpbml0VGV4dGFyZWEoXG4gICAgICAgICAgICAgIGRpZEh5ZHJhdGUsXG4gICAgICAgICAgICAgIHByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhY2soZGlkSHlkcmF0ZSk7XG4gICAgICB9XG4gICAgICB0eXBlID0gcHJvcHMuY2hpbGRyZW47XG4gICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJudW1iZXJcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJiaWdpbnRcIiAhPT0gdHlwZW9mIHR5cGUpIHx8XG4gICAgICBkaWRIeWRyYXRlLnRleHRDb250ZW50ID09PSBcIlwiICsgdHlwZSB8fFxuICAgICAgITAgPT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyB8fFxuICAgICAgY2hlY2tGb3JVbm1hdGNoZWRUZXh0KGRpZEh5ZHJhdGUudGV4dENvbnRlbnQsIHR5cGUpXG4gICAgICAgID8gKG51bGwgIT0gcHJvcHMucG9wb3ZlciAmJlxuICAgICAgICAgICAgKGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJiZWZvcmV0b2dnbGVcIiwgZGlkSHlkcmF0ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRpZEh5ZHJhdGUpKSxcbiAgICAgICAgICBudWxsICE9IHByb3BzLm9uU2Nyb2xsICYmXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgIG51bGwgIT0gcHJvcHMub25TY3JvbGxFbmQgJiZcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZGlkSHlkcmF0ZSksXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5vbkNsaWNrICYmIChkaWRIeWRyYXRlLm9uY2xpY2sgPSBub29wJDEpLFxuICAgICAgICAgIChkaWRIeWRyYXRlID0gITApKVxuICAgICAgICA6IChkaWRIeWRyYXRlID0gITEpO1xuICAgICAgZGlkSHlkcmF0ZSB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gICAgICBmb3IgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXIucmV0dXJuOyBoeWRyYXRpb25QYXJlbnRGaWJlcjsgKVxuICAgICAgICBzd2l0Y2ggKGh5ZHJhdGlvblBhcmVudEZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICExO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuICAgICAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikgcmV0dXJuICExO1xuICAgICAgaWYgKCFpc0h5ZHJhdGluZylcbiAgICAgICAgcmV0dXJuIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpLCAoaXNIeWRyYXRpbmcgPSAhMCksICExO1xuICAgICAgdmFyIHNob3VsZENsZWFyID0gITEsXG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgIGlmICgoSlNDb21waWxlcl90ZW1wID0gMyAhPT0gZmliZXIudGFnICYmIDI3ICE9PSBmaWJlci50YWcpKSB7XG4gICAgICAgIGlmICgoSlNDb21waWxlcl90ZW1wID0gNSA9PT0gZmliZXIudGFnKSlcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gZmliZXIudHlwZSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgICAgIShcImZvcm1cIiAhPT0gSlNDb21waWxlcl90ZW1wICYmIFwiYnV0dG9uXCIgIT09IEpTQ29tcGlsZXJfdGVtcCkgfHxcbiAgICAgICAgICAgICAgc2hvdWxkU2V0VGV4dENvbnRlbnQoZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSAhSlNDb21waWxlcl90ZW1wO1xuICAgICAgfVxuICAgICAgSlNDb21waWxlcl90ZW1wICYmIChzaG91bGRDbGVhciA9ICEwKTtcbiAgICAgIGlmIChzaG91bGRDbGVhciAmJiBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgICAgIGZvciAoc2hvdWxkQ2xlYXIgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlOyBzaG91bGRDbGVhcjsgKSB7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShmaWJlciwgMCk7XG4gICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgIGRlc2NyaWJlSHlkcmF0YWJsZUluc3RhbmNlRm9yRGV2V2FybmluZ3Moc2hvdWxkQ2xlYXIpO1xuICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5zZXJ2ZXJUYWlsLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICAgIHNob3VsZENsZWFyID1cbiAgICAgICAgICAgIFwiU3VzcGVuc2VcIiA9PT0gZGVzY3JpcHRpb24udHlwZVxuICAgICAgICAgICAgICA/IGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc2hvdWxkQ2xlYXIpXG4gICAgICAgICAgICAgIDogZ2V0TmV4dEh5ZHJhdGFibGUoc2hvdWxkQ2xlYXIubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChmaWJlcik7XG4gICAgICB9XG4gICAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICAgIGlmICgxMyA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgZmliZXIgPSBudWxsICE9PSBmaWJlciA/IGZpYmVyLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICBpZiAoIWZpYmVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID1cbiAgICAgICAgICBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXJcbiAgICAgICAgICA/IGdldE5leHRIeWRyYXRhYmxlKGZpYmVyLnN0YXRlTm9kZS5uZXh0U2libGluZylcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG4gICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSBpc0h5ZHJhdGluZyA9ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBxdWV1ZUh5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgICBudWxsID09PSBoeWRyYXRpb25FcnJvcnNcbiAgICAgICAgPyAoaHlkcmF0aW9uRXJyb3JzID0gW2Vycm9yXSlcbiAgICAgICAgOiBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtaXRQZW5kaW5nSHlkcmF0aW9uV2FybmluZ3MoKSB7XG4gICAgICB2YXIgZGlmZlJvb3QgPSBoeWRyYXRpb25EaWZmUm9vdERFVjtcbiAgICAgIG51bGwgIT09IGRpZmZSb290ICYmXG4gICAgICAgICgoaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsKSxcbiAgICAgICAgKGRpZmZSb290ID0gZGVzY3JpYmVEaWZmKGRpZmZSb290KSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBIHRyZWUgaHlkcmF0ZWQgYnV0IHNvbWUgYXR0cmlidXRlcyBvZiB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQgcHJvcGVydGllcy4gVGhpcyB3b24ndCBiZSBwYXRjaGVkIHVwLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBTU1ItZWQgQ2xpZW50IENvbXBvbmVudCB1c2VkOlxcblxcbi0gQSBzZXJ2ZXIvY2xpZW50IGJyYW5jaCBgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKWAuXFxuLSBWYXJpYWJsZSBpbnB1dCBzdWNoIGFzIGBEYXRlLm5vdygpYCBvciBgTWF0aC5yYW5kb20oKWAgd2hpY2ggY2hhbmdlcyBlYWNoIHRpbWUgaXQncyBjYWxsZWQuXFxuLSBEYXRlIGZvcm1hdHRpbmcgaW4gYSB1c2VyJ3MgbG9jYWxlIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlIHNlcnZlci5cXG4tIEV4dGVybmFsIGNoYW5naW5nIGRhdGEgd2l0aG91dCBzZW5kaW5nIGEgc25hcHNob3Qgb2YgaXQgYWxvbmcgd2l0aCB0aGUgSFRNTC5cXG4tIEludmFsaWQgSFRNTCB0YWcgbmVzdGluZy5cXG5cXG5JdCBjYW4gYWxzbyBoYXBwZW4gaWYgdGhlIGNsaWVudCBoYXMgYSBicm93c2VyIGV4dGVuc2lvbiBpbnN0YWxsZWQgd2hpY2ggbWVzc2VzIHdpdGggdGhlIEhUTUwgYmVmb3JlIFJlYWN0IGxvYWRlZC5cXG5cXG4lcyVzXCIsXG4gICAgICAgICAgXCJodHRwczovL3JlYWN0LmRldi9saW5rL2h5ZHJhdGlvbi1taXNtYXRjaFwiLFxuICAgICAgICAgIGRpZmZSb290XG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUaGVuYWJsZVN0YXRlKCkge1xuICAgICAgcmV0dXJuIHsgZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlOiAhMSwgdGhlbmFibGVzOiBbXSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RoZW5hYmxlUmVzb2x2ZWQodGhlbmFibGUpIHtcbiAgICAgIHRoZW5hYmxlID0gdGhlbmFibGUuc3RhdHVzO1xuICAgICAgcmV0dXJuIFwiZnVsZmlsbGVkXCIgPT09IHRoZW5hYmxlIHx8IFwicmVqZWN0ZWRcIiA9PT0gdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMygpIHt9XG4gICAgZnVuY3Rpb24gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KSB7XG4gICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuZGlkVXNlUHJvbWlzZSA9ICEwKTtcbiAgICAgIHZhciB0cmFja2VkVGhlbmFibGVzID0gdGhlbmFibGVTdGF0ZS50aGVuYWJsZXM7XG4gICAgICBpbmRleCA9IHRyYWNrZWRUaGVuYWJsZXNbaW5kZXhdO1xuICAgICAgdm9pZCAwID09PSBpbmRleFxuICAgICAgICA/IHRyYWNrZWRUaGVuYWJsZXMucHVzaCh0aGVuYWJsZSlcbiAgICAgICAgOiBpbmRleCAhPT0gdGhlbmFibGUgJiZcbiAgICAgICAgICAodGhlbmFibGVTdGF0ZS5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UgfHxcbiAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZS5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IHdhcyBzdXNwZW5kZWQgYnkgYW4gdW5jYWNoZWQgcHJvbWlzZS4gQ3JlYXRpbmcgcHJvbWlzZXMgaW5zaWRlIGEgQ2xpZW50IENvbXBvbmVudCBvciBob29rIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBleGNlcHQgdmlhIGEgU3VzcGVuc2UtY29tcGF0aWJsZSBsaWJyYXJ5IG9yIGZyYW1ld29yay5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgdGhlbmFibGUudGhlbihub29wJDMsIG5vb3AkMyksXG4gICAgICAgICAgKHRoZW5hYmxlID0gaW5kZXgpKTtcbiAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCh0aGVuYWJsZVN0YXRlKSxcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHRoZW5hYmxlLnN0YXR1cylcbiAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4obm9vcCQzLCBub29wJDMpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGhlbmFibGVTdGF0ZSAmJlxuICAgICAgICAgICAgICAxMDAgPCB0aGVuYWJsZVN0YXRlLnNoZWxsU3VzcGVuZENvdW50ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJhc3luYy9hd2FpdCBpcyBub3QgeWV0IHN1cHBvcnRlZCBpbiBDbGllbnQgQ29tcG9uZW50cywgb25seSBTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUuc3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gICAgICAgICAgICB0aGVuYWJsZVN0YXRlLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChmdWxmaWxsZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgICAgICBmdWxmaWxsZWRUaGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICEwO1xuICAgICAgICAgIHRocm93IFN1c3BlbnNlRXhjZXB0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRUaGVuYWJsZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBhIHN1c3BlbmRlZCB0aGVuYWJsZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciB0aGVuYWJsZSA9IHN1c3BlbmRlZFRoZW5hYmxlO1xuICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSAhMTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2gocmVqZWN0ZWRSZWFzb24pIHtcbiAgICAgIGlmIChyZWplY3RlZFJlYXNvbiA9PT0gU3VzcGVuc2VFeGNlcHRpb24pXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSG9va3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFuIGFzeW5jIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaERlYnVnSW5mbyhkZWJ1Z0luZm8pIHtcbiAgICAgIHZhciBwcmV2aW91c0RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICBudWxsICE9IGRlYnVnSW5mbyAmJlxuICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNEZWJ1Z0luZm9cbiAgICAgICAgICAgID8gZGVidWdJbmZvXG4gICAgICAgICAgICA6IHByZXZpb3VzRGVidWdJbmZvLmNvbmNhdChkZWJ1Z0luZm8pKTtcbiAgICAgIHJldHVybiBwcmV2aW91c0RlYnVnSW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQsIGZpYmVyLCByZXR1cm5GaWJlcikge1xuICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQucHJvcHMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChcImNoaWxkcmVuXCIgIT09IGtleSAmJiBcImtleVwiICE9PSBrZXkpIHtcbiAgICAgICAgICBudWxsID09PSBmaWJlciAmJlxuICAgICAgICAgICAgKChmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgMCkpLFxuICAgICAgICAgICAgKGZpYmVyLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIChmaWJlci5yZXR1cm4gPSByZXR1cm5GaWJlcikpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3JlZEtleSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy5cIixcbiAgICAgICAgICAgICAgICBlcnJvcmVkS2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXIkMTtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgKz0gMTtcbiAgICAgIG51bGwgPT09IHRoZW5hYmxlU3RhdGUkMSAmJiAodGhlbmFibGVTdGF0ZSQxID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpKTtcbiAgICAgIHJldHVybiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlJDEsIHRoZW5hYmxlLCBpbmRleCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvZXJjZVJlZih3b3JrSW5Qcm9ncmVzcywgZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucHJvcHMucmVmO1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmID0gdm9pZCAwICE9PSBlbGVtZW50ID8gZWxlbWVudCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEVHQUNZX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0EgUmVhY3QgRWxlbWVudCBmcm9tIGFuIG9sZGVyIHZlcnNpb24gb2YgUmVhY3Qgd2FzIHJlbmRlcmVkLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbiBoYXBwZW4gaWY6XFxuLSBNdWx0aXBsZSBjb3BpZXMgb2YgdGhlIFwicmVhY3RcIiBwYWNrYWdlIGlzIHVzZWQuXFxuLSBBIGxpYnJhcnkgcHJlLWJ1bmRsZWQgYW4gb2xkIGNvcHkgb2YgXCJyZWFjdFwiIG9yIFwicmVhY3QvanN4LXJ1bnRpbWVcIi5cXG4tIEEgY29tcGlsZXIgdHJpZXMgdG8gXCJpbmxpbmVcIiBKU1ggaW5zdGVhZCBvZiB1c2luZyB0aGUgcnVudGltZS4nXG4gICAgICAgICk7XG4gICAgICByZXR1cm5GaWJlciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCk7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgICAgICAoXCJbb2JqZWN0IE9iamVjdF1cIiA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgOiByZXR1cm5GaWJlcikgK1xuICAgICAgICAgIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIGludmFsaWRDaGlsZCkge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW3BhcmVudE5hbWVdIHx8XG4gICAgICAgICgob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW3BhcmVudE5hbWVdID0gITApLFxuICAgICAgICAoaW52YWxpZENoaWxkID1cbiAgICAgICAgICBpbnZhbGlkQ2hpbGQuZGlzcGxheU5hbWUgfHwgaW52YWxpZENoaWxkLm5hbWUgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgIDMgPT09IHJldHVybkZpYmVyLnRhZ1xuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgeW91IHJldHVybiAlcyBpbnN0ZWFkIG9mIDwlcyAvPiBmcm9tIHJlbmRlci4gT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuXFxuICByb290LnJlbmRlciglcylcIixcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgeW91IHJldHVybiAlcyBpbnN0ZWFkIG9mIDwlcyAvPiBmcm9tIHJlbmRlci4gT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuXFxuICA8JXM+eyVzfTwvJXM+XCIsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWVcbiAgICAgICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBpbnZhbGlkQ2hpbGQpIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcbiAgICAgIG93bmVySGFzU3ltYm9sVHlwZVdhcm5pbmdbcGFyZW50TmFtZV0gfHxcbiAgICAgICAgKChvd25lckhhc1N5bWJvbFR5cGVXYXJuaW5nW3BhcmVudE5hbWVdID0gITApLFxuICAgICAgICAoaW52YWxpZENoaWxkID0gU3RyaW5nKGludmFsaWRDaGlsZCkpLFxuICAgICAgICAzID09PSByZXR1cm5GaWJlci50YWdcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiU3ltYm9scyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuXFxuICByb290LnJlbmRlciglcylcIixcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlN5bWJvbHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLlxcbiAgPCVzPiVzPC8lcz5cIixcbiAgICAgICAgICAgICAgcGFyZW50TmFtZSxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lXG4gICAgICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcbiAgICAgICAgICBudWxsID09PSBkZWxldGlvbnNcbiAgICAgICAgICAgID8gKChyZXR1cm5GaWJlci5kZWxldGlvbnMgPSBbY2hpbGRUb0RlbGV0ZV0pLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMTYpKVxuICAgICAgICAgICAgOiBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIGZvciAoOyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKVxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgICAgICBmb3IgKHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpOyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKVxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkLmtleVxuICAgICAgICAgICAgPyBleGlzdGluZ0NoaWxkcmVuLnNldChjdXJyZW50Rmlyc3RDaGlsZC5rZXksIGN1cnJlbnRGaXJzdENoaWxkKVxuICAgICAgICAgICAgOiBleGlzdGluZ0NoaWxkcmVuLnNldChjdXJyZW50Rmlyc3RDaGlsZC5pbmRleCwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgICAgICBmaWJlciA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgICAgICBmaWJlci5pbmRleCA9IDA7XG4gICAgICAgIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cylcbiAgICAgICAgICByZXR1cm4gKG5ld0ZpYmVyLmZsYWdzIHw9IDEwNDg1NzYpLCBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICAgIG5ld0luZGV4ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV3SW5kZXgpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChuZXdJbmRleCA9IG5ld0luZGV4LmluZGV4KSxcbiAgICAgICAgICAgIG5ld0luZGV4IDwgbGFzdFBsYWNlZEluZGV4XG4gICAgICAgICAgICAgID8gKChuZXdGaWJlci5mbGFncyB8PSAzMzU1NDQzNCksIGxhc3RQbGFjZWRJbmRleClcbiAgICAgICAgICAgICAgOiBuZXdJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IDMzNTU0NDM0O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgKG5ld0ZpYmVyLmZsYWdzIHw9IDMzNTU0NDM0KTtcbiAgICAgICAgcmV0dXJuIG5ld0ZpYmVyO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCA2ICE9PSBjdXJyZW50LnRhZylcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgICAgICB0ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LnR5cGU7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB1cGRhdGVGcmFnbWVudChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBlbGVtZW50LmtleVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCwgY3VycmVudCwgcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8XG4gICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgfHxcbiAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICBjYWxsTGF6eUluaXRJbkRFVihlbGVtZW50VHlwZSkgPT09IGN1cnJlbnQudHlwZSkpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKSksXG4gICAgICAgICAgICBjb2VyY2VSZWYoY3VycmVudCwgZWxlbWVudCksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICAgIGNvZXJjZVJlZihjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICA0ICE9PSBjdXJyZW50LnRhZyB8fFxuICAgICAgICAgIGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8XG4gICAgICAgICAgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpKSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNyAhPT0gY3VycmVudC50YWcpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIGZyYWdtZW50LFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobmV3Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgICAgICBcIlwiICsgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChuZXdDaGlsZC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgY29lcmNlUmVmKGxhbmVzLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIF9wcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCk7XG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbztcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoX3ByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgICAgICB2YXIga2V5ID0gbnVsbCAhPT0gb2xkRmliZXIgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBudWxsICE9PSBrZXlcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsIFwiXCIgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZC5rZXkgPT09IGtleVxuICAgICAgICAgICAgICAgID8gKChrZXkgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0ga2V5KSxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXdDaGlsZC5rZXkgPT09IGtleVxuICAgICAgICAgICAgICAgID8gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChrZXkgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCkpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0ga2V5KSxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0ga2V5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBrZXk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBrZXkpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgbmV3SWR4LFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbCksXG4gICAgICAgICAgICB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgXCJcIiArIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKG5ld0lkeCA9XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICApIHx8IG51bGwpLFxuICAgICAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gZXhpc3RpbmdDaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgKSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICB2YXIgX3ByZXZEZWJ1Z0luZm83ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCk7XG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gX3ByZXZEZWJ1Z0luZm83O1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAobmV3SWR4ID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gZXhpc3RpbmdDaGlsZHJlbiksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKF9wcmV2RGVidWdJbmZvNyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbzcpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkLCBrbm93bktleXMpIHtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiBjaGlsZCB8fCBudWxsID09PSBjaGlsZCkgcmV0dXJuIGtub3duS2V5cztcbiAgICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG4gICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGtleSkgYnJlYWs7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0ga25vd25LZXlzKSB7XG4gICAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVih3b3JrSW5Qcm9ncmVzcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCBgJXNgLiBLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5IGFjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlIGR1cGxpY2F0ZWQgYW5kL29yIG9taXR0ZWQgXFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kIGNvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlwiLFxuICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIChjaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKGNoaWxkKSksXG4gICAgICAgICAgICAgIHdhcm5PbkludmFsaWRLZXkocmV0dXJuRmliZXIsIHdvcmtJblByb2dyZXNzLCBjaGlsZCwga25vd25LZXlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBrbm93bktleXMgPSBudWxsLFxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbnVsbCxcbiAgICAgICAgICAgIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgICAgIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgIG5ld0lkeCsrXG4gICAgICAgICkge1xuICAgICAgICAgIG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4XG4gICAgICAgICAgICA/ICgobmV4dE9sZEZpYmVyID0gb2xkRmliZXIpLCAob2xkRmliZXIgPSBudWxsKSlcbiAgICAgICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV3RmliZXIpIHtcbiAgICAgICAgICAgIG51bGwgPT09IG9sZEZpYmVyICYmIChvbGRGaWJlciA9IG5leHRPbGRGaWJlcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3RmliZXIsXG4gICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICBvbGRGaWJlciAmJlxuICAgICAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChuZXdGaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCk7XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyKVxuICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXIpO1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlciksXG4gICAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCksXG4gICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IG9sZEZpYmVyKSB7XG4gICAgICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspXG4gICAgICAgICAgICAob2xkRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG9sZEZpYmVyKVxuICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gb2xkRmliZXIpLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gb2xkRmliZXIpKTtcbiAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChcbiAgICAgICAgICBvbGRGaWJlciA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKG9sZEZpYmVyKTtcbiAgICAgICAgICBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgbmV3SWR4KytcbiAgICAgICAgKVxuICAgICAgICAgIChuZXh0T2xkRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyICYmXG4gICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgb2xkRmliZXIuZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dE9sZEZpYmVyLmtleSA/IG5ld0lkeCA6IG5leHRPbGRGaWJlci5rZXlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV4dE9sZEZpYmVyKVxuICAgICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5leHRPbGRGaWJlciksXG4gICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gbmV4dE9sZEZpYmVyKSk7XG4gICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkcmVuLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChudWxsID09IG5ld0NoaWxkcmVuKVxuICAgICAgICAgIHRocm93IEVycm9yKFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiKTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGwsXG4gICAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbnVsbCxcbiAgICAgICAgICAgIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBuZXdJZHggPSAoY3VycmVudEZpcnN0Q2hpbGQgPSAwKSxcbiAgICAgICAgICAgIG5leHRPbGRGaWJlciA9IG51bGwsXG4gICAgICAgICAgICBrbm93bktleXMgPSBudWxsLFxuICAgICAgICAgICAgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJiAhc3RlcC5kb25lO1xuICAgICAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpXG4gICAgICAgICkge1xuICAgICAgICAgIG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4XG4gICAgICAgICAgICA/ICgobmV4dE9sZEZpYmVyID0gb2xkRmliZXIpLCAob2xkRmliZXIgPSBudWxsKSlcbiAgICAgICAgICAgIDogKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IG5ld0ZpYmVyKSB7XG4gICAgICAgICAgICBudWxsID09PSBvbGRGaWJlciAmJiAob2xkRmliZXIgPSBuZXh0T2xkRmliZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0ZpYmVyLFxuICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICk7XG4gICAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgb2xkRmliZXIgJiZcbiAgICAgICAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpO1xuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcilcbiAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyKTtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXAuZG9uZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKSxcbiAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KSxcbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gb2xkRmliZXIpIHtcbiAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpXG4gICAgICAgICAgICAob2xkRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG9sZEZpYmVyKVxuICAgICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gb2xkRmliZXIpLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gb2xkRmliZXIpKTtcbiAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChcbiAgICAgICAgICBvbGRGaWJlciA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKG9sZEZpYmVyKTtcbiAgICAgICAgICAhc3RlcC5kb25lO1xuICAgICAgICAgIG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpXG4gICAgICAgIClcbiAgICAgICAgICAobmV4dE9sZEZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlciAmJlxuICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIG9sZEZpYmVyLmRlbGV0ZShcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IG5leHRPbGRGaWJlci5rZXkgPyBuZXdJZHggOiBuZXh0T2xkRmliZXIua2V5XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5leHRPbGRGaWJlcilcbiAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXh0T2xkRmliZXIpLFxuICAgICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG5leHRPbGRGaWJlcikpO1xuICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgb2xkRmliZXIuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIG51bGwgIT09IG5ld0NoaWxkICYmXG4gICAgICAgICAgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJlxuICAgICAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSAmJlxuICAgICAgICAgICh2YWxpZGF0ZUZyYWdtZW50UHJvcHMobmV3Q2hpbGQsIG51bGwsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAobmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbikpO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIG51bGwgIT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSA9IG5ld0NoaWxkLmtleTsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7ICkge1xuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5ld0NoaWxkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoNyA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLl9kZWJ1Z093bmVyID0gbmV3Q2hpbGQuX293bmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMobmV3Q2hpbGQsIGxhbmVzLCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuZWxlbWVudFR5cGUgPT09IGtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMYXp5SW5pdEluREVWKGtleSkgPT09IGN1cnJlbnRGaXJzdENoaWxkLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgY29lcmNlUmVmKGxhbmVzLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnT3duZXIgPSBuZXdDaGlsZC5fb3duZXI7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEVcbiAgICAgICAgICAgICAgICAgID8gKChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhuZXdDaGlsZCwgbGFuZXMsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKVxuICAgICAgICAgICAgICAgICAgOiAoKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbztcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8gPSBuZXdDaGlsZDtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQgPSBwcmV2RGVidWdJbmZvLmtleTtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQua2V5ID09PSBuZXdDaGlsZClcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIDQgPT09IGN1cnJlbnRGaXJzdENoaWxkLnRhZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mby5jb250YWluZXJJbmZvICYmXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mby5pbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMgPSB1c2VGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mby5jaGlsZHJlbiB8fCBbXVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2UgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFuZXMgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwoXG4gICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkID0gY2FsbExhenlJbml0SW5ERVYobmV3Q2hpbGQpKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbyksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgcHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICBrZXkgPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBrZXkpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIG5ld0NoaWxkcmVuID0ga2V5LmNhbGwobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkcmVuID09PSBuZXdDaGlsZCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgMCAhPT0gcmV0dXJuRmliZXIudGFnIHx8XG4gICAgICAgICAgICAgICAgXCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiICE9PVxuICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJldHVybkZpYmVyLnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgXCJbb2JqZWN0IEdlbmVyYXRvcl1cIiAhPT1cbiAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZHJlbilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgfHxcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVXNpbmcgSXRlcmF0b3JzIGFzIGNoaWxkcmVuIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseSB5aWVsZCB1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiBZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgYFsuLi5zcHJlYWRdYCBvcGVyYXRvciBiZWZvcmUgcmVuZGVyaW5nLiBZb3UgY2FuIGFsc28gdXNlIGFuIEl0ZXJhYmxlIHRoYXQgY2FuIGl0ZXJhdGUgbXVsdGlwbGUgdGltZXMgb3ZlciB0aGUgc2FtZSBpdGVtcy5cIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gITApO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIG5ld0NoaWxkLmVudHJpZXMgIT09IGtleSB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4sXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm87XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBcIlwiICsgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQgJiYgNiA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnXG4gICAgICAgICAgICAgID8gKGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAobGFuZXMgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgcHJldkRlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKVxuICAgICAgICAgICAgICA6IChkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgICAgIChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoXG4gICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpLFxuICAgICAgICAgICAgcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcilcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgdmFyIHByZXZEZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgICAgICAgICB2YXIgZmlyc3RDaGlsZEZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGRGaWJlcjtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGlmICh4ID09PSBTdXNwZW5zZUV4Y2VwdGlvbikgdGhyb3cgeDtcbiAgICAgICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcigyOSwgeCwgbnVsbCwgcmV0dXJuRmliZXIubW9kZSk7XG4gICAgICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgICAgICBmaWJlci5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICB2YXIgZGVidWdJbmZvID0gKGZpYmVyLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKTtcbiAgICAgICAgICBmaWJlci5fZGVidWdPd25lciA9IHJldHVybkZpYmVyLl9kZWJ1Z093bmVyO1xuICAgICAgICAgIGlmIChudWxsICE9IGRlYnVnSW5mbylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWJ1Z0luZm8ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pXG4gICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZGVidWdJbmZvW2ldLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBkZWJ1Z0luZm9baV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm87XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIaWRkZW5Db250ZXh0KGZpYmVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzID0gZW50YW5nbGVkUmVuZGVyTGFuZXM7XG4gICAgICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzLCBmaWJlcik7XG4gICAgICBwdXNoKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzIHwgY29udGV4dC5iYXNlTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soZmliZXIpIHtcbiAgICAgIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBlbnRhbmdsZWRSZW5kZXJMYW5lcywgZmliZXIpO1xuICAgICAgcHVzaChcbiAgICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvcixcbiAgICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICBmaWJlclxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSGlkZGVuQ29udGV4dChmaWJlcikge1xuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgICAgIHBvcChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwb3AocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGhhbmRsZXIuYWx0ZXJuYXRlO1xuICAgICAgcHVzaChcbiAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2ssXG4gICAgICAgIGhhbmRsZXJcbiAgICAgICk7XG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBoYW5kbGVyLCBoYW5kbGVyKTtcbiAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkgJiZcbiAgICAgICAgKG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50XG4gICAgICAgICAgPyAoc2hlbGxCb3VuZGFyeSA9IGhhbmRsZXIpXG4gICAgICAgICAgOiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiYgKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgICAgIGlmICgyMiA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAocHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIGZpYmVyKSxcbiAgICAgICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpLFxuICAgICAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKHNoZWxsQm91bmRhcnkgPSBmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpIHtcbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBmaWJlcik7XG4gICAgICBwdXNoKFxuICAgICAgICBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvcixcbiAgICAgICAgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgZmliZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAgICAgcG9wKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBzaGVsbEJvdW5kYXJ5ID09PSBmaWJlciAmJiAoc2hlbGxCb3VuZGFyeSA9IG51bGwpO1xuICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICAgICAgZm9yICh2YXIgbm9kZSA9IHJvdzsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgICAgIGlmICgxMyA9PT0gbm9kZS50YWcpIHtcbiAgICAgICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gc3RhdGUgJiZcbiAgICAgICAgICAgICgoc3RhdGUgPSBzdGF0ZS5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgIG51bGwgPT09IHN0YXRlIHx8XG4gICAgICAgICAgICAgIHN0YXRlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgICBzdGF0ZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIDE5ID09PSBub2RlLnRhZyAmJlxuICAgICAgICAgIHZvaWQgMCAhPT0gbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICgwICE9PSAobm9kZS5mbGFncyAmIDEyOCkpIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bGwgIT09IG5vZGUuY2hpbGQpIHtcbiAgICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUgPT09IHJvdykgYnJlYWs7XG4gICAgICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gcm93KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udHJvbGxlcjogbmV3IEFib3J0Q29udHJvbGxlckxvY2FsKCksXG4gICAgICAgIGRhdGE6IG5ldyBNYXAoKSxcbiAgICAgICAgcmVmQ291bnQ6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldGFpbkNhY2hlKGNhY2hlKSB7XG4gICAgICBjYWNoZS5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIkEgY2FjaGUgaW5zdGFuY2Ugd2FzIHJldGFpbmVkIGFmdGVyIGl0IHdhcyBhbHJlYWR5IGZyZWVkLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIGNhY2hlLnJlZkNvdW50Kys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VDYWNoZShjYWNoZSkge1xuICAgICAgY2FjaGUucmVmQ291bnQtLTtcbiAgICAgIDAgPiBjYWNoZS5yZWZDb3VudCAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJBIGNhY2hlIGluc3RhbmNlIHdhcyByZWxlYXNlZCBhZnRlciBpdCB3YXMgYWxyZWFkeSBmcmVlZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICAwID09PSBjYWNoZS5yZWZDb3VudCAmJlxuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDIoTm9ybWFsUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYWNoZS5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZUFzeW5jQWN0aW9uKHRyYW5zaXRpb24sIHRoZW5hYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVycykge1xuICAgICAgICB2YXIgZW50YW5nbGVkTGlzdGVuZXJzID0gKGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBbXSk7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQgPSAwO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSB7XG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogdm9pZCAwLFxuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBlbnRhbmdsZWRMaXN0ZW5lcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50Kys7XG4gICAgICB0aGVuYWJsZS50aGVuKHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUsIHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUpO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlKCkge1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAtLWN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVyc1xuICAgICAgKSB7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSAmJlxuICAgICAgICAgIChjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIik7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZExhbmUgPSAwO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgKDAsIGxpc3RlbmVyc1tpXSkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hhaW5UaGVuYWJsZVZhbHVlKHRoZW5hYmxlLCByZXN1bHQpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXSxcbiAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUgPSB7XG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICByZWFzb246IG51bGwsXG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKHJlc29sdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlLnZhbHVlID0gcmVzdWx0O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSAoMCwgbGlzdGVuZXJzW2ldKShyZXN1bHQpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgZm9yIChlcnJvciA9IDA7IGVycm9yIDwgbGlzdGVuZXJzLmxlbmd0aDsgZXJyb3IrKylcbiAgICAgICAgICAgICgwLCBsaXN0ZW5lcnNbZXJyb3JdKSh2b2lkIDApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlV2l0aE92ZXJyaWRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWVrQ2FjaGVGcm9tUG9vbCgpIHtcbiAgICAgIHZhciBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXIgPSByZXN1bWVkQ2FjaGUuY3VycmVudDtcbiAgICAgIHJldHVybiBudWxsICE9PSBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXJcbiAgICAgICAgPyBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXJcbiAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3QucG9vbGVkQ2FjaGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hUcmFuc2l0aW9uKG9mZnNjcmVlbldvcmtJblByb2dyZXNzLCBwcmV2Q2FjaGVQb29sKSB7XG4gICAgICBudWxsID09PSBwcmV2Q2FjaGVQb29sXG4gICAgICAgID8gcHVzaChyZXN1bWVkQ2FjaGUsIHJlc3VtZWRDYWNoZS5jdXJyZW50LCBvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcylcbiAgICAgICAgOiBwdXNoKHJlc3VtZWRDYWNoZSwgcHJldkNhY2hlUG9vbC5wb29sLCBvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZENhY2hlKCkge1xuICAgICAgdmFyIGNhY2hlRnJvbVBvb2wgPSBwZWVrQ2FjaGVGcm9tUG9vbCgpO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGNhY2hlRnJvbVBvb2xcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogeyBwYXJlbnQ6IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlLCBwb29sOiBjYWNoZUZyb21Qb29sIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICAgICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG4gICAgICBudWxsID09PSBob29rVHlwZXNEZXZcbiAgICAgICAgPyAoaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXSlcbiAgICAgICAgOiBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAgICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBob29rVHlwZXNEZXYgJiZcbiAgICAgICAgKGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2KyssXG4gICAgICAgIGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihcbiAgICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpLFxuICAgICAgICAgIG51bGwgIT09IGhvb2tUeXBlc0RldilcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yICh2YXIgdGFibGUgPSBcIlwiLCBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV0sXG4gICAgICAgICAgICAgIG5ld0hvb2tOYW1lID1cbiAgICAgICAgICAgICAgICBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBvbGRIb29rTmFtZSA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7XG4gICAgICAgICAgICAgIDMwID4gb2xkSG9va05hbWUubGVuZ3RoO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIG9sZEhvb2tOYW1lICs9IFwiIFwiO1xuICAgICAgICAgICAgb2xkSG9va05hbWUgKz0gbmV3SG9va05hbWUgKyBcIlxcblwiO1xuICAgICAgICAgICAgdGFibGUgKz0gb2xkSG9va05hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiBUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4gICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiVzICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgdGFibGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gZGVwcyB8fFxuICAgICAgICBudWxsID09PSBkZXBzIHx8XG4gICAgICAgIGlzQXJyYXlJbXBsKGRlcHMpIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiBzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LlwiLFxuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2LFxuICAgICAgICAgIHR5cGVvZiBkZXBzXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgICAgZGlkV2FybkFib3V0VXNlRm9ybVN0YXRlLmhhcyhjb21wb25lbnROYW1lKSB8fFxuICAgICAgICAoZGlkV2FybkFib3V0VXNlRm9ybVN0YXRlLmFkZChjb21wb25lbnROYW1lKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlYWN0RE9NLnVzZUZvcm1TdGF0ZSBoYXMgYmVlbiByZW5hbWVkIHRvIFJlYWN0LnVzZUFjdGlvblN0YXRlLiBQbGVhc2UgdXBkYXRlICVzIHRvIHVzZSBSZWFjdC51c2VBY3Rpb25TdGF0ZS5cIixcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAgICAgIGlmIChpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcykgcmV0dXJuICExO1xuICAgICAgaWYgKG51bGwgPT09IHByZXZEZXBzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGl0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLlwiLFxuICAgICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXZcbiAgICAgICAgICApLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG5QcmV2aW91czogJXNcXG5JbmNvbWluZzogJXNcIixcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldixcbiAgICAgICAgICBcIltcIiArIHByZXZEZXBzLmpvaW4oXCIsIFwiKSArIFwiXVwiLFxuICAgICAgICAgIFwiW1wiICsgbmV4dERlcHMuam9pbihcIiwgXCIpICsgXCJdXCJcbiAgICAgICAgKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSByZXR1cm4gITE7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgc2Vjb25kQXJnLFxuICAgICAgbmV4dFJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIGhvb2tUeXBlc0RldiA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyA6IG51bGw7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCIgPT09XG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENvbXBvbmVudCkgfHxcbiAgICAgICAgXCJbb2JqZWN0IEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25dXCIgPT09XG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENvbXBvbmVudClcbiAgICAgIClcbiAgICAgICAgKG5leHRSZW5kZXJMYW5lcyA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoXG4gICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMVxuICAgICAgICApKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudC5oYXMobmV4dFJlbmRlckxhbmVzKSB8fFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50LmFkZChuZXh0UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJhc3luYy9hd2FpdCBpcyBub3QgeWV0IHN1cHBvcnRlZCBpbiBDbGllbnQgQ29tcG9uZW50cywgb25seSBTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICkpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDA7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID1cbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICA/IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVZcbiAgICAgICAgICA6IG51bGwgIT09IGhvb2tUeXBlc0RldlxuICAgICAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWXG4gICAgICAgICAgICA6IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gbmV4dFJlbmRlckxhbmVzID1cbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgdmFyIGNoaWxkcmVuID0gY2FsbENvbXBvbmVudEluREVWKENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9ICExO1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzICYmXG4gICAgICAgIChjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBzZWNvbmRBcmdcbiAgICAgICAgKSk7XG4gICAgICBpZiAobmV4dFJlbmRlckxhbmVzKSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBob29rVHlwZXNEZXY7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXNcbiAgICAgICAgPyBudWxsICE9PSB0aGVuYWJsZVN0YXRlICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgICAgZmlyc3RDb250ZXh0OiBudWxsLFxuICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogdGhlbmFibGVTdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcy5fZGVidWdUaGVuYWJsZVN0YXRlID0gdGhlbmFibGVTdGF0ZSk7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICAgICAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID1cbiAgICAgICAgbnVsbCAhPT0gY3VycmVudEhvb2sgJiYgbnVsbCAhPT0gY3VycmVudEhvb2submV4dDtcbiAgICAgIHJlbmRlckxhbmVzID0gMDtcbiAgICAgIGhvb2tUeXBlc0RldiA9XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgY3VycmVudEhvb2sgPVxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID1cbiAgICAgICAgICBudWxsO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiAzMTQ1NzI4MCkgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDMxNDU3MjgwKSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHN0YXRpYyBmbGFnIHdhcyBtaXNzaW5nLiBQbGVhc2Ugbm90aWZ5IHRoZSBSZWFjdCB0ZWFtLlwiXG4gICAgICAgICk7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IDA7XG4gICAgICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbiAgICAgIGlmIChkaWRSZW5kZXJUb29GZXdIb29rcylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiXG4gICAgICAgICk7XG4gICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnQpICYmXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCkpO1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVZcbiAgICAgICAgPyAoKG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITEpLCAoY3VycmVudCA9ICEwKSlcbiAgICAgICAgOiAoY3VycmVudCA9ICExKTtcbiAgICAgIGN1cnJlbnQgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5oYXMod29ya0luUHJvZ3Jlc3MpIHx8XG4gICAgICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuaGFzKHdvcmtJblByb2dyZXNzKSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5hZGQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImB1c2VgIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSB0cnkvY2F0Y2ggYmxvY2suIFRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRvIGhhbmRsZSBlcnJvcnMgdHJpZ2dlcmVkIGJ5IGB1c2VgLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGEgZXJyb3IgYm91bmRhcnkuXCJcbiAgICAgICAgICApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyAmJiAodGhlbmFibGVTdGF0ZSA9IG51bGwpO1xuICAgICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IDA7XG4gICAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExO1xuICAgICAgICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPj0gUkVfUkVOREVSX0xJTUlUKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gITE7XG4gICAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBjaGlsZHJlbi5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICBjaGlsZHJlbi5ldmVudHMgPSBudWxsO1xuICAgICAgICAgIGNoaWxkcmVuLnN0b3JlcyA9IG51bGw7XG4gICAgICAgICAgbnVsbCAhPSBjaGlsZHJlbi5tZW1vQ2FjaGUgJiYgKGNoaWxkcmVuLm1lbW9DYWNoZS5pbmRleCA9IDApO1xuICAgICAgICB9XG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIGNoaWxkcmVuID0gY2FsbENvbXBvbmVudEluREVWKENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50KCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5ILFxuICAgICAgICBtYXliZVRoZW5hYmxlID0gZGlzcGF0Y2hlci51c2VTdGF0ZSgpWzBdO1xuICAgICAgbWF5YmVUaGVuYWJsZSA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlVGhlbmFibGUudGhlblxuICAgICAgICAgID8gdXNlVGhlbmFibGUobWF5YmVUaGVuYWJsZSlcbiAgICAgICAgICA6IG1heWJlVGhlbmFibGU7XG4gICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2hlci51c2VTdGF0ZSgpWzBdO1xuICAgICAgKG51bGwgIT09IGN1cnJlbnRIb29rID8gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGwpICE9PVxuICAgICAgICBkaXNwYXRjaGVyICYmIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IDEwMjQpO1xuICAgICAgcmV0dXJuIG1heWJlVGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRGlkUmVuZGVySWRIb29rKCkge1xuICAgICAgdmFyIGRpZFJlbmRlcklkSG9vayA9IDAgIT09IGxvY2FsSWRDb3VudGVyO1xuICAgICAgbG9jYWxJZENvdW50ZXIgPSAwO1xuICAgICAgcmV0dXJuIGRpZFJlbmRlcklkSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlXG4gICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIC0yMDEzMjg2NDVcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzLmZsYWdzICYgLTIwNTM7XG4gICAgICBjdXJyZW50LmxhbmVzICY9IH5sYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIb29rc09uVW53aW5kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy5xdWV1ZTtcbiAgICAgICAgICBudWxsICE9PSBxdWV1ZSAmJiAocXVldWUucGVuZGluZyA9IG51bGwpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gICAgICB9XG4gICAgICByZW5kZXJMYW5lcyA9IDA7XG4gICAgICBob29rVHlwZXNEZXYgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICBjdXJyZW50SG9vayA9XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPVxuICAgICAgICAgIG51bGw7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IGxvY2FsSWRDb3VudGVyID0gMDtcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgICAgIHZhciBob29rID0ge1xuICAgICAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgICAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgPyAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaylcbiAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50SG9vaykge1xuICAgICAgICB2YXIgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5hbHRlcm5hdGU7XG4gICAgICAgIG5leHRDdXJyZW50SG9vayA9XG4gICAgICAgICAgbnVsbCAhPT0gbmV4dEN1cnJlbnRIb29rID8gbmV4dEN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICAgICAgfSBlbHNlIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICAgID8gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICAgIGlmIChudWxsICE9PSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rKVxuICAgICAgICAod29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vayksXG4gICAgICAgICAgKGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobnVsbCA9PT0gbmV4dEN1cnJlbnRIb29rKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVXBkYXRlIGhvb2sgY2FsbGVkIG9uIGluaXRpYWwgcmVuZGVyLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgICAgICBuZXh0Q3VycmVudEhvb2sgPSB7XG4gICAgICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgICA/IChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICAgICAgICBuZXh0Q3VycmVudEhvb2spXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXh0Q3VycmVudEhvb2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlVGhlbmFibGUodGhlbmFibGUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgKz0gMTtcbiAgICAgIG51bGwgPT09IHRoZW5hYmxlU3RhdGUgJiYgKHRoZW5hYmxlU3RhdGUgPSBjcmVhdGVUaGVuYWJsZVN0YXRlKCkpO1xuICAgICAgdGhlbmFibGUgPSB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgICAgaW5kZXggPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICAgICAgbnVsbCA9PT1cbiAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICAgID8gaW5kZXgubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3NIb29rLm5leHQpICYmXG4gICAgICAgICgoaW5kZXggPSBpbmRleC5hbHRlcm5hdGUpLFxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9XG4gICAgICAgICAgbnVsbCAhPT0gaW5kZXggJiYgbnVsbCAhPT0gaW5kZXgubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWXG4gICAgICAgICAgICA6IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVikpO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1c2UodXNhYmxlKSB7XG4gICAgICBpZiAobnVsbCAhPT0gdXNhYmxlICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiB1c2FibGUpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVzYWJsZS50aGVuKSByZXR1cm4gdXNlVGhlbmFibGUodXNhYmxlKTtcbiAgICAgICAgaWYgKHVzYWJsZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKSByZXR1cm4gcmVhZENvbnRleHQodXNhYmxlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiQW4gdW5zdXBwb3J0ZWQgdHlwZSB3YXMgcGFzc2VkIHRvIHVzZSgpOiBcIiArIFN0cmluZyh1c2FibGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlTWVtb0NhY2hlKHNpemUpIHtcbiAgICAgIHZhciBtZW1vQ2FjaGUgPSBudWxsLFxuICAgICAgICB1cGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG4gICAgICBudWxsICE9PSB1cGRhdGVRdWV1ZSAmJiAobWVtb0NhY2hlID0gdXBkYXRlUXVldWUubWVtb0NhY2hlKTtcbiAgICAgIGlmIChudWxsID09IG1lbW9DYWNoZSkge1xuICAgICAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5tZW1vQ2FjaGUpLFxuICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIChtZW1vQ2FjaGUgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLm1hcChmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgICAgICAgIH0pKSk7XG4gICAgICB9XG4gICAgICBudWxsID09IG1lbW9DYWNoZSAmJiAobWVtb0NhY2hlID0geyBkYXRhOiBbXSwgaW5kZXg6IDAgfSk7XG4gICAgICBudWxsID09PSB1cGRhdGVRdWV1ZSAmJlxuICAgICAgICAoKHVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZSkpO1xuICAgICAgdXBkYXRlUXVldWUubWVtb0NhY2hlID0gbWVtb0NhY2hlO1xuICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdO1xuICAgICAgaWYgKHZvaWQgMCA9PT0gdXBkYXRlUXVldWUgfHwgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdID0gQXJyYXkoc2l6ZSksXG4gICAgICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgICAgICBjdXJyZW50IDwgc2l6ZTtcbiAgICAgICAgICBjdXJyZW50KytcbiAgICAgICAgKVxuICAgICAgICAgIHVwZGF0ZVF1ZXVlW2N1cnJlbnRdID0gUkVBQ1RfTUVNT19DQUNIRV9TRU5USU5FTDtcbiAgICAgIGVsc2VcbiAgICAgICAgdXBkYXRlUXVldWUubGVuZ3RoICE9PSBzaXplICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSBjb25zdGFudCBzaXplIGFyZ3VtZW50IGZvciBlYWNoIGludm9jYXRpb24gb2YgdXNlTWVtb0NhY2hlLiBUaGUgcHJldmlvdXMgY2FjaGUgd2FzIGFsbG9jYXRlZCB3aXRoIHNpemUgJXMgYnV0IHNpemUgJXMgd2FzIHJlcXVlc3RlZC5cIixcbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlLmxlbmd0aCxcbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgICApO1xuICAgICAgbWVtb0NhY2hlLmluZGV4Kys7XG4gICAgICByZXR1cm4gdXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gaW5pdCkge1xuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbml0KGluaXRpYWxBcmcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgICAgcmVkdWNlciA9IHtcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHJlZHVjZXI7XG4gICAgICByZWR1Y2VyID0gcmVkdWNlci5kaXNwYXRjaCA9IGRpc3BhdGNoUmVkdWNlckFjdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICByZWR1Y2VyXG4gICAgICApO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIHJlZHVjZXJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVkdWNlckltcGwoaG9vaywgY3VycmVudEhvb2ssIHJlZHVjZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVSZWR1Y2VySW1wbChob29rLCBjdXJyZW50LCByZWR1Y2VyKSB7XG4gICAgICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuICAgICAgaWYgKG51bGwgPT09IHF1ZXVlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFlvdSBhcmUgbGlrZWx5IGNhbGxpbmcgSG9va3MgY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgbm90IGFsbG93ZWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsKVwiXG4gICAgICAgICk7XG4gICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgICAgIHZhciBiYXNlUXVldWUgPSBob29rLmJhc2VRdWV1ZSxcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcbiAgICAgIGlmIChudWxsICE9PSBwZW5kaW5nUXVldWUpIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgfVxuICAgICAgcGVuZGluZ1F1ZXVlID0gaG9vay5iYXNlU3RhdGU7XG4gICAgICBpZiAobnVsbCA9PT0gYmFzZVF1ZXVlKSBob29rLm1lbW9pemVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgY3VycmVudCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSAoYmFzZUZpcnN0ID0gbnVsbCksXG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGwsXG4gICAgICAgICAgdXBkYXRlID0gY3VycmVudCxcbiAgICAgICAgICBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITE7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lICYgLTUzNjg3MDkxMztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB1cGRhdGVMYW5lICE9PSB1cGRhdGUubGFuZVxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciByZXZlcnRMYW5lID0gdXBkYXRlLnJldmVydExhbmU7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcmV2ZXJ0TGFuZSlcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3QmFzZVF1ZXVlTGFzdCAmJlxuICAgICAgICAgICAgICAgIChuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID1cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZTogMCxcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJ0TGFuZTogMCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHVwZGF0ZUxhbmUgPT09IGN1cnJlbnRFbnRhbmdsZWRMYW5lICYmXG4gICAgICAgICAgICAgICAgICAoZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICEwKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKChyZW5kZXJMYW5lcyAmIHJldmVydExhbmUpID09PSByZXZlcnRMYW5lKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICAgICAgICByZXZlcnRMYW5lID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICAgICAgICAgIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITApO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAodXBkYXRlTGFuZSA9IHtcbiAgICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICAgICAgICAgID8gKChuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgICAgICAgKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgICAgICA6IChuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gdXBkYXRlTGFuZSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgfD0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSByZXZlcnRMYW5lKTtcbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgJiZcbiAgICAgICAgICAgICAgcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gdXBkYXRlLmhhc0VhZ2VyU3RhdGVcbiAgICAgICAgICAgICAgPyB1cGRhdGUuZWFnZXJTdGF0ZVxuICAgICAgICAgICAgICA6IHJlZHVjZXIocGVuZGluZ1F1ZXVlLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIChyZXZlcnRMYW5lID0ge1xuICAgICAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgICAgICByZXZlcnRMYW5lOiB1cGRhdGUucmV2ZXJ0TGFuZSxcbiAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgICAgICAgPyAoKG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAgICAgKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyB8PSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSB1cGRhdGVMYW5lKTtcbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAobnVsbCAhPT0gdXBkYXRlICYmIHVwZGF0ZSAhPT0gY3VycmVudCk7XG4gICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICA/IChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpXG4gICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3QpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9iamVjdElzKHBlbmRpbmdRdWV1ZSwgaG9vay5tZW1vaXplZFN0YXRlKSAmJlxuICAgICAgICAgICgoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgICAgICBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uICYmXG4gICAgICAgICAgICAoKHJlZHVjZXIgPSBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUpLCBudWxsICE9PSByZWR1Y2VyKSlcbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IHJlZHVjZXI7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBiYXNlRmlyc3Q7XG4gICAgICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICAgICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICB9XG4gICAgICBudWxsID09PSBiYXNlUXVldWUgJiYgKHF1ZXVlLmxhbmVzID0gMCk7XG4gICAgICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcXVldWUuZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgcXVldWUgPSBob29rLnF1ZXVlO1xuICAgICAgaWYgKG51bGwgPT09IHF1ZXVlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFlvdSBhcmUgbGlrZWx5IGNhbGxpbmcgSG9va3MgY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgbm90IGFsbG93ZWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsKVwiXG4gICAgICAgICk7XG4gICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoLFxuICAgICAgICBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nLFxuICAgICAgICBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSAobGFzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQpO1xuICAgICAgICBkb1xuICAgICAgICAgIChuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIHVwZGF0ZS5hY3Rpb24pKSwgKHVwZGF0ZSA9IHVwZGF0ZS5uZXh0KTtcbiAgICAgICAgd2hpbGUgKHVwZGF0ZSAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKTtcbiAgICAgICAgb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICBudWxsID09PSBob29rLmJhc2VRdWV1ZSAmJiAoaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZSk7XG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgICAgIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIGlmICh2b2lkIDAgPT09IGdldFNlcnZlclNuYXBzaG90KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJNaXNzaW5nIGdldFNlcnZlclNuYXBzaG90LCB3aGljaCBpcyByZXF1aXJlZCBmb3Igc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFdpbGwgcmV2ZXJ0IHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICApO1xuICAgICAgICB2YXIgbmV4dFNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcbiAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgfHxcbiAgICAgICAgICBuZXh0U25hcHNob3QgPT09IGdldFNlcnZlclNuYXBzaG90KCkgfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHJlc3VsdCBvZiBnZXRTZXJ2ZXJTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIlxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gITApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG4gICAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90IHx8XG4gICAgICAgICAgKChnZXRTZXJ2ZXJTbmFwc2hvdCA9IGdldFNuYXBzaG90KCkpLFxuICAgICAgICAgIG9iamVjdElzKG5leHRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHx8XG4gICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgcmVzdWx0IG9mIGdldFNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gITApKSk7XG4gICAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDYwKSB8fFxuICAgICAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV4dFNuYXBzaG90O1xuICAgICAgZ2V0U2VydmVyU25hcHNob3QgPSB7IHZhbHVlOiBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9O1xuICAgICAgaG9vay5xdWV1ZSA9IGdldFNlcnZlclNuYXBzaG90O1xuICAgICAgbW91bnRFZmZlY3QoXG4gICAgICAgIHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgZ2V0U2VydmVyU25hcHNob3QsIHN1YnNjcmliZSksXG4gICAgICAgIFtzdWJzY3JpYmVdXG4gICAgICApO1xuICAgICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICAgIHB1c2hFZmZlY3QoXG4gICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgIHVwZGF0ZVN0b3JlSW5zdGFuY2UuYmluZChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgICAgIG5leHRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTbmFwc2hvdFxuICAgICAgICApLFxuICAgICAgICB7IGRlc3Ryb3k6IHZvaWQgMCB9LFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG5leHRTbmFwc2hvdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGlzSHlkcmF0aW5nJGpzY29tcCQwID0gaXNIeWRyYXRpbmc7XG4gICAgICBpZiAoaXNIeWRyYXRpbmckanNjb21wJDApIHtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIk1pc3NpbmcgZ2V0U2VydmVyU25hcHNob3QsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gV2lsbCByZXZlcnQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICgoZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpKSwgIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjYWNoZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG4gICAgICAgIG9iamVjdElzKGdldFNlcnZlclNuYXBzaG90LCBjYWNoZWRTbmFwc2hvdCkgfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIlxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gITApKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGNhY2hlZFNuYXBzaG90ID0gIW9iamVjdElzKFxuICAgICAgICAgIChjdXJyZW50SG9vayB8fCBob29rKS5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkpXG4gICAgICApXG4gICAgICAgIChob29rLm1lbW9pemVkU3RhdGUgPSBnZXRTZXJ2ZXJTbmFwc2hvdCksIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgaG9vayA9IGhvb2sucXVldWU7XG4gICAgICB2YXIgY3JlYXRlID0gc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBob29rLCBzdWJzY3JpYmUpO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIFtzdWJzY3JpYmVdKTtcbiAgICAgIGlmIChcbiAgICAgICAgaG9vay5nZXRTbmFwc2hvdCAhPT0gZ2V0U25hcHNob3QgfHxcbiAgICAgICAgY2FjaGVkU25hcHNob3QgfHxcbiAgICAgICAgKG51bGwgIT09IHdvcmtJblByb2dyZXNzSG9vayAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIEhhc0VmZmVjdClcbiAgICAgICkge1xuICAgICAgICBmaWJlci5mbGFncyB8PSAyMDQ4O1xuICAgICAgICBwdXNoRWZmZWN0KFxuICAgICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgaG9vayxcbiAgICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgZGVzdHJveTogdm9pZCAwIH0sXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBpc0h5ZHJhdGluZyRqc2NvbXAkMCB8fFxuICAgICAgICAgIDAgIT09IChyZW5kZXJMYW5lcyAmIDYwKSB8fFxuICAgICAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0U2VydmVyU25hcHNob3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCByZW5kZXJlZFNuYXBzaG90KSB7XG4gICAgICBmaWJlci5mbGFncyB8PSAxNjM4NDtcbiAgICAgIGZpYmVyID0geyBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsIHZhbHVlOiByZW5kZXJlZFNuYXBzaG90IH07XG4gICAgICBnZXRTbmFwc2hvdCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG4gICAgICBudWxsID09PSBnZXRTbmFwc2hvdFxuICAgICAgICA/ICgoZ2V0U25hcHNob3QgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gZ2V0U25hcHNob3QpLFxuICAgICAgICAgIChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKSlcbiAgICAgICAgOiAoKHJlbmRlcmVkU25hcHNob3QgPSBnZXRTbmFwc2hvdC5zdG9yZXMpLFxuICAgICAgICAgIG51bGwgPT09IHJlbmRlcmVkU25hcHNob3RcbiAgICAgICAgICAgID8gKGdldFNuYXBzaG90LnN0b3JlcyA9IFtmaWJlcl0pXG4gICAgICAgICAgICA6IHJlbmRlcmVkU25hcHNob3QucHVzaChmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTdG9yZUluc3RhbmNlKGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSB7XG4gICAgICBpbnN0LnZhbHVlID0gbmV4dFNuYXBzaG90O1xuICAgICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdWJzY3JpYmVUb1N0b3JlKGZpYmVyLCBpbnN0LCBzdWJzY3JpYmUpIHtcbiAgICAgIHJldHVybiBzdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICAgICAgaW5zdCA9IGluc3QudmFsdWU7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdGF0ZUltcGwoaW5pdGlhbFN0YXRlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIHZhciBpbml0aWFsU3RhdGVJbml0aWFsaXplciA9IGluaXRpYWxTdGF0ZTtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgIGhvb2sucXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSk7XG4gICAgICB2YXIgcXVldWUgPSBpbml0aWFsU3RhdGUucXVldWUsXG4gICAgICAgIGRpc3BhdGNoID0gZGlzcGF0Y2hTZXRTdGF0ZS5iaW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgICBxdWV1ZVxuICAgICAgICApO1xuICAgICAgcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICAgIHJldHVybiBbaW5pdGlhbFN0YXRlLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgdmFyIHF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBudWxsXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHF1ZXVlO1xuICAgICAgaG9vayA9IGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgICAgICEwLFxuICAgICAgICBxdWV1ZVxuICAgICAgKTtcbiAgICAgIHF1ZXVlLmRpc3BhdGNoID0gaG9vaztcbiAgICAgIHJldHVybiBbcGFzc3Rocm91Z2gsIGhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnQsIHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXJJbXBsKFxuICAgICAgICBob29rLFxuICAgICAgICBjdXJyZW50SG9vayxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVkdWNlciA/IHJlZHVjZXIgOiBiYXNpY1N0YXRlUmVkdWNlclxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRIb29rKVxuICAgICAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpY0ltcGwoaG9vaywgY3VycmVudEhvb2ssIHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gcGFzc3Rocm91Z2g7XG4gICAgICByZXR1cm4gW3Bhc3N0aHJvdWdoLCBob29rLnF1ZXVlLmRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb25TdGF0ZShcbiAgICAgIGZpYmVyLFxuICAgICAgYWN0aW9uUXVldWUsXG4gICAgICBzZXRQZW5kaW5nU3RhdGUsXG4gICAgICBzZXRTdGF0ZSxcbiAgICAgIHBheWxvYWRcbiAgICApIHtcbiAgICAgIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGZvcm0gc3RhdGUgd2hpbGUgcmVuZGVyaW5nLlwiKTtcbiAgICAgIGZpYmVyID0gYWN0aW9uUXVldWUuYWN0aW9uO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyKSB7XG4gICAgICAgIHZhciBhY3Rpb25Ob2RlID0ge1xuICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgYWN0aW9uOiBmaWJlcixcbiAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgIGlzVHJhbnNpdGlvbjogITAsXG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICByZWFzb246IG51bGwsXG4gICAgICAgICAgbGlzdGVuZXJzOiBbXSxcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGFjdGlvbk5vZGUubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVFxuICAgICAgICAgID8gc2V0UGVuZGluZ1N0YXRlKCEwKVxuICAgICAgICAgIDogKGFjdGlvbk5vZGUuaXNUcmFuc2l0aW9uID0gITEpO1xuICAgICAgICBzZXRTdGF0ZShhY3Rpb25Ob2RlKTtcbiAgICAgICAgc2V0UGVuZGluZ1N0YXRlID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgICAgICAgbnVsbCA9PT0gc2V0UGVuZGluZ1N0YXRlXG4gICAgICAgICAgPyAoKGFjdGlvbk5vZGUubmV4dCA9IGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBhY3Rpb25Ob2RlKSxcbiAgICAgICAgICAgIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlKSlcbiAgICAgICAgICA6ICgoYWN0aW9uTm9kZS5uZXh0ID0gc2V0UGVuZGluZ1N0YXRlLm5leHQpLFxuICAgICAgICAgICAgKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBzZXRQZW5kaW5nU3RhdGUubmV4dCA9IGFjdGlvbk5vZGUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIG5vZGUpIHtcbiAgICAgIHZhciBhY3Rpb24gPSBub2RlLmFjdGlvbixcbiAgICAgICAgcGF5bG9hZCA9IG5vZGUucGF5bG9hZCxcbiAgICAgICAgcHJldlN0YXRlID0gYWN0aW9uUXVldWUuc3RhdGU7XG4gICAgICBpZiAobm9kZS5pc1RyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQuX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHJldHVyblZhbHVlID0gYWN0aW9uKHByZXZTdGF0ZSwgcGF5bG9hZCksXG4gICAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlM7XG4gICAgICAgICAgbnVsbCAhPT0gb25TdGFydFRyYW5zaXRpb25GaW5pc2ggJiZcbiAgICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgaGFuZGxlQWN0aW9uUmV0dXJuVmFsdWUoYWN0aW9uUXVldWUsIG5vZGUsIHJldHVyblZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAgICAgICBudWxsID09PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICAgICAoKGFjdGlvblF1ZXVlID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZSksXG4gICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCksXG4gICAgICAgICAgICAgIDEwIDwgYWN0aW9uUXVldWUgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICBcIkRldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIChjdXJyZW50VHJhbnNpdGlvbiA9IGFjdGlvbihwcmV2U3RhdGUsIHBheWxvYWQpKSxcbiAgICAgICAgICAgIGhhbmRsZUFjdGlvblJldHVyblZhbHVlKGFjdGlvblF1ZXVlLCBub2RlLCBjdXJyZW50VHJhbnNpdGlvbik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yJDMpIHtcbiAgICAgICAgICBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvciQzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpIHtcbiAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW5cbiAgICAgICAgPyAocmV0dXJuVmFsdWUudGhlbihcbiAgICAgICAgICAgIGZ1bmN0aW9uIChuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgICAgb25BY3Rpb25TdWNjZXNzKGFjdGlvblF1ZXVlLCBub2RlLCBuZXh0U3RhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgbm9kZSwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgbm9kZS5pc1RyYW5zaXRpb24gfHxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQW4gYXN5bmMgZnVuY3Rpb24gd2FzIHBhc3NlZCB0byB1c2VBY3Rpb25TdGF0ZSwgYnV0IGl0IHdhcyBkaXNwYXRjaGVkIG91dHNpZGUgb2YgYW4gYWN0aW9uIGNvbnRleHQuIFRoaXMgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSBpbnRlbmRlZC4gRWl0aGVyIHBhc3MgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIHRvIGFuIGBhY3Rpb25gIHByb3AsIG9yIGRpc3BhdGNoIG1hbnVhbGx5IGluc2lkZSBgc3RhcnRUcmFuc2l0aW9uYFwiXG4gICAgICAgICAgICApKVxuICAgICAgICA6IG9uQWN0aW9uU3VjY2VzcyhhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkFjdGlvblN1Y2Nlc3MoYWN0aW9uUXVldWUsIGFjdGlvbk5vZGUsIG5leHRTdGF0ZSkge1xuICAgICAgYWN0aW9uTm9kZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgYWN0aW9uTm9kZS52YWx1ZSA9IG5leHRTdGF0ZTtcbiAgICAgIG5vdGlmeUFjdGlvbkxpc3RlbmVycyhhY3Rpb25Ob2RlKTtcbiAgICAgIGFjdGlvblF1ZXVlLnN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgYWN0aW9uTm9kZSA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsICE9PSBhY3Rpb25Ob2RlICYmXG4gICAgICAgICgobmV4dFN0YXRlID0gYWN0aW9uTm9kZS5uZXh0KSxcbiAgICAgICAgbmV4dFN0YXRlID09PSBhY3Rpb25Ob2RlXG4gICAgICAgICAgPyAoYWN0aW9uUXVldWUucGVuZGluZyA9IG51bGwpXG4gICAgICAgICAgOiAoKG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5uZXh0KSxcbiAgICAgICAgICAgIChhY3Rpb25Ob2RlLm5leHQgPSBuZXh0U3RhdGUpLFxuICAgICAgICAgICAgcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIG5leHRTdGF0ZSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgYWN0aW9uTm9kZSwgZXJyb3IpIHtcbiAgICAgIHZhciBsYXN0ID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgICAgIGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgaWYgKG51bGwgIT09IGxhc3QpIHtcbiAgICAgICAgbGFzdCA9IGxhc3QubmV4dDtcbiAgICAgICAgZG9cbiAgICAgICAgICAoYWN0aW9uTm9kZS5zdGF0dXMgPSBcInJlamVjdGVkXCIpLFxuICAgICAgICAgICAgKGFjdGlvbk5vZGUucmVhc29uID0gZXJyb3IpLFxuICAgICAgICAgICAgbm90aWZ5QWN0aW9uTGlzdGVuZXJzKGFjdGlvbk5vZGUpLFxuICAgICAgICAgICAgKGFjdGlvbk5vZGUgPSBhY3Rpb25Ob2RlLm5leHQpO1xuICAgICAgICB3aGlsZSAoYWN0aW9uTm9kZSAhPT0gbGFzdCk7XG4gICAgICB9XG4gICAgICBhY3Rpb25RdWV1ZS5hY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSkge1xuICAgICAgYWN0aW9uTm9kZSA9IGFjdGlvbk5vZGUubGlzdGVuZXJzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25Ob2RlLmxlbmd0aDsgaSsrKSAoMCwgYWN0aW9uTm9kZVtpXSkoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWN0aW9uU3RhdGVSZWR1Y2VyKG9sZFN0YXRlLCBuZXdTdGF0ZSkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlUHJvcCkge1xuICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIHZhciBzc3JGb3JtU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QuZm9ybVN0YXRlO1xuICAgICAgICBpZiAobnVsbCAhPT0gc3NyRm9ybVN0YXRlKSB7XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgdmFyIGlzTWF0Y2hpbmcgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICAgICAgICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlckluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIHZhciBpblJvb3RPclNpbmdsZXRvbiA9IHJvb3RPclNpbmdsZXRvbkNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIDggIT09IG1hcmtlckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpblJvb3RPclNpbmdsZXRvbikge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IG1hcmtlckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGluUm9vdE9yU2luZ2xldG9uID0gbWFya2VySW5zdGFuY2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID1cbiAgICAgICAgICAgICAgICAgICAgaW5Sb290T3JTaW5nbGV0b24gPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgfHxcbiAgICAgICAgICAgICAgICAgICAgaW5Sb290T3JTaW5nbGV0b24gPT09IEZPUk1fU1RBVEVfSVNfTk9UX01BVENISU5HXG4gICAgICAgICAgICAgICAgICAgICAgPyBtYXJrZXJJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hcmtlckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlLm5leHRTaWJsaW5nXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaXNNYXRjaGluZyA9IG1hcmtlckluc3RhbmNlLmRhdGEgPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkc7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goaXNNYXRjaGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc01hdGNoaW5nID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzTWF0Y2hpbmcgJiYgKGluaXRpYWxTdGF0ZVByb3AgPSBzc3JGb3JtU3RhdGVbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzc3JGb3JtU3RhdGUgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgc3NyRm9ybVN0YXRlLm1lbW9pemVkU3RhdGUgPSBzc3JGb3JtU3RhdGUuYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlUHJvcDtcbiAgICAgIGlzTWF0Y2hpbmcgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYWN0aW9uU3RhdGVSZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlUHJvcFxuICAgICAgfTtcbiAgICAgIHNzckZvcm1TdGF0ZS5xdWV1ZSA9IGlzTWF0Y2hpbmc7XG4gICAgICBzc3JGb3JtU3RhdGUgPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgICAgIGlzTWF0Y2hpbmdcbiAgICAgICk7XG4gICAgICBpc01hdGNoaW5nLmRpc3BhdGNoID0gc3NyRm9ybVN0YXRlO1xuICAgICAgaXNNYXRjaGluZyA9IG1vdW50U3RhdGVJbXBsKCExKTtcbiAgICAgIGluUm9vdE9yU2luZ2xldG9uID0gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSxcbiAgICAgICAgITEsXG4gICAgICAgIGlzTWF0Y2hpbmcucXVldWVcbiAgICAgICk7XG4gICAgICBpc01hdGNoaW5nID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIG1hcmtlckluc3RhbmNlID0ge1xuICAgICAgICBzdGF0ZTogaW5pdGlhbFN0YXRlUHJvcCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBwZW5kaW5nOiBudWxsXG4gICAgICB9O1xuICAgICAgaXNNYXRjaGluZy5xdWV1ZSA9IG1hcmtlckluc3RhbmNlO1xuICAgICAgc3NyRm9ybVN0YXRlID0gZGlzcGF0Y2hBY3Rpb25TdGF0ZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLFxuICAgICAgICBtYXJrZXJJbnN0YW5jZSxcbiAgICAgICAgaW5Sb290T3JTaW5nbGV0b24sXG4gICAgICAgIHNzckZvcm1TdGF0ZVxuICAgICAgKTtcbiAgICAgIG1hcmtlckluc3RhbmNlLmRpc3BhdGNoID0gc3NyRm9ybVN0YXRlO1xuICAgICAgaXNNYXRjaGluZy5tZW1vaXplZFN0YXRlID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIFtpbml0aWFsU3RhdGVQcm9wLCBzc3JGb3JtU3RhdGUsICExXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudEhvb2ssIGFjdGlvbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUFjdGlvblN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGFjdGlvbikge1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9IHVwZGF0ZVJlZHVjZXJJbXBsKFxuICAgICAgICBzdGF0ZUhvb2ssXG4gICAgICAgIGN1cnJlbnRTdGF0ZUhvb2ssXG4gICAgICAgIGFjdGlvblN0YXRlUmVkdWNlclxuICAgICAgKVswXTtcbiAgICAgIHN0YXRlSG9vayA9IHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpWzBdO1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjdXJyZW50U3RhdGVIb29rICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRTdGF0ZUhvb2sgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3VycmVudFN0YXRlSG9vay50aGVuXG4gICAgICAgICAgPyB1c2VUaGVuYWJsZShjdXJyZW50U3RhdGVIb29rKVxuICAgICAgICAgIDogY3VycmVudFN0YXRlSG9vaztcbiAgICAgIHZhciBhY3Rpb25RdWV1ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgYWN0aW9uUXVldWUgPSBhY3Rpb25RdWV1ZUhvb2sucXVldWUsXG4gICAgICAgIGRpc3BhdGNoID0gYWN0aW9uUXVldWUuZGlzcGF0Y2g7XG4gICAgICBhY3Rpb24gIT09IGFjdGlvblF1ZXVlSG9vay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgcHVzaEVmZmVjdChcbiAgICAgICAgICBIYXNFZmZlY3QgfCBQYXNzaXZlLFxuICAgICAgICAgIGFjdGlvblN0YXRlQWN0aW9uRWZmZWN0LmJpbmQobnVsbCwgYWN0aW9uUXVldWUsIGFjdGlvbiksXG4gICAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICkpO1xuICAgICAgcmV0dXJuIFtjdXJyZW50U3RhdGVIb29rLCBkaXNwYXRjaCwgc3RhdGVIb29rXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWN0aW9uU3RhdGVBY3Rpb25FZmZlY3QoYWN0aW9uUXVldWUsIGFjdGlvbikge1xuICAgICAgYWN0aW9uUXVldWUuYWN0aW9uID0gYWN0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbikge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgICAgICBjdXJyZW50U3RhdGVIb29rID0gY3VycmVudEhvb2s7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudFN0YXRlSG9vaylcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGFjdGlvbik7XG4gICAgICB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHN0YXRlSG9vayA9IHN0YXRlSG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIGRpc3BhdGNoID0gY3VycmVudFN0YXRlSG9vay5xdWV1ZS5kaXNwYXRjaDtcbiAgICAgIGN1cnJlbnRTdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IGFjdGlvbjtcbiAgICAgIHJldHVybiBbc3RhdGVIb29rLCBkaXNwYXRjaCwgITFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBpbnN0LCBkZXBzKSB7XG4gICAgICB0YWcgPSB7IHRhZzogdGFnLCBjcmVhdGU6IGNyZWF0ZSwgaW5zdDogaW5zdCwgZGVwczogZGVwcywgbmV4dDogbnVsbCB9O1xuICAgICAgY3JlYXRlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcbiAgICAgIG51bGwgPT09IGNyZWF0ZSAmJlxuICAgICAgICAoKGNyZWF0ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY3JlYXRlKSk7XG4gICAgICBpbnN0ID0gY3JlYXRlLmxhc3RFZmZlY3Q7XG4gICAgICBudWxsID09PSBpbnN0XG4gICAgICAgID8gKGNyZWF0ZS5sYXN0RWZmZWN0ID0gdGFnLm5leHQgPSB0YWcpXG4gICAgICAgIDogKChkZXBzID0gaW5zdC5uZXh0KSxcbiAgICAgICAgICAoaW5zdC5uZXh0ID0gdGFnKSxcbiAgICAgICAgICAodGFnLm5leHQgPSBkZXBzKSxcbiAgICAgICAgICAoY3JlYXRlLmxhc3RFZmZlY3QgPSB0YWcpKTtcbiAgICAgIHJldHVybiB0YWc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaW5pdGlhbFZhbHVlID0geyBjdXJyZW50OiBpbml0aWFsVmFsdWUgfTtcbiAgICAgIHJldHVybiAoaG9vay5tZW1vaXplZFN0YXRlID0gaW5pdGlhbFZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KFxuICAgICAgICBIYXNFZmZlY3QgfCBob29rRmxhZ3MsXG4gICAgICAgIGNyZWF0ZSxcbiAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgaW5zdCA9IGhvb2subWVtb2l6ZWRTdGF0ZS5pbnN0O1xuICAgICAgbnVsbCAhPT0gY3VycmVudEhvb2sgJiZcbiAgICAgIG51bGwgIT09IGRlcHMgJiZcbiAgICAgIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLmRlcHMpXG4gICAgICAgID8gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGluc3QsIGRlcHMpKVxuICAgICAgICA6ICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzKSxcbiAgICAgICAgICAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChcbiAgICAgICAgICAgIEhhc0VmZmVjdCB8IGhvb2tGbGFncyxcbiAgICAgICAgICAgIGNyZWF0ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBkZXBzXG4gICAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIE5vU3RyaWN0UGFzc2l2ZUVmZmVjdHNNb2RlKSA9PT0gTm9Nb2RlXG4gICAgICAgID8gbW91bnRFZmZlY3RJbXBsKDE0MjYwODM4NCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKVxuICAgICAgICA6IG1vdW50RWZmZWN0SW1wbCg4MzkwNjU2LCBQYXNzaXZlLCBjcmVhdGUsIGRlcHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBmaWJlckZsYWdzID0gNDE5NDMwODtcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAoZmliZXJGbGFncyB8PSA2NzEwODg2NCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZikge1xuICAgICAgICBjcmVhdGUgPSBjcmVhdGUoKTtcbiAgICAgICAgdmFyIHJlZkNsZWFudXAgPSByZWYoY3JlYXRlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWZDbGVhbnVwID8gcmVmQ2xlYW51cCgpIDogcmVmKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgIT09IHJlZiAmJiB2b2lkIDAgIT09IHJlZilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSByZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgICAgXCJhbiBvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKHJlZikuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKGNyZWF0ZSA9IGNyZWF0ZSgpKSxcbiAgICAgICAgICAocmVmLmN1cnJlbnQgPSBjcmVhdGUpLFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICBudWxsICE9PSBjcmVhdGUgPyB0eXBlb2YgY3JlYXRlIDogXCJudWxsXCJcbiAgICAgICAgKTtcbiAgICAgIGRlcHMgPSBudWxsICE9PSBkZXBzICYmIHZvaWQgMCAhPT0gZGVwcyA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gICAgICB2YXIgZmliZXJGbGFncyA9IDQxOTQzMDg7XG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgKGZpYmVyRmxhZ3MgfD0gNjcxMDg4NjQpO1xuICAgICAgbW91bnRFZmZlY3RJbXBsKFxuICAgICAgICBmaWJlckZsYWdzLFxuICAgICAgICBMYXlvdXQsXG4gICAgICAgIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksXG4gICAgICAgIGRlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgbnVsbCAhPT0gY3JlYXRlID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICk7XG4gICAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChcbiAgICAgICAgNCxcbiAgICAgICAgTGF5b3V0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBkZXBzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBbXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICAgICAgXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIGRlcHNdO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dENyZWF0ZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgZGVwc107XG4gICAgICByZXR1cm4gbmV4dFZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICBwcmV2U3RhdGUgPSBuZXh0Q3JlYXRlKCk7XG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtwcmV2U3RhdGUsIGRlcHNdO1xuICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoXG4gICAgICAgIGhvb2ssXG4gICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGN1cnJlbnRIb29rXG4gICAgICAgID8gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKVxuICAgICAgICA6IHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKFxuICAgICAgICAgICAgaG9vayxcbiAgICAgICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gaW5pdGlhbFZhbHVlIHx8IDAgIT09IChyZW5kZXJMYW5lcyAmIDEwNzM3NDE4MjQpKVxuICAgICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgIGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCk7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzIHw9IGhvb2s7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gaG9vaztcbiAgICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKG9iamVjdElzKHZhbHVlLCBwcmV2VmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChob29rID0gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgb2JqZWN0SXMoaG9vaywgcHJldlZhbHVlKSB8fCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgICAgICBob29rXG4gICAgICAgICk7XG4gICAgICBpZiAoMCA9PT0gKHJlbmRlckxhbmVzICYgNDIpKVxuICAgICAgICByZXR1cm4gKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksIChob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZSk7XG4gICAgICBob29rID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyB8PSBob29rO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2s7XG4gICAgICByZXR1cm4gcHJldlZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oXG4gICAgICBmaWJlcixcbiAgICAgIHF1ZXVlLFxuICAgICAgcGVuZGluZ1N0YXRlLFxuICAgICAgZmluaXNoZWRTdGF0ZSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID1cbiAgICAgICAgMCAhPT0gcHJldmlvdXNQcmlvcml0eSAmJiBwcmV2aW91c1ByaW9yaXR5IDwgQ29udGludW91c0V2ZW50UHJpb3JpdHlcbiAgICAgICAgICA/IHByZXZpb3VzUHJpb3JpdHlcbiAgICAgICAgICA6IENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24gPSB7fTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICAgIGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlKGZpYmVyLCAhMSwgcXVldWUsIHBlbmRpbmdTdGF0ZSk7XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIHRoZW5hYmxlRm9yRmluaXNoZWRTdGF0ZSA9IGNoYWluVGhlbmFibGVWYWx1ZShcbiAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgZmluaXNoZWRTdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgIHRoZW5hYmxlRm9yRmluaXNoZWRTdGF0ZSxcbiAgICAgICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgcXVldWUsXG4gICAgICAgICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgICBmaWJlcixcbiAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICB7IHRoZW46IGZ1bmN0aW9uICgpIHt9LCBzdGF0dXM6IFwicmVqZWN0ZWRcIiwgcmVhc29uOiBlcnJvciB9LFxuICAgICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKVxuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKSxcbiAgICAgICAgICBudWxsID09PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgJiZcbiAgICAgICAgICAgICgoZmliZXIgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCksXG4gICAgICAgICAgICAxMCA8IGZpYmVyICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBcIkRldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEhvc3RUcmFuc2l0aW9uKGZvcm1GaWJlciwgcGVuZGluZ1N0YXRlLCBhY3Rpb24sIGZvcm1EYXRhKSB7XG4gICAgICBpZiAoNSAhPT0gZm9ybUZpYmVyLnRhZylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB0aGUgZm9ybSBpbnN0YW5jZSB0byBiZSBhIEhvc3RDb21wb25lbnQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBxdWV1ZSA9IGVuc3VyZUZvcm1Db21wb25lbnRJc1N0YXRlZnVsKGZvcm1GaWJlcikucXVldWU7XG4gICAgICBzdGFydFRyYW5zaXRpb24oXG4gICAgICAgIGZvcm1GaWJlcixcbiAgICAgICAgcXVldWUsXG4gICAgICAgIHBlbmRpbmdTdGF0ZSxcbiAgICAgICAgTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIG51bGwgPT09IGFjdGlvblxuICAgICAgICAgID8gbm9vcCQyXG4gICAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJlcXVlc3RGb3JtUmVzZXQkMShmb3JtRmliZXIpO1xuICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uKGZvcm1EYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVuc3VyZUZvcm1Db21wb25lbnRJc1N0YXRlZnVsKGZvcm1GaWJlcikge1xuICAgICAgdmFyIGV4aXN0aW5nU3RhdGVIb29rID0gZm9ybUZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gZXhpc3RpbmdTdGF0ZUhvb2spIHJldHVybiBleGlzdGluZ1N0YXRlSG9vaztcbiAgICAgIGV4aXN0aW5nU3RhdGVIb29rID0ge1xuICAgICAgICBtZW1vaXplZFN0YXRlOiBOb3RQZW5kaW5nVHJhbnNpdGlvbixcbiAgICAgICAgYmFzZVN0YXRlOiBOb3RQZW5kaW5nVHJhbnNpdGlvbixcbiAgICAgICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgICAgICBxdWV1ZToge1xuICAgICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICB2YXIgaW5pdGlhbFJlc2V0U3RhdGUgPSB7fTtcbiAgICAgIGV4aXN0aW5nU3RhdGVIb29rLm5leHQgPSB7XG4gICAgICAgIG1lbW9pemVkU3RhdGU6IGluaXRpYWxSZXNldFN0YXRlLFxuICAgICAgICBiYXNlU3RhdGU6IGluaXRpYWxSZXNldFN0YXRlLFxuICAgICAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgICAgIHF1ZXVlOiB7XG4gICAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgICBsYW5lczogMCxcbiAgICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFJlc2V0U3RhdGVcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGZvcm1GaWJlci5tZW1vaXplZFN0YXRlID0gZXhpc3RpbmdTdGF0ZUhvb2s7XG4gICAgICBmb3JtRmliZXIgPSBmb3JtRmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gZm9ybUZpYmVyICYmIChmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGV4aXN0aW5nU3RhdGVIb29rKTtcbiAgICAgIHJldHVybiBleGlzdGluZ1N0YXRlSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWVzdEZvcm1SZXNldCQxKGZvcm1GaWJlcikge1xuICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwicmVxdWVzdEZvcm1SZXNldCB3YXMgY2FsbGVkIG91dHNpZGUgYSB0cmFuc2l0aW9uIG9yIGFjdGlvbi4gVG8gZml4LCBtb3ZlIHRvIGFuIGFjdGlvbiwgb3Igd3JhcCB3aXRoIHN0YXJ0VHJhbnNpdGlvbi5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHJlc2V0U3RhdGVRdWV1ZSA9IGVuc3VyZUZvcm1Db21wb25lbnRJc1N0YXRlZnVsKGZvcm1GaWJlcikubmV4dC5xdWV1ZTtcbiAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgZm9ybUZpYmVyLFxuICAgICAgICByZXNldFN0YXRlUXVldWUsXG4gICAgICAgIHt9LFxuICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmb3JtRmliZXIpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gbW91bnRTdGF0ZUltcGwoITEpO1xuICAgICAgc3RhdGVIb29rID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsXG4gICAgICAgIHN0YXRlSG9vay5xdWV1ZSxcbiAgICAgICAgITAsXG4gICAgICAgICExXG4gICAgICApO1xuICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rO1xuICAgICAgcmV0dXJuIFshMSwgc3RhdGVIb29rXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBib29sZWFuT3JUaGVuYWJsZSA9IHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpWzBdLFxuICAgICAgICBzdGFydCA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgIDogdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpLFxuICAgICAgICBzdGFydFxuICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKVswXSxcbiAgICAgICAgc3RhcnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgID8gYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgICAgc3RhcnRcbiAgICAgIF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCkge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KEhvc3RUcmFuc2l0aW9uQ29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SWQoKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggPSB3b3JrSW5Qcm9ncmVzc1Jvb3QuaWRlbnRpZmllclByZWZpeDtcbiAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICB2YXIgdHJlZUlkID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgICAgICAgdmFyIGlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICAgICAgICB0cmVlSWQgPVxuICAgICAgICAgIChcbiAgICAgICAgICAgIGlkV2l0aExlYWRpbmdCaXQgJiB+KDEgPDwgKDMyIC0gY2x6MzIoaWRXaXRoTGVhZGluZ0JpdCkgLSAxKSlcbiAgICAgICAgICApLnRvU3RyaW5nKDMyKSArIHRyZWVJZDtcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IFwiOlwiICsgaWRlbnRpZmllclByZWZpeCArIFwiUlwiICsgdHJlZUlkO1xuICAgICAgICB0cmVlSWQgPSBsb2NhbElkQ291bnRlcisrO1xuICAgICAgICAwIDwgdHJlZUlkICYmIChpZGVudGlmaWVyUHJlZml4ICs9IFwiSFwiICsgdHJlZUlkLnRvU3RyaW5nKDMyKSk7XG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggKz0gXCI6XCI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRyZWVJZCA9IGdsb2JhbENsaWVudElkQ291bnRlcisrKSxcbiAgICAgICAgICAoaWRlbnRpZmllclByZWZpeCA9XG4gICAgICAgICAgICBcIjpcIiArIGlkZW50aWZpZXJQcmVmaXggKyBcInJcIiArIHRyZWVJZC50b1N0cmluZygzMikgKyBcIjpcIik7XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkZW50aWZpZXJQcmVmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZnJlc2goKSB7XG4gICAgICByZXR1cm4gKG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZSA9IHJlZnJlc2hDYWNoZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxXG4gICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVmcmVzaENhY2hlKGZpYmVyLCBzZWVkS2V5KSB7XG4gICAgICBmb3IgKHZhciBwcm92aWRlciA9IGZpYmVyLnJldHVybjsgbnVsbCAhPT0gcHJvdmlkZXI7ICkge1xuICAgICAgICBzd2l0Y2ggKHByb3ZpZGVyLnRhZykge1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShwcm92aWRlcik7XG4gICAgICAgICAgICBmaWJlciA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShwcm92aWRlciwgZmliZXIsIGxhbmUpO1xuICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIHByb3ZpZGVyLCBsYW5lKSxcbiAgICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBwcm92aWRlciwgbGFuZSkpO1xuICAgICAgICAgICAgcHJvdmlkZXIgPSBjcmVhdGVDYWNoZSgpO1xuICAgICAgICAgICAgbnVsbCAhPT0gc2VlZEtleSAmJlxuICAgICAgICAgICAgICB2b2lkIDAgIT09IHNlZWRLZXkgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIHNlZWQgYXJndW1lbnQgaXMgbm90IGVuYWJsZWQgb3V0c2lkZSBleHBlcmltZW50YWwgY2hhbm5lbHMuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpYmVyLnBheWxvYWQgPSB7IGNhY2hlOiBwcm92aWRlciB9O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFJlZHVjZXJBY3Rpb24oXG4gICAgICBmaWJlcixcbiAgICAgIHF1ZXVlLFxuICAgICAgYWN0aW9uLFxuICAgICAgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AwXG4gICAgKSB7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDAgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICApO1xuICAgICAgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AwID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgYWN0aW9uID0ge1xuICAgICAgICBsYW5lOiBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDAsXG4gICAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpXG4gICAgICAgID8gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCBhY3Rpb24pXG4gICAgICAgIDogKChhY3Rpb24gPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AwXG4gICAgICAgICAgKSksXG4gICAgICAgICAgbnVsbCAhPT0gYWN0aW9uICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUoXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcXVldWUsXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfT3B0aW1pemVBcmd1bWVudHNBcnJheV9wMFxuICAgICAgICAgICAgKSkpO1xuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFNldFN0YXRlKFxuICAgICAgZmliZXIsXG4gICAgICBxdWV1ZSxcbiAgICAgIGFjdGlvbixcbiAgICAgIEpTQ29tcGlsZXJfT3B0aW1pemVBcmd1bWVudHNBcnJheV9wMVxuICAgICkge1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AxICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuXCJcbiAgICAgICAgKTtcbiAgICAgIEpTQ29tcGlsZXJfT3B0aW1pemVBcmd1bWVudHNBcnJheV9wMSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgZmliZXIsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIEpTQ29tcGlsZXJfT3B0aW1pemVBcmd1bWVudHNBcnJheV9wMVxuICAgICAgKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AxKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKGZpYmVyLCBxdWV1ZSwgYWN0aW9uLCBsYW5lKSB7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgMCA9PT0gZmliZXIubGFuZXMgJiZcbiAgICAgICAgICAobnVsbCA9PT0gYWx0ZXJuYXRlIHx8IDAgPT09IGFsdGVybmF0ZS5sYW5lcykgJiZcbiAgICAgICAgICAoKGFsdGVybmF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIpLCBudWxsICE9PSBhbHRlcm5hdGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGUsXG4gICAgICAgICAgICAgIGVhZ2VyU3RhdGUgPSBhbHRlcm5hdGUoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgdXBkYXRlLmhhc0VhZ2VyU3RhdGUgPSAhMDtcbiAgICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcbiAgICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgMCksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgICAgICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCksXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFjdGlvbiA9IGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICAgIGlmIChudWxsICE9PSBhY3Rpb24pXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihhY3Rpb24sIGZpYmVyLCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShhY3Rpb24sIHF1ZXVlLCBsYW5lKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUoXG4gICAgICBmaWJlcixcbiAgICAgIHRocm93SWZEdXJpbmdSZW5kZXIsXG4gICAgICBxdWV1ZSxcbiAgICAgIGFjdGlvblxuICAgICkge1xuICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCAmJlxuICAgICAgICAwID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQW4gb3B0aW1pc3RpYyBzdGF0ZSB1cGRhdGUgb2NjdXJyZWQgb3V0c2lkZSBhIHRyYW5zaXRpb24gb3IgYWN0aW9uLiBUbyBmaXgsIG1vdmUgdGhlIHVwZGF0ZSB0byBhbiBhY3Rpb24sIG9yIHdyYXAgd2l0aCBzdGFydFRyYW5zaXRpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIGFjdGlvbiA9IHtcbiAgICAgICAgbGFuZTogMixcbiAgICAgICAgcmV2ZXJ0TGFuZTogcmVxdWVzdFRyYW5zaXRpb25MYW5lKCksXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSkge1xuICAgICAgICBpZiAodGhyb3dJZkR1cmluZ1JlbmRlcilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgb3B0aW1pc3RpYyBzdGF0ZSB3aGlsZSByZW5kZXJpbmcuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGNhbGwgc3RhcnRUcmFuc2l0aW9uIHdoaWxlIHJlbmRlcmluZy5cIik7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRocm93SWZEdXJpbmdSZW5kZXIgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgcXVldWUsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIDJcbiAgICAgICAgKSksXG4gICAgICAgICAgbnVsbCAhPT0gdGhyb3dJZkR1cmluZ1JlbmRlciAmJlxuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHRocm93SWZEdXJpbmdSZW5kZXIsIGZpYmVyLCAyKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fFxuICAgICAgICAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITA7XG4gICAgICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpIHtcbiAgICAgIGlmICgwICE9PSAobGFuZSAmIDQxOTQxNzYpKSB7XG4gICAgICAgIHZhciBxdWV1ZUxhbmVzID0gcXVldWUubGFuZXM7XG4gICAgICAgIHF1ZXVlTGFuZXMgJj0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgIGxhbmUgfD0gcXVldWVMYW5lcztcbiAgICAgICAgcXVldWUubGFuZXMgPSBsYW5lO1xuICAgICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICBpZiAobnVsbCAhPT0gY2FsbGJhY2sgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGtleSA9IFN0cmluZyhjYWxsYmFjayk7XG4gICAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSB8fFxuICAgICAgICAgIChkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICAgICAgbmV4dFByb3BzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZvaWQgMCA9PT0gcGFydGlhbFN0YXRlICYmXG4gICAgICAgICgoY3RvciA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjdG9yKSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGN0b3IpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLlwiLFxuICAgICAgICAgICAgY3RvclxuICAgICAgICAgICkpKTtcbiAgICAgIHByZXZTdGF0ZSA9XG4gICAgICAgIG51bGwgPT09IHBhcnRpYWxTdGF0ZSB8fCB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZVxuICAgICAgICAgID8gcHJldlN0YXRlXG4gICAgICAgICAgOiBhc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U3RhdGU7XG4gICAgICAwID09PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gcHJldlN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGN0b3IsXG4gICAgICBvbGRQcm9wcyxcbiAgICAgIG5ld1Byb3BzLFxuICAgICAgb2xkU3RhdGUsXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XG4gICAgICAgIG9sZFByb3BzID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgb2xkUHJvcHMgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dENvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCAwID09PSBvbGRQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhIGJvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG9sZFByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50XG4gICAgICAgID8gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyh3b3JrSW5Qcm9ncmVzcykgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKSksXG4gICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gICAgICB2YXIgbmV3UHJvcHMgPSBiYXNlUHJvcHM7XG4gICAgICBpZiAoXCJyZWZcIiBpbiBiYXNlUHJvcHMpIHtcbiAgICAgICAgbmV3UHJvcHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gYmFzZVByb3BzKVxuICAgICAgICAgIFwicmVmXCIgIT09IHByb3BOYW1lICYmIChuZXdQcm9wc1twcm9wTmFtZV0gPSBiYXNlUHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmICgoQ29tcG9uZW50ID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcykpIHtcbiAgICAgICAgbmV3UHJvcHMgPT09IGJhc2VQcm9wcyAmJiAobmV3UHJvcHMgPSBhc3NpZ24oe30sIG5ld1Byb3BzKSk7XG4gICAgICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBDb21wb25lbnQpXG4gICAgICAgICAgdm9pZCAwID09PSBuZXdQcm9wc1tfcHJvcE5hbWVdICYmXG4gICAgICAgICAgICAobmV3UHJvcHNbX3Byb3BOYW1lXSA9IENvbXBvbmVudFtfcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcihlcnJvciwgZXJyb3JJbmZvKSB7XG4gICAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcik7XG4gICAgICBlcnJvciA9IGNvbXBvbmVudE5hbWVcbiAgICAgICAgPyBcIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudC5cIlxuICAgICAgICA6IFwiQW4gZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50cy5cIjtcbiAgICAgIHZhciBwcmV2R2V0Q3VycmVudFN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrLFxuICAgICAgICBjb21wb25lbnRTdGFjayA9XG4gICAgICAgICAgbnVsbCAhPSBlcnJvckluZm8uY29tcG9uZW50U3RhY2sgPyBlcnJvckluZm8uY29tcG9uZW50U3RhY2sgOiBcIlwiO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50U3RhY2s7XG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiJXNcXG5cXG4lc1xcblwiLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIFwiQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuVmlzaXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy5cIlxuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gcHJldkdldEN1cnJlbnRTdGFjaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uQ2F1Z2h0RXJyb3IoZXJyb3IsIGVycm9ySW5mbykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZVxuICAgICAgICAgID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50LlwiXG4gICAgICAgICAgOiBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzLlwiLFxuICAgICAgICByZWNyZWF0ZU1lc3NhZ2UgPVxuICAgICAgICAgIFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggdXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgK1xuICAgICAgICAgICgoZXJyb3JCb3VuZGFyeU5hbWUgfHwgXCJBbm9ueW1vdXNcIikgKyBcIi5cIiksXG4gICAgICAgIHByZXZHZXRDdXJyZW50U3RhY2sgPSBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2ssXG4gICAgICAgIGNvbXBvbmVudFN0YWNrID1cbiAgICAgICAgICBudWxsICE9IGVycm9ySW5mby5jb21wb25lbnRTdGFjayA/IGVycm9ySW5mby5jb21wb25lbnRTdGFjayA6IFwiXCI7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRTdGFjaztcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLmVudmlyb25tZW50TmFtZVxuICAgICAgICAgID8gYmluZFRvQ29uc29sZShcbiAgICAgICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCIlb1xcblxcbiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lTWVzc2FnZSxcbiAgICAgICAgICAgICAgICByZWNyZWF0ZU1lc3NhZ2VcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZXJyb3IuZW52aXJvbm1lbnROYW1lXG4gICAgICAgICAgICApKClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJW9cXG5cXG4lc1xcblxcbiVzXFxuXCIsXG4gICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lTWVzc2FnZSxcbiAgICAgICAgICAgICAgcmVjcmVhdGVNZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gcHJldkdldEN1cnJlbnRTdGFjaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcihlcnJvcikge1xuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb2dVbmNhdWdodEVycm9yKHJvb3QsIGVycm9ySW5mbykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29tcG9uZW50TmFtZSA9IGVycm9ySW5mby5zb3VyY2VcbiAgICAgICAgICA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZXJyb3JJbmZvLnNvdXJjZSlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGVycm9yQm91bmRhcnlOYW1lID0gbnVsbDtcbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgICBpZiAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUpXG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgb25VbmNhdWdodEVycm9yID0gcm9vdC5vblVuY2F1Z2h0RXJyb3I7XG4gICAgICAgICAgb25VbmNhdWdodEVycm9yKGVycm9yLCB7IGNvbXBvbmVudFN0YWNrOiBlcnJvckluZm8uc3RhY2sgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUkNCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlJDQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsb2dDYXVnaHRFcnJvcihyb290LCBib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb21wb25lbnROYW1lID0gZXJyb3JJbmZvLnNvdXJjZVxuICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihlcnJvckluZm8uc291cmNlKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGJvdW5kYXJ5KTtcbiAgICAgICAgdmFyIG9uQ2F1Z2h0RXJyb3IgPSByb290Lm9uQ2F1Z2h0RXJyb3I7XG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IoZXJyb3JJbmZvLnZhbHVlLCB7XG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IGVycm9ySW5mby5zdGFjayxcbiAgICAgICAgICBlcnJvckJvdW5kYXJ5OiAxID09PSBib3VuZGFyeS50YWcgPyBib3VuZGFyeS5zdGF0ZU5vZGUgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSQ1KSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGUkNTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290LCBlcnJvckluZm8sIGxhbmUpIHtcbiAgICAgIGxhbmUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICBsYW5lLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gICAgICBsYW5lLnBheWxvYWQgPSB7IGVsZW1lbnQ6IG51bGwgfTtcbiAgICAgIGxhbmUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGVycm9ySW5mby5zb3VyY2UsIGxvZ1VuY2F1Z2h0RXJyb3IsIHJvb3QsIGVycm9ySW5mbyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUobGFuZSkge1xuICAgICAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIGxhbmUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZSh1cGRhdGUsIHJvb3QsIGZpYmVyLCBlcnJvckluZm8pIHtcbiAgICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGVycm9ySW5mby5zb3VyY2UsXG4gICAgICAgICAgICBsb2dDYXVnaHRFcnJvcixcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGVycm9ySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIG51bGwgIT09IGluc3QgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAodXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGVycm9ySW5mby5zb3VyY2UsXG4gICAgICAgICAgICBsb2dDYXVnaHRFcnJvcixcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGVycm9ySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWRcbiAgICAgICAgICAgICAgPyAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFt0aGlzXSkpXG4gICAgICAgICAgICAgIDogbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKHRoaXMpKTtcbiAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2hJbkRFVih0aGlzLCBlcnJvckluZm8pO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgKDAgPT09IChmaWJlci5sYW5lcyAmIDIpICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCIlczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiBJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKFxuICAgICAgcm9vdCxcbiAgICAgIHJldHVybkZpYmVyLFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gMzI3Njg7XG4gICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZS50aGVuXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyICYmXG4gICAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBpc0h5ZHJhdGluZyAmJiAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMCk7XG4gICAgICAgIHNvdXJjZUZpYmVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgICAgaWYgKG51bGwgIT09IHNvdXJjZUZpYmVyKSB7XG4gICAgICAgICAgc3dpdGNoIChzb3VyY2VGaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgPyByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKClcbiAgICAgICAgICAgICAgICAgIDogbnVsbCA9PT0gc291cmNlRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzICYmXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci5mbGFncyB8PSAxNjM4NClcbiAgICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG5ldyBTZXQoW3ZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXR1cm5GaWJlci5hZGQodmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgdmFsdWUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZVxuICAgICAgICAgICAgICAgICAgPyAoc291cmNlRmliZXIuZmxhZ3MgfD0gMTYzODQpXG4gICAgICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgPyAoKHJldHVybkZpYmVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2VzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeVF1ZXVlOiBuZXcgU2V0KFt2YWx1ZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgICAgICAgICA6ICgoc291cmNlRmliZXIgPSByZXR1cm5GaWJlci5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKHJldHVybkZpYmVyLnJldHJ5UXVldWUgPSBuZXcgU2V0KFt2YWx1ZV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvdXJjZUZpYmVyLmFkZCh2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyArXG4gICAgICAgICAgICAgIFwiKS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0h5ZHJhdGluZylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMCksXG4gICAgICAgICAgKHJldHVybkZpYmVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgID8gKDAgPT09IChyZXR1cm5GaWJlci5mbGFncyAmIDY1NTM2KSAmJiAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMjU2KSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgdmFsdWUgIT09IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uICYmXG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBjbGllbnQgcmVuZGVyaW5nIGZyb20gdGhlIG5lYXJlc3QgU3VzcGVuc2UgYm91bmRhcnkuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICh2YWx1ZSAhPT0gSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb24gJiZcbiAgICAgICAgICAgICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGh5ZHJhdGluZyBidXQgUmVhY3Qgd2FzIGFibGUgdG8gcmVjb3ZlciBieSBpbnN0ZWFkIGNsaWVudCByZW5kZXJpbmcgdGhlIGVudGlyZSByb290LlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgY2F1c2U6IHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAocm9vdCA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICAocm9vdC5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyb290LmxhbmVzIHw9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICh2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcikpLFxuICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgIHJvb3Quc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkKSksXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICAgIHZhciBlcnJvciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICBFcnJvcihcbiAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgY29uY3VycmVudCByZW5kZXJpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBzeW5jaHJvbm91c2x5IHJlbmRlcmluZyB0aGUgZW50aXJlIHJvb3QuXCIsXG4gICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICApLFxuICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgKTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnNcbiAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IFtlcnJvcl0pXG4gICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZCk7XG4gICAgICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHJldHVybiAhMDtcbiAgICAgIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHNvdXJjZUZpYmVyID0gcmV0dXJuRmliZXI7XG4gICAgICBkbyB7XG4gICAgICAgIHN3aXRjaCAoc291cmNlRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJvb3QgPSByb290UmVuZGVyTGFuZXMgJiAtcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzIHw9IHJvb3QpLFxuICAgICAgICAgICAgICAocm9vdCA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWJlci5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHNvdXJjZUZpYmVyLCByb290KSxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudHlwZSksXG4gICAgICAgICAgICAgIChlcnJvciA9IHNvdXJjZUZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgIDAgPT09IChzb3VyY2VGaWJlci5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuRmliZXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAgICAgICAobnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZXJyb3IuY29tcG9uZW50RGlkQ2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT09IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhlcnJvcikpKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzICY9IC1yb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyB8PSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShzb3VyY2VGaWJlciwgcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZUZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gc291cmNlRmliZXIpO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9XG4gICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICA/IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgOiByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgICAgIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBpZiAoXCJyZWZcIiBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgdmFyIHByb3BzV2l0aG91dFJlZiA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmV4dFByb3BzKVxuICAgICAgICAgIFwicmVmXCIgIT09IGtleSAmJiAocHJvcHNXaXRob3V0UmVmW2tleV0gPSBuZXh0UHJvcHNba2V5XSk7XG4gICAgICB9IGVsc2UgcHJvcHNXaXRob3V0UmVmID0gbmV4dFByb3BzO1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBwcm9wc1dpdGhvdXRSZWYsXG4gICAgICAgIHJlZixcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICBrZXkgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmICFkaWRSZWNlaXZlVXBkYXRlKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICApO1xuICAgICAgaXNIeWRyYXRpbmcgJiYga2V5ICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICFzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiZcbiAgICAgICAgICB2b2lkIDAgPT09IHR5cGUuZGVmYXVsdFByb3BzICYmXG4gICAgICAgICAgbnVsbCA9PT0gQ29tcG9uZW50LmNvbXBhcmVcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxNSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCksXG4gICAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpLFxuICAgICAgICAgICAgdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgQ29tcG9uZW50LnR5cGUsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgdHlwZSA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICBpZiAoIWNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICB2YXIgcHJldlByb3BzID0gdHlwZS5tZW1vaXplZFByb3BzO1xuICAgICAgICBDb21wb25lbnQgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICAgICAgQ29tcG9uZW50ID0gbnVsbCAhPT0gQ29tcG9uZW50ID8gQ29tcG9uZW50IDogc2hhbGxvd0VxdWFsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgQ29tcG9uZW50KHByZXZQcm9wcywgbmV4dFByb3BzKSAmJlxuICAgICAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWZcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIGN1cnJlbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyh0eXBlLCBuZXh0UHJvcHMpO1xuICAgICAgY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICAgICAgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZVxuICAgICAgICApXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChkaWRSZWNlaXZlVXBkYXRlID0gITEpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IG5leHRQcm9wcyA9IHByZXZQcm9wcyksXG4gICAgICAgICAgICBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMzEwNzIpICYmIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgbmV4dElzRGV0YWNoZWQgPVxuICAgICAgICAgIDAgIT09XG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZCksXG4gICAgICAgIHByZXZTdGF0ZSA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBpZiAoXCJoaWRkZW5cIiA9PT0gbmV4dFByb3BzLm1vZGUgfHwgbmV4dElzRGV0YWNoZWQpIHtcbiAgICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpIHtcbiAgICAgICAgICBuZXh0UHJvcHMgPVxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgICAgID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgIDogcmVuZGVyTGFuZXM7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgICAgIGZvciAobmV4dElzRGV0YWNoZWQgPSAwOyBudWxsICE9PSBuZXh0Q2hpbGRyZW47IClcbiAgICAgICAgICAgICAgKG5leHRJc0RldGFjaGVkID1cbiAgICAgICAgICAgICAgICBuZXh0SXNEZXRhY2hlZCB8IG5leHRDaGlsZHJlbi5sYW5lcyB8IG5leHRDaGlsZHJlbi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgICAgICAobmV4dENoaWxkcmVuID0gbmV4dENoaWxkcmVuLnNpYmxpbmcpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IG5leHRJc0RldGFjaGVkICYgfm5leHRQcm9wcztcbiAgICAgICAgICB9IGVsc2UgKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSwgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCk7XG4gICAgICAgICAgcmV0dXJuIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwICE9PSAocmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpKVxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IDAsIGNhY2hlUG9vbDogbnVsbCB9KSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgcHVzaFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlID8gcHJldlN0YXRlLmNhY2hlUG9vbCA6IG51bGxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgICAgICA/IHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpXG4gICAgICAgICAgICAgIDogcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gNTM2ODcwOTEyKSxcbiAgICAgICAgICAgIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgICAgICAgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICA6IHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgPyAocHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZS5jYWNoZVBvb2wpLFxuICAgICAgICAgICAgcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSksXG4gICAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSlcbiAgICAgICAgICA6IChudWxsICE9PSBjdXJyZW50ICYmIHB1c2hUcmFuc2l0aW9uKHdvcmtJblByb2dyZXNzLCBudWxsKSxcbiAgICAgICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSk7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dEJhc2VMYW5lcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gcGVla0NhY2hlRnJvbVBvb2woKTtcbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgIG51bGwgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBwYXJlbnQ6IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICBwb29sOiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXMsXG4gICAgICAgIGNhY2hlUG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsICEwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgaWYgKG51bGwgPT09IHJlZilcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQucmVmICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwOTc2NjQpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZWYgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHJlZilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgdW5kZWZpbmVkL251bGwuXCJcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCBjdXJyZW50LnJlZiAhPT0gcmVmKVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwOTc2NjQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlclxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCI7XG4gICAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFRoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAodmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgQ29tcG9uZW50LmNvbnRleHRUeXBlcyAmJlxuICAgICAgICAgICgoY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXNbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgICAgICgoZGlkV2FybkFib3V0Q29udGV4dFR5cGVzW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcyB1c2VzIHRoZSBsZWdhY3kgY29udGV4dFR5cGVzIEFQSSB3aGljaCB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gVXNlIFJlYWN0LmNyZWF0ZUNvbnRleHQoKSB3aXRoIFJlYWN0LnVzZUNvbnRleHQoKSBpbnN0ZWFkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dClcIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKSkpKTtcbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIENvbXBvbmVudCA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgICAgbmV4dFByb3BzID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgKTtcbiAgICAgIGlzSHlkcmF0aW5nICYmIG5leHRQcm9wcyAmJiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgc2Vjb25kQXJnLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgc2Vjb25kQXJnXG4gICAgICApO1xuICAgICAgZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgQ29tcG9uZW50ID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgKTtcbiAgICAgIGlzSHlkcmF0aW5nICYmIENvbXBvbmVudCAmJiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgY3VycmVudCRqc2NvbXAkMCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoc2hvdWxkRXJyb3JJbXBsKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICBjYXNlICExOlxuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUsXG4gICAgICAgICAgICBzdGF0ZSA9IG5ldyB3b3JrSW5Qcm9ncmVzcy50eXBlKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBfaW5zdGFuY2UuY29udGV4dFxuICAgICAgICAgICAgKS5zdGF0ZTtcbiAgICAgICAgICBfaW5zdGFuY2UudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUoX2luc3RhbmNlLCBzdGF0ZSwgbnVsbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgITA6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDY1NTM2O1xuICAgICAgICAgIF9pbnN0YW5jZSA9IEVycm9yKFwiU2ltdWxhdGVkIGVycm9yIGNvbWluZyBmcm9tIERldlRvb2xzXCIpO1xuICAgICAgICAgIHZhciBsYW5lID0gcmVuZGVyTGFuZXMgJiAtcmVuZGVyTGFuZXM7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgfD0gbGFuZTtcbiAgICAgICAgICBzdGF0ZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gc3RhdGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgbGFuZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUobGFuZSk7XG4gICAgICAgICAgaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICBsYW5lLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKF9pbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGxhbmUpO1xuICAgICAgfVxuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSkge1xuICAgICAgICBzdGF0ZSA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgX2luc3RhbmNlID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBcImNvbnRleHRUeXBlXCIgaW4gQ29tcG9uZW50ICYmXG4gICAgICAgICAgbnVsbCAhPT0gX2luc3RhbmNlICYmXG4gICAgICAgICAgKHZvaWQgMCA9PT0gX2luc3RhbmNlIHx8IF9pbnN0YW5jZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ09OVEVYVF9UWVBFKSAmJlxuICAgICAgICAgICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKENvbXBvbmVudCkgJiZcbiAgICAgICAgICAoZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIChsYW5lID1cbiAgICAgICAgICAgIHZvaWQgMCA9PT0gX2luc3RhbmNlXG4gICAgICAgICAgICAgID8gXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gdHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLlwiXG4gICAgICAgICAgICAgIDogXCJvYmplY3RcIiAhPT0gdHlwZW9mIF9pbnN0YW5jZVxuICAgICAgICAgICAgICAgID8gXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgXCIgKyB0eXBlb2YgX2luc3RhbmNlICsgXCIuXCJcbiAgICAgICAgICAgICAgICA6IF9pbnN0YW5jZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRVxuICAgICAgICAgICAgICAgICAgPyBcIiBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/XCJcbiAgICAgICAgICAgICAgICAgIDogXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMge1wiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoX2luc3RhbmNlKS5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIn0uXCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXNcIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCIsXG4gICAgICAgICAgICBsYW5lXG4gICAgICAgICAgKSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBfaW5zdGFuY2UgJiZcbiAgICAgICAgICBudWxsICE9PSBfaW5zdGFuY2UgJiZcbiAgICAgICAgICAoc3RhdGUgPSByZWFkQ29udGV4dChfaW5zdGFuY2UpKTtcbiAgICAgICAgX2luc3RhbmNlID0gbmV3IENvbXBvbmVudChuZXh0UHJvcHMsIHN0YXRlKTtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSBuZXcgQ29tcG9uZW50KG5leHRQcm9wcywgc3RhdGUpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gX2luc3RhbmNlLnN0YXRlICYmIHZvaWQgMCAhPT0gX2luc3RhbmNlLnN0YXRlXG4gICAgICAgICAgICA/IF9pbnN0YW5jZS5zdGF0ZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBfaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gX2luc3RhbmNlO1xuICAgICAgICBfaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxzID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIF9pbnN0YW5jZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gZmFrZUludGVybmFsSW5zdGFuY2U7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJiZcbiAgICAgICAgICBudWxsID09PSBzdGF0ZSAmJlxuICAgICAgICAgICgoc3RhdGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKHN0YXRlKSB8fFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoc3RhdGUpLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJgJXNgIHVzZXMgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYnV0IGl0cyBpbml0aWFsIHN0YXRlIGlzICVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5IGFzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBhcmd1bWVudHMgaGF2ZSBhIGNvbnNpc3RlbnQgc2hhcGUuXCIsXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBudWxsID09PSBfaW5zdGFuY2Uuc3RhdGUgPyBcIm51bGxcIiA6IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gKGxhbmUgPSBzdGF0ZSA9IG51bGwpO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAhMCAhPT0gX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgICA/IChzdGF0ZSA9IFwiY29tcG9uZW50V2lsbE1vdW50XCIpXG4gICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgIChzdGF0ZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFwiKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICEwICE9PVxuICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgICAgPyAobGFuZSA9IFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiKVxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICAgICAobGFuZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIik7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAhMCAhPT0gX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgICAgPyAoZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiKVxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgKGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBcIlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlXCIpO1xuICAgICAgICAgIGlmIChudWxsICE9PSBzdGF0ZSB8fCBudWxsICE9PSBsYW5lIHx8IG51bGwgIT09IGZvdW5kV2lsbFVwZGF0ZU5hbWUpIHtcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICAgICAgICB2YXIgbmV3QXBpTmFtZSA9XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgICAgICAgICAgICA/IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKClcIlxuICAgICAgICAgICAgICAgIDogXCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpXCI7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfaW5zdGFuY2UpIHx8XG4gICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfaW5zdGFuY2UpLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbmh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzXCIsXG4gICAgICAgICAgICAgICAgX2luc3RhbmNlLFxuICAgICAgICAgICAgICAgIG5ld0FwaU5hbWUsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gc3RhdGUgPyBcIlxcbiAgXCIgKyBzdGF0ZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbGFuZSA/IFwiXFxuICBcIiArIGxhbmUgOiBcIlwiLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGZvdW5kV2lsbFVwZGF0ZU5hbWUgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogXCJcIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBzdGF0ZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICAgIF9pbnN0YW5jZS5yZW5kZXIgfHxcbiAgICAgICAgICAoQ29tcG9uZW50LnByb3RvdHlwZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlICVzIGluc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yP1wiLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgJXMgaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLlwiLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAhX2luc3RhbmNlLmdldEluaXRpYWxTdGF0ZSB8fFxuICAgICAgICAgIF9pbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgfHxcbiAgICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgfHxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiBEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD9cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJlxuICAgICAgICAgICFfaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLmNvbnRleHRUeXBlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzICYmXG4gICAgICAgICAgIWRpZFdhcm5BYm91dENoaWxkQ29udGV4dFR5cGVzLmhhcyhDb21wb25lbnQpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dENoaWxkQ29udGV4dFR5cGVzLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHVzZXMgdGhlIGxlZ2FjeSBjaGlsZENvbnRleHRUeXBlcyBBUEkgd2hpY2ggd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIFVzZSBSZWFjdC5jcmVhdGVDb250ZXh0KCkgaW5zdGVhZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbGVnYWN5LWNvbnRleHQpXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICkpO1xuICAgICAgICBDb21wb25lbnQuY29udGV4dFR5cGVzICYmXG4gICAgICAgICAgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlcyQxLmhhcyhDb21wb25lbnQpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dENvbnRleHRUeXBlcyQxLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHVzZXMgdGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgQVBJIHdoaWNoIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiBVc2UgUmVhY3QuY3JlYXRlQ29udGV4dCgpIHdpdGggc3RhdGljIGNvbnRleHRUeXBlIGluc3RlYWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0KVwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBDb21wb25lbnQucHJvdG90eXBlICYmXG4gICAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJlxuICAgICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiBQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQSBwdXJlIGNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiBJZiB5b3UgbWVhbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiByZXNwb25zZSB0byBjaGFuZ2luZyBwcm9wcywgdXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgcnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIGxhbmUgPSBfaW5zdGFuY2UucHJvcHMgIT09IG5leHRQcm9wcztcbiAgICAgICAgdm9pZCAwICE9PSBfaW5zdGFuY2UucHJvcHMgJiZcbiAgICAgICAgICBsYW5lICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgdXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5kZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuXCIsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSB8fFxuICAgICAgICAgIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5oYXMoQ29tcG9uZW50KSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKENvbXBvbmVudCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KVxuICAgICAgICAgICkpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgKGxhbmUgPSBfaW5zdGFuY2Uuc3RhdGUpICYmXG4gICAgICAgICAgKFwib2JqZWN0XCIgIT09IHR5cGVvZiBsYW5lIHx8IGlzQXJyYXlJbXBsKGxhbmUpKSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCIlcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGxcIiwgc3RhdGUpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICYmXG4gICAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gdXNlIGdldENoaWxkQ29udGV4dCgpLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIF9pbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcztcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX2luc3RhbmNlLnJlZnMgPSB7fTtcbiAgICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgc3RhdGUgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgICAgIF9pbnN0YW5jZS5jb250ZXh0ID1cbiAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygc3RhdGUgJiYgbnVsbCAhPT0gc3RhdGVcbiAgICAgICAgICAgID8gcmVhZENvbnRleHQoc3RhdGUpXG4gICAgICAgICAgICA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID09PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgICAoKHN0YXRlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKHN0YXRlKSB8fFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChzdGF0ZSksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlIGJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIEluIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuXCIsXG4gICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzdGF0ZSA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHN0YXRlICYmXG4gICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICksXG4gICAgICAgICAgKF9pbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCkgfHxcbiAgICAgICAgICAoKHN0YXRlID0gX2luc3RhbmNlLnN0YXRlKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgc3RhdGUgIT09IF9pbnN0YW5jZS5zdGF0ZSAmJlxuICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLnN0YXRlLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgX2luc3RhbmNlLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpLFxuICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KTtcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA2NzEwODg2NCk7XG4gICAgICAgIF9pbnN0YW5jZSA9ICEwO1xuICAgICAgfSBlbHNlIGlmIChudWxsID09PSBjdXJyZW50JGpzY29tcCQwKSB7XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGxhbmUgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhDb21wb25lbnQsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gICAgICAgIF9pbnN0YW5jZS5wcm9wcyA9IGxhbmU7XG4gICAgICAgIHZhciBvbGRDb250ZXh0ID0gX2luc3RhbmNlLmNvbnRleHQ7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgICAgIHN0YXRlID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZm91bmRXaWxsVXBkYXRlTmFtZSAmJlxuICAgICAgICAgIG51bGwgIT09IGZvdW5kV2lsbFVwZGF0ZU5hbWUgJiZcbiAgICAgICAgICAoc3RhdGUgPSByZWFkQ29udGV4dChmb3VuZFdpbGxVcGRhdGVOYW1lKSk7XG4gICAgICAgIG5ld0FwaU5hbWUgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID1cbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdBcGlOYW1lIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgIT09IHVucmVzb2x2ZWRPbGRQcm9wcztcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSB8fFxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB8fFxuICAgICAgICAgICgodW5yZXNvbHZlZE9sZFByb3BzIHx8IG9sZENvbnRleHQgIT09IHN0YXRlKSAmJlxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICkpO1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIF9pbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICAgIG9sZENvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgfHwgb2xkU3RhdGUgIT09IG9sZENvbnRleHQgfHwgaGFzRm9yY2VVcGRhdGVcbiAgICAgICAgICA/IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdBcGlOYW1lICYmXG4gICAgICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgbmV3QXBpTmFtZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKG9sZENvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSksXG4gICAgICAgICAgICAobGFuZSA9XG4gICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBsYW5lLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICAgICAgICBvbGRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgID8gKGZvdW5kV2lsbFVwZGF0ZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KSB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDY3MTA4ODY0KSlcbiAgICAgICAgICAgICAgOiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDY3MTA4ODY0KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBvbGRDb250ZXh0KSksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSBvbGRDb250ZXh0KSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UuY29udGV4dCA9IHN0YXRlKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSBsYW5lKSlcbiAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNjcxMDg4NjQpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZSA9ICExKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCRqc2NvbXAkMCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhDb21wb25lbnQsIHN0YXRlKTtcbiAgICAgICAgX2luc3RhbmNlLnByb3BzID0gZm91bmRXaWxsVXBkYXRlTmFtZTtcbiAgICAgICAgbmV3QXBpTmFtZSA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgb2xkU3RhdGUgPSBfaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgb2xkQ29udGV4dCA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgbGFuZSA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9sZENvbnRleHQgJiZcbiAgICAgICAgICBudWxsICE9PSBvbGRDb250ZXh0ICYmXG4gICAgICAgICAgKGxhbmUgPSByZWFkQ29udGV4dChvbGRDb250ZXh0KSk7XG4gICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICAgIChvbGRDb250ZXh0ID1cbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1bnJlc29sdmVkT2xkUHJvcHMgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHx8XG4gICAgICAgICAgKChzdGF0ZSAhPT0gbmV3QXBpTmFtZSB8fCBvbGRTdGF0ZSAhPT0gbGFuZSkgJiZcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICkpO1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgICBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgX2luc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKTtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc3RhdGUgIT09IG5ld0FwaU5hbWUgfHxcbiAgICAgICAgb2xkU3RhdGUgIT09IG5ld1N0YXRlIHx8XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgIChudWxsICE9PSBjdXJyZW50JGpzY29tcCQwICYmXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCRqc2NvbXAkMC5kZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudCRqc2NvbXAkMC5kZXBlbmRlbmNpZXMpKVxuICAgICAgICAgID8gKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVucmVzb2x2ZWRPbGRQcm9wcyAmJlxuICAgICAgICAgICAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpLFxuICAgICAgICAgICAgKGZvdW5kV2lsbFVwZGF0ZU5hbWUgPVxuICAgICAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUsXG4gICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50JGpzY29tcCQwICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCRqc2NvbXAkMC5kZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgICAgICBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudCRqc2NvbXAkMC5kZXBlbmRlbmNpZXMpKSlcbiAgICAgICAgICAgICAgPyAob2xkQ29udGV4dCB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5ld1N0YXRlLCBsYW5lKSxcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpKVxuICAgICAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQkanNjb21wJDAubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudCRqc2NvbXAkMC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgKHN0YXRlID09PSBjdXJyZW50JGpzY29tcCQwLm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQkanNjb21wJDAubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZSkpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gbmV3U3RhdGUpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5jb250ZXh0ID0gbGFuZSksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gZm91bmRXaWxsVXBkYXRlTmFtZSkpXG4gICAgICAgICAgOiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSB8fFxuICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQkanNjb21wJDAubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50JGpzY29tcCQwLm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQkanNjb21wJDAubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50JGpzY29tcCQwLm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSAhMSkpO1xuICAgICAgfVxuICAgICAgbGFuZSA9IF9pbnN0YW5jZTtcbiAgICAgIG1hcmtSZWYoY3VycmVudCRqc2NvbXAkMCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3RhdGUgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICAgICAgaWYgKGxhbmUgfHwgc3RhdGUpIHtcbiAgICAgICAgbGFuZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID1cbiAgICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcyA/IG51bGwgOiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgICAgICBpc1JlbmRlcmluZyA9ICExO1xuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIGlmIChzdGF0ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKVxuICAgICAgICAgIChDb21wb25lbnQgPSBudWxsKSwgKHByb2ZpbGVyU3RhcnRUaW1lID0gLTEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgQ29tcG9uZW50ID0gY2FsbFJlbmRlckluREVWKGxhbmUpO1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY2FsbFJlbmRlckluREVWKGxhbmUpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQkanNjb21wJDAgJiYgc3RhdGVcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGN1cnJlbnQkanNjb21wJDAuY2hpbGQsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSkpXG4gICAgICAgICAgOiByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBsYW5lLnN0YXRlO1xuICAgICAgICBjdXJyZW50JGpzY29tcCQwID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICB9IGVsc2VcbiAgICAgICAgY3VycmVudCRqc2NvbXAkMCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCRqc2NvbXAkMCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICBfaW5zdGFuY2UgJiZcbiAgICAgICAgcmVuZGVyTGFuZXMucHJvcHMgIT09IG5leHRQcm9wcyAmJlxuICAgICAgICAoZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkl0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJhIGNvbXBvbmVudFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSAhMCkpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQkanNjb21wJDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dENoaWxkcmVuLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDI1NjtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAgICAgIENvbXBvbmVudCAmJlxuICAgICAgICBDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcImNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LlxcbiAgJXMuY2hpbGRDb250ZXh0VHlwZXMgPSAuLi5cIixcbiAgICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICApO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W3dvcmtJblByb2dyZXNzXSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuXCIsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbd29ya0luUHJvZ3Jlc3NdID1cbiAgICAgICAgICAgICEwKSkpO1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSAmJlxuICAgICAgICBudWxsICE9PSBDb21wb25lbnQuY29udGV4dFR5cGUgJiZcbiAgICAgICAgKChDb21wb25lbnQgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIiksXG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtDb21wb25lbnRdIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLlwiLFxuICAgICAgICAgICAgQ29tcG9uZW50XG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W0NvbXBvbmVudF0gPSAhMCkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gICAgICByZXR1cm4geyBiYXNlTGFuZXM6IHJlbmRlckxhbmVzLCBjYWNoZVBvb2w6IGdldFN1c3BlbmRlZENhY2hlKCkgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICBjdXJyZW50LFxuICAgICAgcHJpbWFyeVRyZWVEaWREZWZlcixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuY2hpbGRMYW5lcyAmIH5yZW5kZXJMYW5lcyA6IDA7XG4gICAgICBwcmltYXJ5VHJlZURpZERlZmVyICYmIChjdXJyZW50IHw9IHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTc7XG4gICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICBzaG91bGRTdXNwZW5kSW1wbCh3b3JrSW5Qcm9ncmVzcykgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCk7XG4gICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkgPSAhMTtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcgPSBkaWRTdXNwZW5kKSB8fFxuICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yMzE3ID1cbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyAhMVxuICAgICAgICAgICAgOiAwICE9PSAoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOSA9ICEwKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xMjkpKTtcbiAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjMxNyA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDMyKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0zMztcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5XG4gICAgICAgICAgICA/IHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgIDogcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXA7XG4gICAgICAgICAgICBpZiAoIShKU0NvbXBpbGVyX3RlbXAgPSAhSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNikpIHtcbiAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTY7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHJvb3RPclNpbmdsZXRvbkNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICA4ICE9PSBpbnN0YW5jZS5ub2RlVHlwZTtcblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFKU0NvbXBpbGVyX3RlbXApIHtcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgICAgICAgICAgID8gKHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRlaHlkcmF0ZWQ6IEpTQ29tcGlsZXJfdGVtcCxcbiAgICAgICAgICAgICAgICAgICAgdHJlZUNvbnRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHJlZUNvbnRleHRQcm92aWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGlkOiB0cmVlQ29udGV4dElkLCBvdmVyZmxvdzogdHJlZUNvbnRleHRPdmVyZmxvdyB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5TGFuZTogNTM2ODcwOTEyXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIChpbnN0YW5jZSA9IGNyZWF0ZUZpYmVyKDE4LCBudWxsLCBudWxsLCBOb01vZGUpKSxcbiAgICAgICAgICAgICAgICAgIChpbnN0YW5jZS5zdGF0ZU5vZGUgPSBKU0NvbXBpbGVyX3RlbXApLFxuICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gITApKVxuICAgICAgICAgICAgICAgIDogKEpTQ29tcGlsZXJfdGVtcCA9ICExKTtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gIUpTQ29tcGlsZXJfdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgICAod2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNiA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNiAmJlxuICAgICAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNi5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNi5kYXRhID09PVxuICAgICAgICAgICAgICBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBXG4gICAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSAxNilcbiAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDUzNjg3MDkxMiksXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID1cbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5jaGlsZHJlbjtcbiAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPVxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4LmZhbGxiYWNrO1xuICAgICAgICBpZiAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkgPVxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID1cbiAgICAgICAgICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG1vZGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTlcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTgsXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNi5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTgucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYuc2libGluZyA9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5ID1cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5Lm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOS5jaGlsZExhbmVzID1cbiAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMThcbiAgICAgICAgICApO1xuICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQpLFxuICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChkaWRTdXNwZW5kKVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2XG4gICAgICAgICAgICA/IChwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTI1NyksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICA6IG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgICAgPyAocmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBudWxsKSlcbiAgICAgICAgICAgICAgOiAocmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkgPVxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTguZmFsbGJhY2spLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID0gd29ya0luUHJvZ3Jlc3MubW9kZSksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID1cbiAgICAgICAgICAgICAgICAgIG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkgPVxuICAgICAgICAgICAgICAgICAgY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5LFxuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2LFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5LmZsYWdzIHw9IDIpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5LnJldHVybiA9XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4LnNpYmxpbmcgPVxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4KSxcbiAgICAgICAgICAgICAgICByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgICAgICAgIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5jaGlsZExhbmVzID1cbiAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOSkpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAocHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJXZSBzaG91bGQgbm90IGJlIGh5ZHJhdGluZyBoZXJlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhIGJ1Zy5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2LmRhdGEgPT09XG4gICAgICAgICAgICBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBKVxuICAgICAgICApIHtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNi5uZXh0U2libGluZyAmJlxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNi5uZXh0U2libGluZy5kYXRhc2V0O1xuICAgICAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcpIHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjMxNy5kZ3N0O1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcubXNnO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcuc3RjaztcbiAgICAgICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjMxNy5jc3RjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNiA9IG1lc3NhZ2U7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yMzE3ID0gSlNDb21waWxlcl90ZW1wO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID0gaW5zdGFuY2U7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkgPVxuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNlxuICAgICAgICAgICAgICA/IEVycm9yKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYpXG4gICAgICAgICAgICAgIDogRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlRoZSBzZXJ2ZXIgY291bGQgbm90IGZpbmlzaCB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LCBsaWtlbHkgZHVlIHRvIGFuIGVycm9yIGR1cmluZyBzZXJ2ZXIgcmVuZGVyaW5nLiBTd2l0Y2hlZCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOS5zdGFjayA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOCB8fCBcIlwiO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5LmRpZ2VzdCA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTc7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yMzE3ID1cbiAgICAgICAgICAgIHZvaWQgMCA9PT0gSlNDb21waWxlcl90ZW1wID8gbnVsbCA6IEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOCA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOSxcbiAgICAgICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgICAgIHN0YWNrOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTdcbiAgICAgICAgICB9O1xuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcgJiZcbiAgICAgICAgICAgIENhcHR1cmVkU3RhY2tzLnNldChcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTksXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4XG4gICAgICAgICAgICApO1xuICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTgpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAgICAgICAgIHByb3BhZ2F0ZVBhcmVudENvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICExXG4gICAgICAgICAgICApLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcgPVxuICAgICAgICAgICAgMCAhPT0gKHJlbmRlckxhbmVzICYgY3VycmVudC5jaGlsZExhbmVzKSksXG4gICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSB8fCBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcpXG4gICAgICAgICkge1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjMxNyA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yMzE3KSB7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOCA9IHJlbmRlckxhbmVzICYgLXJlbmRlckxhbmVzO1xuICAgICAgICAgICAgaWYgKDAgIT09IChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOCAmIDQyKSlcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPSAxO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBzd2l0Y2ggKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPSAxO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPSA0O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID0gMTY7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgICAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgICAgICAgICAgY2FzZSAxNjM4NDpcbiAgICAgICAgICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICAgICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzEwNzI6XG4gICAgICAgICAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgICAgICAgICAgY2FzZSAxMDQ4NTc2OlxuICAgICAgICAgICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgICAgICAgICBjYXNlIDQxOTQzMDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICAgICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgICAgICAgICAgY2FzZSAzMzU1NDQzMjpcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID0gNjQ7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID0gMTM0MjE3NzI4O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPVxuICAgICAgICAgICAgICAwICE9PVxuICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggJlxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcuc3VzcGVuZGVkTGFuZXMgfFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMpKVxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTg7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIDAgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ICYmXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4ICE9PSBwcmV2U3RhdGUucmV0cnlMYW5lXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgICAoKHByZXZTdGF0ZS5yZXRyeUxhbmUgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOCksXG4gICAgICAgICAgICAgICAgZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMThcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNi5kYXRhID09PVxuICAgICAgICAgICAgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2LmRhdGEgPT09XG4gICAgICAgICAgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBXG4gICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkuYmluZChcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2Ll9yZWFjdFJldHJ5ID1cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpKVxuICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBwcmV2U3RhdGUudHJlZUNvbnRleHQpLFxuICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKGlzSHlkcmF0aW5nID0gITApLFxuICAgICAgICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCksXG4gICAgICAgICAgICAgIChkaWRTdXNwZW5kT3JFcnJvckRFViA9ICExKSxcbiAgICAgICAgICAgICAgKGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCksXG4gICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEpLFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgKHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0SWQpLFxuICAgICAgICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3cpLFxuICAgICAgICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0UHJvdmlkZXIpLFxuICAgICAgICAgICAgICAgICh0cmVlQ29udGV4dElkID0gY3VycmVudC5pZCksXG4gICAgICAgICAgICAgICAgKHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBjdXJyZW50Lm92ZXJmbG93KSxcbiAgICAgICAgICAgICAgICAodHJlZUNvbnRleHRQcm92aWRlciA9IHdvcmtJblByb2dyZXNzKSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTguY2hpbGRyZW5cbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MDk2KSk7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOSA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5mYWxsYmFjayksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgKGluc3RhbmNlID0gSlNDb21waWxlcl90ZW1wLnNpYmxpbmcpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtb2RlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTguY2hpbGRyZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTguc3VidHJlZUZsYWdzID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5zdWJ0cmVlRmxhZ3MgJiAzMTQ1NzI4MCksXG4gICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgID8gKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5ID1cbiAgICAgICAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTlcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5ID1cbiAgICAgICAgICAgICAgICBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yMzE5LFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkuZmxhZ3MgfD0gMikpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOS5yZXR1cm4gPVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjMxOC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4LnNpYmxpbmcgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4KSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTggPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzIzMTkpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOSA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNiA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgbnVsbCA9PT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNlxuICAgICAgICAgICAgPyAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjMxNiA9XG4gICAgICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSlcbiAgICAgICAgICAgIDogKChKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYuY2FjaGVQb29sKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl90ZW1wXG4gICAgICAgICAgICAgICAgPyAoKGluc3RhbmNlID0gQ2FjaGVDb250ZXh0Ll9jdXJyZW50VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5wYXJlbnQgIT09IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgPyB7IHBhcmVudDogaW5zdGFuY2UsIHBvb2w6IGluc3RhbmNlIH1cbiAgICAgICAgICAgICAgICAgICAgICA6IEpTQ29tcGlsZXJfdGVtcCkpXG4gICAgICAgICAgICAgICAgOiAoSlNDb21waWxlcl90ZW1wID0gZ2V0U3VzcGVuZGVkQ2FjaGUoKSksXG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yMzE2ID0ge1xuICAgICAgICAgICAgICAgIGJhc2VMYW5lczpcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgY2FjaGVQb29sOiBKU0NvbXBpbGVyX3RlbXBcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOS5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzIzMTYpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjMxOS5jaGlsZExhbmVzID1cbiAgICAgICAgICAgIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yMzE4XG4gICAgICAgICk7XG4gICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmVuZGVyTGFuZXMgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgY3VycmVudCA9IHJlbmRlckxhbmVzLnNpYmxpbmc7XG4gICAgICByZW5kZXJMYW5lcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJlbmRlckxhbmVzLCB7XG4gICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzIzMTguY2hpbGRyZW5cbiAgICAgIH0pO1xuICAgICAgcmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZW5kZXJMYW5lcy5zaWJsaW5nID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcgPSB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMpLFxuICAgICAgICBudWxsID09PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTdcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gW2N1cnJlbnRdKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxNikpXG4gICAgICAgICAgOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzIzMTcucHVzaChjdXJyZW50KSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gcmVuZGVyTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbikge1xuICAgICAgcHJpbWFyeUNoaWxkcmVuID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICB7IG1vZGU6IFwidmlzaWJsZVwiLCBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuIH0sXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGVcbiAgICAgICk7XG4gICAgICBwcmltYXJ5Q2hpbGRyZW4ucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkcmVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKG9mZnNjcmVlblByb3BzLCBtb2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKG9mZnNjcmVlblByb3BzLCBtb2RlLCAwLCBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIGN1cnJlbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuXG4gICAgICApO1xuICAgICAgY3VycmVudC5mbGFncyB8PSAyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gICAgICBmaWJlci5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICBmaWJlci5yZXR1cm4sXG4gICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICBwcm9wYWdhdGlvblJvb3RcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICAgICAgdmFyIGlzQW5BcnJheSA9IGlzQXJyYXlJbXBsKGNoaWxkU2xvdCk7XG4gICAgICBjaGlsZFNsb3QgPSAhaXNBbkFycmF5ICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KTtcbiAgICAgIHJldHVybiBpc0FuQXJyYXkgfHwgY2hpbGRTbG90XG4gICAgICAgID8gKChpc0FuQXJyYXkgPSBpc0FuQXJyYXkgPyBcImFycmF5XCIgOiBcIml0ZXJhYmxlXCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkEgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluIGFuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6IDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gPC9TdXNwZW5zZUxpc3Q+XCIsXG4gICAgICAgICAgICBpc0FuQXJyYXksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGlzQW5BcnJheVxuICAgICAgICAgICksXG4gICAgICAgICAgITEpXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaXNCYWNrd2FyZHMsXG4gICAgICB0YWlsLFxuICAgICAgbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsTW9kZVxuICAgICkge1xuICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIG51bGwgPT09IHJlbmRlclN0YXRlXG4gICAgICAgID8gKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICAgICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGVcbiAgICAgICAgICB9KVxuICAgICAgICA6ICgocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcyksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93KSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUudGFpbCA9IHRhaWwpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyLFxuICAgICAgICB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKFxuICAgICAgICB2b2lkIDAgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgIFwiZm9yd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgXCJiYWNrd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgXCJ0b2dldGhlclwiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdXG4gICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9ICEwKSxcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmV2ZWFsT3JkZXIpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZm9yd2FyZFwiOlxuICAgICAgICAgICAgY2FzZSBcImJhY2t3YXJkXCI6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIERpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgKTtcbiAgICAgIHZvaWQgMCA9PT0gdGFpbE1vZGUgfHxcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdIHx8XG4gICAgICAgIChcImNvbGxhcHNlZFwiICE9PSB0YWlsTW9kZSAmJiBcImhpZGRlblwiICE9PSB0YWlsTW9kZVxuICAgICAgICAgID8gKChkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiBEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogXCJmb3J3YXJkc1wiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICAgICAgXCJiYWNrd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgICAgICgoZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApKSk7XG4gICAgICBhOiBpZiAoXG4gICAgICAgIChcImZvcndhcmRzXCIgPT09IHJldmVhbE9yZGVyIHx8IFwiYmFja3dhcmRzXCIgPT09IHJldmVhbE9yZGVyKSAmJlxuICAgICAgICB2b2lkIDAgIT09IG5leHRQcm9wcyAmJlxuICAgICAgICBudWxsICE9PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgITEgIT09IG5leHRQcm9wc1xuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobmV4dFByb3BzKSlcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKG5leHRQcm9wc1tpXSwgaSkpIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoKGkgPSBnZXRJdGVyYXRvckZuKG5leHRQcm9wcykpLCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpKSkge1xuICAgICAgICAgIGlmICgoaSA9IGkuY2FsbChuZXh0UHJvcHMpKSlcbiAgICAgICAgICAgIGZvciAodmFyIHN0ZXAgPSBpLm5leHQoKSwgX2kgPSAwOyAhc3RlcC5kb25lOyBzdGVwID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiBUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JyxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgKTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIG5leHRQcm9wcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIGlmICgwICE9PSAobmV4dFByb3BzICYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSlcbiAgICAgICAgKG5leHRQcm9wcyA9XG4gICAgICAgICAgKG5leHRQcm9wcyAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8IEZvcmNlU3VzcGVuc2VGYWxsYmFjayksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgIGE6IGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICAgICAgICAgIGlmICgxMyA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKDE5ID09PSBjdXJyZW50LnRhZylcbiAgICAgICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGN1cnJlbnQsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBlbHNlIGlmIChudWxsICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQucmV0dXJuID0gY3VycmVudDtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IHdvcmtJblByb2dyZXNzKSBicmVhayBhO1xuICAgICAgICAgICAgZm9yICg7IG51bGwgPT09IGN1cnJlbnQuc2libGluZzsgKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50LnJldHVybiB8fCBjdXJyZW50LnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudC5zaWJsaW5nLnJldHVybiA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIG5leHRQcm9wcyAmPSBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbiAgICAgIH1cbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV4dFByb3BzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgZm9yIChyZXZlYWxPcmRlciA9IG51bGw7IG51bGwgIT09IHJlbmRlckxhbmVzOyApXG4gICAgICAgICAgICAoY3VycmVudCA9IHJlbmRlckxhbmVzLmFsdGVybmF0ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICBudWxsID09PSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCkgJiZcbiAgICAgICAgICAgICAgICAocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gKChyZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCkpXG4gICAgICAgICAgICA6ICgocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcy5zaWJsaW5nKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsKSk7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAhMSxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJiYWNrd2FyZHNcIjpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IG51bGw7XG4gICAgICAgICAgcmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBmb3IgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDsgbnVsbCAhPT0gcmV2ZWFsT3JkZXI7ICkge1xuICAgICAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLmFsdGVybmF0ZTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KSkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5zaWJsaW5nO1xuICAgICAgICAgICAgcmV2ZWFsT3JkZXIuc2libGluZyA9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSByZXZlYWxPcmRlcjtcbiAgICAgICAgICAgIHJldmVhbE9yZGVyID0gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAhMCxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCAhMSwgbnVsbCwgbnVsbCwgdm9pZCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuICAgICAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudC5jaGlsZClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLmNoaWxkKSB7XG4gICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIGZvciAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7IG51bGwgIT09IGN1cnJlbnQuc2libGluZzsgKVxuICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcgPVxuICAgICAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVuZGVyTGFuZXMuc2libGluZyA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gICAgICBpZiAoMCAhPT0gKGN1cnJlbnQubGFuZXMgJiByZW5kZXJMYW5lcykpIHJldHVybiAhMDtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICAgIHJldHVybiBudWxsICE9PSBjdXJyZW50ICYmIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50KSA/ICEwIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHB1c2hQcm92aWRlcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ2FjaGVDb250ZXh0LFxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDg7XG4gICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAtMDtcbiAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGVOb2RlKSB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGVOb2RlLmRlaHlkcmF0ZWQpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGRMYW5lcykpXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgY3VycmVudCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5zaWJsaW5nIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IDAgIT09IChjdXJyZW50LmZsYWdzICYgMTI4KTtcbiAgICAgICAgICBzdGF0ZU5vZGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcbiAgICAgICAgICBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChzdGF0ZU5vZGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkpO1xuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGVOb2RlKVxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGlkU3VzcGVuZEJlZm9yZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgbnVsbCAhPT0gZGlkU3VzcGVuZEJlZm9yZSAmJlxuICAgICAgICAgICAgKChkaWRTdXNwZW5kQmVmb3JlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUudGFpbCA9IG51bGwpLFxuICAgICAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUubGFzdEVmZmVjdCA9IG51bGwpKTtcbiAgICAgICAgICBwdXNoKFxuICAgICAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc3RhdGVOb2RlKSBicmVhaztcbiAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwKSxcbiAgICAgICAgICAgIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENhY2hlQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5rZXksXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lc1xuICAgICAgICApO1xuICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICAgIGlmIChudWxsID09PSByZXR1cm5GaWJlcikgdGhyb3cgRXJyb3IoXCJDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci5cIik7XG4gICAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgcmVuZGVyTGFuZXMuaW5kZXggPSB3b3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICAgICAgcmVuZGVyTGFuZXMuc2libGluZyA9IHdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgICAgIHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgcmVuZGVyTGFuZXMucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgICByZW5kZXJMYW5lcy5fZGVidWdJbmZvID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnSW5mbztcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZClcbiAgICAgICAgICByZXR1cm5GaWJlci5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldlNpYmxpbmcpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuXCIpO1xuICAgICAgICAgIGZvciAoOyBwcmV2U2libGluZy5zaWJsaW5nICE9PSB3b3JrSW5Qcm9ncmVzczsgKVxuICAgICAgICAgICAgaWYgKCgocHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nKSwgbnVsbCA9PT0gcHJldlNpYmxpbmcpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuXCIpO1xuICAgICAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJMYW5lcztcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICA/ICgocmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2N1cnJlbnRdKSwgKHJldHVybkZpYmVyLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzLnB1c2goY3VycmVudCk7XG4gICAgICAgIHJlbmRlckxhbmVzLmZsYWdzIHw9IDI7XG4gICAgICAgIHJldHVybiByZW5kZXJMYW5lcztcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgfHxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGVcbiAgICAgICAgKVxuICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAhMDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChkaWRSZWNlaXZlVXBkYXRlID0gITEpLFxuICAgICAgICAgICAgICBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IDAgIT09IChjdXJyZW50LmZsYWdzICYgMTMxMDcyKSA/ICEwIDogITE7XG4gICAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG4gICAgICAgIGlmICgocmV0dXJuRmliZXIgPSBpc0h5ZHJhdGluZykpXG4gICAgICAgICAgd2FybklmTm90SHlkcmF0aW5nKCksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMDQ4NTc2KSk7XG4gICAgICAgIHJldHVybkZpYmVyICYmXG4gICAgICAgICAgKChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLmluZGV4KSxcbiAgICAgICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKSxcbiAgICAgICAgICBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCB0cmVlRm9ya0NvdW50LCByZXR1cm5GaWJlcikpO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBhOiBpZiAoXG4gICAgICAgICAgICAoKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChjdXJyZW50ID0gY2FsbExhenlJbml0SW5ERVYod29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNob3VsZENvbnN0cnVjdChjdXJyZW50KVxuICAgICAgICAgICAgICA/ICgocmV0dXJuRmliZXIgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQpKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzcy50YWcgPSAwKSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudCkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKHByZXZTaWJsaW5nID0gY3VycmVudC4kJHR5cGVvZiksXG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDExO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZTaWJsaW5nID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSAxNDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBcIlwiO1xuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY3VycmVudCAmJlxuICAgICAgICAgICAgICBjdXJyZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICAgICAgICBcIiBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlP1wiKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3VycmVudCkgfHwgY3VycmVudDtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgK1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgK1xuICAgICAgICAgICAgICAgIFwiLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNob3VsZCBoYXZlIGEgY3VycmVudCBmaWJlci4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgIHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gcHJldlNpYmxpbmcuZWxlbWVudDtcbiAgICAgICAgICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgbmV4dFByb3BzID0gbmV4dFN0YXRlLmNhY2hlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICBuZXh0UHJvcHMgIT09IHByZXZTaWJsaW5nLmNhY2hlICYmXG4gICAgICAgICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIFtDYWNoZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICAgICAgICBuZXh0UHJvcHMgPSBuZXh0U3RhdGUuZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwcmV2U2libGluZy5pc0RlaHlkcmF0ZWQpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKHByZXZTaWJsaW5nID0ge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudDogbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgaXNEZWh5ZHJhdGVkOiAhMSxcbiAgICAgICAgICAgICAgICAgIGNhY2hlOiBuZXh0U3RhdGUuY2FjaGVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dFByb3BzICE9PSByZXR1cm5GaWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHJvb3QgcmVjZWl2ZWQgYW4gZWFybHkgdXBkYXRlLCBiZWZvcmUgYW55dGhpbmcgd2FzIGFibGUgaHlkcmF0ZS4gU3dpdGNoZWQgdGhlIGVudGlyZSByb290IHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihyZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICBpc0h5ZHJhdGluZyA9ICEwLFxuICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25FcnJvcnMgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViA9ICExLFxuICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IG1vdW50Q2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgY3VycmVudDtcblxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50LmZsYWdzID0gKGN1cnJlbnQuZmxhZ3MgJiAtMykgfCA0MDk2KSxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmcpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICAgICAgaWYgKG5leHRQcm9wcyA9PT0gcmV0dXJuRmliZXIpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoY3VycmVudCA9IGdldFJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudClcbiAgICAgICAgICAgICAgICA6IGlzSHlkcmF0aW5nIHx8XG4gICAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZXF1aXJlZENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICkuY3JlYXRlRWxlbWVudChjdXJyZW50KSksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXJbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXJbaW50ZXJuYWxQcm9wc0tleV0gPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXR1cm5GaWJlciwgY3VycmVudCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gZ2V0UmVzb3VyY2UoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGdldEhvc3RDb250ZXh0KCkpLFxuICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPVxuICAgICAgICAgICAgICAgIHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgICAgICAgIChidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKHdvcmtJblByb2dyZXNzLCAwKS5zZXJ2ZXJQcm9wcyA9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyKSksXG4gICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMCksXG4gICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcuZmlyc3RDaGlsZFxuICAgICAgICAgICAgICApKSksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCB8fCBpc0h5ZHJhdGluZ1xuICAgICAgICAgICAgICA/IHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgKChuZXh0UHJvcHMgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdmFsaWRhdGVET01OZXN0aW5nKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLmFuY2VzdG9ySW5mb1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIChuZXh0U3RhdGUgPSAhcHJldlNpYmxpbmcpIHx8XG4gICAgICAgICAgICAgICAgKChuZXh0U3RhdGUgPSBjYW5IeWRyYXRlSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dFN0YXRlXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbmV4dFN0YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoKG5leHRQcm9wcyA9IGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dFByb3BzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMpKSxcbiAgICAgICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5maXJzdENoaWxkXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAocm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICExKSxcbiAgICAgICAgICAgICAgICAgICAgKG5leHRQcm9wcyA9ICEwKSlcbiAgICAgICAgICAgICAgICAgIDogKG5leHRQcm9wcyA9ICExKSxcbiAgICAgICAgICAgICAgICAobmV4dFN0YXRlID0gIW5leHRQcm9wcykpLFxuICAgICAgICAgICAgICBuZXh0U3RhdGUgJiZcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKHdvcmtJblByb2dyZXNzKSkpLFxuICAgICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAobmV4dFN0YXRlID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGwpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbmV4dFByb3BzLmNoaWxkcmVuKSxcbiAgICAgICAgICAgIHNob3VsZFNldFRleHRDb250ZW50KHByZXZTaWJsaW5nLCBuZXh0UHJvcHMpXG4gICAgICAgICAgICAgID8gKHJldHVybkZpYmVyID0gbnVsbClcbiAgICAgICAgICAgICAgOiBudWxsICE9PSBuZXh0U3RhdGUgJiZcbiAgICAgICAgICAgICAgICBzaG91bGRTZXRUZXh0Q29udGVudChwcmV2U2libGluZywgbmV4dFN0YXRlKSAmJlxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAzMiksXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKEhvc3RUcmFuc2l0aW9uQ29udGV4dC5fY3VycmVudFZhbHVlID0gcHJldlNpYmxpbmcpKSxcbiAgICAgICAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAoKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBnZXRIb3N0Q29udGV4dCgpLmFuY2VzdG9ySW5mby5jdXJyZW50KSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgIG51bGwgIT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgID8gdmFsaWRhdGVUZXh0TmVzdGluZyhjdXJyZW50LCByZW5kZXJMYW5lcy50YWcpXG4gICAgICAgICAgICAgICAgICA6ICEwKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICFyZW5kZXJMYW5lcykgfHxcbiAgICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICEwKSlcbiAgICAgICAgICAgICAgICAgIDogKHJldHVybkZpYmVyID0gITEpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICFyZXR1cm5GaWJlcikpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICAgIChjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICB3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlci5lZmZlY3REdXJhdGlvbiA9IC0wKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlci5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAtMCksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChuZXh0UHJvcHMgPSBwcmV2U2libGluZy52YWx1ZSksXG4gICAgICAgICAgICBcInZhbHVlXCIgaW4gcHJldlNpYmxpbmcgfHxcbiAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgfHxcbiAgICAgICAgICAgICAgKChoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD9cIlxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgcmV0dXJuRmliZXIsIG5leHRQcm9wcyksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHByZXZTaWJsaW5nLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0KSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkIHRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgdGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHJlYWRDb250ZXh0KHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSBjYWxsQ29tcG9uZW50SW5ERVYoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgdm9pZCAwXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWFkQ29udGV4dChDYWNoZUNvbnRleHQpKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoKHByZXZTaWJsaW5nID0gcGVla0NhY2hlRnJvbVBvb2woKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldlNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QpLFxuICAgICAgICAgICAgICAgICAgKG5leHRQcm9wcyA9IGNyZWF0ZUNhY2hlKCkpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nLnBvb2xlZENhY2hlID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICAgICAgIHJldGFpbkNhY2hlKG5leHRQcm9wcyksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nLnBvb2xlZENhY2hlTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gbmV4dFByb3BzKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY2FjaGU6IHByZXZTaWJsaW5nXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcHJldlNpYmxpbmcpKVxuICAgICAgICAgICAgICA6ICgwICE9PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAgICAgICAgICAgKGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBudWxsLCBudWxsLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCkpLFxuICAgICAgICAgICAgICAgIChwcmV2U2libGluZyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICAgICAgKG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLnBhcmVudCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgID8gKChwcmV2U2libGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOiByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzLmxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gbmV4dFByb3BzLmNhY2hlKSxcbiAgICAgICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgIT09IHByZXZTaWJsaW5nLmNhY2hlICYmXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtDYWNoZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICAgICAgICkpKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB0aHJvdyB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCkge1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgY29udGV4dCwgbmV4dFZhbHVlKSB7XG4gICAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgcHVzaChyZW5kZXJlckN1cnNvckRFViwgY29udGV4dC5fY3VycmVudFJlbmRlcmVyLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIHZvaWQgMCAhPT0gY29udGV4dC5fY3VycmVudFJlbmRlcmVyICYmXG4gICAgICAgIG51bGwgIT09IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAmJlxuICAgICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkRldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLlwiXG4gICAgICAgICk7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BQcm92aWRlcihjb250ZXh0LCBwcm92aWRlckZpYmVyKSB7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICAgICAgdmFyIGN1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyQ3Vyc29yREVWLmN1cnJlbnQ7XG4gICAgICBwb3AocmVuZGVyZXJDdXJzb3JERVYsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVyO1xuICAgICAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgIHBhcmVudCxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG4gICAgICAgIChwYXJlbnQuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICA/ICgocGFyZW50LmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcykpXG4gICAgICAgICAgOiBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHByb3BhZ2F0aW9uUm9vdCkgYnJlYWs7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQgIT09IHByb3BhZ2F0aW9uUm9vdCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJvcGFnYXRpb24gcm9vdCB3aGVuIHNjaGVkdWxpbmcgY29udGV4dCB3b3JrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjb250ZXh0cyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlXG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIG51bGwgIT09IGZpYmVyICYmIChmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gZmliZXI7ICkge1xuICAgICAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcbiAgICAgICAgaWYgKG51bGwgIT09IGxpc3QpIHtcbiAgICAgICAgICB2YXIgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICAgICAgbGlzdCA9IGxpc3QuZmlyc3RDb250ZXh0O1xuICAgICAgICAgIGE6IGZvciAoOyBudWxsICE9PSBsaXN0OyApIHtcbiAgICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdDtcbiAgICAgICAgICAgIGxpc3QgPSBmaWJlcjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5ID0gbGlzdC5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gZGVwZW5kZW5jeSAmJiAoZGVwZW5kZW5jeS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgICAgICAgIGxpc3QucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlIHx8IChuZXh0RmliZXIgPSBudWxsKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgxOCA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgICAgbmV4dEZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXh0RmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIG5leHRGaWJlci5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICBsaXN0ID0gbmV4dEZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSBsaXN0ICYmIChsaXN0LmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICAgICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICAgICAgbmV4dEZpYmVyLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV4dEZpYmVyKSBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmb3IgKG5leHRGaWJlciA9IGZpYmVyOyBudWxsICE9PSBuZXh0RmliZXI7ICkge1xuICAgICAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWJlciA9IG5leHRGaWJlci5zaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyKSB7XG4gICAgICAgICAgICAgIGZpYmVyLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICkge1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgcGFyZW50ID0gd29ya0luUHJvZ3Jlc3MsIGlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0ID0gITE7XG4gICAgICAgIG51bGwgIT09IHBhcmVudDtcblxuICAgICAgKSB7XG4gICAgICAgIGlmICghaXNJbnNpZGVQcm9wYWdhdGlvbkJhaWxvdXQpXG4gICAgICAgICAgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiA1MjQyODgpKSBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICEwO1xuICAgICAgICAgIGVsc2UgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiAyNjIxNDQpKSBicmVhaztcbiAgICAgICAgaWYgKDEwID09PSBwYXJlbnQudGFnKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gcGFyZW50LnR5cGU7XG4gICAgICAgICAgICBvYmplY3RJcyhwYXJlbnQucGVuZGluZ1Byb3BzLnZhbHVlLCBjdXJyZW50UGFyZW50LnZhbHVlKSB8fFxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICAgID8gY3VycmVudC5wdXNoKGNvbnRleHQpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IFtjb250ZXh0XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQgPT09IGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IuY3VycmVudCkge1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlICE9PVxuICAgICAgICAgICAgcGFyZW50Lm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyBjdXJyZW50LnB1c2goSG9zdFRyYW5zaXRpb25Db250ZXh0KVxuICAgICAgICAgICAgICA6IChjdXJyZW50ID0gW0hvc3RUcmFuc2l0aW9uQ29udGV4dF0pKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICAgICApO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjYyMTQ0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudERlcGVuZGVuY2llcykge1xuICAgICAgZm9yIChcbiAgICAgICAgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuICAgICAgICBudWxsICE9PSBjdXJyZW50RGVwZW5kZW5jaWVzO1xuXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvYmplY3RJcyhcbiAgICAgICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMuY29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgY3VycmVudERlcGVuZGVuY2llcy5tZW1vaXplZFZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcy5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcbiAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzICYmICh3b3JrSW5Qcm9ncmVzcy5maXJzdENvbnRleHQgPSBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCkge1xuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihjb25zdW1lciwgY29udGV4dCkge1xuICAgICAgbnVsbCA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIgJiYgcHJlcGFyZVRvUmVhZENvbnRleHQoY29uc3VtZXIpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY29uc3VtZXIsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICBjb250ZXh0ID0geyBjb250ZXh0OiBjb250ZXh0LCBtZW1vaXplZFZhbHVlOiB2YWx1ZSwgbmV4dDogbnVsbCB9O1xuICAgICAgaWYgKG51bGwgPT09IGxhc3RDb250ZXh0RGVwZW5kZW5jeSkge1xuICAgICAgICBpZiAobnVsbCA9PT0gY29uc3VtZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dDtcbiAgICAgICAgY29uc3VtZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dCxcbiAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN1bWVyLmZsYWdzIHw9IDUyNDI4ODtcbiAgICAgIH0gZWxzZSBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHQ7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICAgICAgc2hhcmVkOiB7IHBlbmRpbmc6IG51bGwsIGxhbmVzOiAwLCBoaWRkZW5DYWxsYmFja3M6IG51bGwgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID09PSBjdXJyZW50ICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHtcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnQuYmFzZVN0YXRlLFxuICAgICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudC5maXJzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnQubGFzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgc2hhcmVkOiBjdXJyZW50LnNoYXJlZCxcbiAgICAgICAgICBjYWxsYmFja3M6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShsYW5lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgICAgICBwYXlsb2FkOiBudWxsLFxuICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSB1cGRhdGVRdWV1ZSkgcmV0dXJuIG51bGw7XG4gICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSB1cGRhdGVRdWV1ZSAmJlxuICAgICAgICAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgY2FsbGJhY2suXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudDogJXNcIixcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICk7XG4gICAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGNvbXBvbmVudE5hbWUgPSB1cGRhdGVRdWV1ZS5wZW5kaW5nKSxcbiAgICAgICAgICBudWxsID09PSBjb21wb25lbnROYW1lXG4gICAgICAgICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgICAgICAgIDogKCh1cGRhdGUubmV4dCA9IGNvbXBvbmVudE5hbWUubmV4dCksXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lLm5leHQgPSB1cGRhdGUpKSxcbiAgICAgICAgICAodXBkYXRlUXVldWUucGVuZGluZyA9IHVwZGF0ZSksXG4gICAgICAgICAgKHVwZGF0ZSA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpKSxcbiAgICAgICAgICBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbnVsbCwgbGFuZSksXG4gICAgICAgICAgdXBkYXRlXG4gICAgICAgICk7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHVwZGF0ZVF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gICAgICBmaWJlciA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyICYmICgoZmliZXIgPSBmaWJlci5zaGFyZWQpLCAwICE9PSAobGFuZSAmIDQxOTQxNzYpKSkge1xuICAgICAgICB2YXIgcXVldWVMYW5lcyA9IGZpYmVyLmxhbmVzO1xuICAgICAgICBxdWV1ZUxhbmVzICY9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgICAgIGZpYmVyLmxhbmVzID0gbGFuZTtcbiAgICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLFxuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLCBxdWV1ZSA9PT0gY3VycmVudClcbiAgICAgICkge1xuICAgICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsLFxuICAgICAgICAgIG5ld0xhc3QgPSBudWxsO1xuICAgICAgICBxdWV1ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKSB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgICBsYW5lOiBxdWV1ZS5sYW5lLFxuICAgICAgICAgICAgICB0YWc6IHF1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcXVldWUucGF5bG9hZCxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgICAgID8gKG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lKVxuICAgICAgICAgICAgICA6IChuZXdMYXN0ID0gbmV3TGFzdC5uZXh0ID0gY2xvbmUpO1xuICAgICAgICAgICAgcXVldWUgPSBxdWV1ZS5uZXh0O1xuICAgICAgICAgIH0gd2hpbGUgKG51bGwgIT09IHF1ZXVlKTtcbiAgICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICAgICAgICAgIDogKG5ld0xhc3QgPSBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZSk7XG4gICAgICAgIH0gZWxzZSBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgcXVldWUgPSB7XG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50LmJhc2VTdGF0ZSxcbiAgICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICAgIHNoYXJlZDogY3VycmVudC5zaGFyZWQsXG4gICAgICAgICAgY2FsbGJhY2tzOiBjdXJyZW50LmNhbGxiYWNrc1xuICAgICAgICB9O1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgPyAocXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGUpXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzLm5leHQgPSBjYXB0dXJlZFVwZGF0ZSk7XG4gICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCkge1xuICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgICAgICBpZiAobnVsbCAhPT0gZW50YW5nbGVkQWN0aW9uVGhlbmFibGUpIHRocm93IGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2UkanNjb21wJDAsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExO1xuICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG4gICAgICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlLFxuICAgICAgICAgIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICBudWxsID09PSBsYXN0QmFzZVVwZGF0ZVxuICAgICAgICAgID8gKGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICA6IChsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlKTtcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAocGVuZGluZ1F1ZXVlID0gY3VycmVudC5sYXN0QmFzZVVwZGF0ZSksXG4gICAgICAgICAgcGVuZGluZ1F1ZXVlICE9PSBsYXN0QmFzZVVwZGF0ZSAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHBlbmRpbmdRdWV1ZVxuICAgICAgICAgICAgICA/IChjdXJyZW50LmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICAgICAgOiAocGVuZGluZ1F1ZXVlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGUpLFxuICAgICAgICAgICAgKGN1cnJlbnQubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSBmaXJzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlO1xuICAgICAgICBsYXN0QmFzZVVwZGF0ZSA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcGVuZGluZ1F1ZXVlLmxhbmUgJiAtNTM2ODcwOTEzLFxuICAgICAgICAgICAgaXNIaWRkZW5VcGRhdGUgPSB1cGRhdGVMYW5lICE9PSBwZW5kaW5nUXVldWUubGFuZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0hpZGRlblVwZGF0ZVxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDAgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5uZXh0ID1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgdGFnOiBwZW5kaW5nUXVldWUudGFnLFxuICAgICAgICAgICAgICAgICAgcGF5bG9hZDogcGVuZGluZ1F1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICB2YXIgcGFydGlhbFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICB2YXIgbmV4dFByb3BzID0gcHJvcHMsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZSRqc2NvbXAkMDtcbiAgICAgICAgICAgICAgc3dpdGNoIChwYXJ0aWFsU3RhdGUudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBwYXJ0aWFsU3RhdGUucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICEwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGFydGlhbFN0YXRlLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVMYW5lLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gcGFydGlhbFN0YXRlO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICAgICAgICAgICAgICB1cGRhdGVMYW5lLmZsYWdzID0gKHVwZGF0ZUxhbmUuZmxhZ3MgJiAtNjU1MzcpIHwgMTI4O1xuICAgICAgICAgICAgICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICAgICAgICAgICAgICBuZXh0U3RhdGUgPSBwYXJ0aWFsU3RhdGUucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBuZXh0U3RhdGUuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUxhbmUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITE7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgcGFydGlhbFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHBhcnRpYWxTdGF0ZSB8fCB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gYXNzaWduKHt9LCBuZXdTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgPSBwZW5kaW5nUXVldWUuY2FsbGJhY2s7XG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGVMYW5lICYmXG4gICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNjQpLFxuICAgICAgICAgICAgICBpc0hpZGRlblVwZGF0ZSAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MiksXG4gICAgICAgICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHF1ZXVlLmNhbGxiYWNrcyksXG4gICAgICAgICAgICAgIG51bGwgPT09IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICAgICAgPyAocXVldWUuY2FsbGJhY2tzID0gW3VwZGF0ZUxhbmVdKVxuICAgICAgICAgICAgICAgIDogaXNIaWRkZW5VcGRhdGUucHVzaCh1cGRhdGVMYW5lKSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcGVuZGluZ1F1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBwZW5kaW5nUXVldWUuY2FsbGJhY2ssXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgICAgPyAoKGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGN1cnJlbnQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgICAgICAobGFzdFBlbmRpbmdVcGRhdGUgPSBuZXdTdGF0ZSkpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IGN1cnJlbnQubmV4dCA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgKGxhc3RCYXNlVXBkYXRlIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgICAgIGlmIChudWxsID09PSBwZW5kaW5nUXVldWUpXG4gICAgICAgICAgICBpZiAoKChwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZyksIG51bGwgPT09IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBwZW5kaW5nUXVldWUpLFxuICAgICAgICAgICAgICAgIChwZW5kaW5nUXVldWUgPSBpc0hpZGRlblVwZGF0ZS5uZXh0KSxcbiAgICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUubmV4dCA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgICAocXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsKTtcbiAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpO1xuICAgICAgICBxdWV1ZS5iYXNlU3RhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgICAgIG51bGwgPT09IGZpcnN0QmFzZVVwZGF0ZSAmJiAocXVldWUuc2hhcmVkLmxhbmVzID0gMCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSBsYXN0QmFzZVVwZGF0ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBsYXN0QmFzZVVwZGF0ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICtcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIaWRkZW5DYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBoaWRkZW5DYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzO1xuICAgICAgaWYgKG51bGwgIT09IGhpZGRlbkNhbGxiYWNrcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlIDwgaGlkZGVuQ2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgICAgIClcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soaGlkZGVuQ2FsbGJhY2tzW3VwZGF0ZVF1ZXVlXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgY29udGV4dCkge1xuICAgICAgdmFyIGNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcztcbiAgICAgIGlmIChudWxsICE9PSBjYWxsYmFja3MpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlIDwgY2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgICAgIClcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2tzW3VwZGF0ZVF1ZXVlXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFByb2ZpbGUoY3VycmVudCkge1xuICAgICAgcmV0dXJuIChjdXJyZW50Lm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0xheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCBob29rRmxhZ3MpIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGhvb2tGbGFnc1xuICAgICkge1xuICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGZsYWdzLCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSxcbiAgICAgICAgICBsYXN0RWZmZWN0ID0gbnVsbCAhPT0gdXBkYXRlUXVldWUgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT09IGxhc3RFZmZlY3QpIHtcbiAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBmaXJzdEVmZmVjdDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh1cGRhdGVRdWV1ZS50YWcgJiBmbGFncykgPT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZCAmJlxuICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAobGFzdEVmZmVjdCA9IHZvaWQgMCksXG4gICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITApLFxuICAgICAgICAgICAgICAobGFzdEVmZmVjdCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjYWxsQ3JlYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgdXBkYXRlUXVldWVcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITEpLFxuICAgICAgICAgICAgICAoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCgpXG4gICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCgpLFxuICAgICAgICAgICAgICB2b2lkIDAgIT09IGxhc3RFZmZlY3QgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbGFzdEVmZmVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgaG9va05hbWUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGhvb2tOYW1lID1cbiAgICAgICAgICAgICAgICAwICE9PSAodXBkYXRlUXVldWUudGFnICYgTGF5b3V0KVxuICAgICAgICAgICAgICAgICAgPyBcInVzZUxheW91dEVmZmVjdFwiXG4gICAgICAgICAgICAgICAgICA6IDAgIT09ICh1cGRhdGVRdWV1ZS50YWcgJiBJbnNlcnRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIlxuICAgICAgICAgICAgICAgICAgICA6IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIG51bGwgPT09IGxhc3RFZmZlY3RcbiAgICAgICAgICAgICAgICAgID8gXCIgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gdXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLlwiXG4gICAgICAgICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxhc3RFZmZlY3QudGhlblxuICAgICAgICAgICAgICAgICAgICA/IFwiXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIGhvb2tOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICBcIihhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCBhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgaG9va05hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiKCgpID0+IHtcXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4gICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbiAgICAvLyAuLi5cXG4gIH1cXG4gIGZldGNoRGF0YSgpO1xcbn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcbkxlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0LmRldi9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmdcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiIFlvdSByZXR1cm5lZDogXCIgKyBsYXN0RWZmZWN0O1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKG4sIGEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiJXMgbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXNcIixcbiAgICAgICAgICAgICAgICAgICAgbixcbiAgICAgICAgICAgICAgICAgICAgYVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhvb2tOYW1lLFxuICAgICAgICAgICAgICAgIGFkZGVuZHVtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQ7XG4gICAgICAgICAgfSB3aGlsZSAodXBkYXRlUXVldWUgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgIGZsYWdzLFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlLFxuICAgICAgICAgIGxhc3RFZmZlY3QgPSBudWxsICE9PSB1cGRhdGVRdWV1ZSA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gbGFzdEVmZmVjdCkge1xuICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSA9IGZpcnN0RWZmZWN0O1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgodXBkYXRlUXVldWUudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICAgICAgICB2YXIgaW5zdCA9IHVwZGF0ZVF1ZXVlLmluc3QsXG4gICAgICAgICAgICAgICAgZGVzdHJveSA9IGluc3QuZGVzdHJveTtcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBkZXN0cm95ICYmXG4gICAgICAgICAgICAgICAgKChpbnN0LmRlc3Ryb3kgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzXG4gICAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkKFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkKFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMCksXG4gICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjYWxsRGVzdHJveUluREVWLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3lcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMSksXG4gICAgICAgICAgICAgICAgKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQoKVxuICAgICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUubmV4dDtcbiAgICAgICAgICB9IHdoaWxlICh1cGRhdGVRdWV1ZSAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBob29rRmxhZ3MpIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBob29rRmxhZ3NcbiAgICApIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICBpZiAobnVsbCAhPT0gdXBkYXRlUXVldWUpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICApKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyxcbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlLFxuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXMoaW5zdGFuY2UsIHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDbGFzc1NuYXBzaG90KGZpbmlzaGVkV29yaywgY3VycmVudCkge1xuICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgIChjdXJyZW50LnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICksXG4gICAgICAgIGN1cnJlbnQuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgKSk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcmV2UHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZVxuICAgICAgICApO1xuICAgICAgICB2YXIgc25hcHNob3QgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY2FsbEdldFNuYXBzaG90QmVmb3JlVXBkYXRlcyxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlc29sdmVkUHJldlByb3BzLFxuICAgICAgICAgIHByZXZTdGF0ZVxuICAgICAgICApO1xuICAgICAgICBwcmV2UHJvcHMgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcbiAgICAgICAgdm9pZCAwICE9PSBzbmFwc2hvdCB8fFxuICAgICAgICAgIHByZXZQcm9wcy5oYXMoZmluaXNoZWRXb3JrLnR5cGUpIHx8XG4gICAgICAgICAgKHByZXZQcm9wcy5hZGQoZmluaXNoZWRXb3JrLnR5cGUpLFxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpbmlzaGVkV29yaywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGN1cnJlbnQuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICBpbnN0YW5jZS5wcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICBjdXJyZW50LnR5cGUsXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgKTtcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgc2hvdWxkUHJvZmlsZShjdXJyZW50KVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50SW5ERVYsXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudEluREVWLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuICAgICAgaWYgKG51bGwgIT09IHJlZikge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKVxuICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdGFydEVmZmVjdFRpbWVyKCksIChmaW5pc2hlZFdvcmsucmVmQ2xlYW51cCA9IHJlZihpbnN0YW5jZSkpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZWZcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcIlN0cmluZyByZWZzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLlwiKVxuICAgICAgICAgICAgOiByZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpIHx8XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiBVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChyZWYuY3VycmVudCA9IGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FmZWx5QXR0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIGNvbW1pdEF0dGFjaFJlZiwgY3VycmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gICAgICB2YXIgcmVmID0gY3VycmVudC5yZWYsXG4gICAgICAgIHJlZkNsZWFudXAgPSBjdXJyZW50LnJlZkNsZWFudXA7XG4gICAgICBpZiAobnVsbCAhPT0gcmVmKVxuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmQ2xlYW51cClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhcnRFZmZlY3RUaW1lcigpLCBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWZDbGVhbnVwKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbihjdXJyZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWZDbGVhbnVwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbCksXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiYgKGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShjdXJyZW50KSlcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydEVmZmVjdFRpbWVyKCksIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIHJlZiwgbnVsbCk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmLCBudWxsKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvciQ2KSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvciQ2KTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQcm9maWxlcihcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGN1cnJlbnQsXG4gICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICBlZmZlY3REdXJhdGlvblxuICAgICkge1xuICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICBpZCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZS5pZCxcbiAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUub25Db21taXQ7XG4gICAgICBfZmluaXNoZWRXb3JrJG1lbW9pemUgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUub25SZW5kZXI7XG4gICAgICBjdXJyZW50ID0gbnVsbCA9PT0gY3VycmVudCA/IFwibW91bnRcIiA6IFwidXBkYXRlXCI7XG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgJiYgKGN1cnJlbnQgPSBcIm5lc3RlZC11cGRhdGVcIik7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZmluaXNoZWRXb3JrJG1lbW9pemUgJiZcbiAgICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLFxuICAgICAgICAgIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLFxuICAgICAgICAgIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsXG4gICAgICAgICAgY29tbWl0U3RhcnRUaW1lXG4gICAgICAgICk7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBvbkNvbW1pdCAmJlxuICAgICAgICBvbkNvbW1pdChcbiAgICAgICAgICBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIGVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQcm9maWxlclBvc3RDb21taXRJbXBsKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY3VycmVudCxcbiAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvblxuICAgICkge1xuICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgIGZpbmlzaGVkV29yayA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIuaWQ7XG4gICAgICBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblBvc3RDb21taXQ7XG4gICAgICBjdXJyZW50ID0gbnVsbCA9PT0gY3VycmVudCA/IFwibW91bnRcIiA6IFwidXBkYXRlXCI7XG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgJiYgKGN1cnJlbnQgPSBcIm5lc3RlZC11cGRhdGVcIik7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZmluaXNoZWRXb3JrJG1lbW9pemUyICYmXG4gICAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb3N0TW91bnQoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY29tbWl0TW91bnQsXG4gICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb3N0VXBkYXRlKGZpbmlzaGVkV29yaywgbmV3UHJvcHMsIG9sZFByb3BzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY29tbWl0VXBkYXRlLFxuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgb2xkUHJvcHMsXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA1ID09PSBmaWJlci50YWcgfHxcbiAgICAgICAgMyA9PT0gZmliZXIudGFnIHx8XG4gICAgICAgIDI2ID09PSBmaWJlci50YWcgfHxcbiAgICAgICAgMjcgPT09IGZpYmVyLnRhZyB8fFxuICAgICAgICA0ID09PSBmaWJlci50YWdcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gICAgICBhOiBmb3IgKDs7KSB7XG4gICAgICAgIGZvciAoOyBudWxsID09PSBmaWJlci5zaWJsaW5nOyApIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIucmV0dXJuIHx8IGlzSG9zdFBhcmVudChmaWJlci5yZXR1cm4pKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmaWJlci5zaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnNpYmxpbmc7XG4gICAgICAgICAgNSAhPT0gZmliZXIudGFnICYmXG4gICAgICAgICAgNiAhPT0gZmliZXIudGFnICYmXG4gICAgICAgICAgMjcgIT09IGZpYmVyLnRhZyAmJlxuICAgICAgICAgIDE4ICE9PSBmaWJlci50YWc7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGZpYmVyLmZsYWdzICYgMikgY29udGludWUgYTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIuY2hpbGQgfHwgNCA9PT0gZmliZXIudGFnKSBjb250aW51ZSBhO1xuICAgICAgICAgIGVsc2UgKGZpYmVyLmNoaWxkLnJldHVybiA9IGZpYmVyKSwgKGZpYmVyID0gZmliZXIuY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGZpYmVyLmZsYWdzICYgMikpIHJldHVybiBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgICAgICAobm9kZSA9IG5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgICBiZWZvcmVcbiAgICAgICAgICAgID8gOCA9PT0gcGFyZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICAgID8gcGFyZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGJlZm9yZSlcbiAgICAgICAgICAgICAgOiBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJlZm9yZSlcbiAgICAgICAgICAgIDogKDggPT09IHBhcmVudC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgID8gKChiZWZvcmUgPSBwYXJlbnQucGFyZW50Tm9kZSksXG4gICAgICAgICAgICAgICAgICBiZWZvcmUuaW5zZXJ0QmVmb3JlKG5vZGUsIHBhcmVudCkpXG4gICAgICAgICAgICAgICAgOiAoKGJlZm9yZSA9IHBhcmVudCksIGJlZm9yZS5hcHBlbmRDaGlsZChub2RlKSksXG4gICAgICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQuX3JlYWN0Um9vdENvbnRhaW5lciksXG4gICAgICAgICAgICAgIChudWxsICE9PSBwYXJlbnQgJiYgdm9pZCAwICE9PSBwYXJlbnQpIHx8XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gYmVmb3JlLm9uY2xpY2sgfHxcbiAgICAgICAgICAgICAgICAoYmVmb3JlLm9uY2xpY2sgPSBub29wJDEpKTtcbiAgICAgIGVsc2UgaWYgKDQgIT09IHRhZyAmJiAyNyAhPT0gdGFnICYmICgobm9kZSA9IG5vZGUuY2hpbGQpLCBudWxsICE9PSBub2RlKSlcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSxcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICAgICAgbnVsbCAhPT0gbm9kZTtcblxuICAgICAgICApXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICAobm9kZSA9IG5vZGUuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgICAgIChub2RlID0gbm9kZS5zdGF0ZU5vZGUpLFxuICAgICAgICAgIGJlZm9yZSA/IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgYmVmb3JlKSA6IHBhcmVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIGVsc2UgaWYgKDQgIT09IHRhZyAmJiAyNyAhPT0gdGFnICYmICgobm9kZSA9IG5vZGUuY2hpbGQpLCBudWxsICE9PSBub2RlKSlcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgICBudWxsICE9PSBub2RlO1xuXG4gICAgICAgIClcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgKG5vZGUgPSBub2RlLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG4gICAgICBpZiAoMjcgIT09IGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgYToge1xuICAgICAgICAgIGZvciAodmFyIHBhcmVudCA9IGZpbmlzaGVkV29yay5yZXR1cm47IG51bGwgIT09IHBhcmVudDsgKSB7XG4gICAgICAgICAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudEZpYmVyID0gcGFyZW50O1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgcGFyZW50RmliZXIgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgcGFyZW50RmliZXIsIHBhcmVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBwYXJlbnRGaWJlci5mbGFncyAmIDMyICYmXG4gICAgICAgICAgICAgIChyZXNldFRleHRDb250ZW50KHBhcmVudCksIChwYXJlbnRGaWJlci5mbGFncyAmPSAtMzMpKTtcbiAgICAgICAgICAgIHBhcmVudEZpYmVyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIHBhcmVudEZpYmVyLCBwYXJlbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgcGFyZW50RmliZXIgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgICAgcGFyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgaG9zdCBwYXJlbnQgZmliZXIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgICAgIHJvb3QgPSByb290LmNvbnRhaW5lckluZm87XG4gICAgICBldmVudHNFbmFibGVkID0gX2VuYWJsZWQ7XG4gICAgICByb290ID0gZ2V0QWN0aXZlRWxlbWVudERlZXAocm9vdCk7XG4gICAgICBpZiAoaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHJvb3QpKSB7XG4gICAgICAgIGlmIChcInNlbGVjdGlvblN0YXJ0XCIgaW4gcm9vdClcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHJvb3Quc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHJvb3Quc2VsZWN0aW9uRW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICgoSlNDb21waWxlcl90ZW1wID0gcm9vdC5vd25lckRvY3VtZW50KSAmJlxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICAgICAgd2luZG93O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5nZXRTZWxlY3Rpb24gJiYgSlNDb21waWxlcl90ZW1wLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiAwICE9PSBzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgICAgICAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5ub2RlVHlwZSwgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlJDIpIHtcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDAsXG4gICAgICAgICAgICAgICAgc3RhcnQgPSAtMSxcbiAgICAgICAgICAgICAgICBlbmQgPSAtMSxcbiAgICAgICAgICAgICAgICBpbmRleFdpdGhpbkFuY2hvciA9IDAsXG4gICAgICAgICAgICAgICAgaW5kZXhXaXRoaW5Gb2N1cyA9IDAsXG4gICAgICAgICAgICAgICAgbm9kZSA9IHJvb3QsXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgICAgICAgIGI6IGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuZXh0OyA7ICkge1xuICAgICAgICAgICAgICAgICAgbm9kZSAhPT0gSlNDb21waWxlcl90ZW1wIHx8XG4gICAgICAgICAgICAgICAgICAgICgwICE9PSBhbmNob3JPZmZzZXQgJiYgMyAhPT0gbm9kZS5ub2RlVHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgIG5vZGUgIT09IGZvY3VzTm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAoMCAhPT0gc2VsZWN0aW9uICYmIDMgIT09IG5vZGUubm9kZVR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmQgPSBsZW5ndGggKyBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgMyA9PT0gbm9kZS5ub2RlVHlwZSAmJiAobGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpKSBicmVhaztcbiAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgIGlmIChub2RlID09PSByb290KSBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCAmJlxuICAgICAgICAgICAgICAgICAgICAoc3RhcnQgPSBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIChlbmQgPSBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IChuZXh0ID0gbm9kZS5uZXh0U2libGluZykpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlID0gbmV4dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAgIC0xID09PSBzdGFydCB8fCAtMSA9PT0gZW5kID8gbnVsbCA6IHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCB9O1xuICAgICAgICAgICAgfSBlbHNlIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBKU0NvbXBpbGVyX3RlbXAgfHwgeyBzdGFydDogMCwgZW5kOiAwIH07XG4gICAgICB9IGVsc2UgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgIHNlbGVjdGlvbkluZm9ybWF0aW9uID0ge1xuICAgICAgICBmb2N1c2VkRWxlbTogcm9vdCxcbiAgICAgICAgc2VsZWN0aW9uUmFuZ2U6IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgfTtcbiAgICAgIF9lbmFibGVkID0gITE7XG4gICAgICBmb3IgKG5leHRFZmZlY3QgPSBmaXJzdENoaWxkOyBudWxsICE9PSBuZXh0RWZmZWN0OyApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGZpcnN0Q2hpbGQgPSBuZXh0RWZmZWN0KSxcbiAgICAgICAgICAocm9vdCA9IGZpcnN0Q2hpbGQuY2hpbGQpLFxuICAgICAgICAgIDAgIT09IChmaXJzdENoaWxkLnN1YnRyZWVGbGFncyAmIDEwMjgpICYmIG51bGwgIT09IHJvb3QpXG4gICAgICAgIClcbiAgICAgICAgICAocm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkKSwgKG5leHRFZmZlY3QgPSByb290KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgICAgIHJvb3QgPSBmaXJzdENoaWxkID0gbmV4dEVmZmVjdDtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHJvb3QuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgYW5jaG9yT2Zmc2V0ID0gcm9vdC5mbGFncztcbiAgICAgICAgICAgIHN3aXRjaCAocm9vdC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX3RlbXAgJiZcbiAgICAgICAgICAgICAgICAgIGNvbW1pdENsYXNzU25hcHNob3Qocm9vdCwgSlNDb21waWxlcl90ZW1wKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGlmICgwICE9PSAoYW5jaG9yT2Zmc2V0ICYgMTAyNCkpXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICgocm9vdCA9IHJvb3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gcm9vdC5ub2RlVHlwZSksXG4gICAgICAgICAgICAgICAgICAgIDkgPT09IEpTQ29tcGlsZXJfdGVtcClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkocm9vdCk7XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmICgxID09PSBKU0NvbXBpbGVyX3RlbXApXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9vdC5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJIRUFEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQk9EWVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkocm9vdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290ID0gZmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHJvb3QpIHtcbiAgICAgICAgICAgICAgcm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkLnJldHVybjtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IHJvb3Q7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIGZpcnN0Q2hpbGQgPSBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXI7XG4gICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSAhMTtcbiAgICAgIHJldHVybiBmaXJzdENoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0IHwgSGFzRWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA0KVxuICAgICAgICAgICAgaWYgKCgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksIG51bGwgPT09IGN1cnJlbnQpKVxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgICAgICAgICBcInJlZlwiIGluIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFJvb3QucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBjb21wb25lbnREaWRNb3VudC4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIGNvbXBvbmVudERpZE1vdW50LiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgICAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICAgICAgICAoZmluaXNoZWRSb290LnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgY29tcG9uZW50RGlkVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgY29tcG9uZW50RGlkVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDY0ICYmIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjdXJyZW50ID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSwgbnVsbCAhPT0gZmxhZ3MpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2UHJvcHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpbmlzaGVkV29yay5jaGlsZClcbiAgICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICBwcmV2UHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb24gKz0gcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKGN1cnJlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJiBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmIGZsYWdzICYgNCAmJiBjb21taXRIb3N0TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJiBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgICAgICBmbGFncyA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb24gKz0gYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKGZsYWdzKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRQcm9maWxlcixcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LmVmZmVjdER1cmF0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBwcmV2UHJvcHMgPVxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgfHwgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgIGlmICghcHJldlByb3BzKSB7XG4gICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4sXG4gICAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZQcm9wcztcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gY3VycmVudCkgJiZcbiAgICAgICAgICAgICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlblxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDg3NzIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAoXCJtYW51YWxcIiA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMubW9kZVxuICAgICAgICAgICAgICA/IHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pXG4gICAgICAgICAgICAgIDogc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgKChmaWJlci5hbHRlcm5hdGUgPSBudWxsKSwgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKSk7XG4gICAgICBmaWJlci5jaGlsZCA9IG51bGw7XG4gICAgICBmaWJlci5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgZmliZXIuc2libGluZyA9IG51bGw7XG4gICAgICA1ID09PSBmaWJlci50YWcgJiZcbiAgICAgICAgKChhbHRlcm5hdGUgPSBmaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGFsdGVybmF0ZSkpO1xuICAgICAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbiAgICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICAgIGZpYmVyLnJldHVybiA9IG51bGw7XG4gICAgICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIHBhcmVudFxuICAgICkge1xuICAgICAgZm9yIChwYXJlbnQgPSBwYXJlbnQuY2hpbGQ7IG51bGwgIT09IHBhcmVudDsgKVxuICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIHBhcmVudFxuICAgICAgICApLFxuICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZGVsZXRlZEZpYmVyXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnRcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgc3dpdGNoIChkZWxldGVkRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlLmNvdW50LS1cbiAgICAgICAgICAgIDogZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAoKGRlbGV0ZWRGaWJlciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkZWxldGVkRmliZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICB2YXIgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50LFxuICAgICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlZEZpYmVyID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBmb3IgKGZpbmlzaGVkUm9vdCA9IGRlbGV0ZWRGaWJlci5hdHRyaWJ1dGVzOyBmaW5pc2hlZFJvb3QubGVuZ3RoOyApXG4gICAgICAgICAgICBkZWxldGVkRmliZXIucmVtb3ZlQXR0cmlidXRlTm9kZShmaW5pc2hlZFJvb3RbMF0pO1xuICAgICAgICAgIGRldGFjaERlbGV0ZWRJbnN0YW5jZShkZWxldGVkRmliZXIpO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGhvc3RQYXJlbnQpXG4gICAgICAgICAgICBpZiAoaG9zdFBhcmVudElzQ29udGFpbmVyKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGQsXG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50LFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgbnVsbCAhPT0gaG9zdFBhcmVudCAmJlxuICAgICAgICAgICAgKGhvc3RQYXJlbnRJc0NvbnRhaW5lclxuICAgICAgICAgICAgICA/ICgoZmluaXNoZWRSb290ID0gaG9zdFBhcmVudCksXG4gICAgICAgICAgICAgICAgKGRlbGV0ZWRGaWJlciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgIDggPT09IGZpbmlzaGVkUm9vdC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgICAgPyBjbGVhclN1c3BlbnNlQm91bmRhcnkoZmluaXNoZWRSb290LnBhcmVudE5vZGUsIGRlbGV0ZWRGaWJlcilcbiAgICAgICAgICAgICAgICAgIDogMSA9PT0gZmluaXNoZWRSb290Lm5vZGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShmaW5pc2hlZFJvb3QsIGRlbGV0ZWRGaWJlciksXG4gICAgICAgICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihmaW5pc2hlZFJvb3QpKVxuICAgICAgICAgICAgICA6IGNsZWFyU3VzcGVuc2VCb3VuZGFyeShob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICEwO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgICAgSW5zZXJ0aW9uLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIExheW91dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAoc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciksXG4gICAgICAgICAgICAocHJldkhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZIb3N0UGFyZW50LmNvbXBvbmVudFdpbGxVbm1vdW50ICYmXG4gICAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICBwcmV2SG9zdFBhcmVudFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPVxuICAgICAgICAgICAgKHByZXZIb3N0UGFyZW50ID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbikgfHxcbiAgICAgICAgICAgIG51bGwgIT09IGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUpLFxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290LmRlaHlkcmF0ZWQpLCBudWxsICE9PSBmaW5pc2hlZFJvb3QpKSlcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSxcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCkpO1xuICAgICAgICAgIHJldHVybiByZXRyeUNhY2hlO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5fcmV0cnlDYWNoZSksXG4gICAgICAgICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKSxcbiAgICAgICAgICAgIHJldHJ5Q2FjaGVcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50YWcgK1xuICAgICAgICAgICAgICBcIikuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgd2FrZWFibGVzKSB7XG4gICAgICB2YXIgcmV0cnlDYWNoZSA9IGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKTtcbiAgICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuICAgICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gaW5Qcm9ncmVzc0xhbmVzICYmIG51bGwgIT09IGluUHJvZ3Jlc3NSb290KVxuICAgICAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKGluUHJvZ3Jlc3NSb290LCBpblByb2dyZXNzTGFuZXMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGZpbmlzaGVkIHJvb3QgYW5kIGxhbmVzIHRvIGJlIHNldC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBjb21taXR0ZWRMYW5lcztcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KTtcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290JGpzY29tcCQwLCBwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgICAgIGlmIChudWxsICE9PSBkZWxldGlvbnMpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHJvb3QgPSByb290JGpzY29tcCQwLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlciA9IGRlbGV0aW9uc1tpXSxcbiAgICAgICAgICAgIHBhcmVudCA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIGE6IGZvciAoOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgICAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgPT09IGhvc3RQYXJlbnQpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihyb290LCByZXR1cm5GaWJlciwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICByb290ID0gZGVsZXRlZEZpYmVyO1xuICAgICAgICAgIHJldHVybkZpYmVyID0gcm9vdC5hbHRlcm5hdGU7XG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiYgKHJldHVybkZpYmVyLnJldHVybiA9IG51bGwpO1xuICAgICAgICAgIHJvb3QucmV0dXJuID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEzODc4KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihwYXJlbnRGaWJlciwgcm9vdCRqc2NvbXAkMCksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmssIHJvb3QpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIChjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgIEluc2VydGlvbiB8IEhhc0VmZmVjdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChJbnNlcnRpb24gfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgTGF5b3V0IHwgSGFzRWZmZWN0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yayAmJlxuICAgICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLmNhbGxiYWNrcyksXG4gICAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmluaXNoZWRXb3JrLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MpLFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFdvcmsuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9XG4gICAgICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50ID8gZmxhZ3MgOiBjdXJyZW50LmNvbmNhdChmbGFncykpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHZhciBob2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgocm9vdCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsKSxcbiAgICAgICAgICAgICAgKGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gZmxhZ3MpXG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICAgICAgICByb290ID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgIGI6IHN3aXRjaCAoZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFob2lzdGFibGVSb290IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5oYXNBdHRyaWJ1dGUoXCJpdGVtcHJvcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaG9pc3RhYmxlUm9vdCA9IHJvb3QuY3JlYXRlRWxlbWVudChmbGFncykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKFwiaGVhZCA+IHRpdGxlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhvaXN0YWJsZVJvb3QsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBob2lzdGFibGVSb290O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heWJlTm9kZXMgPSBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImhyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgKS5nZXQoZmxhZ3MgKyAoY3VycmVudC5ocmVmIHx8IFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZU5vZGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heWJlTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChob2lzdGFibGVSb290ID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHJlZiA/IG51bGwgOiBjdXJyZW50LmhyZWYpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwicmVsXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQucmVsID8gbnVsbCA6IGN1cnJlbnQucmVsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcInRpdGxlXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LnRpdGxlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmNyb3NzT3JpZ2luKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlTm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290ID0gcm9vdC5jcmVhdGVFbGVtZW50KGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhvaXN0YWJsZVJvb3QsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuaGVhZC5hcHBlbmRDaGlsZChob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtYXliZU5vZGVzID0gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWV0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKS5nZXQoZmxhZ3MgKyAoY3VycmVudC5jb250ZW50IHx8IFwiXCIpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1heWJlTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChob2lzdGFibGVSb290ID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIgKyBjdXJyZW50LmNvbnRlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Lm5hbWUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwicHJvcGVydHlcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5wcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQucHJvcGVydHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwiaHR0cC1lcXVpdlwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50Lmh0dHBFcXVpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuaHR0cEVxdWl2KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5jaGFyU2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5jaGFyU2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlTm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290ID0gcm9vdC5jcmVhdGVFbGVtZW50KGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhvaXN0YWJsZVJvb3QsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuaGVhZC5hcHBlbmRDaGlsZChob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldE5vZGVzRm9yVHlwZSBlbmNvdW50ZXJlZCBhIHR5cGUgaXQgZGlkIG5vdCBleHBlY3Q6IFwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBmbGFncztcbiAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgIG1vdW50SG9pc3RhYmxlKFxuICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBhY3F1aXJlUmVzb3VyY2UoXG4gICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHJvb3QgIT09IGZsYWdzXG4gICAgICAgICAgICAgICAgPyAobnVsbCA9PT0gcm9vdFxuICAgICAgICAgICAgICAgICAgICA/IG51bGwgIT09IGN1cnJlbnQuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KSlcbiAgICAgICAgICAgICAgICAgICAgOiByb290LmNvdW50LS0sXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBmbGFnc1xuICAgICAgICAgICAgICAgICAgICA/IG1vdW50SG9pc3RhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBhY3F1aXJlUmVzb3VyY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiBudWxsID09PSBmbGFncyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgICAgY29tbWl0SG9zdFVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGlmIChmbGFncyAmIDQgJiYgbnVsbCA9PT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBtYXliZU5vZGVzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmb3IgKGkgPSBob2lzdGFibGVSb290LmZpcnN0Q2hpbGQ7IGk7ICkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0Tm9kZSA9IGkubmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICBub2RlTmFtZSA9IGkubm9kZU5hbWU7XG4gICAgICAgICAgICAgICAgaVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgICAgICAgIFwiSEVBRFwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgXCJCT0RZXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgICAgICBcIlNDUklQVFwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgXCJTVFlMRVwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgKFwiTElOS1wiID09PSBub2RlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gaS5yZWwudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QucmVtb3ZlQ2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBhY3F1aXJlU2luZ2xldG9uSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgbWF5YmVOb2RlcyxcbiAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAzMikge1xuICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaW5pc2hlZFdvcmssIHJlc2V0VGV4dENvbnRlbnQsIHJvb3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgbnVsbCAhPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAoKHJvb3QgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICBjb21taXRIb3N0VXBkYXRlKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiByb290XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICBmbGFncyAmIDEwMjQgJiZcbiAgICAgICAgICAgICgobmVlZHNGb3JtUmVzZXQgPSAhMCksXG4gICAgICAgICAgICBcImZvcm1cIiAhPT0gZmluaXNoZWRXb3JrLnR5cGUgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgaG9zdCBjb21wb25lbnQgdHlwZS4gRXhwZWN0ZWQgYSBmb3JtLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IGZsYWdzO1xuICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSxcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgdGFnQ2FjaGVzID0gbnVsbDtcbiAgICAgICAgICBtYXliZU5vZGVzID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gbWF5YmVOb2RlcztcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXJJbmZvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBuZWVkc0Zvcm1SZXNldCAmJlxuICAgICAgICAgICAgKChuZWVkc0Zvcm1SZXNldCA9ICExKSwgcmVjdXJzaXZlbHlSZXNldEZvcm1zKGZpbmlzaGVkV29yaykpO1xuICAgICAgICAgIHJvb3QuZWZmZWN0RHVyYXRpb24gKz0gcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgZmxhZ3MgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3QoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGZsYWdzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGZsYWdzID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuY2hpbGQuZmxhZ3MgJiA4MTkyICYmXG4gICAgICAgICAgICAobnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpICE9PVxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpICYmXG4gICAgICAgICAgICAoZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdyQxKCkpO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKSk7XG4gICAgICAgICAgaSA9IG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG5leHROb2RlID0gbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgbm9kZU5hbWUgPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBub2RlTmFtZSB8fCBpO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fCBuZXh0Tm9kZTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG5vZGVOYW1lO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHJvb3QuX2N1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgcm9vdC5fdmlzaWJpbGl0eSAmPSB+T2Zmc2NyZWVuRGV0YWNoZWQ7XG4gICAgICAgICAgcm9vdC5fdmlzaWJpbGl0eSB8PSByb290Ll9wZW5kaW5nVmlzaWJpbGl0eSAmIE9mZnNjcmVlbkRldGFjaGVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZsYWdzICYgODE5MiAmJlxuICAgICAgICAgICAgKChyb290Ll92aXNpYmlsaXR5ID0gaVxuICAgICAgICAgICAgICA/IHJvb3QuX3Zpc2liaWxpdHkgJiB+T2Zmc2NyZWVuVmlzaWJsZVxuICAgICAgICAgICAgICA6IHJvb3QuX3Zpc2liaWxpdHkgfCBPZmZzY3JlZW5WaXNpYmxlKSxcbiAgICAgICAgICAgIGkgJiZcbiAgICAgICAgICAgICAgKChyb290ID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIHx8IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pLFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgfHxcbiAgICAgICAgICAgICAgICByb290IHx8XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKSksXG4gICAgICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgICBcIm1hbnVhbFwiICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5tb2RlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGE6IGZvciAoY3VycmVudCA9IG51bGwsIHJvb3QgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgICAgICAgICAgIGlmICg1ID09PSByb290LnRhZyB8fCAyNiA9PT0gcm9vdC50YWcgfHwgMjcgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gY3VycmVudCA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoaG9pc3RhYmxlUm9vdCA9IG5leHROb2RlLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaGlkZUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZS5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0Tm9kZSwgbmV4dE5vZGUucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKDYgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gcm9vdDtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIChtYXliZU5vZGVzID0gbmV4dE5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICBpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHROb2RlLCBuZXh0Tm9kZS5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKCgyMiAhPT0gcm9vdC50YWcgJiYgMjMgIT09IHJvb3QudGFnKSB8fFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gcm9vdC5tZW1vaXplZFN0YXRlIHx8XG4gICAgICAgICAgICAgICAgICByb290ID09PSBmaW5pc2hlZFdvcmspICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdC5jaGlsZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByb290LmNoaWxkLnJldHVybiA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QuY2hpbGQ7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJvb3QgPT09IGZpbmlzaGVkV29yaykgYnJlYWsgYTtcbiAgICAgICAgICAgICAgZm9yICg7IG51bGwgPT09IHJvb3Quc2libGluZzsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHJvb3QucmV0dXJuIHx8IHJvb3QucmV0dXJuID09PSBmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPT09IHJvb3QgJiYgKGN1cnJlbnQgPSBudWxsKTtcbiAgICAgICAgICAgICAgICByb290ID0gcm9vdC5yZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudCA9PT0gcm9vdCAmJiAoY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgICAgICByb290LnNpYmxpbmcucmV0dXJuID0gcm9vdC5yZXR1cm47XG4gICAgICAgICAgICAgIHJvb3QgPSByb290LnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoY3VycmVudCA9IGZsYWdzLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgKChmbGFncy5yZXRyeVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGN1cnJlbnQpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgKChmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGZsYWdzKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBpZiAoZmxhZ3MgJiAyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmluaXNoZWRXb3JrLCBjb21taXRQbGFjZW1lbnQsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IC0zO1xuICAgICAgfVxuICAgICAgZmxhZ3MgJiA0MDk2ICYmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTQwOTcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVJlc2V0Rm9ybXMocGFyZW50RmliZXIpIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI0KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICAgICAgICB2YXIgZmliZXIgPSBwYXJlbnRGaWJlcjtcbiAgICAgICAgICByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmliZXIpO1xuICAgICAgICAgIDUgPT09IGZpYmVyLnRhZyAmJiBmaWJlci5mbGFncyAmIDEwMjQgJiYgZmliZXIuc3RhdGVOb2RlLnJlc2V0KCk7XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCByb290LCBjb21taXR0ZWRMYW5lcykge1xuICAgICAgaW5Qcm9ncmVzc0xhbmVzID0gY29tbWl0dGVkTGFuZXM7XG4gICAgICBpblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKHJvb3QsIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsIGZpbmlzaGVkV29yayk7XG4gICAgICBpblByb2dyZXNzUm9vdCA9IGluUHJvZ3Jlc3NMYW5lcyA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIocm9vdCwgcGFyZW50RmliZXIuYWx0ZXJuYXRlLCBwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgIExheW91dFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgJiZcbiAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgY3VycmVudCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFVixcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0SGlkZGVuQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICAgICAgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgNCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cy5lZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzLmVmZmVjdER1cmF0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJiAwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3Mik7XG4gICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgcGFyZW50RmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBwcmV2aW91c0NhY2hlID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgKHByZXZpb3VzQ2FjaGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpO1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgKGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCk7XG4gICAgICBjdXJyZW50ICE9PSBwcmV2aW91c0NhY2hlICYmXG4gICAgICAgIChudWxsICE9IGN1cnJlbnQgJiYgcmV0YWluQ2FjaGUoY3VycmVudCksXG4gICAgICAgIG51bGwgIT0gcHJldmlvdXNDYWNoZSAmJiByZWxlYXNlQ2FjaGUocHJldmlvdXNDYWNoZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgICAoY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICBmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZTtcbiAgICAgIGZpbmlzaGVkV29yayAhPT0gY3VycmVudCAmJlxuICAgICAgICAocmV0YWluQ2FjaGUoZmluaXNoZWRXb3JrKSwgbnVsbCAhPSBjdXJyZW50ICYmIHJlbGVhc2VDYWNoZShjdXJyZW50KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgcm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICkge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIFBhc3NpdmUgfCBIYXNFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHByZXZFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgKChjb21taXR0ZWRMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAoY29tbWl0dGVkTGFuZXMgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgKGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlKSxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayAhPT0gY29tbWl0dGVkTGFuZXMgJiZcbiAgICAgICAgICAgICAgKHJldGFpbkNhY2hlKGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICAgIG51bGwgIT0gY29tbWl0dGVkTGFuZXMgJiYgcmVsZWFzZUNhY2hlKGNvbW1pdHRlZExhbmVzKSkpO1xuICAgICAgICAgIGZpbmlzaGVkUm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2RWZmZWN0RHVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChmbGFncyAmIDIwNDgpIHtcbiAgICAgICAgICAgIHByZXZFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgICAgYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZFZmZlY3REdXJhdGlvbik7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0UHJvZmlsZXJQb3N0Q29tbWl0SW1wbCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnBhc3NpdmVFZmZlY3REdXJhdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBwcmV2RWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IHByZXZFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkXG4gICAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogcHJldkVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWRcbiAgICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogKChwcmV2RWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgfD1cbiAgICAgICAgICAgICAgICAgIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoZmluaXNoZWRXb3JrLmFsdGVybmF0ZSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpO1xuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApLFxuICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIFBhc3NpdmUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyBfaW5zdGFuY2UyLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWRcbiAgICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6ICgoX2luc3RhbmNlMi5fdmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCksXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoZmluaXNoZWRXb3JrLmFsdGVybmF0ZSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgIHBhcmVudEZpYmVyXG4gICAgKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgICAgIHZhciBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QkanNjb21wJDAsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsgPSBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICAgICAgY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgICAgIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChwYXJlbnRGaWJlcikge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIHN1c3BlbnNleUNvbW1pdEZsYWcpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmliZXIpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICBmaWJlci5mbGFncyAmIHN1c3BlbnNleUNvbW1pdEZsYWcgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHN1c3BlbmRSZXNvdXJjZShcbiAgICAgICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgIGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB2YXIgcHJldmlvdXNIb2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KFxuICAgICAgICAgICAgZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBwcmV2aW91c0hvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbnVsbCA9PT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKChwcmV2aW91c0hvaXN0YWJsZVJvb3QgPSBmaWJlci5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldmlvdXNIb2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2aW91c0hvaXN0YWJsZVJvb3QubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICA/ICgocHJldmlvdXNIb2lzdGFibGVSb290ID0gc3VzcGVuc2V5Q29tbWl0RmxhZyksXG4gICAgICAgICAgICAgICAgKHN1c3BlbnNleUNvbW1pdEZsYWcgPSAxNjc3NzIxNiksXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSxcbiAgICAgICAgICAgICAgICAoc3VzcGVuc2V5Q29tbWl0RmxhZyA9IHByZXZpb3VzSG9pc3RhYmxlUm9vdCkpXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBwcmV2aW91c0ZpYmVyICYmXG4gICAgICAgICgocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyLmNoaWxkKSwgbnVsbCAhPT0gcGFyZW50RmliZXIpXG4gICAgICApIHtcbiAgICAgICAgcHJldmlvdXNGaWJlci5jaGlsZCA9IG51bGw7XG4gICAgICAgIGRvXG4gICAgICAgICAgKHByZXZpb3VzRmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlci5zaWJsaW5nID0gbnVsbCksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgd2hpbGUgKG51bGwgIT09IHBhcmVudEZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgICAgIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGRlbGV0aW9ucylcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgICAgIHBhcmVudEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgIFBhc3NpdmUgfCBIYXNFZmZlY3RcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB2YXIgcHJldkVmZmVjdER1cmF0aW9uID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZFZmZlY3REdXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgcHJldkVmZmVjdER1cmF0aW9uID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZFZmZlY3REdXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcHJldkVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgIHByZXZFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkICYmXG4gICAgICAgICAgKG51bGwgPT09IGZpbmlzaGVkV29yay5yZXR1cm4gfHwgMTMgIT09IGZpbmlzaGVkV29yay5yZXR1cm4udGFnKVxuICAgICAgICAgICAgPyAoKHByZXZFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSAmPVxuICAgICAgICAgICAgICAgIH5PZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCksXG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSlcbiAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgICAgIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGRlbGV0aW9ucylcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgICAgIHBhcmVudEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpO1xuICAgICAgfVxuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChwYXJlbnRGaWJlciksXG4gICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0KGZpbmlzaGVkV29yaykge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgIFBhc3NpdmVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIGluc3RhbmNlLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgJiZcbiAgICAgICAgICAgICgoaW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgZGVsZXRlZFN1YnRyZWVSb290LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICkge1xuICAgICAgZm9yICg7IG51bGwgIT09IG5leHRFZmZlY3Q7ICkge1xuICAgICAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0LFxuICAgICAgICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBQYXNzaXZlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmIHJldGFpbkNhY2hlKGN1cnJlbnQpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICByZWxlYXNlQ2FjaGUoY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gZmliZXIuY2hpbGQ7XG4gICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSAoY3VycmVudC5yZXR1cm4gPSBmaWJlciksIChuZXh0RWZmZWN0ID0gY3VycmVudCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhOiBmb3IgKGZpYmVyID0gZGVsZXRlZFN1YnRyZWVSb290OyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0RWZmZWN0O1xuICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmcsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gY3VycmVudC5yZXR1cm47XG4gICAgICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhjdXJyZW50KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBmaWJlcikge1xuICAgICAgICAgICAgICBuZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudWxsICE9PSBzaWJsaW5nKSB7XG4gICAgICAgICAgICAgIHNpYmxpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICB0aGlzLnNpYmxpbmcgPVxuICAgICAgICB0aGlzLmNoaWxkID1cbiAgICAgICAgdGhpcy5yZXR1cm4gPVxuICAgICAgICB0aGlzLnN0YXRlTm9kZSA9XG4gICAgICAgIHRoaXMudHlwZSA9XG4gICAgICAgIHRoaXMuZWxlbWVudFR5cGUgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVmQ2xlYW51cCA9IHRoaXMucmVmID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICB0aGlzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICB0aGlzLnVwZGF0ZVF1ZXVlID1cbiAgICAgICAgdGhpcy5tZW1vaXplZFByb3BzID1cbiAgICAgICAgICBudWxsO1xuICAgICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICAgIHRoaXMuc3VidHJlZUZsYWdzID0gdGhpcy5mbGFncyA9IDA7XG4gICAgICB0aGlzLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICB0aGlzLmNoaWxkTGFuZXMgPSB0aGlzLmxhbmVzID0gMDtcbiAgICAgIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSAtMDtcbiAgICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTEuMTtcbiAgICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IC0wO1xuICAgICAgdGhpcy5fZGVidWdPd25lciA9IHRoaXMuX2RlYnVnSW5mbyA9IG51bGw7XG4gICAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9ICExO1xuICAgICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuICAgICAgaGFzQmFkTWFwUG9seWZpbGwgfHxcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zIHx8XG4gICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICAgICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgICAgIHJldHVybiAhKCFDb21wb25lbnQgfHwgIUNvbXBvbmVudC5pc1JlYWN0Q29tcG9uZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKFxuICAgICAgICAgICAgY3VycmVudC50YWcsXG4gICAgICAgICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICBjdXJyZW50LmtleSxcbiAgICAgICAgICAgIGN1cnJlbnQubW9kZVxuICAgICAgICAgICkpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXIpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQpLFxuICAgICAgICAgIChjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gLTApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMS4xKSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGN1cnJlbnQuZmxhZ3MgJiAzMTQ1NzI4MDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHBlbmRpbmdQcm9wcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgbnVsbCA9PT0gcGVuZGluZ1Byb3BzXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxhbmVzOiBwZW5kaW5nUHJvcHMubGFuZXMsXG4gICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogcGVuZGluZ1Byb3BzLmZpcnN0Q29udGV4dCxcbiAgICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogcGVuZGluZ1Byb3BzLl9kZWJ1Z1RoZW5hYmxlU3RhdGVcbiAgICAgICAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJbmZvID0gY3VycmVudC5fZGVidWdJbmZvO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gMzE0NTcyODI7XG4gICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwKSlcbiAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAgICAgKHJlbmRlckxhbmVzID0gY3VycmVudC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgbGFuZXM6IHJlbmRlckxhbmVzLmxhbmVzLFxuICAgICAgICAgICAgICAgICAgZmlyc3RDb250ZXh0OiByZW5kZXJMYW5lcy5maXJzdENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiByZW5kZXJMYW5lcy5fZGVidWdUaGVuYWJsZVN0YXRlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIHR5cGUsXG4gICAgICBrZXksXG4gICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICBvd25lcixcbiAgICAgIG1vZGUsXG4gICAgICBsYW5lc1xuICAgICkge1xuICAgICAgdmFyIGZpYmVyVGFnID0gMCxcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gdHlwZTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiYgKGZpYmVyVGFnID0gMSksXG4gICAgICAgICAgKHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpKTtcbiAgICAgIGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICAoZmliZXJUYWcgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAoZmliZXJUYWcgPSBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHBlbmRpbmdQcm9wcywgZmliZXJUYWcpXG4gICAgICAgICAgICA/IDI2XG4gICAgICAgICAgICA6IFwiaHRtbFwiID09PSB0eXBlIHx8IFwiaGVhZFwiID09PSB0eXBlIHx8IFwiYm9keVwiID09PSB0eXBlXG4gICAgICAgICAgICAgID8gMjdcbiAgICAgICAgICAgICAgOiA1KTtcbiAgICAgIGVsc2VcbiAgICAgICAgYTogc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBwZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgICAgZmliZXJUYWcgPSA4O1xuICAgICAgICAgICAgbW9kZSB8PSBTdHJpY3RMZWdhY3lNb2RlO1xuICAgICAgICAgICAgbW9kZSB8PSBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0eXBlID0gcGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgICAgKG93bmVyID0gbW9kZSksXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiB0eXBlLmlkICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIG9mIHR5cGUgYHN0cmluZ2AgYXMgYSBwcm9wLiBSZWNlaXZlZCB0aGUgdHlwZSBgJXNgIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICAgIHR5cGVvZiB0eXBlLmlkXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDEyLCB0eXBlLCBrZXksIG93bmVyIHwgUHJvZmlsZU1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICAoa2V5LnN0YXRlTm9kZSA9IHsgZWZmZWN0RHVyYXRpb246IDAsIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMCB9KSxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBjcmVhdGVGaWJlcigxMywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gY3JlYXRlRmliZXIoMTksIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSksXG4gICAgICAgICAgICAgIChrZXkuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUpLFxuICAgICAgICAgICAgICAoa2V5LmxhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmIG51bGwgIT09IHR5cGUpXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTA7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gOTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxMTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxNDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDE2O1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZvaWQgMCA9PT0gdHlwZSB8fFxuICAgICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gT2JqZWN0LmtleXModHlwZSkubGVuZ3RoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgKz1cbiAgICAgICAgICAgICAgICBcIiBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICAgICAgICBudWxsID09PSB0eXBlXG4gICAgICAgICAgICAgID8gKHBlbmRpbmdQcm9wcyA9IFwibnVsbFwiKVxuICAgICAgICAgICAgICA6IGlzQXJyYXlJbXBsKHR5cGUpXG4gICAgICAgICAgICAgICAgPyAocGVuZGluZ1Byb3BzID0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIDogdm9pZCAwICE9PSB0eXBlICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgICAgICAgICAgICAgPyAoKHBlbmRpbmdQcm9wcyA9XG4gICAgICAgICAgICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIlVua25vd25cIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiIC8+XCIpLFxuICAgICAgICAgICAgICAgICAgICAocmVzb2x2ZWRUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgICBcIiBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50P1wiKSlcbiAgICAgICAgICAgICAgICAgIDogKHBlbmRpbmdQcm9wcyA9IHR5cGVvZiB0eXBlKTtcbiAgICAgICAgICAgIChmaWJlclRhZyA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZUZyb21Pd25lcihvd25lcikgOiBudWxsKSAmJlxuICAgICAgICAgICAgICAocmVzb2x2ZWRUeXBlICs9XG4gICAgICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBmaWJlclRhZyArIFwiYC5cIik7XG4gICAgICAgICAgICBmaWJlclRhZyA9IDI5O1xuICAgICAgICAgICAgcGVuZGluZ1Byb3BzID0gRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArXG4gICAgICAgICAgICAgICAgKHBlbmRpbmdQcm9wcyArIFwiLlwiICsgcmVzb2x2ZWRUeXBlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIGtleSA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgICBrZXkuZWxlbWVudFR5cGUgPSB0eXBlO1xuICAgICAga2V5LnR5cGUgPSByZXNvbHZlZFR5cGU7XG4gICAgICBrZXkubGFuZXMgPSBsYW5lcztcbiAgICAgIGtleS5fZGVidWdPd25lciA9IG93bmVyO1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICAgICAgbW9kZSA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgZWxlbWVudC50eXBlLFxuICAgICAgICBlbGVtZW50LmtleSxcbiAgICAgICAgZWxlbWVudC5wcm9wcyxcbiAgICAgICAgZWxlbWVudC5fb3duZXIsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIGxhbmVzXG4gICAgICApO1xuICAgICAgbW9kZS5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgcmV0dXJuIG1vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gICAgICBlbGVtZW50cyA9IGNyZWF0ZUZpYmVyKDcsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICAgICAgZWxlbWVudHMubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICAgICAgcGVuZGluZ1Byb3BzID0gY3JlYXRlRmliZXIoMjIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgICAgIHBlbmRpbmdQcm9wcy5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICAgICAgcGVuZGluZ1Byb3BzLmxhbmVzID0gbGFuZXM7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkSW5zdGFuY2UgPSB7XG4gICAgICAgIF92aXNpYmlsaXR5OiBPZmZzY3JlZW5WaXNpYmxlLFxuICAgICAgICBfcGVuZGluZ1Zpc2liaWxpdHk6IE9mZnNjcmVlblZpc2libGUsXG4gICAgICAgIF9wZW5kaW5nTWFya2VyczogbnVsbCxcbiAgICAgICAgX3JldHJ5Q2FjaGU6IG51bGwsXG4gICAgICAgIF90cmFuc2l0aW9uczogbnVsbCxcbiAgICAgICAgX2N1cnJlbnQ6IG51bGwsXG4gICAgICAgIGRldGFjaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHByaW1hcnlDaGlsZEluc3RhbmNlLFxuICAgICAgICAgICAgZmliZXIgPSBpbnN0YW5jZS5fY3VycmVudDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJDYWxsaW5nIE9mZnNjcmVlbi5kZXRhY2ggYmVmb3JlIGluc3RhbmNlIGhhbmRsZSBoYXMgYmVlbiBzZXQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKDAgPT09IChpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZCkpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgKChpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuRGV0YWNoZWQpLFxuICAgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGF0dGFjaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHByaW1hcnlDaGlsZEluc3RhbmNlLFxuICAgICAgICAgICAgZmliZXIgPSBpbnN0YW5jZS5fY3VycmVudDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJDYWxsaW5nIE9mZnNjcmVlbi5kZXRhY2ggYmVmb3JlIGluc3RhbmNlIGhhbmRsZSBoYXMgYmVlbiBzZXQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKDAgIT09IChpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZCkpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgKChpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlbkRldGFjaGVkKSxcbiAgICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcGVuZGluZ1Byb3BzLnN0YXRlTm9kZSA9IHByaW1hcnlDaGlsZEluc3RhbmNlO1xuICAgICAgcmV0dXJuIHBlbmRpbmdQcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICAgICAgY29udGVudCA9IGNyZWF0ZUZpYmVyKDYsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICAgICAgY29udGVudC5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gICAgICBtb2RlID0gY3JlYXRlRmliZXIoXG4gICAgICAgIDQsXG4gICAgICAgIG51bGwgIT09IHBvcnRhbC5jaGlsZHJlbiA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdLFxuICAgICAgICBwb3J0YWwua2V5LFxuICAgICAgICBtb2RlXG4gICAgICApO1xuICAgICAgbW9kZS5sYW5lcyA9IGxhbmVzO1xuICAgICAgbW9kZS5zdGF0ZU5vZGUgPSB7XG4gICAgICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgICAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgICAgIH07XG4gICAgICByZXR1cm4gbW9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzLCByZXNvdXJjZSkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN0eWxlc2hlZXRcIiAhPT0gcmVzb3VyY2UudHlwZSB8fFxuICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSAhPT0gTm90TG9hZGVkXG4gICAgICApXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNztcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE2Nzc3MjE2KSwgIXByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgICApIHtcbiAgICAgICAgcmVzb3VyY2UgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbnVsbCAhPT0gcmVzb3VyY2UgJiZcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDE3NikgPT09XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gbnVsbCAhPT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApICE9PVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSkgfHxcbiAgICAgICAgICAgICAgcmVzb3VyY2UgIT09IHNoZWxsQm91bmRhcnkpXG4gICAgICAgIClcbiAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAoKHN1c3BlbmRlZFRoZW5hYmxlID0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlKSxcbiAgICAgICAgICAgIFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbilcbiAgICAgICAgICApO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZXRyeVF1ZXVlKSB7XG4gICAgICBudWxsICE9PSByZXRyeVF1ZXVlICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTYzODQgJiZcbiAgICAgICAgKChyZXRyeVF1ZXVlID1cbiAgICAgICAgICAyMiAhPT0gd29ya0luUHJvZ3Jlc3MudGFnID8gY2xhaW1OZXh0UmV0cnlMYW5lKCkgOiA1MzY4NzA5MTIpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgfD0gcmV0cnlRdWV1ZSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgfD0gcmV0cnlRdWV1ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICAgICAgaWYgKCFpc0h5ZHJhdGluZylcbiAgICAgICAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgICBmb3IgKHZhciBsYXN0VGFpbE5vZGUgPSBudWxsOyBudWxsICE9PSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2s7IClcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIChsYXN0VGFpbE5vZGUgPSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spLFxuICAgICAgICAgICAgICAgIChoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgPSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2suc2libGluZyk7XG4gICAgICAgICAgICBudWxsID09PSBsYXN0VGFpbE5vZGVcbiAgICAgICAgICAgICAgPyAocmVuZGVyU3RhdGUudGFpbCA9IG51bGwpXG4gICAgICAgICAgICAgIDogKGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiY29sbGFwc2VkXCI6XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgICAgZm9yICh2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7IG51bGwgIT09IGxhc3RUYWlsTm9kZTsgKVxuICAgICAgICAgICAgICBudWxsICE9PSBsYXN0VGFpbE5vZGUuYWx0ZXJuYXRlICYmIChfbGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlKSxcbiAgICAgICAgICAgICAgICAobGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlLnNpYmxpbmcpO1xuICAgICAgICAgICAgbnVsbCA9PT0gX2xhc3RUYWlsTm9kZVxuICAgICAgICAgICAgICA/IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayB8fCBudWxsID09PSByZW5kZXJTdGF0ZS50YWlsXG4gICAgICAgICAgICAgICAgPyAocmVuZGVyU3RhdGUudGFpbCA9IG51bGwpXG4gICAgICAgICAgICAgICAgOiAocmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbClcbiAgICAgICAgICAgICAgOiAoX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnViYmxlUHJvcGVydGllcyhjb21wbGV0ZWRXb3JrKSB7XG4gICAgICB2YXIgZGlkQmFpbG91dCA9XG4gICAgICAgICAgbnVsbCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZCA9PT0gY29tcGxldGVkV29yay5jaGlsZCxcbiAgICAgICAgbmV3Q2hpbGRMYW5lcyA9IDAsXG4gICAgICAgIHN1YnRyZWVGbGFncyA9IDA7XG4gICAgICBpZiAoZGlkQmFpbG91dClcbiAgICAgICAgaWYgKChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb24sXG4gICAgICAgICAgICAgIF9jaGlsZDIgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuICAgICAgICAgICAgbnVsbCAhPT0gX2NoaWxkMjtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9IF9jaGlsZDIubGFuZXMgfCBfY2hpbGQyLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF9jaGlsZDIuc3VidHJlZUZsYWdzICYgMzE0NTcyODApLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF9jaGlsZDIuZmxhZ3MgJiAzMTQ1NzI4MCksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiArPSBfY2hpbGQyLnRyZWVCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICAgICAoX2NoaWxkMiA9IF9jaGlsZDIuc2libGluZyk7XG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgICBudWxsICE9PSBfdHJlZUJhc2VEdXJhdGlvbjtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9XG4gICAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uLmxhbmVzIHwgX3RyZWVCYXNlRHVyYXRpb24uY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX3RyZWVCYXNlRHVyYXRpb24uc3VidHJlZUZsYWdzICYgMzE0NTcyODApLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF90cmVlQmFzZUR1cmF0aW9uLmZsYWdzICYgMzE0NTcyODApLFxuICAgICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24ucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiA9IF90cmVlQmFzZUR1cmF0aW9uLnNpYmxpbmcpO1xuICAgICAgZWxzZSBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgX2NoaWxkMiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgZm9yICh2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZDsgKVxuICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9IGNoaWxkLmxhbmVzIHwgY2hpbGQuY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkLnN1YnRyZWVGbGFncyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkLmZsYWdzKSxcbiAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbiksXG4gICAgICAgICAgICAoX2NoaWxkMiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uKSxcbiAgICAgICAgICAgIChjaGlsZCA9IGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IF9jaGlsZDI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgbnVsbCAhPT0gX3RyZWVCYXNlRHVyYXRpb247XG5cbiAgICAgICAgKVxuICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9XG4gICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbi5sYW5lcyB8IF90cmVlQmFzZUR1cmF0aW9uLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5zdWJ0cmVlRmxhZ3MpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5mbGFncyksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24ucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbi5zaWJsaW5nKTtcbiAgICAgIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgICAgIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gICAgICByZXR1cm4gZGlkQmFpbG91dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIChyZW5kZXJMYW5lcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KTtcbiAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBuZXdQcm9wcy5wZW5kaW5nQ29udGV4dCAmJlxuICAgICAgICAgICAgKChuZXdQcm9wcy5jb250ZXh0ID0gbmV3UHJvcHMucGVuZGluZ0NvbnRleHQpLFxuICAgICAgICAgICAgKG5ld1Byb3BzLnBlbmRpbmdDb250ZXh0ID0gbnVsbCkpO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgPT09IGN1cnJlbnQuY2hpbGQpXG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgPyAoZW1pdFBlbmRpbmdIeWRyYXRpb25XYXJuaW5ncygpLCBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICAgICAgOiBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgKGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NikpIHx8XG4gICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBoeWRyYXRpb25FcnJvcnMgJiZcbiAgICAgICAgICAgICAgICAgIChxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGh5ZHJhdGlvbkVycm9ycyksXG4gICAgICAgICAgICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCkpKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICA/IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNykpKVxuICAgICAgICAgICAgICA6IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgPyByZW5kZXJMYW5lcyAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgICAgICA/IChtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgOiAoYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTcpKVxuICAgICAgICAgICAgICAgIDogKGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTcpKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgICAgICB2YXIgX3R5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgID8gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3VycmVudClcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICBfdHlwZSxcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudCksXG4gICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3R5cGUgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgaWYgKHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgX3R5cGUpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhyZW5kZXJMYW5lcywgX3R5cGUuYW5jZXN0b3JJbmZvKTtcbiAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5jb250ZXh0O1xuICAgICAgICAgICAgICBjdXJyZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKGN1cnJlbnQpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKF90eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZzpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgTUFUSF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVuZGVyTGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFNWR19OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICAgICAgTUFUSF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaW5uZXJIVE1MID0gXCI8c2NyaXB0PlxceDNjL3NjcmlwdD5cIjtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yZW1vdmVDaGlsZChjdXJyZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBpczogbmV3UHJvcHMuaXMgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGN1cnJlbnQubXVsdGlwbGUgPSAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3UHJvcHMuc2l6ZSAmJiAoY3VycmVudC5zaXplID0gbmV3UHJvcHMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld1Byb3BzLmlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudC5jcmVhdGVFbGVtZW50KHJlbmRlckxhbmVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpczogbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY3JlYXRlRWxlbWVudChyZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLTEgPT09IHJlbmRlckxhbmVzLmluZGV4T2YoXCItXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyAhPT0gcmVuZGVyTGFuZXMudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiBVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIltvYmplY3QgSFRNTFVua25vd25FbGVtZW50XVwiICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXJyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuZWRVbmtub3duVGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgod2FybmVkVW5rbm93blRhZ3NbcmVuZGVyTGFuZXNdID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxQcm9wc0tleV0gPSBuZXdQcm9wcztcbiAgICAgICAgICAgICAgYTogZm9yIChfdHlwZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBfdHlwZTsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKDUgPT09IF90eXBlLnRhZyB8fCA2ID09PSBfdHlwZS50YWcpXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZENoaWxkKF90eXBlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICA0ICE9PSBfdHlwZS50YWcgJiZcbiAgICAgICAgICAgICAgICAgIDI3ICE9PSBfdHlwZS50YWcgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlLmNoaWxkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBfdHlwZS5jaGlsZC5yZXR1cm4gPSBfdHlwZTtcbiAgICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF90eXBlID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gX3R5cGUuc2libGluZzsgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gX3R5cGUucmV0dXJuIHx8IF90eXBlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3R5cGUuc2libGluZy5yZXR1cm4gPSBfdHlwZS5yZXR1cm47XG4gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIGE6IHN3aXRjaCAoXG4gICAgICAgICAgICAgICAgKHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnQsIHJlbmRlckxhbmVzLCBuZXdQcm9wcyksXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgICAgICAgICBjdXJyZW50ID0gISFuZXdQcm9wcy5hdXRvRm9jdXM7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAhMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50ICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTc7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAoY3VycmVudCAmJiBudWxsICE9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50ID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgaWYgKHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIF90eXBlID0gIWRpZFN1c3BlbmRPckVycm9yREVWO1xuICAgICAgICAgICAgICByZW5kZXJMYW5lcyA9IG51bGw7XG4gICAgICAgICAgICAgIHZhciByZXR1cm5GaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKF90eXBlID0gZGlmZkh5ZHJhdGVkVGV4dEZvckRldldhcm5pbmdzKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUod29ya0luUHJvZ3Jlc3MsIDApLnNlcnZlclByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3R5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKChfdHlwZSA9IGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zZXJ2ZXJQcm9wcyA9IF90eXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgIGN1cnJlbnQubm9kZVZhbHVlID09PSBuZXdQcm9wcyB8fFxuICAgICAgICAgICAgICAgIChudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgITAgPT09IHJlbmRlckxhbmVzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgfHxcbiAgICAgICAgICAgICAgICBjaGVja0ZvclVubWF0Y2hlZFRleHQoY3VycmVudC5ub2RlVmFsdWUsIG5ld1Byb3BzKVxuICAgICAgICAgICAgICAgICAgPyAhMFxuICAgICAgICAgICAgICAgICAgOiAhMTtcbiAgICAgICAgICAgICAgY3VycmVudCB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLmFuY2VzdG9ySW5mby5jdXJyZW50KSxcbiAgICAgICAgICAgICAgICBudWxsICE9IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKG5ld1Byb3BzLCByZW5kZXJMYW5lcy50YWcpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihjdXJyZW50KS5jcmVhdGVUZXh0Tm9kZShcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBfdHlwZSA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBuZXdQcm9wcyAmJiBudWxsICE9PSBuZXdQcm9wcy5kZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdHlwZSlcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBfdHlwZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgICAgX3R5cGUgPSBudWxsICE9PSBfdHlwZSA/IF90eXBlLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghX3R5cGUpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgX3R5cGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgKChfdHlwZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uIC09XG4gICAgICAgICAgICAgICAgICAgICAgX3R5cGUudHJlZUJhc2VEdXJhdGlvbikpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBlbWl0UGVuZGluZ0h5ZHJhdGlvbldhcm5pbmdzKCksXG4gICAgICAgICAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCksXG4gICAgICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfdHlwZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gX3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPVxuICAgICAgICAgICAgICAgICAgICAgICAgX3R5cGUudHJlZUJhc2VEdXJhdGlvbikpO1xuICAgICAgICAgICAgICBfdHlwZSA9ICExO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIG51bGwgIT09IGh5ZHJhdGlvbkVycm9ycyAmJlxuICAgICAgICAgICAgICAgIChxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGh5ZHJhdGlvbkVycm9ycyksXG4gICAgICAgICAgICAgICAgKGh5ZHJhdGlvbkVycm9ycyA9IG51bGwpKSxcbiAgICAgICAgICAgICAgICAoX3R5cGUgPSAhMCk7XG4gICAgICAgICAgICBpZiAoIV90eXBlKSB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSwgd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGlmICgwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIG5ld1Byb3BzID0gbnVsbCAhPT0gbmV3UHJvcHM7XG4gICAgICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG5ld1Byb3BzICYmXG4gICAgICAgICAgICAoKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgKF90eXBlID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcy5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChfdHlwZSA9IHJlbmRlckxhbmVzLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZW5kZXJMYW5lcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIHJldHVybkZpYmVyICE9PSBfdHlwZSAmJiAocmVuZGVyTGFuZXMuZmxhZ3MgfD0gMjA0OCkpO1xuICAgICAgICAgIG5ld1Byb3BzICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkLmZsYWdzIHw9IDgxOTIpO1xuICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBfdHlwZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKG51bGwgPT09IF90eXBlKSByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgICAgbmV3UHJvcHMgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICAgICAgICAgIHJldHVybkZpYmVyID0gX3R5cGUucmVuZGVyaW5nO1xuICAgICAgICAgIGlmIChudWxsID09PSByZXR1cm5GaWJlcilcbiAgICAgICAgICAgIGlmIChuZXdQcm9wcykgY3V0T2ZmVGFpbElmTmVlZGVkKF90eXBlLCAhMSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RJblByb2dyZXNzIHx8XG4gICAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZm9yIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IGN1cnJlbnQ7ICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gcmV0dXJuRmliZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICExKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHJldHVybkZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDsgbnVsbCAhPT0gbmV3UHJvcHM7IClcbiAgICAgICAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKG5ld1Byb3BzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZXdQcm9wcyA9IG5ld1Byb3BzLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgICBwdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgICAgICAgICAgICAgICAgKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmXG4gICAgICAgICAgICAgICAgICAgICAgICBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfFxuICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBudWxsICE9PSBfdHlwZS50YWlsICYmXG4gICAgICAgICAgICAgICAgbm93JDEoKSA+IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgJiZcbiAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChfdHlwZSwgITEpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmV0dXJuRmliZXIpKSwgbnVsbCAhPT0gY3VycmVudClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICEwKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IF90eXBlLnRhaWwgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRkZW5cIiA9PT0gX3R5cGUudGFpbE1vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIXJldHVybkZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNIeWRyYXRpbmcpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAyICogbm93JDEoKSAtIF90eXBlLnJlbmRlcmluZ1N0YXJ0VGltZSA+XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgICAgICA1MzY4NzA5MTIgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAobmV3UHJvcHMgPSAhMCksXG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICExKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgICAgIF90eXBlLmlzQmFja3dhcmRzXG4gICAgICAgICAgICAgID8gKChyZXR1cm5GaWJlci5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBfdHlwZS5sYXN0KSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgICAgICA/IChjdXJyZW50LnNpYmxpbmcgPSByZXR1cm5GaWJlcilcbiAgICAgICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChfdHlwZS5sYXN0ID0gcmV0dXJuRmliZXIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgIT09IF90eXBlLnRhaWwpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoY3VycmVudCA9IF90eXBlLnRhaWwpLFxuICAgICAgICAgICAgICAoX3R5cGUucmVuZGVyaW5nID0gY3VycmVudCksXG4gICAgICAgICAgICAgIChfdHlwZS50YWlsID0gY3VycmVudC5zaWJsaW5nKSxcbiAgICAgICAgICAgICAgKF90eXBlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdyQxKCkpLFxuICAgICAgICAgICAgICAoY3VycmVudC5zaWJsaW5nID0gbnVsbCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgPyAocmVuZGVyTGFuZXMgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfFxuICAgICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcyAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSxcbiAgICAgICAgICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcG9wSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAobmV3UHJvcHMgPSBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAobnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MilcbiAgICAgICAgICAgICAgOiBuZXdQcm9wcyAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MiksXG4gICAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICAgICAgICA/IDAgIT09IChyZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikgJiZcbiAgICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyAmIDYgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKSlcbiAgICAgICAgICAgICAgOiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChuZXdQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICByZW5kZXJMYW5lcyAhPT0gbmV3UHJvcHMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIChuZXdQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA0OCksXG4gICAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW53aW5kV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIDAgIT09IChjdXJyZW50ICYgNjU1MzYpICYmIDAgPT09IChjdXJyZW50ICYgMTI4KVxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQuZGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuICAgICAgICAgIHJldHVybiBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yaykge1xuICAgICAgcG9wVHJlZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrLnR5cGUsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgcG9wSGlkZGVuQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcG9wKHJlc3VtZWRDYWNoZSwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIGludGVycnVwdGVkV29yayk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQ29tbWl0Um9vdCgpIHtcbiAgICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpIHtcbiAgICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPVxuICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UXG4gICAgICAgICAgPyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlRcbiAgICAgICAgICA6IHZvaWQgMDtcbiAgICAgIGlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCB8fFxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBub3QgY29uZmlndXJlZCB0byBzdXBwb3J0IGFjdCguLi4pXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJlxuICAgICAgICAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKVxuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAtd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gdHJhbnNpdGlvblxuICAgICAgICA/ICh0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzIHx8ICh0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpKSxcbiAgICAgICAgICB0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmFkZChmaWJlciksXG4gICAgICAgICAgKGZpYmVyID0gY3VycmVudEVudGFuZ2xlZExhbmUpLFxuICAgICAgICAgIDAgIT09IGZpYmVyID8gZmliZXIgOiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKSlcbiAgICAgICAgOiByZXNvbHZlVXBkYXRlUHJpb3JpdHkoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWVzdERlZmVycmVkTGFuZSgpIHtcbiAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSB8fCBpc0h5ZHJhdGluZ1xuICAgICAgICAgICAgPyBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpXG4gICAgICAgICAgICA6IDUzNjg3MDkxMik7XG4gICAgICB2YXIgc3VzcGVuc2VIYW5kbGVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIG51bGwgIT09IHN1c3BlbnNlSGFuZGxlciAmJiAoc3VzcGVuc2VIYW5kbGVyLmZsYWdzIHw9IDMyKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcInVzZUluc2VydGlvbkVmZmVjdCBtdXN0IG5vdCBzY2hlZHVsZSB1cGRhdGVzLlwiKTtcbiAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyAmJiAoZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICEwKTtcbiAgICAgIGlmIChcbiAgICAgICAgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEpIHx8XG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdFxuICAgICAgKVxuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCAwKSxcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgICAgbWFya1Jvb3RVcGRhdGVkJDEocm9vdCwgbGFuZSk7XG4gICAgICBpZiAoXG4gICAgICAgIDAgIT09IChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgJiZcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290XG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzUmVuZGVyaW5nKVxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgcm9vdCA9XG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpKSB8fFxuICAgICAgICAgICAgICAgIFwiVW5rbm93blwiO1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuaGFzKHJvb3QpIHx8XG4gICAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQocm9vdCksXG4gICAgICAgICAgICAgICAgKGZpYmVyID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhIGRpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsIGZvbGxvdyB0aGUgc3RhY2sgdHJhY2UgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciB8fFxuICAgICAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzIHdpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLlwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSAhMCkpO1xuICAgICAgICAgIH1cbiAgICAgIH0gZWxzZVxuICAgICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgZmliZXIsIGxhbmUpLFxuICAgICAgICAgIHdhcm5JZlVwZGF0ZXNOb3RXcmFwcGVkV2l0aEFjdERFVihmaWJlciksXG4gICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgICAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSA9PT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyB8PSBsYW5lKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlcmZvcm1Xb3JrT25Sb290KHJvb3QsIGxhbmVzLCBmb3JjZVN5bmMpIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpXG4gICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgdmFyIHNob3VsZFRpbWVTbGljZSA9XG4gICAgICAgICAgKCFmb3JjZVN5bmMgJiZcbiAgICAgICAgICAgIDAgPT09IChsYW5lcyAmIDYwKSAmJlxuICAgICAgICAgICAgMCA9PT0gKGxhbmVzICYgcm9vdC5leHBpcmVkTGFuZXMpKSB8fFxuICAgICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbGFuZXMpLFxuICAgICAgICBleGl0U3RhdHVzID0gc2hvdWxkVGltZVNsaWNlXG4gICAgICAgICAgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcylcbiAgICAgICAgICA6IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzLCAhMCksXG4gICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBzaG91bGRUaW1lU2xpY2U7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcykge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nICYmXG4gICAgICAgICAgICAhc2hvdWxkVGltZVNsaWNlICYmXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCwgITEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3REaWROb3RDb21wbGV0ZSlcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yY2VTeW5jID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ICYmXG4gICAgICAgICAgICAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZvcmNlU3luYylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcywgITEpO1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGxhbmVzO1xuICAgICAgICAgICAgaWYgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJiByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICAgICAgICB2YXIgZXJyb3JSZXRyeUxhbmVzID0gMDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgKGVycm9yUmV0cnlMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgLTUzNjg3MDkxMyksXG4gICAgICAgICAgICAgICAgKGVycm9yUmV0cnlMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAwICE9PSBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvclJldHJ5TGFuZXMgJiA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgICAgICAgICA/IDUzNjg3MDkxMlxuICAgICAgICAgICAgICAgICAgICAgIDogMCk7XG4gICAgICAgICAgICBpZiAoMCAhPT0gZXJyb3JSZXRyeUxhbmVzKSB7XG4gICAgICAgICAgICAgIGxhbmVzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgICBlcnJvclJldHJ5TGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzO1xuICAgICAgICAgICAgICAgIHZhciB3YXNSb290RGVoeWRyYXRlZCA9XG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQ7XG4gICAgICAgICAgICAgICAgd2FzUm9vdERlaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIChwcmVwYXJlRnJlc2hTdGFjayhcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICApLmZsYWdzIHw9IDI1Nik7XG4gICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwID0gcmVuZGVyUm9vdFN5bmMoXG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvclJldHJ5TGFuZXMkanNjb21wJDAgIT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAhd2FzUm9vdERlaHlkcmF0ZWRcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzIHw9XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD1cbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycztcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXhpdFN0YXR1cyAmJiBxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGV4aXRTdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgICAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RFcnJvcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApO1xuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIDAsICEwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UgPSByb290O1xuICAgICAgICAgICAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEluUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgICAgICAgICAgICBpZiAoKGxhbmVzICYgNDE5NDE3NikgPT09IGxhbmVzKSB7XG4gICAgICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgICAgICF3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBSb290RXJyb3JlZDpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICAgICAgICAgICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZS5maW5pc2hlZFdvcmsgPSBmb3JjZVN5bmM7XG4gICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlKVxuICAgICAgICAgICAgICBjb21taXRSb290KFxuICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICAgIElNTUVESUFURV9DT01NSVQsXG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGxhbmVzICYgNjI5MTQ1NjApID09PSBsYW5lcyAmJlxuICAgICAgICAgICAgICAgICgoZXhpdFN0YXR1cyA9XG4gICAgICAgICAgICAgICAgICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICtcbiAgICAgICAgICAgICAgICAgIEZBTExCQUNLX1RIUk9UVExFX01TIC1cbiAgICAgICAgICAgICAgICAgIG5vdyQxKCkpLFxuICAgICAgICAgICAgICAgIDEwIDwgZXhpdFN0YXR1cylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgICAgIXdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5nc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKDAgIT09IGdldE5leHRMYW5lcyhzaG91bGRUaW1lU2xpY2UsIDApKSBicmVhayBhO1xuICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZS50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgY29tbWl0Um9vdFdoZW5SZWFkeS5iaW5kKFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzLFxuICAgICAgICAgICAgICAgICAgICBUSFJPVFRMRURfQ09NTUlULFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbW1pdFJvb3RXaGVuUmVhZHkoXG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyxcbiAgICAgICAgICAgICAgICBJTU1FRElBVEVfQ09NTUlULFxuICAgICAgICAgICAgICAgIHJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9yc1xuICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9ycylcbiAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICBlcnJvcnNcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICBsYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgIGRpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyxcbiAgICAgIHN1c3BlbmRlZENvbW1pdFJlYXNvbixcbiAgICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICAgIGNvbXBsZXRlZFJlbmRlckVuZFRpbWVcbiAgICApIHtcbiAgICAgIHZhciBzdWJ0cmVlRmxhZ3MgPSBmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzO1xuICAgICAgaWYgKHN1YnRyZWVGbGFncyAmIDgxOTIgfHwgMTY3ODU0MDggPT09IChzdWJ0cmVlRmxhZ3MgJiAxNjc4NTQwOCkpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHN1c3BlbmRlZFN0YXRlID0geyBzdHlsZXNoZWV0czogbnVsbCwgY291bnQ6IDAsIHVuc3VzcGVuZDogbm9vcCB9KSxcbiAgICAgICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaW5pc2hlZFdvcmspLFxuICAgICAgICAgIChmaW5pc2hlZFdvcmsgPSB3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5KCkpLFxuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gZmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgY29tbWl0Um9vdC5iaW5kKFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgICAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICAgICAgU1VTUEVOREVEX0NPTU1JVCxcbiAgICAgICAgICAgICAgY29tcGxldGVkUmVuZGVyU3RhcnRUaW1lLFxuICAgICAgICAgICAgICBjb21wbGV0ZWRSZW5kZXJFbmRUaW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICAgICAgIWRpZFNraXBTdXNwZW5kZWRTaWJsaW5nc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBjb21taXRSb290KFxuICAgICAgICByb290LFxuICAgICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uLFxuICAgICAgICBjb21wbGV0ZWRSZW5kZXJTdGFydFRpbWUsXG4gICAgICAgIGNvbXBsZXRlZFJlbmRlckVuZFRpbWVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIGZvciAodmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgwID09PSB0YWcgfHwgMTEgPT09IHRhZyB8fCAxNSA9PT0gdGFnKSAmJlxuICAgICAgICAgIG5vZGUuZmxhZ3MgJiAxNjM4NCAmJlxuICAgICAgICAgICgodGFnID0gbm9kZS51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gdGFnICYmICgodGFnID0gdGFnLnN0b3JlcyksIG51bGwgIT09IHRhZykpXG4gICAgICAgIClcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoZWNrID0gdGFnW2ldLFxuICAgICAgICAgICAgICBnZXRTbmFwc2hvdCA9IGNoZWNrLmdldFNuYXBzaG90O1xuICAgICAgICAgICAgY2hlY2sgPSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmICghb2JqZWN0SXMoZ2V0U25hcHNob3QoKSwgY2hlY2spKSByZXR1cm4gITE7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB0YWcgPSBub2RlLmNoaWxkO1xuICAgICAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiAxNjM4NCAmJiBudWxsICE9PSB0YWcpXG4gICAgICAgICAgKHRhZy5yZXR1cm4gPSBub2RlKSwgKG5vZGUgPSB0YWcpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSBicmVhaztcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gbm9kZS5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSByZXR1cm4gITA7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgcm9vdCxcbiAgICAgIHN1c3BlbmRlZExhbmVzLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICBkaWRBdHRlbXB0RW50aXJlVHJlZVxuICAgICkge1xuICAgICAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzO1xuICAgICAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzO1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzO1xuICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWUgJiYgKHJvb3Qud2FybUxhbmVzIHw9IHN1c3BlbmRlZExhbmVzKTtcbiAgICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gICAgICBmb3IgKHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzOyAwIDwgbGFuZXM7ICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWVbaW5kZXhdID0gLTE7XG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgICAgMCAhPT0gc3Bhd25lZExhbmUgJiZcbiAgICAgICAgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIHN1c3BlbmRlZExhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jV29yayQxKCkge1xuICAgICAgcmV0dXJuIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dFxuICAgICAgICA/IChmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSksICExKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKSB7XG4gICAgICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBOb3RTdXNwZW5kZWQpXG4gICAgICAgICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgICAgIHJlc2V0SG9va3NPblVud2luZChpbnRlcnJ1cHRlZFdvcmspLFxuICAgICAgICAgICAgKHRoZW5hYmxlU3RhdGUkMSA9IG51bGwpLFxuICAgICAgICAgICAgKHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwKSxcbiAgICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGZvciAoOyBudWxsICE9PSBpbnRlcnJ1cHRlZFdvcms7IClcbiAgICAgICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrLmFsdGVybmF0ZSwgaW50ZXJydXB0ZWRXb3JrKSxcbiAgICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICAgICAgcm9vdC5maW5pc2hlZExhbmVzID0gMDtcbiAgICAgIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuICAgICAgdGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0ICYmXG4gICAgICAgICgocm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0KSwgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKSk7XG4gICAgICB0aW1lb3V0SGFuZGxlID0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0O1xuICAgICAgbnVsbCAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICAgICAoKHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGwpLCB0aW1lb3V0SGFuZGxlKCkpO1xuICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB0aW1lb3V0SGFuZGxlID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gbGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gITE7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9IGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITE7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3M7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPVxuICAgICAgICAgIDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPVxuICAgICAgICBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSA9ICExO1xuICAgICAgMCAhPT0gKGxhbmVzICYgOCkgJiYgKGxhbmVzIHw9IGxhbmVzICYgMzIpO1xuICAgICAgdmFyIGFsbEVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcbiAgICAgIGlmICgwICE9PSBhbGxFbnRhbmdsZWRMYW5lcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICByb290ID0gcm9vdC5lbnRhbmdsZW1lbnRzLCBhbGxFbnRhbmdsZWRMYW5lcyAmPSBsYW5lcztcbiAgICAgICAgICAwIDwgYWxsRW50YW5nbGVkTGFuZXM7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihhbGxFbnRhbmdsZWRMYW5lcyksXG4gICAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgICBsYW5lcyB8PSByb290W2luZGV4XTtcbiAgICAgICAgICBhbGxFbnRhbmdsZWRMYW5lcyAmPSB+bGFuZTtcbiAgICAgICAgfVxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgICAgIHJldHVybiB0aW1lb3V0SGFuZGxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICAgIGlzUmVuZGVyaW5nID0gITE7XG4gICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgIHRocm93blZhbHVlID09PSBTdXNwZW5zZUV4Y2VwdGlvblxuICAgICAgICA/ICgodGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRPbkltbWVkaWF0ZSkpXG4gICAgICAgIDogdGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvblxuICAgICAgICAgID8gKCh0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkT25JbnN0YW5jZSkpXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgICAgICB0aHJvd25WYWx1ZSA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uXG4gICAgICAgICAgICAgICAgPyBTdXNwZW5kZWRPbkh5ZHJhdGlvblxuICAgICAgICAgICAgICAgIDogbnVsbCAhPT0gdGhyb3duVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHRocm93blZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHRocm93blZhbHVlLnRoZW5cbiAgICAgICAgICAgICAgICAgID8gU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlXG4gICAgICAgICAgICAgICAgICA6IFN1c3BlbmRlZE9uRXJyb3IpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IHRocm93blZhbHVlO1xuICAgICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBpZiAobnVsbCA9PT0gZXJyb3JlZFdvcmspXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZCksXG4gICAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSAmJlxuICAgICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbihlcnJvcmVkV29yayksXG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudEVycm9yZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50RXJyb3JlZChcbiAgICAgICAgICAgICAgICBlcnJvcmVkV29yayxcbiAgICAgICAgICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkltbWVkaWF0ZTpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZTpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTpcbiAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgIGVycm9yZWRXb3JrLFxuICAgICAgICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIHJldHVybiBudWxsID09PSBwcmV2RGlzcGF0Y2hlciA/IENvbnRleHRPbmx5RGlzcGF0Y2hlciA6IHByZXZEaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoQXN5bmNEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuQSA9IERlZmF1bHRBc3luY0Rpc3BhdGNoZXI7XG4gICAgICByZXR1cm4gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzIHx8XG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA0MTk0MTc2KSAhPT1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgIG51bGwgIT09IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpIHx8XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9ICEwKTtcbiAgICAgICgwID09PSAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzICYgMTM0MjE3NzI3KSAmJlxuICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgJiAxMzQyMTc3MjcpKSB8fFxuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgfHxcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzLCBzaG91bGRZaWVsZEZvclByZXJlbmRlcmluZykge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCksXG4gICAgICAgIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBwdXNoQXN5bmNEaXNwYXRjaGVyKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbWVtb2l6ZWRVcGRhdGVycy5zaXplICYmXG4gICAgICAgICAgICAocmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCkpO1xuICAgICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICAgIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICAgIGxhbmVzID0gITE7XG4gICAgICBtZW1vaXplZFVwZGF0ZXJzID0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICAgIGE6IGRvXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gIT09IE5vdFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjpcbiAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gUm9vdERpZE5vdENvbXBsZXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZTpcbiAgICAgICAgICAgICAgICBudWxsID09PSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50ICYmIChsYW5lcyA9ICEwKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVhc29uID0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb247XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzaG91bGRZaWVsZEZvclByZXJlbmRlcmluZyAmJlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSBSb290SW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIChyZWFzb24gPSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUsIHJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSQ4KSB7XG4gICAgICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUkOCk7XG4gICAgICAgIH1cbiAgICAgIHdoaWxlICgxKTtcbiAgICAgIGxhbmVzICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlcisrO1xuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5BID0gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgICAgIG1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwKSxcbiAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpKTtcbiAgICAgIHJldHVybiBtZW1vaXplZFVwZGF0ZXJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3M7ICkgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCksXG4gICAgICAgIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBwdXNoQXN5bmNEaXNwYXRjaGVyKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbWVtb2l6ZWRVcGRhdGVycy5zaXplICYmXG4gICAgICAgICAgICAocmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCkpO1xuICAgICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3ckMSgpICsgUkVOREVSX1RJTUVPVVRfTVM7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9IGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICAgICAgYTogZG9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gTm90U3VzcGVuZGVkICYmXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIGI6IHN3aXRjaCAoXG4gICAgICAgICAgICAgICgobGFuZXMgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIChtZW1vaXplZFVwZGF0ZXJzID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25FcnJvcjpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyxcbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uRXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGF0YTpcbiAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZVJlc29sdmVkKG1lbW9pemVkVXBkYXRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFuZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJlxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZSk7XG4gICAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLnRoZW4obGFuZXMsIGxhbmVzKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbnN0YW5jZTpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9XG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlOlxuICAgICAgICAgICAgICAgIGlzVGhlbmFibGVSZXNvbHZlZChtZW1vaXplZFVwZGF0ZXJzKVxuICAgICAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcykpXG4gICAgICAgICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWVcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZTpcbiAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSA/IHByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkgOiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBob3N0RmliZXIuc2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gc2libGluZykgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybkZpYmVyID0gaG9zdEZpYmVyLnJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsocmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgdHlwZSBvZiBmaWJlciB0cmlnZ2VyZWQgYSBzdXNwZW5zZXkgY29tbWl0LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjpcbiAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdERpZE5vdENvbXBsZXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgU3VzcGVuZGVkUmVhc29uLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZVxuICAgICAgICAgICAgPyB3b3JrTG9vcFN5bmMoKVxuICAgICAgICAgICAgOiB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodGhyb3duVmFsdWUkOSkge1xuICAgICAgICAgIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlJDkpO1xuICAgICAgICB9XG4gICAgICB3aGlsZSAoMSk7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQgJiZcbiAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQoKSxcbiAgICAgICAgICBSb290SW5Qcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgbWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDA7XG4gICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICB9XG4gICAgZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICAgICAgZm9yICg7IG51bGwgIT09IHdvcmtJblByb2dyZXNzICYmICFzaG91bGRZaWVsZCgpOyApXG4gICAgICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgICAgICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZVxuICAgICAgICA/IChzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayksXG4gICAgICAgICAgKGN1cnJlbnQgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBiZWdpbldvcmssXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbih1bml0T2ZXb3JrKSlcbiAgICAgICAgOiAoY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGJlZ2luV29yayxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICAgICAgICApKTtcbiAgICAgIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICA/IGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKVxuICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBuZXh0ID0gcnVuV2l0aEZpYmVySW5ERVYodW5pdE9mV29yaywgcmVwbGF5QmVnaW5Xb3JrLCB1bml0T2ZXb3JrKTtcbiAgICAgIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICAgICAgbnVsbCA9PT0gbmV4dCA/IGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSA6ICh3b3JrSW5Qcm9ncmVzcyA9IG5leHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlCZWdpbldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgaXNQcm9maWxpbmdNb2RlID0gKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgaXNQcm9maWxpbmdNb2RlICYmIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIHN3aXRjaCAodW5pdE9mV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgdW5pdE9mV29yay5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnR5cGUsXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY3VycmVudCA9IHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHVuaXRPZldvcmsudHlwZS5yZW5kZXIsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnJlZixcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlc2V0SG9va3NPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoY3VycmVudCwgdW5pdE9mV29yayksXG4gICAgICAgICAgICAodW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyh1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpKTtcbiAgICAgIH1cbiAgICAgIGlzUHJvZmlsaW5nTW9kZSAmJlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZER1cmF0aW9uKHVuaXRPZldvcmspO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICByb290LFxuICAgICAgdW5pdE9mV29yayxcbiAgICAgIHRocm93blZhbHVlLFxuICAgICAgc3VzcGVuZGVkUmVhc29uXG4gICAgKSB7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgICAgIHZhciByZXR1cm5GaWJlciA9IHVuaXRPZldvcmsucmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRocm93RXhjZXB0aW9uKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICAgIGxvZ1VuY2F1Z2h0RXJyb3IoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodGhyb3duVmFsdWUsIHJvb3QuY3VycmVudClcbiAgICAgICAgICApO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChudWxsICE9PSByZXR1cm5GaWJlcikgdGhyb3cgKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSwgZXJyb3IpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHRocm93blZhbHVlLCByb290LmN1cnJlbnQpXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHVuaXRPZldvcmsuZmxhZ3MgJiAzMjc2OCkge1xuICAgICAgICBpZiAoaXNIeWRyYXRpbmcgfHwgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkVycm9yKSByb290ID0gITA7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nIHx8XG4gICAgICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKVxuICAgICAgICApXG4gICAgICAgICAgcm9vdCA9ICExO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyA9IHJvb3QgPSAhMCksXG4gICAgICAgICAgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25JbW1lZGlhdGUgfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlKVxuICAgICAgICApXG4gICAgICAgICAgKHN1c3BlbmRlZFJlYXNvbiA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gc3VzcGVuZGVkUmVhc29uICYmXG4gICAgICAgICAgICAgIDEzID09PSBzdXNwZW5kZWRSZWFzb24udGFnICYmXG4gICAgICAgICAgICAgIChzdXNwZW5kZWRSZWFzb24uZmxhZ3MgfD0gMTYzODQpO1xuICAgICAgICB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmssIHJvb3QpO1xuICAgICAgfSBlbHNlIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKDAgIT09IChjb21wbGV0ZWRXb3JrLmZsYWdzICYgMzI3NjgpKSB7XG4gICAgICAgICAgdW53aW5kVW5pdE9mV29yayhcbiAgICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICB1bml0T2ZXb3JrID0gY29tcGxldGVkV29yay5yZXR1cm47XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgY29tcGxldGVXb3JrLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgY29tcGxldGVkV29yayxcbiAgICAgICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZEluY29tcGxldGVEdXJhdGlvbihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRlZFdvcmsgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG4gICAgICAgIGlmIChudWxsICE9PSBjb21wbGV0ZWRXb3JrKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gY29tcGxldGVkV29yayk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmssIHNraXBTaWJsaW5ncykge1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgbmV4dCA9IHVud2luZFdvcmsodW5pdE9mV29yay5hbHRlcm5hdGUsIHVuaXRPZldvcmspO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV4dCkge1xuICAgICAgICAgIG5leHQuZmxhZ3MgJj0gMzI3Njc7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24odW5pdE9mV29yayk7XG4gICAgICAgICAgbmV4dCA9IHVuaXRPZldvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgZm9yICh2YXIgY2hpbGQgPSB1bml0T2ZXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZDsgKVxuICAgICAgICAgICAgKG5leHQgKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLCAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB1bml0T2ZXb3JrLmFjdHVhbER1cmF0aW9uID0gbmV4dDtcbiAgICAgICAgfVxuICAgICAgICBuZXh0ID0gdW5pdE9mV29yay5yZXR1cm47XG4gICAgICAgIG51bGwgIT09IG5leHQgJiZcbiAgICAgICAgICAoKG5leHQuZmxhZ3MgfD0gMzI3NjgpLFxuICAgICAgICAgIChuZXh0LnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgIChuZXh0LmRlbGV0aW9ucyA9IG51bGwpKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFza2lwU2libGluZ3MgJiZcbiAgICAgICAgICAoKHVuaXRPZldvcmsgPSB1bml0T2ZXb3JrLnNpYmxpbmcpLCBudWxsICE9PSB1bml0T2ZXb3JrKVxuICAgICAgICApIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcms7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gdW5pdE9mV29yayA9IG5leHQ7XG4gICAgICB9IHdoaWxlIChudWxsICE9PSB1bml0T2ZXb3JrKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RGlkTm90Q29tcGxldGU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFJvb3QoXG4gICAgICByb290LFxuICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICB0cmFuc2l0aW9ucyxcbiAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgIHN1c3BlbmRlZENvbW1pdFJlYXNvbixcbiAgICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICAgIGNvbXBsZXRlZFJlbmRlckVuZFRpbWVcbiAgICApIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIHByZXZpb3VzVXBkYXRlTGFuZVByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5KSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGwpLFxuICAgICAgICAgIGNvbW1pdFJvb3RJbXBsKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgICAgICBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSxcbiAgICAgICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICAgIHN1c3BlbmRlZENvbW1pdFJlYXNvbixcbiAgICAgICAgICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgICAgIGNvbXBsZXRlZFJlbmRlckVuZFRpbWVcbiAgICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKFxuICAgICAgcm9vdCxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICByZW5kZXJQcmlvcml0eUxldmVsLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgKSB7XG4gICAgICBkbyBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICB3aGlsZSAobnVsbCAhPT0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMpO1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpXG4gICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIpO1xuICAgICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlID0gcm9vdC5maW5pc2hlZExhbmVzO1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdGFydGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0YXJ0ZWQoZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlKTtcbiAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmspIHJldHVybiBtYXJrQ29tbWl0U3RvcHBlZCgpLCBudWxsO1xuICAgICAgMCA9PT0gZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJyb290LmZpbmlzaGVkTGFuZXMgc2hvdWxkIG5vdCBiZSBlbXB0eSBkdXJpbmcgYSBjb21taXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IDA7XG4gICAgICBpZiAoZmluaXNoZWRXb3JrID09PSByb290LmN1cnJlbnQpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMDtcbiAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gICAgICB2YXIgcmVtYWluaW5nTGFuZXMgPSBmaW5pc2hlZFdvcmsubGFuZXMgfCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcztcbiAgICAgIHJlbWFpbmluZ0xhbmVzIHw9IGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcztcbiAgICAgIG1hcmtSb290RmluaXNoZWQoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgICAgcmVtYWluaW5nTGFuZXMsXG4gICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICAgICk7XG4gICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwKSk7XG4gICAgICAoMCA9PT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMDI1NikgJiZcbiAgICAgICAgMCA9PT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KSkgfHxcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgfHxcbiAgICAgICAgKChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9ICEwKSxcbiAgICAgICAgKHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXMpLFxuICAgICAgICAocGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IHRyYW5zaXRpb25zKSxcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayQxKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCEwKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgY29tbWl0U3RhcnRUaW1lID0gbm93KCk7XG4gICAgICB0cmFuc2l0aW9ucyA9IDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxNTk5MCk7XG4gICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDE1OTkwKSB8fCB0cmFuc2l0aW9uc1xuICAgICAgICA/ICgodHJhbnNpdGlvbnMgPSBSZWFjdFNoYXJlZEludGVybmFscy5UKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGwpLFxuICAgICAgICAgIChzcGF3bmVkTGFuZSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnApLFxuICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5KSxcbiAgICAgICAgICAodXBkYXRlZExhbmVzID0gZXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dCksXG4gICAgICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZVxuICAgICAgICAgICksXG4gICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb25JbmZvcm1hdGlvbiwgcm9vdC5jb250YWluZXJJbmZvKSxcbiAgICAgICAgICAoX2VuYWJsZWQgPSAhIWV2ZW50c0VuYWJsZWQpLFxuICAgICAgICAgIChzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGV2ZW50c0VuYWJsZWQgPSBudWxsKSxcbiAgICAgICAgICAocm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZCAmJlxuICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQoXG4gICAgICAgICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjb21taXRMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgcm9vdCwgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlKSxcbiAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCAmJlxuICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQoKSxcbiAgICAgICAgICByZXF1ZXN0UGFpbnQoKSxcbiAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IHVwZGF0ZWRMYW5lcyksXG4gICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBzcGF3bmVkTGFuZSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSB0cmFuc2l0aW9ucykpXG4gICAgICAgIDogKHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yayk7XG4gICAgICAodHJhbnNpdGlvbnMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cylcbiAgICAgICAgPyAoKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gITEpLFxuICAgICAgICAgIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3QpLFxuICAgICAgICAgIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSkpXG4gICAgICAgIDogKHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpLFxuICAgICAgICAgIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwKSxcbiAgICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwpKTtcbiAgICAgIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAwID09PSByZW1haW5pbmdMYW5lcyAmJiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsKTtcbiAgICAgIHRyYW5zaXRpb25zIHx8IGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290KTtcbiAgICAgIG9uQ29tbWl0Um9vdCQxKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgcm9vdC5tZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICBvbkNvbW1pdFJvb3QoKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgIGlmIChudWxsICE9PSByZWNvdmVyYWJsZUVycm9ycylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICByZW5kZXJQcmlvcml0eUxldmVsID0gcm9vdC5vblJlY292ZXJhYmxlRXJyb3IsIGZpbmlzaGVkV29yayA9IDA7XG4gICAgICAgICAgZmluaXNoZWRXb3JrIDwgcmVjb3ZlcmFibGVFcnJvcnMubGVuZ3RoO1xuICAgICAgICAgIGZpbmlzaGVkV29yaysrXG4gICAgICAgIClcbiAgICAgICAgICAocmVtYWluaW5nTGFuZXMgPSByZWNvdmVyYWJsZUVycm9yc1tmaW5pc2hlZFdvcmtdKSxcbiAgICAgICAgICAgICh0cmFuc2l0aW9ucyA9IG1ha2VFcnJvckluZm8ocmVtYWluaW5nTGFuZXMuc3RhY2spKSxcbiAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICByZW1haW5pbmdMYW5lcy5zb3VyY2UsXG4gICAgICAgICAgICAgIHJlbmRlclByaW9yaXR5TGV2ZWwsXG4gICAgICAgICAgICAgIHJlbWFpbmluZ0xhbmVzLnZhbHVlLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgIDAgIT09IChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyAmIDMpICYmIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAwICE9PSAoZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlICYgNDE5NDIxOCkgJiZcbiAgICAgIDAgIT09IChyZW1haW5pbmdMYW5lcyAmIDQyKVxuICAgICAgICA/ICgobmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gITApLFxuICAgICAgICAgIHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlc1xuICAgICAgICAgICAgPyBuZXN0ZWRVcGRhdGVDb3VudCsrXG4gICAgICAgICAgICA6ICgobmVzdGVkVXBkYXRlQ291bnQgPSAwKSwgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3QpKSlcbiAgICAgICAgOiAobmVzdGVkVXBkYXRlQ291bnQgPSAwKTtcbiAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKTtcbiAgICAgIG1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFrZUVycm9ySW5mbyhjb21wb25lbnRTdGFjaykge1xuICAgICAgY29tcG9uZW50U3RhY2sgPSB7IGNvbXBvbmVudFN0YWNrOiBjb21wb25lbnRTdGFjayB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbXBvbmVudFN0YWNrLCBcImRpZ2VzdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnWW91IGFyZSBhY2Nlc3NpbmcgXCJkaWdlc3RcIiBmcm9tIHRoZSBlcnJvckluZm8gb2JqZWN0IHBhc3NlZCB0byBvblJlY292ZXJhYmxlRXJyb3IuIFRoaXMgcHJvcGVydHkgaXMgbm8gbG9uZ2VyIHByb3ZpZGVkIGFzIHBhcnQgb2YgZXJyb3JJbmZvIGJ1dCBjYW4gYmUgYWNjZXNzZWQgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgRXJyb3IgaW5zdGFuY2UgaXRzZWxmLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wb25lbnRTdGFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByZW1haW5pbmdMYW5lcykge1xuICAgICAgMCA9PT0gKHJvb3QucG9vbGVkQ2FjaGVMYW5lcyAmPSByZW1haW5pbmdMYW5lcykgJiZcbiAgICAgICAgKChyZW1haW5pbmdMYW5lcyA9IHJvb3QucG9vbGVkQ2FjaGUpLFxuICAgICAgICBudWxsICE9IHJlbWFpbmluZ0xhbmVzICYmXG4gICAgICAgICAgKChyb290LnBvb2xlZENhY2hlID0gbnVsbCksIHJlbGVhc2VDYWNoZShyZW1haW5pbmdMYW5lcykpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgICAgIGlmIChudWxsICE9PSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzLFxuICAgICAgICAgIHJlbWFpbmluZ0xhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVtYWluaW5nTGFuZXM7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gMDtcbiAgICAgICAgdmFyIHJlbmRlclByaW9yaXR5ID0gbGFuZXNUb0V2ZW50UHJpb3JpdHkocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMpLFxuICAgICAgICAgIHByaW9yaXR5ID1cbiAgICAgICAgICAgIDAgPT09IERlZmF1bHRFdmVudFByaW9yaXR5IHx8IERlZmF1bHRFdmVudFByaW9yaXR5ID4gcmVuZGVyUHJpb3JpdHlcbiAgICAgICAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICAgICAgICA6IHJlbmRlclByaW9yaXR5O1xuICAgICAgICByZW5kZXJQcmlvcml0eSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJpb3JpdHk7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzKVxuICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJpb3JpdHkgPSBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zO1xuICAgICAgICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgICAgICB2YXIgcm9vdCRqc2NvbXAkMCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzLFxuICAgICAgICAgICAgICBsYW5lcyA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzO1xuICAgICAgICAgICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICAgICAgICAgICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSAwO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PVxuICAgICAgICAgICAgICBOb0NvbnRleHRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMDtcbiAgICAgICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMTtcbiAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKTtcbiAgICAgICAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIocm9vdCRqc2NvbXAkMC5jdXJyZW50KTtcbiAgICAgICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICAgICAgICAgIHJvb3QkanNjb21wJDAsXG4gICAgICAgICAgICAgIHJvb3QkanNjb21wJDAuY3VycmVudCxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIHByaW9yaXR5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCAmJlxuICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKTtcbiAgICAgICAgICAgIGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290JGpzY29tcCQwKTtcbiAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKTtcbiAgICAgICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHNcbiAgICAgICAgICAgICAgPyByb290JGpzY29tcCQwID09PSByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQrK1xuICAgICAgICAgICAgICAgIDogKChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwKSxcbiAgICAgICAgICAgICAgICAgIChyb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gcm9vdCRqc2NvbXAkMCkpXG4gICAgICAgICAgICAgIDogKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApO1xuICAgICAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9XG4gICAgICAgICAgICAgICExO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCRqc2NvbXAkMCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAgICAgICAoKGhhc0xvZ2dlZEVycm9yID0gITApLFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSByb290JGpzY29tcCQwLmN1cnJlbnQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcmVuZGVyUHJpb3JpdHkpLFxuICAgICAgICAgICAgcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgICAgIHNvdXJjZUZpYmVyID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHNvdXJjZUZpYmVyID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlci5zdGF0ZU5vZGUsIHNvdXJjZUZpYmVyLCAyKTtcbiAgICAgIHJvb3RGaWJlciA9IGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgMik7XG4gICAgICBudWxsICE9PSByb290RmliZXIgJiZcbiAgICAgICAgKG1hcmtSb290VXBkYXRlZCQxKHJvb3RGaWJlciwgMiksIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290RmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICBzb3VyY2VGaWJlcixcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBlcnJvclxuICAgICkge1xuICAgICAgaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITE7XG4gICAgICBpZiAoMyA9PT0gc291cmNlRmliZXIudGFnKVxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKDsgbnVsbCAhPT0gbmVhcmVzdE1vdW50ZWRBbmNlc3RvcjsgKSB7XG4gICAgICAgICAgaWYgKDMgPT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudGFnKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoMSA9PT0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci50YWcpIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3Iuc3RhdGVOb2RlO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgfHxcbiAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICAgICAgICAgKG51bGwgPT09IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIHx8XG4gICAgICAgICAgICAgICAgICAhbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoMik7XG4gICAgICAgICAgICAgIGluc3RhbmNlID0gZW5xdWV1ZVVwZGF0ZShuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvciwgMik7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFya1Jvb3RVcGRhdGVkJDEoaW5zdGFuY2UsIDIpLFxuICAgICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChpbnN0YW5jZSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEF0dGVtcHRlZCB0byBjYXB0dXJlIGEgY29tbWl0IHBoYXNlIGVycm9yIGluc2lkZSBhIGRldGFjaGVkIHRyZWUuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LiBQb3RlbnRpYWwgY2F1c2VzIGluY2x1ZGUgZGVsZXRpbmcgdGhlIHNhbWUgZmliZXIgbW9yZSB0aGFuIG9uY2UsIGNvbW1pdHRpbmcgYW4gYWxyZWFkeS1maW5pc2hlZCB0cmVlLCBvciBhbiBpbmNvbnNpc3RlbnQgcmV0dXJuIHBvaW50ZXIuXFxuXFxuRXJyb3IgbWVzc2FnZTpcXG5cXG4lc1wiLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgICAgIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgICAgIGlmIChudWxsID09PSBwaW5nQ2FjaGUpIHtcbiAgICAgICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gICAgICAgIHZhciB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpKSxcbiAgICAgICAgICB2b2lkIDAgPT09IHRocmVhZElEcyAmJlxuICAgICAgICAgICAgKCh0aHJlYWRJRHMgPSBuZXcgU2V0KCkpLCBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpKTtcbiAgICAgIHRocmVhZElEcy5oYXMobGFuZXMpIHx8XG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITApLFxuICAgICAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKSxcbiAgICAgICAgKHBpbmdDYWNoZSA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKSksXG4gICAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgbGFuZXMpLFxuICAgICAgICB3YWtlYWJsZS50aGVuKHBpbmdDYWNoZSwgcGluZ0NhY2hlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICAgICAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICAgICAgbnVsbCAhPT0gcGluZ0NhY2hlICYmIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICAgICAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG4gICAgICByb290Lndhcm1MYW5lcyAmPSB+cGluZ2VkTGFuZXM7XG4gICAgICBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpICYmXG4gICAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBIHN1c3BlbmRlZCByZXNvdXJjZSBmaW5pc2hlZCBsb2FkaW5nIGluc2lkZSBhIHRlc3QsIGJ1dCB0aGUgZXZlbnQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbldoZW4gdGVzdGluZywgY29kZSB0aGF0IHJlc29sdmVzIHN1c3BlbmRlZCBkYXRhIHNob3VsZCBiZSB3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuYWN0KCgpID0+IHtcXG4gIC8qIGZpbmlzaCBsb2FkaW5nIHN1c3BlbmRlZCBkYXRhICovXFxufSk7XFxuLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG5UaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIGluIHRoZSBicm93c2VyLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdFwiXG4gICAgICAgICk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgcGluZ2VkTGFuZXMpID09PSBwaW5nZWRMYW5lcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSB8fFxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDYyOTE0NTYwKSA9PT1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgbm93JDEoKSAtIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPCBGQUxMQkFDS19USFJPVFRMRV9NUylcbiAgICAgICAgICA/IChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCAmJlxuICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgMClcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyB8PSBwaW5nZWRMYW5lcyksXG4gICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID0gMCkpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gICAgICAwID09PSByZXRyeUxhbmUgJiYgKHJldHJ5TGFuZSA9IGNsYWltTmV4dFJldHJ5TGFuZSgpKTtcbiAgICAgIGJvdW5kYXJ5RmliZXIgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbiAgICAgIG51bGwgIT09IGJvdW5kYXJ5RmliZXIgJiZcbiAgICAgICAgKG1hcmtSb290VXBkYXRlZCQxKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSksXG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChib3VuZGFyeUZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBib3VuZGFyeUZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHJldHJ5TGFuZSA9IDA7XG4gICAgICBudWxsICE9PSBzdXNwZW5zZVN0YXRlICYmIChyZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSk7XG4gICAgICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgICAgIHZhciByZXRyeUxhbmUgPSAwO1xuICAgICAgc3dpdGNoIChib3VuZGFyeUZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHZhciByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBib3VuZGFyeUZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgbnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSAmJiAocmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlBpbmdlZCB1bmtub3duIHN1c3BlbnNlIGJvdW5kYXJ5IHR5cGUuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcmV0cnlDYWNoZSAmJiByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gICAgICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUFuZERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihcbiAgICAgIHJvb3QkanNjb21wJDAsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGlzSW5TdHJpY3RNb2RlXG4gICAgKSB7XG4gICAgICBpZiAoMCAhPT0gKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDMzNTYyNjI0KSlcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgICAgICAgdmFyIHJvb3QgPSByb290JGpzY29tcCQwLFxuICAgICAgICAgICAgZmliZXIgPSBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGlzU3RyaWN0TW9kZUZpYmVyID0gZmliZXIudHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbiAgICAgICAgICBpc1N0cmljdE1vZGVGaWJlciA9IGlzSW5TdHJpY3RNb2RlIHx8IGlzU3RyaWN0TW9kZUZpYmVyO1xuICAgICAgICAgIDIyICE9PSBmaWJlci50YWdcbiAgICAgICAgICAgID8gZmliZXIuZmxhZ3MgJiAzMzU1NDQzMlxuICAgICAgICAgICAgICA/IGlzU3RyaWN0TW9kZUZpYmVyICYmXG4gICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgIGRvdWJsZUludm9rZUVmZmVjdHNPbkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgKGZpYmVyLm1vZGUgJiBOb1N0cmljdFBhc3NpdmVFZmZlY3RzTW9kZSkgPT09IE5vTW9kZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWKFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwgPT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgKGlzU3RyaWN0TW9kZUZpYmVyICYmIGZpYmVyLmZsYWdzICYgODE5MlxuICAgICAgICAgICAgICAgID8gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBkb3VibGVJbnZva2VFZmZlY3RzT25GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmliZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGZpYmVyLnN1YnRyZWVGbGFncyAmIDMzNTU0NDMyICYmXG4gICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBbmREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVGaWJlclxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvdWJsZUludm9rZUVmZmVjdHNPbkZpYmVyKHJvb3QsIGZpYmVyKSB7XG4gICAgICB2YXIgc2hvdWxkRG91YmxlSW52b2tlUGFzc2l2ZUVmZmVjdHMgPVxuICAgICAgICAyIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6ICEwO1xuICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaWJlciksXG4gICAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlUGFzc2l2ZUVmZmVjdHMgJiYgZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QoZmliZXIpLFxuICAgICAgICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhyb290LCBmaWJlci5hbHRlcm5hdGUsIGZpYmVyLCAhMSksXG4gICAgICAgICAgc2hvdWxkRG91YmxlSW52b2tlUGFzc2l2ZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIHJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKHJvb3QsIGZpYmVyLCAwLCBudWxsLCAhMSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290KSB7XG4gICAgICB2YXIgZG91YmxlSW52b2tlRWZmZWN0cyA9ICEwO1xuICAgICAgcm9vdC5jdXJyZW50Lm1vZGUgJiAoU3RyaWN0TGVnYWN5TW9kZSB8IFN0cmljdEVmZmVjdHNNb2RlKSB8fFxuICAgICAgICAoZG91YmxlSW52b2tlRWZmZWN0cyA9ICExKTtcbiAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBbmREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJvb3QuY3VycmVudCxcbiAgICAgICAgZG91YmxlSW52b2tlRWZmZWN0c1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCkge1xuICAgICAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgMyA9PT0gdGFnIHx8XG4gICAgICAgICAgMSA9PT0gdGFnIHx8XG4gICAgICAgICAgMCA9PT0gdGFnIHx8XG4gICAgICAgICAgMTEgPT09IHRhZyB8fFxuICAgICAgICAgIDE0ID09PSB0YWcgfHxcbiAgICAgICAgICAxNSA9PT0gdGFnXG4gICAgICAgICkge1xuICAgICAgICAgIHRhZyA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiUmVhY3RDb21wb25lbnRcIjtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCkge1xuICAgICAgICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKHRhZykpIHJldHVybjtcbiAgICAgICAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuYWRkKHRhZyk7XG4gICAgICAgICAgfSBlbHNlIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFt0YWddKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBUaGlzIGluZGljYXRlcyB0aGF0IHlvdSBoYXZlIGEgc2lkZS1lZmZlY3QgaW4geW91ciByZW5kZXIgZnVuY3Rpb24gdGhhdCBhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gdXNlRWZmZWN0IGluc3RlYWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcykge1xuICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiZcbiAgICAgICAgcm9vdC5tZW1vaXplZFVwZGF0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxpbmdGaWJlcikge1xuICAgICAgICAgIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBzY2hlZHVsaW5nRmliZXIsIGxhbmVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2skMShwcmlvcml0eUxldmVsLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWU7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gYWN0UXVldWVcbiAgICAgICAgPyAoYWN0UXVldWUucHVzaChjYWxsYmFjayksIGZha2VBY3RDYWxsYmFja05vZGUkMSlcbiAgICAgICAgOiBzY2hlZHVsZUNhbGxiYWNrJDMocHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuSWZVcGRhdGVzTm90V3JhcHBlZFdpdGhBY3RERVYoZmliZXIpIHtcbiAgICAgIGlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkgJiZcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlIHdyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG5hY3QoKCkgPT4ge1xcbiAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG59KTtcXG4vKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcblRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgaW4gdGhlIGJyb3dzZXIuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0XCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCkge1xuICAgICAgcm9vdCAhPT0gbGFzdFNjaGVkdWxlZFJvb3QgJiZcbiAgICAgICAgbnVsbCA9PT0gcm9vdC5uZXh0ICYmXG4gICAgICAgIChudWxsID09PSBsYXN0U2NoZWR1bGVkUm9vdFxuICAgICAgICAgID8gKGZpcnN0U2NoZWR1bGVkUm9vdCA9IGxhc3RTY2hlZHVsZWRSb290ID0gcm9vdClcbiAgICAgICAgICA6IChsYXN0U2NoZWR1bGVkUm9vdCA9IGxhc3RTY2hlZHVsZWRSb290Lm5leHQgPSByb290KSk7XG4gICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMDtcbiAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlXG4gICAgICAgID8gZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0IHx8XG4gICAgICAgICAgKChkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgPSAhMCksXG4gICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaykpXG4gICAgICAgIDogZGlkU2NoZWR1bGVNaWNyb3Rhc2sgfHxcbiAgICAgICAgICAoKGRpZFNjaGVkdWxlTWljcm90YXNrID0gITApLFxuICAgICAgICAgIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2spKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoc3luY1RyYW5zaXRpb25MYW5lcywgb25seUxlZ2FjeSkge1xuICAgICAgaWYgKCFpc0ZsdXNoaW5nV29yayAmJiBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmspIHtcbiAgICAgICAgaXNGbHVzaGluZ1dvcmsgPSAhMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBkaWRQZXJmb3JtU29tZVdvcmsgPSAhMTtcbiAgICAgICAgICBmb3IgKHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290OyBudWxsICE9PSByb290OyApIHtcbiAgICAgICAgICAgIGlmICghb25seUxlZ2FjeSlcbiAgICAgICAgICAgICAgaWYgKDAgIT09IHN5bmNUcmFuc2l0aW9uTGFuZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IHBlbmRpbmdMYW5lcykgdmFyIG5leHRMYW5lcyA9IDA7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgICBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICAoMSA8PCAoMzEgLSBjbHozMig0MiB8IHN5bmNUcmFuc2l0aW9uTGFuZXMpICsgMSkpIC0gMTtcbiAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyAmPSBwZW5kaW5nTGFuZXMgJiB+KHN1c3BlbmRlZExhbmVzICYgfnBpbmdlZExhbmVzKTtcbiAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyAmIDIwMTMyNjY3N1xuICAgICAgICAgICAgICAgICAgICAgID8gKG5leHRMYW5lcyAmIDIwMTMyNjY3NykgfCAxXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXh0TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV4dExhbmVzIHwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAwICE9PSBuZXh0TGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICgoZGlkUGVyZm9ybVNvbWVXb3JrID0gITApLFxuICAgICAgICAgICAgICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIG5leHRMYW5lcykpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAobmV4dExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gbmV4dExhbmVzIDogMFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAwID09PSAobmV4dExhbmVzICYgMykgfHxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBuZXh0TGFuZXMpIHx8XG4gICAgICAgICAgICAgICAgICAgICgoZGlkUGVyZm9ybVNvbWVXb3JrID0gITApLFxuICAgICAgICAgICAgICAgICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCwgbmV4dExhbmVzKSk7XG4gICAgICAgICAgICByb290ID0gcm9vdC5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoZGlkUGVyZm9ybVNvbWVXb3JrKTtcbiAgICAgICAgaXNGbHVzaGluZ1dvcmsgPSAhMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCkge1xuICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID1cbiAgICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID1cbiAgICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPVxuICAgICAgICAgICExO1xuICAgICAgdmFyIHN5bmNUcmFuc2l0aW9uTGFuZXMgPSAwO1xuICAgICAgMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiZcbiAgICAgICAgKHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSAmJlxuICAgICAgICAgIChzeW5jVHJhbnNpdGlvbkxhbmVzID0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpLFxuICAgICAgICAoY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSAwKSk7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBub3ckMSgpLCBwcmV2ID0gbnVsbCwgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDtcbiAgICAgICAgbnVsbCAhPT0gcm9vdDtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBuZXh0ID0gcm9vdC5uZXh0LFxuICAgICAgICAgIG5leHRMYW5lcyA9IHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpO1xuICAgICAgICBpZiAoMCA9PT0gbmV4dExhbmVzKVxuICAgICAgICAgIChyb290Lm5leHQgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgPT09IHByZXYgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dCkgOiAocHJldi5uZXh0ID0gbmV4dCksXG4gICAgICAgICAgICBudWxsID09PSBuZXh0ICYmIChsYXN0U2NoZWR1bGVkUm9vdCA9IHByZXYpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKHByZXYgPSByb290KSwgMCAhPT0gc3luY1RyYW5zaXRpb25MYW5lcyB8fCAwICE9PSAobmV4dExhbmVzICYgMykpXG4gICAgICAgIClcbiAgICAgICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMDtcbiAgICAgICAgcm9vdCA9IG5leHQ7XG4gICAgICB9XG4gICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChzeW5jVHJhbnNpdGlvbkxhbmVzLCAhMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXMsXG4gICAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzLFxuICAgICAgICAgIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgICAgIGxhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiAtNjI5MTQ1NjE7XG4gICAgICAgIDAgPCBsYW5lcztcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4LFxuICAgICAgICAgIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcbiAgICAgICAgaWYgKC0xID09PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgIGlmICgwID09PSAobGFuZSAmIHN1c3BlbmRlZExhbmVzKSB8fCAwICE9PSAobGFuZSAmIHBpbmdlZExhbmVzKSlcbiAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgICB9IGVsc2UgZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUgJiYgKHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmUpO1xuICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRUaW1lID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgc3VzcGVuZGVkTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgICAgICByb290LFxuICAgICAgICByb290ID09PSBjdXJyZW50VGltZSA/IHN1c3BlbmRlZExhbmVzIDogMFxuICAgICAgKTtcbiAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5jYWxsYmFja05vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIDAgPT09IHN1c3BlbmRlZExhbmVzIHx8XG4gICAgICAgIChyb290ID09PSBjdXJyZW50VGltZSAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEpIHx8XG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdFxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmIGNhbmNlbENhbGxiYWNrKHBpbmdlZExhbmVzKSxcbiAgICAgICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gKHN1c3BlbmRlZExhbmVzICYgMykgfHxcbiAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBzdXNwZW5kZWRMYW5lcylcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50VGltZSA9IHN1c3BlbmRlZExhbmVzICYgLXN1c3BlbmRlZExhbmVzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudFRpbWUgIT09IHJvb3QuY2FsbGJhY2tQcmlvcml0eSB8fFxuICAgICAgICAgIChudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICAgICAgcGluZ2VkTGFuZXMgIT09IGZha2VBY3RDYWxsYmFja05vZGUpXG4gICAgICAgIClcbiAgICAgICAgICBjYW5jZWxDYWxsYmFjayhwaW5nZWRMYW5lcyk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICAgICAgICBzd2l0Y2ggKGxhbmVzVG9FdmVudFByaW9yaXR5KHN1c3BlbmRlZExhbmVzKSkge1xuICAgICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgIHN1c3BlbmRlZExhbmVzID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgIH1cbiAgICAgICAgcGluZ2VkTGFuZXMgPSBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KTtcbiAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgICA/IChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZS5wdXNoKHBpbmdlZExhbmVzKSxcbiAgICAgICAgICAgIChzdXNwZW5kZWRMYW5lcyA9IGZha2VBY3RDYWxsYmFja05vZGUpKVxuICAgICAgICAgIDogKHN1c3BlbmRlZExhbmVzID0gc2NoZWR1bGVDYWxsYmFjayQzKHN1c3BlbmRlZExhbmVzLCBwaW5nZWRMYW5lcykpO1xuICAgICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBjdXJyZW50VGltZTtcbiAgICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBzdXNwZW5kZWRMYW5lcztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiYgY2FuY2VsQ2FsbGJhY2socGluZ2VkTGFuZXMpO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMjtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2socm9vdCwgZGlkVGltZW91dCkge1xuICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gY3VycmVudFVwZGF0ZUlzTmVzdGVkID0gITE7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgICAgIGlmIChmbHVzaFBhc3NpdmVFZmZlY3RzKCkgJiYgcm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAgPSBnZXROZXh0TGFuZXMoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwIDogMFxuICAgICAgKTtcbiAgICAgIGlmICgwID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCkgcmV0dXJuIG51bGw7XG4gICAgICBwZXJmb3JtV29ya09uUm9vdChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAsXG4gICAgICAgIGRpZFRpbWVvdXRcbiAgICAgICk7XG4gICAgICBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIG5vdyQxKCkpO1xuICAgICAgcmV0dXJuIG51bGwgIT0gcm9vdC5jYWxsYmFja05vZGUgJiZcbiAgICAgICAgcm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlXG4gICAgICAgID8gcGVyZm9ybVdvcmtPblJvb3RWaWFTY2hlZHVsZXJUYXNrLmJpbmQobnVsbCwgcm9vdClcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCwgbGFuZXMpIHtcbiAgICAgIGlmIChmbHVzaFBhc3NpdmVFZmZlY3RzKCkpIHJldHVybiBudWxsO1xuICAgICAgY3VycmVudFVwZGF0ZUlzTmVzdGVkID0gbmVzdGVkVXBkYXRlU2NoZWR1bGVkO1xuICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gITE7XG4gICAgICBwZXJmb3JtV29ya09uUm9vdChyb290LCBsYW5lcywgITApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgICAgIGNhbGxiYWNrTm9kZSAhPT0gZmFrZUFjdENhbGxiYWNrTm9kZSAmJlxuICAgICAgICBudWxsICE9PSBjYWxsYmFja05vZGUgJiZcbiAgICAgICAgY2FuY2VsQ2FsbGJhY2skMShjYWxsYmFja05vZGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUltbWVkaWF0ZVRhc2soY2IpIHtcbiAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlICYmXG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHRcbiAgICAgICAgICA/IHNjaGVkdWxlQ2FsbGJhY2skMyhJbW1lZGlhdGVQcmlvcml0eSwgY2IpXG4gICAgICAgICAgOiBjYigpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpIHtcbiAgICAgIDAgPT09IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lICYmXG4gICAgICAgIChjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkpO1xuICAgICAgcmV0dXJuIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2VyY2VGb3JtQWN0aW9uUHJvcChhY3Rpb25Qcm9wKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT0gYWN0aW9uUHJvcCB8fFxuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgYWN0aW9uUHJvcCB8fFxuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGFjdGlvblByb3BcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uUHJvcCkgcmV0dXJuIGFjdGlvblByb3A7XG4gICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGFjdGlvblByb3AsIFwiYWN0aW9uXCIpO1xuICAgICAgcmV0dXJuIHNhbml0aXplVVJMKFwiXCIgKyBhY3Rpb25Qcm9wKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgdmFyIHRlbXAgPSBzdWJtaXR0ZXIub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICB0ZW1wLm5hbWUgPSBzdWJtaXR0ZXIubmFtZTtcbiAgICAgIHRlbXAudmFsdWUgPSBzdWJtaXR0ZXIudmFsdWU7XG4gICAgICBmb3JtLmlkICYmIHRlbXAuc2V0QXR0cmlidXRlKFwiZm9ybVwiLCBmb3JtLmlkKTtcbiAgICAgIHN1Ym1pdHRlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZW1wLCBzdWJtaXR0ZXIpO1xuICAgICAgZm9ybSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICAgIHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZW1wKTtcbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN1Ym1pdFwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgbWF5YmVUYXJnZXRJbnN0ICYmXG4gICAgICAgIG1heWJlVGFyZ2V0SW5zdC5zdGF0ZU5vZGUgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgdmFyIGFjdGlvbiA9IGNvZXJjZUZvcm1BY3Rpb25Qcm9wKFxuICAgICAgICAgICAgKG5hdGl2ZUV2ZW50VGFyZ2V0W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpLmFjdGlvblxuICAgICAgICAgICksXG4gICAgICAgICAgc3VibWl0dGVyID0gbmF0aXZlRXZlbnQuc3VibWl0dGVyO1xuICAgICAgICBzdWJtaXR0ZXIgJiZcbiAgICAgICAgICAoKGRvbUV2ZW50TmFtZSA9IChkb21FdmVudE5hbWUgPSBzdWJtaXR0ZXJbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbClcbiAgICAgICAgICAgID8gY29lcmNlRm9ybUFjdGlvblByb3AoZG9tRXZlbnROYW1lLmZvcm1BY3Rpb24pXG4gICAgICAgICAgICA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKSxcbiAgICAgICAgICBudWxsICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICgoYWN0aW9uID0gZG9tRXZlbnROYW1lKSwgKHN1Ym1pdHRlciA9IG51bGwpKSk7XG4gICAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgICAgICBcImFjdGlvblwiLFxuICAgICAgICAgIFwiYWN0aW9uXCIsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICApO1xuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICBsaXN0ZW5lcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgIGxpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgwICE9PSBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybURhdGEgPSBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBGb3JtRGF0YShuYXRpdmVFdmVudFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbmF0aXZlRXZlbnRUYXJnZXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKHBlbmRpbmdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SG9zdFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnByZXZlbnREZWZhdWx0KCksXG4gICAgICAgICAgICAgICAgICAgIChmb3JtRGF0YSA9IHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRm9ybURhdGEobmF0aXZlRXZlbnRUYXJnZXQpKSxcbiAgICAgICAgICAgICAgICAgICAgKHBlbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShwZW5kaW5nU3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgPSAwICE9PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXTtcbiAgICAgICAgYToge1xuICAgICAgICAgIHZhciBwcmV2aW91c0luc3RhbmNlID0gdm9pZCAwLFxuICAgICAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50O1xuICAgICAgICAgIF9kaXNwYXRjaFF1ZXVlJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICAgICAgICBpZiAoZXZlbnRTeXN0ZW1GbGFncylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHZhciBpJGpzY29tcCQwID0gX2Rpc3BhdGNoUXVldWUkaS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAwIDw9IGkkanNjb21wJDA7XG4gICAgICAgICAgICAgIGkkanNjb21wJDAtLVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IF9kaXNwYXRjaFF1ZXVlJGlbaSRqc2NvbXAkMF0sXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGV2ZW50O1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpKHByZXZpb3VzSW5zdGFuY2UpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaSRqc2NvbXAkMCA9IDA7XG4gICAgICAgICAgICAgIGkkanNjb21wJDAgPCBfZGlzcGF0Y2hRdWV1ZSRpLmxlbmd0aDtcbiAgICAgICAgICAgICAgaSRqc2NvbXAkMCsrXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpW2kkanNjb21wJDBdO1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlO1xuICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGV2ZW50O1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpKHByZXZpb3VzSW5zdGFuY2UpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsXG4gICAgICAgICAgZG9tRXZlbnROYW1lXG4gICAgICAgICk7XG4gICAgICB2YXIgbGlzdGVuZXJTZXQgPSB0YXJnZXRFbGVtZW50W2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG4gICAgICB2b2lkIDAgPT09IGxpc3RlbmVyU2V0ICYmXG4gICAgICAgIChsaXN0ZW5lclNldCA9IHRhcmdldEVsZW1lbnRbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKSk7XG4gICAgICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBkb21FdmVudE5hbWUgKyBcIl9fYnViYmxlXCI7XG4gICAgICBsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpIHx8XG4gICAgICAgIChhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIDIsICExKSxcbiAgICAgICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCB0YXJnZXQpIHtcbiAgICAgIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSAmJlxuICAgICAgICAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTmF0aXZlRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIgaW4gdGhlIGJ1YmJsZSBwaGFzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyxcbiAgICAgICAgICBkb21FdmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIHZhciBldmVudFN5c3RlbUZsYWdzID0gMDtcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgfD0gNCk7XG4gICAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICBpZiAoIXJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwO1xuICAgICAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgXCJzZWxlY3Rpb25jaGFuZ2VcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAobm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpIHx8XG4gICAgICAgICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCAhMSwgcm9vdENvbnRhaW5lckVsZW1lbnQpLFxuICAgICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsICEwLCByb290Q29udGFpbmVyRWxlbWVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPVxuICAgICAgICAgIDkgPT09IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICA/IHJvb3RDb250YWluZXJFbGVtZW50XG4gICAgICAgICAgICA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQgfHxcbiAgICAgICAgICBvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gfHxcbiAgICAgICAgICAoKG93bmVyRG9jdW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwKSxcbiAgICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KFwic2VsZWN0aW9uY2hhbmdlXCIsICExLCBvd25lckRvY3VtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoZ2V0RXZlbnRQcmlvcml0eShkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgIHZhciBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hDb250aW51b3VzRXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIH1cbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgPSBsaXN0ZW5lcldyYXBwZXIuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSB2b2lkIDA7XG4gICAgICAhcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgfHxcbiAgICAgICAgKFwidG91Y2hzdGFydFwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICBcInRvdWNobW92ZVwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICBcIndoZWVsXCIgIT09IGRvbUV2ZW50TmFtZSkgfHxcbiAgICAgICAgKGxpc3RlbmVyV3JhcHBlciA9ICEwKTtcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICAgICAgPyB2b2lkIDAgIT09IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgID8gdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB7XG4gICAgICAgICAgICAgIGNhcHR1cmU6ICEwLFxuICAgICAgICAgICAgICBwYXNzaXZlOiBsaXN0ZW5lcldyYXBwZXJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsICEwKVxuICAgICAgICA6IHZvaWQgMCAhPT0gbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgPyB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHtcbiAgICAgICAgICAgICAgcGFzc2l2ZTogbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIHRhcmdldEluc3QkanNjb21wJDAsXG4gICAgICB0YXJnZXRDb250YWluZXJcbiAgICApIHtcbiAgICAgIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0JGpzY29tcCQwO1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDEpICYmXG4gICAgICAgIDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgMikgJiZcbiAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdCRqc2NvbXAkMFxuICAgICAgKVxuICAgICAgICBhOiBmb3IgKDs7KSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHRhcmdldEluc3QkanNjb21wJDApIHJldHVybjtcbiAgICAgICAgICB2YXIgbm9kZVRhZyA9IHRhcmdldEluc3QkanNjb21wJDAudGFnO1xuICAgICAgICAgIGlmICgzID09PSBub2RlVGFnIHx8IDQgPT09IG5vZGVUYWcpIHtcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lciB8fFxuICAgICAgICAgICAgICAoOCA9PT0gY29udGFpbmVyLm5vZGVUeXBlICYmXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudE5vZGUgPT09IHRhcmdldENvbnRhaW5lcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoNCA9PT0gbm9kZVRhZylcbiAgICAgICAgICAgICAgZm9yIChub2RlVGFnID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5yZXR1cm47IG51bGwgIT09IG5vZGVUYWc7ICkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IG5vZGVUYWcudGFnO1xuICAgICAgICAgICAgICAgIGlmICgzID09PSBncmFuZFRhZyB8fCA0ID09PSBncmFuZFRhZylcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKChncmFuZFRhZyA9IG5vZGVUYWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICAgICAgICBncmFuZFRhZyA9PT0gdGFyZ2V0Q29udGFpbmVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKDggPT09IGdyYW5kVGFnLm5vZGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBncmFuZFRhZy5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXIpKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgbm9kZVRhZyA9IG5vZGVUYWcucmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKDsgbnVsbCAhPT0gY29udGFpbmVyOyApIHtcbiAgICAgICAgICAgICAgbm9kZVRhZyA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBub2RlVGFnKSByZXR1cm47XG4gICAgICAgICAgICAgIGdyYW5kVGFnID0gbm9kZVRhZy50YWc7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICA1ID09PSBncmFuZFRhZyB8fFxuICAgICAgICAgICAgICAgIDYgPT09IGdyYW5kVGFnIHx8XG4gICAgICAgICAgICAgICAgMjYgPT09IGdyYW5kVGFnIHx8XG4gICAgICAgICAgICAgICAgMjcgPT09IGdyYW5kVGFnXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRhcmdldEluc3QkanNjb21wJDAgPSBhbmNlc3Rvckluc3QgPSBub2RlVGFnO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhcmdldEluc3QkanNjb21wJDAgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgYmF0Y2hlZFVwZGF0ZXMkMShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0YXJnZXRJbnN0ID0gYW5jZXN0b3JJbnN0LFxuICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpLFxuICAgICAgICAgIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgICAgICAgYToge1xuICAgICAgICAgIHZhciByZWFjdE5hbWUgPSB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5nZXQoZG9tRXZlbnROYW1lKTtcbiAgICAgICAgICBpZiAodm9pZCAwICE9PSByZWFjdE5hbWUpIHtcbiAgICAgICAgICAgIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudCxcbiAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG4gICAgICAgICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJrZXl1cFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUgPSBcImZvY3VzXCI7XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUgPSBcImJsdXJcIjtcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiYmVmb3JlYmx1clwiOlxuICAgICAgICAgICAgICBjYXNlIFwiYWZ0ZXJibHVyXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImNsaWNrXCI6XG4gICAgICAgICAgICAgICAgaWYgKDIgPT09IG5hdGl2ZUV2ZW50LmJ1dHRvbikgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBcImF1eGNsaWNrXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkYmxjbGlja1wiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZW1vdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNldXBcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImNvbnRleHRtZW51XCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdlbmRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2V4aXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ292ZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdzdGFydFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJvcFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNoY2FuY2VsXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3VjaGVuZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwidG91Y2htb3ZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3VjaHN0YXJ0XCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBBTklNQVRJT05fRU5EOlxuICAgICAgICAgICAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgICAgICAgICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFRSQU5TSVRJT05fRU5EOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2Nyb2xsZW5kXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIndoZWVsXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImNvcHlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImN1dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicGFzdGVcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJjYW5jZWxcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJkb3duXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVybW92ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcm91dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcm92ZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJ1cFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInRvZ2dsZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiYmVmb3JldG9nZ2xlXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG9nZ2xlRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAwICE9PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDQpLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlVGFyZ2V0T25seSA9XG4gICAgICAgICAgICAgICAgIWluQ2FwdHVyZVBoYXNlICYmXG4gICAgICAgICAgICAgICAgKFwic2Nyb2xsXCIgPT09IGRvbUV2ZW50TmFtZSB8fCBcInNjcm9sbGVuZFwiID09PSBkb21FdmVudE5hbWUpLFxuICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlXG4gICAgICAgICAgICAgICAgPyBudWxsICE9PSByZWFjdE5hbWVcbiAgICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lICsgXCJDYXB0dXJlXCJcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIDogcmVhY3ROYW1lO1xuICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRhcmdldEluc3QsIGxhc3RIb3N0Q29tcG9uZW50O1xuICAgICAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBfaW5zdGFuY2UyID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gX2luc3RhbmNlMi5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBfaW5zdGFuY2UyLnRhZztcbiAgICAgICAgICAgICAgKDUgIT09IF9pbnN0YW5jZTIgJiYgMjYgIT09IF9pbnN0YW5jZTIgJiYgMjcgIT09IF9pbnN0YW5jZTIpIHx8XG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gbGFzdEhvc3RDb21wb25lbnQgfHxcbiAgICAgICAgICAgICAgICBudWxsID09PSByZWFjdEV2ZW50TmFtZSB8fFxuICAgICAgICAgICAgICAgICgoX2luc3RhbmNlMiA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT0gX2luc3RhbmNlMiAmJlxuICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UucHVzaChcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIGJyZWFrO1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDAgPCBpbkNhcHR1cmVQaGFzZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgKChyZWFjdE5hbWUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKFxuICAgICAgICAgICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGV2ZW50OiByZWFjdE5hbWUsXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzOiBpbkNhcHR1cmVQaGFzZVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDcpKSB7XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgcmVhY3ROYW1lID1cbiAgICAgICAgICAgICAgXCJtb3VzZW92ZXJcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwicG9pbnRlcm92ZXJcIiA9PT0gZG9tRXZlbnROYW1lO1xuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID1cbiAgICAgICAgICAgICAgXCJtb3VzZW91dFwiID09PSBkb21FdmVudE5hbWUgfHwgXCJwb2ludGVyb3V0XCIgPT09IGRvbUV2ZW50TmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcmVhY3ROYW1lICYmXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50ICE9PSBjdXJyZW50UmVwbGF5aW5nRXZlbnQgJiZcbiAgICAgICAgICAgICAgKHJlYWN0RXZlbnRUeXBlID1cbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50KSAmJlxuICAgICAgICAgICAgICAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVhY3RFdmVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yIHx8IHJlYWN0TmFtZSkge1xuICAgICAgICAgICAgICByZWFjdE5hbWUgPVxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgIDogKHJlYWN0TmFtZSA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQpXG4gICAgICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lLmRlZmF1bHRWaWV3IHx8IHJlYWN0TmFtZS5wYXJlbnRXaW5kb3dcbiAgICAgICAgICAgICAgICAgICAgOiB3aW5kb3c7XG4gICAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAoKHJlYWN0RXZlbnRUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgKFN5bnRoZXRpY0V2ZW50Q3RvciA9IHRhcmdldEluc3QpLFxuICAgICAgICAgICAgICAgICAgKHJlYWN0RXZlbnRUeXBlID0gcmVhY3RFdmVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWFjdEV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJlYWN0RXZlbnRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICgoYWNjdW11bGF0ZVRhcmdldE9ubHkgPVxuICAgICAgICAgICAgICAgICAgICAgIGdldE5lYXJlc3RNb3VudGVkRmliZXIocmVhY3RFdmVudFR5cGUpKSxcbiAgICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlID0gcmVhY3RFdmVudFR5cGUudGFnKSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUgIT09IGFjY3VtdWxhdGVUYXJnZXRPbmx5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgKDUgIT09IGluQ2FwdHVyZVBoYXNlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAyNyAhPT0gaW5DYXB0dXJlUGhhc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDYgIT09IGluQ2FwdHVyZVBoYXNlKSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2UgKFN5bnRoZXRpY0V2ZW50Q3RvciA9IG51bGwpLCAocmVhY3RFdmVudFR5cGUgPSB0YXJnZXRJbnN0KTtcbiAgICAgICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3RvciAhPT0gcmVhY3RFdmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IFwib25Nb3VzZUxlYXZlXCI7XG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSBcIm9uTW91c2VFbnRlclwiO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gXCJtb3VzZVwiO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIFwicG9pbnRlcm91dFwiID09PSBkb21FdmVudE5hbWUgfHxcbiAgICAgICAgICAgICAgICAgIFwicG9pbnRlcm92ZXJcIiA9PT0gZG9tRXZlbnROYW1lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlID0gU3ludGhldGljUG9pbnRlckV2ZW50KSxcbiAgICAgICAgICAgICAgICAgICAgKF9pbnN0YW5jZTIgPSBcIm9uUG9pbnRlckxlYXZlXCIpLFxuICAgICAgICAgICAgICAgICAgICAocmVhY3RFdmVudE5hbWUgPSBcIm9uUG9pbnRlckVudGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2UgPSBcInBvaW50ZXJcIik7XG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPVxuICAgICAgICAgICAgICAgICAgbnVsbCA9PSBTeW50aGV0aWNFdmVudEN0b3JcbiAgICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXROb2RlRnJvbUluc3RhbmNlKFN5bnRoZXRpY0V2ZW50Q3Rvcik7XG4gICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgICAgbnVsbCA9PSByZWFjdEV2ZW50VHlwZVxuICAgICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZVxuICAgICAgICAgICAgICAgICAgICA6IGdldE5vZGVGcm9tSW5zdGFuY2UocmVhY3RFdmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIHJlYWN0TmFtZSA9IG5ldyBpbkNhcHR1cmVQaGFzZShcbiAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIsXG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZSArIFwibGVhdmVcIixcbiAgICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvcixcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJlYWN0TmFtZS50YXJnZXQgPSBhY2N1bXVsYXRlVGFyZ2V0T25seTtcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUucmVsYXRlZFRhcmdldCA9IGxhc3RIb3N0Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBudWxsO1xuICAgICAgICAgICAgICAgIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KSA9PT0gdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgICAgICAgKChpbkNhcHR1cmVQaGFzZSA9IG5ldyBpbkNhcHR1cmVQaGFzZShcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlICsgXCJlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZS50YXJnZXQgPSBsYXN0SG9zdENvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UucmVsYXRlZFRhcmdldCA9IGFjY3VtdWxhdGVUYXJnZXRPbmx5KSxcbiAgICAgICAgICAgICAgICAgIChfaW5zdGFuY2UyID0gaW5DYXB0dXJlUGhhc2UpKTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlVGFyZ2V0T25seSA9IF9pbnN0YW5jZTI7XG4gICAgICAgICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3RvciAmJiByZWFjdEV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNFdmVudEN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gcmVhY3RFdmVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9IGluQ2FwdHVyZVBoYXNlO1xuICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gZ2V0UGFyZW50KGxhc3RIb3N0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UrKztcbiAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSByZWFjdEV2ZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyO1xuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBnZXRQYXJlbnQoX2luc3RhbmNlMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgaW5zdGFuY2UgLSBsYXN0SG9zdENvbXBvbmVudDsgKVxuICAgICAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZSA9IGdldFBhcmVudChpbkNhcHR1cmVQaGFzZSkpLCBpbnN0YW5jZS0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgMCA8IGxhc3RIb3N0Q29tcG9uZW50IC0gaW5zdGFuY2U7IClcbiAgICAgICAgICAgICAgICAgICAgICAocmVhY3RFdmVudE5hbWUgPSBnZXRQYXJlbnQocmVhY3RFdmVudE5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50LS07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBpbnN0YW5jZS0tOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9PT0gcmVhY3RFdmVudE5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChudWxsICE9PSByZWFjdEV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9PT0gcmVhY3RFdmVudE5hbWUuYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBnZXRQYXJlbnQoaW5DYXB0dXJlUGhhc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gZ2V0UGFyZW50KHJlYWN0RXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpbkNhcHR1cmVQaGFzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gU3ludGhldGljRXZlbnRDdG9yICYmXG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgICAgICByZWFjdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvcixcbiAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UsXG4gICAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG51bGwgIT09IHJlYWN0RXZlbnRUeXBlICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBhY2N1bXVsYXRlVGFyZ2V0T25seSAmJlxuICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHksXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSxcbiAgICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgcmVhY3ROYW1lID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPVxuICAgICAgICAgICAgICByZWFjdE5hbWUubm9kZU5hbWUgJiYgcmVhY3ROYW1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIgPT09IFN5bnRoZXRpY0V2ZW50Q3RvciB8fFxuICAgICAgICAgICAgICAoXCJpbnB1dFwiID09PSBTeW50aGV0aWNFdmVudEN0b3IgJiYgXCJmaWxlXCIgPT09IHJlYWN0TmFtZS50eXBlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gICAgICAgICAgICBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQocmVhY3ROYW1lKSlcbiAgICAgICAgICAgICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZClcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIChTeW50aGV0aWNFdmVudEN0b3IgPSByZWFjdE5hbWUubm9kZU5hbWUpLFxuICAgICAgICAgICAgICAgICFTeW50aGV0aWNFdmVudEN0b3IgfHxcbiAgICAgICAgICAgICAgICBcImlucHV0XCIgIT09IFN5bnRoZXRpY0V2ZW50Q3Rvci50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICAgICAgKFwiY2hlY2tib3hcIiAhPT0gcmVhY3ROYW1lLnR5cGUgJiYgXCJyYWRpb1wiICE9PSByZWFjdE5hbWUudHlwZSlcbiAgICAgICAgICAgICAgICAgID8gdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbUVsZW1lbnQodGFyZ2V0SW5zdC5lbGVtZW50VHlwZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgICAgICAgOiAoZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jICYmXG4gICAgICAgICAgICAgIChnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyAmJlxuICAgICAgICAgICAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUsIHRhcmdldEluc3QpO1xuICAgICAgICAgICAgXCJmb2N1c291dFwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgICBcIm51bWJlclwiID09PSByZWFjdE5hbWUudHlwZSAmJlxuICAgICAgICAgICAgICBudWxsICE9IHRhcmdldEluc3QubWVtb2l6ZWRQcm9wcy52YWx1ZSAmJlxuICAgICAgICAgICAgICBzZXREZWZhdWx0VmFsdWUocmVhY3ROYW1lLCBcIm51bWJlclwiLCByZWFjdE5hbWUudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSB0YXJnZXRJbnN0XG4gICAgICAgICAgICA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdClcbiAgICAgICAgICAgIDogd2luZG93O1xuICAgICAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXNUZXh0SW5wdXRFbGVtZW50KGhhbmRsZUV2ZW50RnVuYykgfHxcbiAgICAgICAgICAgICAgICBcInRydWVcIiA9PT0gaGFuZGxlRXZlbnRGdW5jLmNvbnRlbnRFZGl0YWJsZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKGFjdGl2ZUVsZW1lbnQgPSBoYW5kbGVFdmVudEZ1bmMpLFxuICAgICAgICAgICAgICAgICAgKGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdCksXG4gICAgICAgICAgICAgICAgICAobGFzdFNlbGVjdGlvbiA9IG51bGwpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgICAgICBsYXN0U2VsZWN0aW9uID0gYWN0aXZlRWxlbWVudEluc3QgPSBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XG4gICAgICAgICAgICAgIG1vdXNlRG93biA9ICEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vdXNldXBcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgICAgICAgIG1vdXNlRG93biA9ICExO1xuICAgICAgICAgICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOlxuICAgICAgICAgICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZmFsbGJhY2tEYXRhO1xuICAgICAgICAgIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KVxuICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6XG4gICAgICAgICAgICAgICAgICB2YXIgZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uU3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25FbmRcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25VcGRhdGVcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZXZlbnRUeXBlID0gdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlzQ29tcG9zaW5nXG4gICAgICAgICAgICAgID8gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvbkVuZFwiKVxuICAgICAgICAgICAgICA6IFwia2V5ZG93blwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvblN0YXJ0XCIpO1xuICAgICAgICAgIGV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmXG4gICAgICAgICAgICAgIFwia29cIiAhPT0gbmF0aXZlRXZlbnQubG9jYWxlICYmXG4gICAgICAgICAgICAgIChpc0NvbXBvc2luZyB8fCBcIm9uQ29tcG9zaXRpb25TdGFydFwiICE9PSBldmVudFR5cGVcbiAgICAgICAgICAgICAgICA/IFwib25Db21wb3NpdGlvbkVuZFwiID09PSBldmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIGlzQ29tcG9zaW5nICYmXG4gICAgICAgICAgICAgICAgICAoZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpKVxuICAgICAgICAgICAgICAgIDogKChyb290ID0gbmF0aXZlRXZlbnRUYXJnZXQpLFxuICAgICAgICAgICAgICAgICAgKHN0YXJ0VGV4dCA9IFwidmFsdWVcIiBpbiByb290ID8gcm9vdC52YWx1ZSA6IHJvb3QudGV4dENvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgKGlzQ29tcG9zaW5nID0gITApKSksXG4gICAgICAgICAgICAoaGFuZGxlRXZlbnRGdW5jID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKFxuICAgICAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgMCA8IGhhbmRsZUV2ZW50RnVuYy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgKChldmVudFR5cGUgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChcbiAgICAgICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGhhbmRsZUV2ZW50RnVuY1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZmFsbGJhY2tEYXRhXG4gICAgICAgICAgICAgICAgPyAoZXZlbnRUeXBlLmRhdGEgPSBmYWxsYmFja0RhdGEpXG4gICAgICAgICAgICAgICAgOiAoKGZhbGxiYWNrRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGZhbGxiYWNrRGF0YSAmJiAoZXZlbnRUeXBlLmRhdGEgPSBmYWxsYmFja0RhdGEpKSkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChmYWxsYmFja0RhdGEgPSBjYW5Vc2VUZXh0SW5wdXRFdmVudFxuICAgICAgICAgICAgICA/IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudClcbiAgICAgICAgICAgICAgOiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKGV2ZW50VHlwZSA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgXCJvbkJlZm9yZUlucHV0XCJcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAwIDwgZXZlbnRUeXBlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICgoaGFuZGxlRXZlbnRGdW5jID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoXG4gICAgICAgICAgICAgICAgICBcIm9uQmVmb3JlSW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIFwiYmVmb3JlaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiBoYW5kbGVFdmVudEZ1bmMsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGV2ZW50VHlwZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIChoYW5kbGVFdmVudEZ1bmMuZGF0YSA9IGZhbGxiYWNrRGF0YSkpO1xuICAgICAgICAgIGV4dHJhY3RFdmVudHMkMShcbiAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgXCJDYXB0dXJlXCIsIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBudWxsICE9PSB0YXJnZXRGaWJlcjtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UzID0gdGFyZ2V0RmliZXIsXG4gICAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGU7XG4gICAgICAgIF9pbnN0YW5jZTMgPSBfaW5zdGFuY2UzLnRhZztcbiAgICAgICAgKDUgIT09IF9pbnN0YW5jZTMgJiYgMjYgIT09IF9pbnN0YW5jZTMgJiYgMjcgIT09IF9pbnN0YW5jZTMpIHx8XG4gICAgICAgICAgbnVsbCA9PT0gc3RhdGVOb2RlIHx8XG4gICAgICAgICAgKChfaW5zdGFuY2UzID0gZ2V0TGlzdGVuZXIodGFyZ2V0RmliZXIsIGNhcHR1cmVOYW1lKSksXG4gICAgICAgICAgbnVsbCAhPSBfaW5zdGFuY2UzICYmXG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChcbiAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXRGaWJlciwgX2luc3RhbmNlMywgc3RhdGVOb2RlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAoX2luc3RhbmNlMyA9IGdldExpc3RlbmVyKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpKSxcbiAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZTMgJiZcbiAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldEZpYmVyLCBfaW5zdGFuY2UzLCBzdGF0ZU5vZGUpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgdGFyZ2V0RmliZXIgPSB0YXJnZXRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICAgICAgaWYgKG51bGwgPT09IGluc3QpIHJldHVybiBudWxsO1xuICAgICAgZG8gaW5zdCA9IGluc3QucmV0dXJuO1xuICAgICAgd2hpbGUgKGluc3QgJiYgNSAhPT0gaW5zdC50YWcgJiYgMjcgIT09IGluc3QudGFnKTtcbiAgICAgIHJldHVybiBpbnN0ID8gaW5zdCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgZXZlbnQsXG4gICAgICB0YXJnZXQsXG4gICAgICBjb21tb24sXG4gICAgICBpbkNhcHR1cmVQaGFzZVxuICAgICkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lLCBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgbnVsbCAhPT0gdGFyZ2V0ICYmIHRhcmdldCAhPT0gY29tbW9uO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTQgPSB0YXJnZXQsXG4gICAgICAgICAgYWx0ZXJuYXRlID0gX2luc3RhbmNlNC5hbHRlcm5hdGUsXG4gICAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGU7XG4gICAgICAgIF9pbnN0YW5jZTQgPSBfaW5zdGFuY2U0LnRhZztcbiAgICAgICAgaWYgKG51bGwgIT09IGFsdGVybmF0ZSAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikgYnJlYWs7XG4gICAgICAgICg1ICE9PSBfaW5zdGFuY2U0ICYmIDI2ICE9PSBfaW5zdGFuY2U0ICYmIDI3ICE9PSBfaW5zdGFuY2U0KSB8fFxuICAgICAgICAgIG51bGwgPT09IHN0YXRlTm9kZSB8fFxuICAgICAgICAgICgoYWx0ZXJuYXRlID0gc3RhdGVOb2RlKSxcbiAgICAgICAgICBpbkNhcHR1cmVQaGFzZVxuICAgICAgICAgICAgPyAoKHN0YXRlTm9kZSA9IGdldExpc3RlbmVyKHRhcmdldCwgcmVnaXN0cmF0aW9uTmFtZSkpLFxuICAgICAgICAgICAgICBudWxsICE9IHN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KFxuICAgICAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXQsIHN0YXRlTm9kZSwgYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6IGluQ2FwdHVyZVBoYXNlIHx8XG4gICAgICAgICAgICAgICgoc3RhdGVOb2RlID0gZ2V0TGlzdGVuZXIodGFyZ2V0LCByZWdpc3RyYXRpb25OYW1lKSksXG4gICAgICAgICAgICAgIG51bGwgIT0gc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldCwgc3RhdGVOb2RlLCBhbHRlcm5hdGUpXG4gICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucmV0dXJuO1xuICAgICAgfVxuICAgICAgMCAhPT0gbGlzdGVuZXJzLmxlbmd0aCAmJlxuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogZXZlbnQsIGxpc3RlbmVyczogbGlzdGVuZXJzIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHR5cGUsIHByb3BzKSB7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcyk7XG4gICAgICAoXCJpbnB1dFwiICE9PSB0eXBlICYmIFwidGV4dGFyZWFcIiAhPT0gdHlwZSAmJiBcInNlbGVjdFwiICE9PSB0eXBlKSB8fFxuICAgICAgICBudWxsID09IHByb3BzIHx8XG4gICAgICAgIG51bGwgIT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWx1ZU51bGwgfHxcbiAgICAgICAgKChkaWRXYXJuVmFsdWVOdWxsID0gITApLFxuICAgICAgICBcInNlbGVjdFwiID09PSB0eXBlICYmIHByb3BzLm11bHRpcGxlXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImB2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiBDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICkpO1xuICAgICAgdmFyIGV2ZW50UmVnaXN0cnkgPSB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICAgIH07XG4gICAgICBpc0N1c3RvbUVsZW1lbnQodHlwZSkgfHxcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLmlzIHx8XG4gICAgICAgIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG4gICAgICBwcm9wcy5jb250ZW50RWRpdGFibGUgJiZcbiAgICAgICAgIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJlxuICAgICAgICBudWxsICE9IHByb3BzLmNoaWxkcmVuICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5IFJlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mIHRob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyBwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgcHJvcE5hbWUsXG4gICAgICBzZXJ2ZXJWYWx1ZSxcbiAgICAgIGNsaWVudFZhbHVlLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIHNlcnZlclZhbHVlICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAoKGNsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKSksXG4gICAgICAgIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSkgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzW3Byb3BOYW1lXSA9IHNlcnZlclZhbHVlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgYXR0cmlidXRlTmFtZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1tnZXRQcm9wTmFtZUZyb21BdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpXSA9XG4gICAgICAgICAgXCJzdHlsZVwiID09PSBhdHRyaWJ1dGVOYW1lXG4gICAgICAgICAgICA/IGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGRvbUVsZW1lbnQpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgICAgITEgPT09IGxpc3RlbmVyXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbklmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCBwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICAgIHR5cGVvZiBsaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUhUTUwocGFyZW50LCBodG1sKSB7XG4gICAgICBwYXJlbnQgPVxuICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRIX05BTUVTUEFDRSB8fFxuICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFXG4gICAgICAgICAgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgIHBhcmVudC5uYW1lc3BhY2VVUkksXG4gICAgICAgICAgICAgIHBhcmVudC50YWdOYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKTtcbiAgICAgIHBhcmVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgcmV0dXJuIHBhcmVudC5pbm5lckhUTUw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShtYXJrdXApIHtcbiAgICAgIHdpbGxDb2VyY2lvblRocm93KG1hcmt1cCkgJiZcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQgSFRNTCBtYXJrdXAgdXNlcyBhIHZhbHVlIG9mIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIHR5cGVOYW1lKG1hcmt1cClcbiAgICAgICAgKSxcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKG1hcmt1cCkpO1xuICAgICAgcmV0dXJuIChcInN0cmluZ1wiID09PSB0eXBlb2YgbWFya3VwID8gbWFya3VwIDogXCJcIiArIG1hcmt1cClcbiAgICAgICAgLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCBcIlxcblwiKVxuICAgICAgICAucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsIFwiXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0ZvclVubWF0Y2hlZFRleHQoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICAgICAgY2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICAgIHJldHVybiBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCkgPT09IGNsaWVudFRleHRcbiAgICAgICAgPyAhMFxuICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wJDEoKSB7fVxuICAgIGZ1bmN0aW9uIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBrZXksIHZhbHVlLCBwcm9wcywgcHJldlZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgICAgdmFsaWRhdGVUZXh0TmVzdGluZyh2YWx1ZSwgdGFnKSxcbiAgICAgICAgICAgICAgXCJib2R5XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgICAgIChcInRleHRhcmVhXCIgPT09IHRhZyAmJiBcIlwiID09PSB2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgICAgZWxzZSBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgIHZhbGlkYXRlVGV4dE5lc3RpbmcoXCJcIiArIHZhbHVlLCB0YWcpLFxuICAgICAgICAgICAgICBcImJvZHlcIiAhPT0gdGFnICYmIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwiY2xhc3NcIiwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidGFiSW5kZXhcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwidGFiaW5kZXhcIiwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgIGNhc2UgXCJyb2xlXCI6XG4gICAgICAgIGNhc2UgXCJ2aWV3Qm94XCI6XG4gICAgICAgIGNhc2UgXCJ3aWR0aFwiOlxuICAgICAgICBjYXNlIFwiaGVpZ2h0XCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUsIHByZXZWYWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYXRhXCI6XG4gICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHRhZykge1xuICAgICAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBcImRhdGFcIiwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3JjXCI6XG4gICAgICAgIGNhc2UgXCJocmVmXCI6XG4gICAgICAgICAgaWYgKFwiXCIgPT09IHZhbHVlICYmIChcImFcIiAhPT0gdGFnIHx8IFwiaHJlZlwiICE9PSBrZXkpKSB7XG4gICAgICAgICAgICBcInNyY1wiID09PSBrZXlcbiAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0FuIGVtcHR5IHN0cmluZyAoXCJcIikgd2FzIHBhc3NlZCB0byB0aGUgJXMgYXR0cmlidXRlLiBUaGlzIG1heSBjYXVzZSB0aGUgYnJvd3NlciB0byBkb3dubG9hZCB0aGUgd2hvbGUgcGFnZSBhZ2FpbiBvdmVyIHRoZSBuZXR3b3JrLiBUbyBmaXggdGhpcywgZWl0aGVyIGRvIG5vdCByZW5kZXIgdGhlIGVsZW1lbnQgYXQgYWxsIG9yIHBhc3MgbnVsbCB0byAlcyBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4nLFxuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYWN0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJmb3JtQWN0aW9uXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZm9ybVwiID09PSB0YWdcbiAgICAgICAgICAgICAgPyBcImZvcm1BY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIllvdSBjYW4gb25seSBwYXNzIHRoZSBmb3JtQWN0aW9uIHByb3AgdG8gPGlucHV0PiBvciA8YnV0dG9uPi4gVXNlIHRoZSBhY3Rpb24gcHJvcCBvbiA8Zm9ybT4uXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAoKG51bGwgPT0gcHJvcHMuZW5jVHlwZSAmJiBudWxsID09IHByb3BzLm1ldGhvZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgZW5jVHlwZSBvciBtZXRob2QgZm9yIGEgZm9ybSB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIHRoZSBhY3Rpb24uIFJlYWN0IHByb3ZpZGVzIHRob3NlIGF1dG9tYXRpY2FsbHkuIFRoZXkgd2lsbCBnZXQgb3ZlcnJpZGRlbi5cIlxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT0gcHJvcHMudGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIHRhcmdldCBmb3IgYSBmb3JtIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgdGhlIGFjdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHdpbmRvdy5cIlxuICAgICAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgOiBcImlucHV0XCIgPT09IHRhZyB8fCBcImJ1dHRvblwiID09PSB0YWdcbiAgICAgICAgICAgICAgICA/IFwiYWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGFjdGlvbiBwcm9wIHRvIDxmb3JtPi4gVXNlIHRoZSBmb3JtQWN0aW9uIHByb3Agb24gPGlucHV0PiBvciA8YnV0dG9uPi5cIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IFwiaW5wdXRcIiAhPT0gdGFnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJzdWJtaXRcIiA9PT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZVxuICAgICAgICAgICAgICAgICAgICA/IFwiYnV0dG9uXCIgIT09IHRhZyB8fFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIFwic3VibWl0XCIgPT09IHByb3BzLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblR5cGVcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBwcm9wcy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uTmFtZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IHNwZWNpZnkgYSBcIm5hbWVcIiBwcm9wIGZvciBhIGJ1dHRvbiB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIGEgZm9ybUFjdGlvbi4gUmVhY3QgbmVlZHMgaXQgdG8gZW5jb2RlIHdoaWNoIGFjdGlvbiBzaG91bGQgYmUgaW52b2tlZC4gSXQgd2lsbCBnZXQgb3ZlcnJpZGRlbi4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gcHJvcHMuZm9ybUVuY1R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy5mb3JtTWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYSBmb3JtRW5jVHlwZSBvciBmb3JtTWV0aG9kIGZvciBhIGJ1dHRvbiB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIGEgZm9ybUFjdGlvbi4gUmVhY3QgcHJvdmlkZXMgdGhvc2UgYXV0b21hdGljYWxseS4gVGhleSB3aWxsIGdldCBvdmVycmlkZGVuLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy5mb3JtVGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIGZvcm1UYXJnZXQgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgd2luZG93LlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKChkaWRXYXJuRm9ybUFjdGlvblR5cGUgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnQSBidXR0b24gY2FuIG9ubHkgc3BlY2lmeSBhIGZvcm1BY3Rpb24gYWxvbmcgd2l0aCB0eXBlPVwic3VibWl0XCIgb3Igbm8gdHlwZS4nXG4gICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICA6ICgoZGlkV2FybkZvcm1BY3Rpb25UeXBlID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnQW4gaW5wdXQgY2FuIG9ubHkgc3BlY2lmeSBhIGZvcm1BY3Rpb24gYWxvbmcgd2l0aCB0eXBlPVwic3VibWl0XCIgb3IgdHlwZT1cImltYWdlXCIuJ1xuICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiBcImFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIllvdSBjYW4gb25seSBwYXNzIHRoZSBhY3Rpb24gcHJvcCB0byA8Zm9ybT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGZvcm1BY3Rpb24gcHJvcCB0byA8aW5wdXQ+IG9yIDxidXR0b24+LlwiXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcXFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgKFwiZm9ybUFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICA/IChcImlucHV0XCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJuYW1lXCIsIHByb3BzLm5hbWUsIHByb3BzLCBudWxsKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtRW5jVHlwZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtRW5jVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybU1ldGhvZFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtTWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtVGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvcm1UYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogKHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJlbmNUeXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmVuY1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwibWV0aG9kXCIsIHByb3BzLm1ldGhvZCwgcHJvcHMsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApKSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAgdmFsdWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICAoZG9tRWxlbWVudC5vbmNsaWNrID0gbm9vcCQxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvblNjcm9sbFwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRvbUVsZW1lbnQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsRW5kXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICBpZiAobnVsbCAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSB8fCAhKFwiX19odG1sXCIgaW4gdmFsdWUpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0LmRldi9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXkgPSB2YWx1ZS5fX2h0bWw7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcHMuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5pbm5lckhUTUwgPSBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICBkb21FbGVtZW50Lm11bHRpcGxlID1cbiAgICAgICAgICAgIHZhbHVlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgZG9tRWxlbWVudC5tdXRlZCA9XG4gICAgICAgICAgICB2YWx1ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtIcmVmXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAga2V5ID0gc2FuaXRpemVVUkwoXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZU5TKHhsaW5rTmFtZXNwYWNlLCBcInhsaW5rOmhyZWZcIiwga2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICBjYXNlIFwic3BlbGxDaGVja1wiOlxuICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICBjYXNlIFwiYXV0b1JldmVyc2VcIjpcbiAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgY2FzZSBcImZvY3VzYWJsZVwiOlxuICAgICAgICBjYXNlIFwicHJlc2VydmVBbHBoYVwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiICsgdmFsdWUpKVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICBcIlwiICE9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW2tleV0gfHxcbiAgICAgICAgICAgICgoZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW2tleV0gPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIGVtcHR5IHN0cmluZyBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiBUaGlzIHdpbGwgdHJlYXQgdGhlIGF0dHJpYnV0ZSBhcyBpZiBpdCB3ZXJlIGZhbHNlLiBFaXRoZXIgcGFzcyBgZmFsc2VgIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLCBvciBwYXNzIGB0cnVlYCBpZiB5b3UgdXNlZCBhbiBlbXB0eSBzdHJpbmcgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBSZWFjdCB0byBpbmRpY2F0ZSB0aGlzIGF0dHJpYnV0ZSBpcyB0cnVlLlwiLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICkpO1xuICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgIGNhc2UgXCJhc3luY1wiOlxuICAgICAgICBjYXNlIFwiYXV0b1BsYXlcIjpcbiAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgIGNhc2UgXCJkZWZlclwiOlxuICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgY2FzZSBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpcbiAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgY2FzZSBcImxvb3BcIjpcbiAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgIGNhc2UgXCJub1ZhbGlkYXRlXCI6XG4gICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICBjYXNlIFwicmVhZE9ubHlcIjpcbiAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICBjYXNlIFwic2NvcGVkXCI6XG4gICAgICAgIGNhc2UgXCJzZWFtbGVzc1wiOlxuICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNhcHR1cmVcIjpcbiAgICAgICAgY2FzZSBcImRvd25sb2FkXCI6XG4gICAgICAgICAgITAgPT09IHZhbHVlXG4gICAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgICAgIDogITEgIT09IHZhbHVlICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICAgID8gKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSksXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNvbHNcIjpcbiAgICAgICAgY2FzZSBcInJvd3NcIjpcbiAgICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgY2FzZSBcInNwYW5cIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAhaXNOYU4odmFsdWUpICYmXG4gICAgICAgICAgMSA8PSB2YWx1ZVxuICAgICAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyb3dTcGFuXCI6XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgIGlzTmFOKHZhbHVlKVxuICAgICAgICAgICAgPyBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpXG4gICAgICAgICAgICA6IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwb3BvdmVyXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImJlZm9yZXRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwicG9wb3ZlclwiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOmFjdHVhdGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rQXJjcm9sZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6YXJjcm9sZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtSb2xlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazpyb2xlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnNob3dcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rVGl0bGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnRpdGxlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1R5cGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeG1sTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bWw6YmFzZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieG1sTGFuZ1wiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhtbDpsYW5nXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bWxTcGFjZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhtbDpzcGFjZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaXNcIjpcbiAgICAgICAgICBudWxsICE9IHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ0Nhbm5vdCB1cGRhdGUgdGhlIFwiaXNcIiBwcm9wIGFmdGVyIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJpc1wiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICAgICAgY2FzZSBcInRleHRDb250ZW50XCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwb3BvdmVyVGFyZ2V0XCI6XG4gICAgICAgICAgZGlkV2FyblBvcG92ZXJUYXJnZXRPYmplY3QgfHxcbiAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgKChkaWRXYXJuUG9wb3ZlclRhcmdldE9iamVjdCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIGBwb3BvdmVyVGFyZ2V0YCBwcm9wIGV4cGVjdHMgdGhlIElEIG9mIGFuIEVsZW1lbnQgYXMgYSBzdHJpbmcuIFJlY2VpdmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAhKDIgPCBrZXkubGVuZ3RoKSB8fFxuICAgICAgICAgIChcIm9cIiAhPT0ga2V5WzBdICYmIFwiT1wiICE9PSBrZXlbMF0pIHx8XG4gICAgICAgICAgKFwiblwiICE9PSBrZXlbMV0gJiYgXCJOXCIgIT09IGtleVsxXSlcbiAgICAgICAgICAgID8gKChrZXkgPSBnZXRBdHRyaWJ1dGVBbGlhcyhrZXkpKSxcbiAgICAgICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwga2V5LCB2YWx1ZSkpXG4gICAgICAgICAgICA6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICB0YWcsXG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByb3BzLFxuICAgICAgcHJldlZhbHVlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgcHJldlZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgaWYgKG51bGwgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUgfHwgIShcIl9faHRtbFwiIGluIHZhbHVlKSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAga2V5ID0gdmFsdWUuX19odG1sO1xuICAgICAgICAgICAgaWYgKG51bGwgIT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IHByb3BzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuaW5uZXJIVE1MID0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHZhbHVlKVxuICAgICAgICAgICAgOiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxFbmRcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbGVuZFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvbkNsaWNrXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIChkb21FbGVtZW50Lm9uY2xpY2sgPSBub29wJDEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5uZXJUZXh0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9cIiA9PT0ga2V5WzBdICYmXG4gICAgICAgICAgICAgICAgXCJuXCIgPT09IGtleVsxXSAmJlxuICAgICAgICAgICAgICAgICgocHJvcHMgPSBrZXkuZW5kc1dpdGgoXCJDYXB0dXJlXCIpKSxcbiAgICAgICAgICAgICAgICAodGFnID0ga2V5LnNsaWNlKDIsIHByb3BzID8ga2V5Lmxlbmd0aCAtIDcgOiB2b2lkIDApKSxcbiAgICAgICAgICAgICAgICAocHJldlZhbHVlID0gZG9tRWxlbWVudFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgICAocHJldlZhbHVlID0gbnVsbCAhPSBwcmV2VmFsdWUgPyBwcmV2VmFsdWVba2V5XSA6IG51bGwpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRhZywgcHJldlZhbHVlLCBwcm9wcyksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAoa2V5IGluIGRvbUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgPyAoZG9tRWxlbWVudFtrZXldID0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgOiBkb21FbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KSk7XG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRhZywgdmFsdWUsIHByb3BzKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGtleSBpbiBkb21FbGVtZW50XG4gICAgICAgICAgICAgICAgPyAoZG9tRWxlbWVudFtrZXldID0gdmFsdWUpXG4gICAgICAgICAgICAgICAgOiAhMCA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKVxuICAgICAgICAgICAgICAgICAgOiBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHByb3BzKTtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgXCJkaXZcIjpcbiAgICAgICAgY2FzZSBcInNwYW5cIjpcbiAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICBjYXNlIFwiZ1wiOlxuICAgICAgICBjYXNlIFwicFwiOlxuICAgICAgICBjYXNlIFwibGlcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICB2YXIgaGFzU3JjID0gITEsXG4gICAgICAgICAgICBoYXNTcmNTZXQgPSAhMSxcbiAgICAgICAgICAgIHByb3BLZXk7XG4gICAgICAgICAgZm9yIChwcm9wS2V5IGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcFZhbHVlKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInNyY1wiOlxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3JjU2V0XCI6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcEtleSwgcHJvcFZhbHVlLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIGhhc1NyY1NldCAmJlxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwic3JjU2V0XCIsIHByb3BzLnNyY1NldCwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgIGhhc1NyYyAmJiBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJzcmNcIiwgcHJvcHMuc3JjLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwiaW5wdXRcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSAocHJvcEtleSA9IHByb3BWYWx1ZSA9IGhhc1NyY1NldCA9IG51bGwpLFxuICAgICAgICAgICAgY2hlY2tlZCA9IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IG51bGw7XG4gICAgICAgICAgZm9yIChoYXNTcmMgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoaGFzU3JjKSkge1xuICAgICAgICAgICAgICB2YXIgX3Byb3BWYWx1ZSA9IHByb3BzW2hhc1NyY107XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IF9wcm9wVmFsdWUpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChoYXNTcmMpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJuYW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gX3Byb3BWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBoYXNTcmMsIF9wcm9wVmFsdWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRhdGVJbnB1dFByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICBpbml0SW5wdXQoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHByb3BWYWx1ZSxcbiAgICAgICAgICAgIGhhc1NyY1NldCxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwic2VsZWN0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBoYXNTcmMgPSBwcm9wVmFsdWUgPSBwcm9wS2V5ID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGhhc1NyY1NldCBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoaGFzU3JjU2V0KSAmJlxuICAgICAgICAgICAgICAoKGRlZmF1bHRWYWx1ZSA9IHByb3BzW2hhc1NyY1NldF0pLCBudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChoYXNTcmNTZXQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgIGhhc1NyYyA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBoYXNTcmNTZXQsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGF0ZVNlbGVjdFByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICB0YWcgPSBwcm9wS2V5O1xuICAgICAgICAgIHByb3BzID0gcHJvcFZhbHVlO1xuICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUgPSAhIWhhc1NyYztcbiAgICAgICAgICBudWxsICE9IHRhZ1xuICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhaGFzU3JjLCB0YWcsICExKVxuICAgICAgICAgICAgOiBudWxsICE9IHByb3BzICYmIHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISFoYXNTcmMsIHByb3BzLCAhMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwidGV4dGFyZWFcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHByb3BLZXkgPSBoYXNTcmNTZXQgPSBoYXNTcmMgPSBudWxsO1xuICAgICAgICAgIGZvciAocHJvcFZhbHVlIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wVmFsdWUpICYmXG4gICAgICAgICAgICAgICgoZGVmYXVsdFZhbHVlID0gcHJvcHNbcHJvcFZhbHVlXSksIG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgaGFzU3JjID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkYXRlVGV4dGFyZWFQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICAgICAgaW5pdFRleHRhcmVhKGRvbUVsZW1lbnQsIGhhc1NyYywgaGFzU3JjU2V0LCBwcm9wS2V5KTtcbiAgICAgICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJvcHRpb25cIjpcbiAgICAgICAgICB2YWxpZGF0ZU9wdGlvblByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICBmb3IgKGNoZWNrZWQgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KGNoZWNrZWQpICYmXG4gICAgICAgICAgICAgICgoaGFzU3JjID0gcHJvcHNbY2hlY2tlZF0pLCBudWxsICE9IGhhc1NyYylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGhhc1NyYyAmJlxuICAgICAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgaGFzU3JjO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBjaGVja2VkLCBoYXNTcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjYW5jZWxcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNsb3NlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWZyYW1lXCI6XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInZpZGVvXCI6XG4gICAgICAgIGNhc2UgXCJhdWRpb1wiOlxuICAgICAgICAgIGZvciAoaGFzU3JjID0gMDsgaGFzU3JjIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaGFzU3JjKyspXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1toYXNTcmNdLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltYWdlXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgIGNhc2UgXCJhcmVhXCI6XG4gICAgICAgIGNhc2UgXCJiYXNlXCI6XG4gICAgICAgIGNhc2UgXCJiclwiOlxuICAgICAgICBjYXNlIFwiY29sXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgICAgICBjYXNlIFwidHJhY2tcIjpcbiAgICAgICAgY2FzZSBcIndiclwiOlxuICAgICAgICBjYXNlIFwibWVudWl0ZW1cIjpcbiAgICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0Q2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLCBudWxsICE9IGhhc1NyYylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChkZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRDaGVja2VkLCBoYXNTcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICAgIGZvciAoX3Byb3BWYWx1ZSBpbiBwcm9wcylcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW19wcm9wVmFsdWVdKSxcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGhhc1NyYyAmJlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDBcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoZGVmYXVsdFZhbHVlIGluIHByb3BzKVxuICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICBudWxsICE9IGhhc1NyYyAmJlxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgaGFzU3JjLCBwcm9wcywgbnVsbCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFByb3BzLCBuZXh0UHJvcHMpIHtcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UHJvcHMpO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJsaVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICB2YXIgbmFtZSA9IG51bGwsXG4gICAgICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGwsXG4gICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGNoZWNrZWQgPSBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgICAgICAgIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgJiYgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RQcm9wXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3BLZXk4IGluIG5leHRQcm9wcykge1xuICAgICAgICAgICAgdmFyIHByb3BLZXkgPSBuZXh0UHJvcHNbX3Byb3BLZXk4XTtcbiAgICAgICAgICAgIGxhc3RQcm9wID0gbGFzdFByb3BzW19wcm9wS2V5OF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTgpICYmXG4gICAgICAgICAgICAgIChudWxsICE9IHByb3BLZXkgfHwgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgICAgICAgdHlwZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibmFtZVwiOlxuICAgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ICE9PSBsYXN0UHJvcCAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0UHJvcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZyA9XG4gICAgICAgICAgICBcImNoZWNrYm94XCIgPT09IGxhc3RQcm9wcy50eXBlIHx8IFwicmFkaW9cIiA9PT0gbGFzdFByb3BzLnR5cGVcbiAgICAgICAgICAgICAgPyBudWxsICE9IGxhc3RQcm9wcy5jaGVja2VkXG4gICAgICAgICAgICAgIDogbnVsbCAhPSBsYXN0UHJvcHMudmFsdWU7XG4gICAgICAgICAgbmV4dFByb3BzID1cbiAgICAgICAgICAgIFwiY2hlY2tib3hcIiA9PT0gbmV4dFByb3BzLnR5cGUgfHwgXCJyYWRpb1wiID09PSBuZXh0UHJvcHMudHlwZVxuICAgICAgICAgICAgICA/IG51bGwgIT0gbmV4dFByb3BzLmNoZWNrZWRcbiAgICAgICAgICAgICAgOiBudWxsICE9IG5leHRQcm9wcy52YWx1ZTtcbiAgICAgICAgICB0YWcgfHxcbiAgICAgICAgICAgICFuZXh0UHJvcHMgfHxcbiAgICAgICAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvIGEgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gITApKTtcbiAgICAgICAgICAhdGFnIHx8XG4gICAgICAgICAgICBuZXh0UHJvcHMgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gdW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSAhMCkpO1xuICAgICAgICAgIHVwZGF0ZUlucHV0KFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBwcm9wS2V5ID0gdmFsdWUgPSBkZWZhdWx0VmFsdWUgPSBfcHJvcEtleTggPSBudWxsO1xuICAgICAgICAgIGZvciAodHlwZSBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1t0eXBlXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSAmJiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gbGFzdERlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKG5hbWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHR5cGUgPSBuZXh0UHJvcHNbbmFtZV0pLFxuICAgICAgICAgICAgICAobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1tuYW1lXSksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgICAgICAgIChudWxsICE9IHR5cGUgfHwgbnVsbCAhPSBsYXN0RGVmYXVsdFZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBfcHJvcEtleTggPSB0eXBlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0eXBlICE9PSBsYXN0RGVmYXVsdFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0UHJvcHMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgdGFnID0gdmFsdWU7XG4gICAgICAgICAgbGFzdFByb3BzID0gcHJvcEtleTtcbiAgICAgICAgICBudWxsICE9IF9wcm9wS2V5OFxuICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCBfcHJvcEtleTgsICExKVxuICAgICAgICAgICAgOiAhIWxhc3RQcm9wcyAhPT0gISF0YWcgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCBuZXh0UHJvcHMsICEwKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIXRhZywgdGFnID8gW10gOiBcIlwiLCAhMSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgcHJvcEtleSA9IF9wcm9wS2V5OCA9IG51bGw7XG4gICAgICAgICAgZm9yIChkZWZhdWx0VmFsdWUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hbWUgPSBsYXN0UHJvcHNbZGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBuYW1lICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgbnVsbCwgbmV4dFByb3BzLCBuYW1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFsdWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hbWUgPSBuZXh0UHJvcHNbdmFsdWVdKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBsYXN0UHJvcHNbdmFsdWVdKSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiAobnVsbCAhPSBuYW1lIHx8IG51bGwgIT0gdHlwZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBuYW1lKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmFtZSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgdmFsdWUsIG5hbWUsIG5leHRQcm9wcywgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVUZXh0YXJlYShkb21FbGVtZW50LCBfcHJvcEtleTgsIHByb3BLZXkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTMgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTEzXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTEzKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTEzKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTEzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID0gITE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTEzLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGFzdERlZmF1bHRWYWx1ZSBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2xhc3REZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbbGFzdERlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobGFzdERlZmF1bHRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBfcHJvcEtleTggIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSBfcHJvcEtleTggfHwgbnVsbCAhPSBwcm9wS2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChsYXN0RGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgX3Byb3BLZXk4O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4LFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgY2FzZSBcImFyZWFcIjpcbiAgICAgICAgY2FzZSBcImJhc2VcIjpcbiAgICAgICAgY2FzZSBcImJyXCI6XG4gICAgICAgIGNhc2UgXCJjb2xcIjpcbiAgICAgICAgY2FzZSBcImVtYmVkXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgIGNhc2UgXCJ0cmFja1wiOlxuICAgICAgICBjYXNlIFwid2JyXCI6XG4gICAgICAgIGNhc2UgXCJtZW51aXRlbVwiOlxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTE1XSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE1KSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE1KSAmJlxuICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXkxNSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY2hlY2tlZCBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2NoZWNrZWRdKSxcbiAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbY2hlY2tlZF0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgICBfcHJvcEtleTggIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSBfcHJvcEtleTggfHwgbnVsbCAhPSBwcm9wS2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBfcHJvcEtleTgpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTgsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTcgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTddKSxcbiAgICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNykgJiZcbiAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTcpICYmXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5MTcsXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgICAgKF9wcm9wS2V5OCA9IG5leHRQcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLFxuICAgICAgICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2RlZmF1bHRDaGVja2VkXSksXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0Q2hlY2tlZCkgfHxcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9PT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAgICAgKHZvaWQgMCA9PT0gX3Byb3BLZXk4ICYmIHZvaWQgMCA9PT0gcHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAodmFyIF9wcm9wS2V5MTkgaW4gbGFzdFByb3BzKVxuICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTldKSxcbiAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxOSkgJiZcbiAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTkpICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkxOSwgbnVsbCwgbmV4dFByb3BzLCBfcHJvcEtleTgpO1xuICAgICAgZm9yIChsYXN0UHJvcCBpbiBuZXh0UHJvcHMpXG4gICAgICAgIChfcHJvcEtleTggPSBuZXh0UHJvcHNbbGFzdFByb3BdKSxcbiAgICAgICAgICAocHJvcEtleSA9IGxhc3RQcm9wc1tsYXN0UHJvcF0pLFxuICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobGFzdFByb3ApIHx8XG4gICAgICAgICAgICBfcHJvcEtleTggPT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgIChudWxsID09IF9wcm9wS2V5OCAmJiBudWxsID09IHByb3BLZXkpIHx8XG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgbGFzdFByb3AsIF9wcm9wS2V5OCwgbmV4dFByb3BzLCBwcm9wS2V5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyTmFtZSkge1xuICAgICAgc3dpdGNoIChhdHRyTmFtZSkge1xuICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICByZXR1cm4gXCJjbGFzc05hbWVcIjtcbiAgICAgICAgY2FzZSBcImZvclwiOlxuICAgICAgICAgIHJldHVybiBcImh0bWxGb3JcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYXR0ck5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGRvbUVsZW1lbnQpIHtcbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZUluT2JqZWN0Rm9ybSA9IHt9O1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuc3R5bGU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0eWxlTmFtZSA9IGRvbUVsZW1lbnRbaV07XG4gICAgICAgIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtW3N0eWxlTmFtZV0gPVxuICAgICAgICAgIGRvbUVsZW1lbnQuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZU5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUkanNjb21wJDAsIHNlcnZlckRpZmZlcmVuY2VzKSB7XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSRqc2NvbXAkMCAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUkanNjb21wJDApXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCJcbiAgICAgICAgKTtcbiAgICAgIGVsc2UgaWYgKGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgdmFyIGNsaWVudFZhbHVlO1xuICAgICAgICB2YXIgZGVsaW1pdGVyID0gKGNsaWVudFZhbHVlID0gXCJcIiksXG4gICAgICAgICAgc3R5bGVOYW1lO1xuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiB2YWx1ZSRqc2NvbXAkMClcbiAgICAgICAgICBpZiAodmFsdWUkanNjb21wJDAuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWUkanNjb21wJDBbc3R5bGVOYW1lXTtcbiAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICBcIlwiICE9PSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAoMCA9PT0gc3R5bGVOYW1lLmluZGV4T2YoXCItLVwiKVxuICAgICAgICAgICAgICAgID8gKGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgc3R5bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgIChjbGllbnRWYWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgKyBzdHlsZU5hbWUgKyBcIjpcIiArIChcIlwiICsgdmFsdWUpLnRyaW0oKSkpXG4gICAgICAgICAgICAgICAgOiBcIm51bWJlclwiICE9PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgMCA9PT0gdmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgdW5pdGxlc3NOdW1iZXJzLmhhcyhzdHlsZU5hbWUpXG4gICAgICAgICAgICAgICAgICA/IChjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIChjbGllbnRWYWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciArXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCBcIi0kMVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKG1zUGF0dGVybiQxLCBcIi1tcy1cIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICAgICAgICAoXCJcIiArIHZhbHVlKS50cmltKCkpKVxuICAgICAgICAgICAgICAgICAgOiAoY2xpZW50VmFsdWUgKz1cbiAgICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgK1xuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgXCItJDFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShtc1BhdHRlcm4kMSwgXCItbXMtXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgIFwicHhcIiksXG4gICAgICAgICAgICAgIChkZWxpbWl0ZXIgPSBcIjtcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgY2xpZW50VmFsdWUgPSBjbGllbnRWYWx1ZSB8fCBudWxsO1xuICAgICAgICB2YWx1ZSRqc2NvbXAkMCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgIHZhbHVlJGpzY29tcCQwICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAgICgoY2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpKSxcbiAgICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodmFsdWUkanNjb21wJDApICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzLnN0eWxlID0gZ2V0U3R5bGVzT2JqZWN0RnJvbUVsZW1lbnQoZG9tRWxlbWVudCkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcEtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQgPT09IFwiXCIgKyB2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQgPT09IFwiXCIgKyB2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZU51bWVyaWNBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhaXNOYU4odmFsdWUpICYmXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gXCJcIiArIHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpKSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gYXR0cmlidXRlTmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHByb3BzLCBob3N0Q29udGV4dCkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHNlcnZlckRpZmZlcmVuY2VzID0ge30sXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzID0gbmV3IFNldCgpLFxuICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXMsXG4gICAgICAgICAgaSA9IDA7XG4gICAgICAgIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgaSsrXG4gICAgICApXG4gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuYWRkKGF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQodGFnKSlcbiAgICAgICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykge1xuICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcHNbcHJvcEtleV07XG4gICAgICAgICAgICBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKCEwICE9PSBwcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcIm51bWJlclwiICE9PSB0eXBlb2YgdmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGlsZHJlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZS5fX2h0bWwgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHZhbHVlID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCB2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgICAgICAgICAgICBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0UGFyZW50XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0VG9wXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0TGVmdFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZnNldFdpZHRoXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0SGVpZ2h0XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiaXNDb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvdXRlclRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvdXRlckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQXNzaWdubWVudCB0byByZWFkLW9ubHkgcHJvcGVydHkgd2lsbCByZXN1bHQgaW4gYSBuby1vcDogYCVzYFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2xhc3NOYW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJjbGFzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlRm9yQXR0cmlidXRlT25DdXN0b21Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NOYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGhvc3RDb250ZXh0LmNvbnRleHQgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSAmJlxuICAgICAgICAgICAgICAgICAgICBcInN2Z1wiICE9PSB0YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJtYXRoXCIgIT09IHRhZ1xuICAgICAgICAgICAgICAgICAgICAgID8gZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgICAgICAgOiBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkpLFxuICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVzID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgZm9yICh2YWx1ZSBpbiBwcm9wcylcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICgocHJvcEtleSA9IHByb3BzW3ZhbHVlXSksIG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIodmFsdWUsIHByb3BLZXkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoITAgIT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZylcbiAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgIFwibnVtYmVyXCIgIT09IHR5cGVvZiBwcm9wS2V5KSB8fFxuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgXCJjaGlsZHJlblwiLFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gcHJvcEtleSA/IHByb3BLZXkuX19odG1sIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICgocHJvcEtleSA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgcHJvcEtleSkpLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICE9PSBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzW3ZhbHVlXSA9IHsgX19odG1sOiBhdHRyaWJ1dGVzIH0pKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFiSW5kZXhcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInRhYmluZGV4XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgZGlmZkh5ZHJhdGVkU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BLZXksIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50Lm11bHRpcGxlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdXRlZFwiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50Lm11dGVkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvRm9jdXNcIjpcbiAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJhdXRvZm9jdXNcIik7XG4gICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LmF1dG9mb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHRhZykge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFwic3JjXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImhyZWZcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBwcm9wS2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgKFwiYVwiID09PSB0YWcgJiYgXCJocmVmXCIgPT09IHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0YWcgJiYgXCJkYXRhXCIgPT09IHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgXCJzcmNcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVGhpcyBtYXkgY2F1c2UgdGhlIGJyb3dzZXIgdG8gZG93bmxvYWQgdGhlIHdob2xlIHBhZ2UgYWdhaW4gb3ZlciB0aGUgbmV0d29yay4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFjdGlvblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJmb3JtQWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtQWN0aW9uXCIgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPyAoZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcIm5hbWVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZm9ybWVuY3R5cGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZm9ybW1ldGhvZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJmb3JtdGFyZ2V0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJlbmN0eXBlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcIm1ldGhvZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJ0YXJnZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gRVhQRUNURURfRk9STV9BQ1RJT05fVVJMKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rSHJlZlwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6aHJlZlwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRlZGl0YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJzcGVsbGNoZWNrXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImF1dG9SZXZlcnNlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNhYmxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInByZXNlcnZlQWxwaGFcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImF1dG9QbGF5XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmZXJcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJsb29wXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXF1aXJlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VhbWxlc3NcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbkF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkb3dubG9hZFwiOlxuICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBpID0gZG9tRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAoYXR0cmlidXRlcyA9IHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMCA9IHNlcnZlckRpZmZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpID0gaS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBpKVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBwcm9wS2V5KSBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobnVsbCAhPSBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gcHJvcEtleSAmJiBcIlwiID09PSBpKSBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihwcm9wS2V5LCBhdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09PSBcIlwiICsgcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb2xzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJvd3NcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2l6ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzcGFuXCI6XG4gICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkb21FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMCA9IHNlcnZlckRpZmZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpID0gaS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBpKVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwcm9wS2V5KSB8fCAxID4gcHJvcEtleSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoaXNOYU4ocHJvcEtleSkgfHwgMSA+IHByb3BLZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24ocHJvcEtleSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gXCJcIiArIHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwicm93U3BhblwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZU51bWVyaWNBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInJvd3NwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZU51bWVyaWNBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4SGVpZ2h0XCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4LWhlaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rQWN0dWF0ZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6YWN0dWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rQXJjcm9sZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6YXJjcm9sZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rUm9sZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6cm9sZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rU2hvd1wiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6c2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rVGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnRpdGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtUeXBlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazp0eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieG1sQmFzZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sOmJhc2VcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bWxMYW5nXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bWw6bGFuZ1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhtbFNwYWNlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bWw6c3BhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbmVydFwiOlxuICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVbdmFsdWVdIHx8XG4gICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW3ZhbHVlXSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIGVtcHR5IHN0cmluZyBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiBUaGlzIHdpbGwgdHJlYXQgdGhlIGF0dHJpYnV0ZSBhcyBpZiBpdCB3ZXJlIGZhbHNlLiBFaXRoZXIgcGFzcyBgZmFsc2VgIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLCBvciBwYXNzIGB0cnVlYCBpZiB5b3UgdXNlZCBhbiBlbXB0eSBzdHJpbmcgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBSZWFjdCB0byBpbmRpY2F0ZSB0aGlzIGF0dHJpYnV0ZSBpcyB0cnVlLlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoMiA8IHZhbHVlLmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKFwib1wiICE9PSB2YWx1ZVswXSAmJiBcIk9cIiAhPT0gdmFsdWVbMF0pIHx8XG4gICAgICAgICAgICAgICAgICAgIChcIm5cIiAhPT0gdmFsdWVbMV0gJiYgXCJOXCIgIT09IHZhbHVlWzFdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBnZXRBdHRyaWJ1dGVBbGlhcyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ZnXCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBcIm1hdGhcIiAhPT0gdGFnXG4gICAgICAgICAgICAgICAgICAgICAgPyBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgICA6ICgoYXR0cmlidXRlTmFtZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbYXR0cmlidXRlTmFtZV0gfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gYXR0cmlidXRlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lICE9PSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGF0dHJpYnV0ZXMgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShpKSk7XG4gICAgICAgICAgICAgICAgICAgIGE6IGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAoKGF0dHJpYnV0ZU5hbWUgPSBkb21FbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDAgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAoaSA9IHByb3BLZXkpLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQXR0cmlidXRlTmFtZVNhZmUoc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDApKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZS5oYXNBdHRyaWJ1dGUoc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDApXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lLmdldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSBhdHRyaWJ1dGVOYW1lID09PSBcIlwiICsgaSA/IGkgOiBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYXR0cmlidXRlTmFtZSA9IHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCA1KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtXCIgIT09IGF0dHJpYnV0ZU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLVwiICE9PSBhdHRyaWJ1dGVOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gdm9pZCAwID09PSBpID8gdm9pZCAwIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgIDAgPCBleHRyYUF0dHJpYnV0ZXMuc2l6ZSAmJlxuICAgICAgICAhMCAhPT0gcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nICYmXG4gICAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZG9tRWxlbWVudCwgZXh0cmFBdHRyaWJ1dGVzLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgICByZXR1cm4gMCA9PT0gT2JqZWN0LmtleXMoc2VydmVyRGlmZmVyZW5jZXMpLmxlbmd0aFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBzZXJ2ZXJEaWZmZXJlbmNlcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvcE5hbWVzTGlzdEpvaW4obGlzdCwgY29tYmluYXRvcikge1xuICAgICAgc3dpdGNoIChsaXN0Lmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gbGlzdFswXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBsaXN0WzBdICsgXCIgXCIgKyBjb21iaW5hdG9yICsgXCIgXCIgKyBsaXN0WzFdO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBsaXN0LnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgXCIsIFwiICtcbiAgICAgICAgICAgIGNvbWJpbmF0b3IgK1xuICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm4gOSA9PT0gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGVcbiAgICAgICAgPyByb290Q29udGFpbmVyRWxlbWVudFxuICAgICAgICA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bkhvc3RDb250ZXh0KG5hbWVzcGFjZVVSSSkge1xuICAgICAgc3dpdGNoIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgY2FzZSBTVkdfTkFNRVNQQUNFOlxuICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZztcbiAgICAgICAgY2FzZSBNQVRIX05BTUVTUEFDRTpcbiAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHRQcm9kKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICAgICAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lKVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG4gICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGg7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnROYW1lc3BhY2UgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnICYmXG4gICAgICAgIFwiZm9yZWlnbk9iamVjdFwiID09PSB0eXBlXG4gICAgICAgID8gSG9zdENvbnRleHROYW1lc3BhY2VOb25lXG4gICAgICAgIDogcGFyZW50TmFtZXNwYWNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJ0ZXh0YXJlYVwiID09PSB0eXBlIHx8XG4gICAgICAgIFwibm9zY3JpcHRcIiA9PT0gdHlwZSB8fFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiB8fFxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICAgICAgbnVsbCAhPT0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgJiZcbiAgICAgICAgICBudWxsICE9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbClcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XG4gICAgICBpZiAoZXZlbnQgJiYgXCJwb3BzdGF0ZVwiID09PSBldmVudC50eXBlKSB7XG4gICAgICAgIGlmIChldmVudCA9PT0gY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50KSByZXR1cm4gITE7XG4gICAgICAgIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQgPSBudWxsO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVFcnJvckluTmV4dFRpY2soZXJyb3IpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgbmV3UHJvcHMuYXV0b0ZvY3VzICYmIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgIG5ld1Byb3BzLnNyY1xuICAgICAgICAgICAgPyAoZG9tRWxlbWVudC5zcmMgPSBuZXdQcm9wcy5zcmMpXG4gICAgICAgICAgICA6IG5ld1Byb3BzLnNyY1NldCAmJiAoZG9tRWxlbWVudC5zcmNzZXQgPSBuZXdQcm9wcy5zcmNTZXQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKSB7XG4gICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG4gICAgICBkb21FbGVtZW50W2ludGVybmFsUHJvcHNLZXldID0gbmV3UHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCkge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gbmV3VGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gICAgICA4ID09PSBjb250YWluZXIubm9kZVR5cGVcbiAgICAgICAgPyBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZClcbiAgICAgICAgOiBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhclN1c3BlbnNlQm91bmRhcnkocGFyZW50SW5zdGFuY2UsIHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICAgIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZSxcbiAgICAgICAgZGVwdGggPSAwO1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgaWYgKG5leHROb2RlICYmIDggPT09IG5leHROb2RlLm5vZGVUeXBlKVxuICAgICAgICAgIGlmICgoKG5vZGUgPSBuZXh0Tm9kZS5kYXRhKSwgbm9kZSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpIHtcbiAgICAgICAgICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQobmV4dE5vZGUpO1xuICAgICAgICAgICAgICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKG5vZGUgIT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgbm9kZSAhPT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIG5vZGUgIT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEpIHx8XG4gICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgIH0gd2hpbGUgKG5vZGUpO1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnN0eWxlO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2Uuc2V0UHJvcGVydHlcbiAgICAgICAgPyBpbnN0YW5jZS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIiwgXCJub25lXCIsIFwiaW1wb3J0YW50XCIpXG4gICAgICAgIDogKGluc3RhbmNlLmRpc3BsYXkgPSBcIm5vbmVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gICAgICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5oaWRlSW5zdGFuY2UoaW5zdGFuY2UsIHByb3BzKSB7XG4gICAgICBwcm9wcyA9IHByb3BzW1NUWUxFXTtcbiAgICAgIHByb3BzID1cbiAgICAgICAgdm9pZCAwICE9PSBwcm9wcyAmJiBudWxsICE9PSBwcm9wcyAmJiBwcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlcIilcbiAgICAgICAgICA/IHByb3BzLmRpc3BsYXlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID1cbiAgICAgICAgbnVsbCA9PSBwcm9wcyB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHByb3BzID8gXCJcIiA6IChcIlwiICsgcHJvcHMpLnRyaW0oKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICAgICAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KGNvbnRhaW5lcikge1xuICAgICAgdmFyIG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICBuZXh0Tm9kZSAmJiAxMCA9PT0gbmV4dE5vZGUubm9kZVR5cGUgJiYgKG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgZm9yICg7IG5leHROb2RlOyApIHtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgc3dpdGNoIChub2RlLm5vZGVOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkhUTUxcIjpcbiAgICAgICAgICBjYXNlIFwiSEVBRFwiOlxuICAgICAgICAgIGNhc2UgXCJCT0RZXCI6XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lclNwYXJpbmdseShub2RlKTtcbiAgICAgICAgICAgIGRldGFjaERlbGV0ZWRJbnN0YW5jZShub2RlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGNhc2UgXCJTQ1JJUFRcIjpcbiAgICAgICAgICBjYXNlIFwiU1RZTEVcIjpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGNhc2UgXCJMSU5LXCI6XG4gICAgICAgICAgICBpZiAoXCJzdHlsZXNoZWV0XCIgPT09IG5vZGUucmVsLnRvTG93ZXJDYXNlKCkpIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIGZvciAoOyAxID09PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgICAgIHZhciBhbnlQcm9wcyA9IHByb3BzO1xuICAgICAgICBpZiAoaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWluUm9vdE9yU2luZ2xldG9uICYmXG4gICAgICAgICAgICAoXCJJTlBVVFwiICE9PSBpbnN0YW5jZS5ub2RlTmFtZSB8fCBcImhpZGRlblwiICE9PSBpbnN0YW5jZS50eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCFpblJvb3RPclNpbmdsZXRvbilcbiAgICAgICAgICBpZiAoXCJpbnB1dFwiID09PSB0eXBlICYmIFwiaGlkZGVuXCIgPT09IGluc3RhbmNlLnR5cGUpIHtcbiAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oYW55UHJvcHMubmFtZSwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBudWxsID09IGFueVByb3BzLm5hbWUgPyBudWxsIDogXCJcIiArIGFueVByb3BzLm5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwiaGlkZGVuXCIgPT09IGFueVByb3BzLnR5cGUgJiZcbiAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSA9PT0gbmFtZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgZWxzZSBpZiAoIWluc3RhbmNlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSlcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICBuYW1lID0gaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwicmVsXCIpO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IG5hbWUgJiZcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBuYW1lICE9PSBhbnlQcm9wcy5yZWwgfHxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpICE9PVxuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuaHJlZiA/IG51bGwgOiBhbnlQcm9wcy5ocmVmKSB8fFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpICE9PVxuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogYW55UHJvcHMuY3Jvc3NPcmlnaW4pIHx8XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikgIT09XG4gICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy50aXRsZSA/IG51bGwgOiBhbnlQcm9wcy50aXRsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKSkgYnJlYWs7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgbmFtZSA9IGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChuYW1lICE9PSAobnVsbCA9PSBhbnlQcm9wcy5zcmMgPyBudWxsIDogYW55UHJvcHMuc3JjKSB8fFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMudHlwZSA/IG51bGwgOiBhbnlQcm9wcy50eXBlKSB8fFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgIT09XG4gICAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgOiBhbnlQcm9wcy5jcm9zc09yaWdpbikpICYmXG4gICAgICAgICAgICAgICAgbmFtZSAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImFzeW5jXCIpICYmXG4gICAgICAgICAgICAgICAgIWluc3RhbmNlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCwgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIGlmIChcIlwiID09PSB0ZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgIGZvciAoOyAzICE9PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoMSAhPT0gaW5zdGFuY2Uubm9kZVR5cGUgfHxcbiAgICAgICAgICAgIFwiSU5QVVRcIiAhPT0gaW5zdGFuY2Uubm9kZU5hbWUgfHxcbiAgICAgICAgICAgIFwiaGlkZGVuXCIgIT09IGluc3RhbmNlLnR5cGUpICYmXG4gICAgICAgICAgIWluUm9vdE9yU2luZ2xldG9uXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgICAgIGZvciAoOyBudWxsICE9IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG4gICAgICAgIGlmICgxID09PSBub2RlVHlwZSB8fCAzID09PSBub2RlVHlwZSkgYnJlYWs7XG4gICAgICAgIGlmICg4ID09PSBub2RlVHlwZSkge1xuICAgICAgICAgIG5vZGVUeXBlID0gbm9kZS5kYXRhO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElOR1xuICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVIeWRyYXRhYmxlSW5zdGFuY2VGb3JEZXZXYXJuaW5ncyhpbnN0YW5jZSkge1xuICAgICAgaWYgKDEgPT09IGluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyA9IHt9LFxuICAgICAgICAgICAgYXR0cmlidXRlcyA9IGluc3RhbmNlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICBpIDwgYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgICAgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tpXTtcbiAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1tnZXRQcm9wTmFtZUZyb21BdHRyaWJ1dGVOYW1lKGF0dHIubmFtZSldID1cbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gYXR0ci5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgPyBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChpbnN0YW5jZSlcbiAgICAgICAgICAgICAgOiBhdHRyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGU6IEpTQ29tcGlsZXJfdGVtcF9jb25zdCwgcHJvcHM6IHNlcnZlckRpZmZlcmVuY2VzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gOCA9PT0gaW5zdGFuY2Uubm9kZVR5cGVcbiAgICAgICAgPyB7IHR5cGU6IFwiU3VzcGVuc2VcIiwgcHJvcHM6IHt9IH1cbiAgICAgICAgOiBpbnN0YW5jZS5ub2RlVmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyh0ZXh0SW5zdGFuY2UsIHRleHQsIHBhcmVudFByb3BzKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gcGFyZW50UHJvcHMgfHxcbiAgICAgICAgITAgIT09IHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXVxuICAgICAgICA/ICh0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID09PSB0ZXh0XG4gICAgICAgICAgICA/ICh0ZXh0SW5zdGFuY2UgPSBudWxsKVxuICAgICAgICAgICAgOiAoKHRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodGV4dCkpLFxuICAgICAgICAgICAgICAodGV4dEluc3RhbmNlID1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSkgPT09XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IHRleHRJbnN0YW5jZS5ub2RlVmFsdWUpKSxcbiAgICAgICAgICB0ZXh0SW5zdGFuY2UpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgICBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZztcbiAgICAgIGZvciAodmFyIGRlcHRoID0gMDsgc3VzcGVuc2VJbnN0YW5jZTsgKSB7XG4gICAgICAgIGlmICg4ID09PSBzdXNwZW5zZUluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBzdXNwZW5zZUluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpXG4gICAgICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAoZGF0YSAhPT0gU1VTUEVOU0VfU1RBUlRfREFUQSAmJlxuICAgICAgICAgICAgICBkYXRhICE9PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIGRhdGEgIT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkgfHxcbiAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gICAgICB0YXJnZXRJbnN0YW5jZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZztcbiAgICAgIGZvciAodmFyIGRlcHRoID0gMDsgdGFyZ2V0SW5zdGFuY2U7ICkge1xuICAgICAgICBpZiAoOCA9PT0gdGFyZ2V0SW5zdGFuY2Uubm9kZVR5cGUpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHRhcmdldEluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpIHJldHVybiB0YXJnZXRJbnN0YW5jZTtcbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgfSBlbHNlIGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBICYmIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0SW5zdGFuY2UgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gICAgICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICByb290Q29udGFpbmVySW5zdGFuY2UsXG4gICAgICBob3N0Q29udGV4dCxcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZ0RldlxuICAgICkge1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nRGV2ICYmXG4gICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBob3N0Q29udGV4dC5hbmNlc3RvckluZm8pO1xuICAgICAgcHJvcHMgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYW4gPGh0bWw+IGVsZW1lbnQgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgZG9jdW1lbnRFbGVtZW50IGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvIHRoZSBjYXVzZSBpcyBsaWtlbHkgaW4gc29tZSBvdGhlciBzY3JpcHQgcnVubmluZyBvbiB0aGlzIHBhZ2UuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgdHlwZSA9IHByb3BzLmhlYWQ7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYSA8aGVhZD4gZWxlbWVudCAoZG9jdW1lbnQuaGVhZCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgaGVhZCBmb3IgYW55IERvY3VtZW50IGl0IHJlbmRlcnMgaW50byBzbyB0aGUgY2F1c2UgaXMgbGlrZWx5IGluIHNvbWUgb3RoZXIgc2NyaXB0IHJ1bm5pbmcgb24gdGhpcyBwYWdlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5ib2R5O1xuICAgICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGV4cGVjdGVkIGEgPGJvZHk+IGVsZW1lbnQgKGRvY3VtZW50LmJvZHkpIHRvIGV4aXN0IGluIHRoZSBEb2N1bWVudCBidXQgb25lIHdhcyBub3QgZm91bmQuIFJlYWN0IG5ldmVyIHJlbW92ZXMgdGhlIGJvZHkgZm9yIGFueSBEb2N1bWVudCBpdCByZW5kZXJzIGludG8gc28gdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwicmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlIHdhcyBjYWxsZWQgd2l0aCBhbiBlbGVtZW50IHR5cGUgdGhhdCBpcyBub3Qgc3VwcG9ydGVkLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWNxdWlyZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgdHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBpbnRlcm5hbEluc3RhbmNlSGFuZGxlXG4gICAgKSB7XG4gICAgICBpZiAoZ2V0SW5zdGFuY2VGcm9tTm9kZShpbnN0YW5jZSkpIHtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBpbnN0YW5jZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJZb3UgYXJlIG1vdW50aW5nIGEgbmV3ICVzIGNvbXBvbmVudCB3aGVuIGEgcHJldmlvdXMgb25lIGhhcyBub3QgZmlyc3QgdW5tb3VudGVkLiBJdCBpcyBhbiBlcnJvciB0byByZW5kZXIgbW9yZSB0aGFuIG9uZSAlcyBjb21wb25lbnQgYXQgYSB0aW1lIGFuZCBhdHRyaWJ1dGVzIGFuZCBjaGlsZHJlbiBvZiB0aGVzZSBjb21wb25lbnRzIHdpbGwgbGlrZWx5IGZhaWwgaW4gdW5wcmVkaWN0YWJsZSB3YXlzLiBQbGVhc2Ugb25seSByZW5kZXIgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgPCVzPiBhbmQgaWYgeW91IG5lZWQgdG8gbW91bnQgYSBuZXcgb25lLCBlbnN1cmUgYW55IHByZXZpb3VzIG9uZXMgaGF2ZSB1bm1vdW50ZWQgZmlyc3QuXCIsXG4gICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICB0YWdOYW1lLFxuICAgICAgICAgIHRhZ05hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImFjcXVpcmVTaW5nbGV0b25JbnN0YW5jZSB3YXMgY2FsbGVkIHdpdGggYW4gZWxlbWVudCB0eXBlIHRoYXQgaXMgbm90IHN1cHBvcnRlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKHRhZ05hbWUgPSBpbnN0YW5jZS5hdHRyaWJ1dGVzOyB0YWdOYW1lLmxlbmd0aDsgKVxuICAgICAgICBpbnN0YW5jZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKHRhZ05hbWVbMF0pO1xuICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzKTtcbiAgICAgIGluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbiAgICAgIGluc3RhbmNlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvaXN0YWJsZVJvb3QoY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGFpbmVyLmdldFJvb3ROb2RlXG4gICAgICAgID8gY29udGFpbmVyLmdldFJvb3ROb2RlKClcbiAgICAgICAgOiBjb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlY29ubmVjdEFzKHJlbCwgaHJlZiwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB7XG4gICAgICAgIHZhciBsaW1pdGVkRXNjYXBlZEhyZWYgPVxuICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZik7XG4gICAgICAgIGxpbWl0ZWRFc2NhcGVkSHJlZiA9XG4gICAgICAgICAgJ2xpbmtbcmVsPVwiJyArIHJlbCArICdcIl1baHJlZj1cIicgKyBsaW1pdGVkRXNjYXBlZEhyZWYgKyAnXCJdJztcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNyb3NzT3JpZ2luICYmXG4gICAgICAgICAgKGxpbWl0ZWRFc2NhcGVkSHJlZiArPSAnW2Nyb3Nzb3JpZ2luPVwiJyArIGNyb3NzT3JpZ2luICsgJ1wiXScpO1xuICAgICAgICBwcmVjb25uZWN0c1NldC5oYXMobGltaXRlZEVzY2FwZWRIcmVmKSB8fFxuICAgICAgICAgIChwcmVjb25uZWN0c1NldC5hZGQobGltaXRlZEVzY2FwZWRIcmVmKSxcbiAgICAgICAgICAocmVsID0geyByZWw6IHJlbCwgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLCBocmVmOiBocmVmIH0pLFxuICAgICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihsaW1pdGVkRXNjYXBlZEhyZWYpICYmXG4gICAgICAgICAgICAoKGhyZWYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhyZWYsIFwibGlua1wiLCByZWwpLFxuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShocmVmKSxcbiAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChocmVmKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSZXNvdXJjZSh0eXBlLCBjdXJyZW50UHJvcHMsIHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSB7XG4gICAgICB2YXIgcmVzb3VyY2VSb290ID0gKHJlc291cmNlUm9vdCA9IHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpXG4gICAgICAgID8gZ2V0SG9pc3RhYmxlUm9vdChyZXNvdXJjZVJvb3QpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmICghcmVzb3VyY2VSb290KVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnXCJyZXNvdXJjZVJvb3RcIiB3YXMgZXhwZWN0ZWQgdG8gZXhpc3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICApO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLmhyZWZcbiAgICAgICAgICAgID8gKChwZW5kaW5nUHJvcHMgPSBnZXRTdHlsZUtleShwZW5kaW5nUHJvcHMuaHJlZikpLFxuICAgICAgICAgICAgICAoY3VycmVudFByb3BzID1cbiAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcyksXG4gICAgICAgICAgICAgIChjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50UHJvcHMuZ2V0KHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wcy5zZXQocGVuZGluZ1Byb3BzLCBjdXJyZW50UmVzb3VyY2UpKSxcbiAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgOiB7IHR5cGU6IFwidm9pZFwiLCBpbnN0YW5jZTogbnVsbCwgY291bnQ6IDAsIHN0YXRlOiBudWxsIH07XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHBlbmRpbmdQcm9wcy5yZWwgJiZcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZiAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpO1xuICAgICAgICAgICAgdmFyIF9zdHlsZXMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcyxcbiAgICAgICAgICAgICAgX3Jlc291cmNlID0gX3N0eWxlcy5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFfcmVzb3VyY2UgJiZcbiAgICAgICAgICAgICAgKChyZXNvdXJjZVJvb3QgPSByZXNvdXJjZVJvb3Qub3duZXJEb2N1bWVudCB8fCByZXNvdXJjZVJvb3QpLFxuICAgICAgICAgICAgICAoX3Jlc291cmNlID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB7IGxvYWRpbmc6IE5vdExvYWRlZCwgcHJlbG9hZDogbnVsbCB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfc3R5bGVzLnNldCh0eXBlLCBfcmVzb3VyY2UpLFxuICAgICAgICAgICAgICAoX3N0eWxlcyA9IHJlc291cmNlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkodHlwZSlcbiAgICAgICAgICAgICAgKSkgJiZcbiAgICAgICAgICAgICAgICAhX3N0eWxlcy5fcCAmJlxuICAgICAgICAgICAgICAgICgoX3Jlc291cmNlLmluc3RhbmNlID0gX3N0eWxlcyksXG4gICAgICAgICAgICAgICAgKF9yZXNvdXJjZS5zdGF0ZS5sb2FkaW5nID0gTG9hZGVkIHwgSW5zZXJ0ZWQpKSxcbiAgICAgICAgICAgICAgIXByZWxvYWRQcm9wc01hcC5oYXModHlwZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIHByZWxvYWRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICByZWw6IFwicHJlbG9hZFwiLFxuICAgICAgICAgICAgICAgIGFzOiBcInN0eWxlXCIsXG4gICAgICAgICAgICAgICAgaHJlZjogcGVuZGluZ1Byb3BzLmhyZWYsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHBlbmRpbmdQcm9wcy5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHBlbmRpbmdQcm9wcy5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgbWVkaWE6IHBlbmRpbmdQcm9wcy5tZWRpYSxcbiAgICAgICAgICAgICAgICBocmVmTGFuZzogcGVuZGluZ1Byb3BzLmhyZWZMYW5nLFxuICAgICAgICAgICAgICAgIHJlZmVycmVyUG9saWN5OiBwZW5kaW5nUHJvcHMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldCh0eXBlLCBwcmVsb2FkUHJvcHMpO1xuICAgICAgICAgICAgICBfc3R5bGVzIHx8XG4gICAgICAgICAgICAgICAgcHJlbG9hZFN0eWxlc2hlZXQoXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgcHJlbG9hZFByb3BzLFxuICAgICAgICAgICAgICAgICAgX3Jlc291cmNlLnN0YXRlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcHMgJiYgbnVsbCA9PT0gY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgKChwZW5kaW5nUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgXCJcXG5cXG4gIC0gXCIgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihjdXJyZW50UHJvcHMpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICArIFwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIDxsaW5rPiBub3QgdG8gdXBkYXRlIHRvIGJlIHVwZGF0ZWQgdG8gYSBzdHlsZXNoZWV0IHdpdGggcHJlY2VkZW5jZS4gQ2hlY2sgdGhlIGByZWxgLCBgaHJlZmAsIGFuZCBgcHJlY2VkZW5jZWAgcHJvcHMgb2YgdGhpcyBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCA8bGluaz4gY29tcG9uZW50cyByZW5kZXIgaW4gdGhlIHNhbWUgc2xvdCBvciBzaGFyZSB0aGUgc2FtZSBrZXkuXCIgK1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUHJvcHNcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIF9yZXNvdXJjZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRQcm9wcyAmJiBudWxsICE9PSBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICgocGVuZGluZ1Byb3BzID1cbiAgICAgICAgICAgICAgICBcIlxcblxcbiAgLSBcIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihjdXJyZW50UHJvcHMpICtcbiAgICAgICAgICAgICAgICBcIlxcbiAgKyBcIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBzdHlsZXNoZWV0IHdpdGggcHJlY2VkZW5jZSB0byBub3QgYmUgdXBkYXRlZCB0byBhIGRpZmZlcmVudCBraW5kIG9mIDxsaW5rPi4gQ2hlY2sgdGhlIGByZWxgLCBgaHJlZmAsIGFuZCBgcHJlY2VkZW5jZWAgcHJvcHMgb2YgdGhpcyBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCA8bGluaz4gY29tcG9uZW50cyByZW5kZXIgaW4gdGhlIHNhbWUgc2xvdCBvciBzaGFyZSB0aGUgc2FtZSBrZXkuXCIgK1xuICAgICAgICAgICAgICAgICAgcGVuZGluZ1Byb3BzXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50UHJvcHMgPSBwZW5kaW5nUHJvcHMuYXN5bmMpLFxuICAgICAgICAgICAgKHBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcy5zcmMpLFxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcyAmJlxuICAgICAgICAgICAgY3VycmVudFByb3BzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHMgJiZcbiAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHNcbiAgICAgICAgICAgICAgPyAoKHBlbmRpbmdQcm9wcyA9IGdldFNjcmlwdEtleShwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFByb3BzID1cbiAgICAgICAgICAgICAgICAgIGdldFJlc291cmNlc0Zyb21Sb290KHJlc291cmNlUm9vdCkuaG9pc3RhYmxlU2NyaXB0cyksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IGN1cnJlbnRQcm9wcy5nZXQocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcHMuc2V0KHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSksXG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgICA6IHsgdHlwZTogXCJ2b2lkXCIsIGluc3RhbmNlOiBudWxsLCBjb3VudDogMCwgc3RhdGU6IG51bGwgfVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnZ2V0UmVzb3VyY2UgZW5jb3VudGVyZWQgYSB0eXBlIGl0IGRpZCBub3QgZXhwZWN0OiBcIicgK1xuICAgICAgICAgICAgICB0eXBlICtcbiAgICAgICAgICAgICAgJ1wiLiB0aGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKHByb3BzKSB7XG4gICAgICB2YXIgZGVzY3JpYmVkUHJvcHMgPSAwLFxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiPGxpbmtcIjtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5yZWxcbiAgICAgICAgPyAoZGVzY3JpYmVkUHJvcHMrKywgKGRlc2NyaXB0aW9uICs9ICcgcmVsPVwiJyArIHByb3BzLnJlbCArICdcIicpKVxuICAgICAgICA6IGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIFwicmVsXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICAnIHJlbD1cIicgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLnJlbCA/IFwibnVsbFwiIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMucmVsKSArXG4gICAgICAgICAgICAnXCInKSk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuaHJlZlxuICAgICAgICA/IChkZXNjcmliZWRQcm9wcysrLCAoZGVzY3JpcHRpb24gKz0gJyBocmVmPVwiJyArIHByb3BzLmhyZWYgKyAnXCInKSlcbiAgICAgICAgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBcImhyZWZcIikgJiZcbiAgICAgICAgICAoZGVzY3JpYmVkUHJvcHMrKyxcbiAgICAgICAgICAoZGVzY3JpcHRpb24gKz1cbiAgICAgICAgICAgICcgaHJlZj1cIicgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICAgICAgPyBcIm51bGxcIlxuICAgICAgICAgICAgICA6IFwiaW52YWxpZCB0eXBlIFwiICsgdHlwZW9mIHByb3BzLmhyZWYpICtcbiAgICAgICAgICAgICdcIicpKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgID8gKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9ICcgcHJlY2VkZW5jZT1cIicgKyBwcm9wcy5wcmVjZWRlbmNlICsgJ1wiJykpXG4gICAgICAgIDogaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgXCJwcmVjZWRlbmNlXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICBcIiBwcmVjZWRlbmNlPXtcIiArXG4gICAgICAgICAgICAobnVsbCA9PT0gcHJvcHMucHJlY2VkZW5jZVxuICAgICAgICAgICAgICA/IFwibnVsbFwiXG4gICAgICAgICAgICAgIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSkgK1xuICAgICAgICAgICAgXCJ9XCIpKTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3BzKS5sZW5ndGggPiBkZXNjcmliZWRQcm9wcyAmJlxuICAgICAgICAoZGVzY3JpcHRpb24gKz0gXCIgLi4uXCIpO1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uICsgXCIgLz5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3R5bGVLZXkoaHJlZikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ2hyZWY9XCInICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArICdcIidcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KSB7XG4gICAgICByZXR1cm4gJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVsnICsga2V5ICsgXCJdXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0eWxlc2hlZXRQcm9wc0Zyb21SYXdQcm9wcyhyYXdQcm9wcykge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcmF3UHJvcHMsIHtcbiAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcmF3UHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRTdHlsZXNoZWV0KG93bmVyRG9jdW1lbnQsIGtleSwgcHJlbG9hZFByb3BzLCBzdGF0ZSkge1xuICAgICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwic3R5bGVcIl1bJyArIGtleSArIFwiXVwiXG4gICAgICApXG4gICAgICAgID8gKHN0YXRlLmxvYWRpbmcgPSBMb2FkZWQpXG4gICAgICAgIDogKChrZXkgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAoc3RhdGUucHJlbG9hZCA9IGtleSksXG4gICAgICAgICAga2V5LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc3RhdGUubG9hZGluZyB8PSBMb2FkZWQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGtleS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChzdGF0ZS5sb2FkaW5nIHw9IEVycm9yZWQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGtleSwgXCJsaW5rXCIsIHByZWxvYWRQcm9wcyksXG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShrZXkpLFxuICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrZXkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U2NyaXB0S2V5KHNyYykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ1tzcmM9XCInICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhzcmMpICsgJ1wiXSdcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgICAgIHJldHVybiBcInNjcmlwdFthc3luY11cIiArIGtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNxdWlyZVJlc291cmNlKGhvaXN0YWJsZVJvb3QsIHJlc291cmNlLCBwcm9wcykge1xuICAgICAgcmVzb3VyY2UuY291bnQrKztcbiAgICAgIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSlcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICdzdHlsZVtkYXRhLWhyZWZ+PVwiJyArXG4gICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlcyhwcm9wcy5ocmVmKSArXG4gICAgICAgICAgICAgICAgJ1wiXSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgc3R5bGVQcm9wcyA9IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgXCJkYXRhLWhyZWZcIjogcHJvcHMuaHJlZixcbiAgICAgICAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IChcbiAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICkuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgXCJzdHlsZVwiLCBzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgcmV0dXJuIChyZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlKTtcbiAgICAgICAgICBjYXNlIFwic3R5bGVzaGVldFwiOlxuICAgICAgICAgICAgc3R5bGVQcm9wcyA9IGdldFN0eWxlS2V5KHByb3BzLmhyZWYpO1xuICAgICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShzdHlsZVByb3BzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChfaW5zdGFuY2UpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQpLFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IF9pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShfaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocHJvcHMpO1xuICAgICAgICAgICAgKHN0eWxlUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KHN0eWxlUHJvcHMpKSAmJlxuICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaW5zdGFuY2UsIHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgX2luc3RhbmNlID0gKFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgKS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoX2luc3RhbmNlKTtcbiAgICAgICAgICAgIHZhciBsaW5rSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgICAgICAgICBsaW5rSW5zdGFuY2UuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoX2luc3RhbmNlLCBcImxpbmtcIiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoX2luc3RhbmNlLCBwcm9wcy5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2UpO1xuICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFNjcmlwdEtleShwcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoc3R5bGVQcm9wcyA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoX2luc3RhbmNlKVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IHN0eWxlUHJvcHMpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoc3R5bGVQcm9wcyksXG4gICAgICAgICAgICAgICAgc3R5bGVQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBwcm9wcztcbiAgICAgICAgICAgIGlmICgoc3R5bGVQcm9wcyA9IHByZWxvYWRQcm9wc01hcC5nZXQoX2luc3RhbmNlKSkpXG4gICAgICAgICAgICAgIChpbnN0YW5jZSA9IGFzc2lnbih7fSwgcHJvcHMpKSxcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChpbnN0YW5jZSwgc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICBob2lzdGFibGVSb290ID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICBzdHlsZVByb3BzID0gaG9pc3RhYmxlUm9vdC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHN0eWxlUHJvcHMsIFwibGlua1wiLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBob2lzdGFibGVSb290LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gc3R5bGVQcm9wcyk7XG4gICAgICAgICAgY2FzZSBcInZvaWRcIjpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgJ2FjcXVpcmVSZXNvdXJjZSBlbmNvdW50ZXJlZCBhIHJlc291cmNlIHR5cGUgaXQgZGlkIG5vdCBleHBlY3Q6IFwiJyArXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UudHlwZSArXG4gICAgICAgICAgICAgICAgJ1wiLiB0aGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHJlc291cmNlLnR5cGUgJiZcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSA9PT0gTm90TG9hZGVkICYmXG4gICAgICAgICAgKChpbnN0YW5jZSA9IHJlc291cmNlLmluc3RhbmNlKSxcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZCksXG4gICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJvcHMucHJlY2VkZW5jZSwgaG9pc3RhYmxlUm9vdCkpO1xuICAgICAgcmV0dXJuIHJlc291cmNlLmluc3RhbmNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdHlsZXNoZWV0KGluc3RhbmNlLCBwcmVjZWRlbmNlLCByb290KSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgbm9kZXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAnbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhc3QgPSBub2Rlcy5sZW5ndGggPyBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXSA6IG51bGwsXG4gICAgICAgICAgcHJpb3IgPSBsYXN0LFxuICAgICAgICAgIGkgPSAwO1xuICAgICAgICBpIDwgbm9kZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UgPT09IHByZWNlZGVuY2UpIHByaW9yID0gbm9kZTtcbiAgICAgICAgZWxzZSBpZiAocHJpb3IgIT09IGxhc3QpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpb3JcbiAgICAgICAgPyBwcmlvci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJpb3IubmV4dFNpYmxpbmcpXG4gICAgICAgIDogKChwcmVjZWRlbmNlID0gOSA9PT0gcm9vdC5ub2RlVHlwZSA/IHJvb3QuaGVhZCA6IHJvb3QpLFxuICAgICAgICAgIHByZWNlZGVuY2UuaW5zZXJ0QmVmb3JlKGluc3RhbmNlLCBwcmVjZWRlbmNlLmZpcnN0Q2hpbGQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHN0eWxlc2hlZXRQcm9wcywgcHJlbG9hZFByb3BzKSB7XG4gICAgICBudWxsID09IHN0eWxlc2hlZXRQcm9wcy5jcm9zc09yaWdpbiAmJlxuICAgICAgICAoc3R5bGVzaGVldFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgICAgIG51bGwgPT0gc3R5bGVzaGVldFByb3BzLnJlZmVycmVyUG9saWN5ICYmXG4gICAgICAgIChzdHlsZXNoZWV0UHJvcHMucmVmZXJyZXJQb2xpY3kgPSBwcmVsb2FkUHJvcHMucmVmZXJyZXJQb2xpY3kpO1xuICAgICAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMudGl0bGUgJiZcbiAgICAgICAgKHN0eWxlc2hlZXRQcm9wcy50aXRsZSA9IHByZWxvYWRQcm9wcy50aXRsZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNjcmlwdFByb3BzLCBwcmVsb2FkUHJvcHMpIHtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMuY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMucmVmZXJyZXJQb2xpY3kgJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMuaW50ZWdyaXR5ICYmXG4gICAgICAgIChzY3JpcHRQcm9wcy5pbnRlZ3JpdHkgPSBwcmVsb2FkUHJvcHMuaW50ZWdyaXR5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKHR5cGUsIGtleUF0dHJpYnV0ZSwgb3duZXJEb2N1bWVudCkge1xuICAgICAgaWYgKG51bGwgPT09IHRhZ0NhY2hlcykge1xuICAgICAgICB2YXIgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBjYWNoZXMgPSAodGFnQ2FjaGVzID0gbmV3IE1hcCgpKTtcbiAgICAgICAgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKGNhY2hlcyA9IHRhZ0NhY2hlcyksXG4gICAgICAgICAgKGNhY2hlID0gY2FjaGVzLmdldChvd25lckRvY3VtZW50KSksXG4gICAgICAgICAgY2FjaGUgfHwgKChjYWNoZSA9IG5ldyBNYXAoKSksIGNhY2hlcy5zZXQob3duZXJEb2N1bWVudCwgY2FjaGUpKTtcbiAgICAgIGlmIChjYWNoZS5oYXModHlwZSkpIHJldHVybiBjYWNoZTtcbiAgICAgIGNhY2hlLnNldCh0eXBlLCBudWxsKTtcbiAgICAgIG93bmVyRG9jdW1lbnQgPSBvd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHR5cGUpO1xuICAgICAgZm9yIChjYWNoZXMgPSAwOyBjYWNoZXMgPCBvd25lckRvY3VtZW50Lmxlbmd0aDsgY2FjaGVzKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBvd25lckRvY3VtZW50W2NhY2hlc107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHxcbiAgICAgICAgICAgIChcImxpbmtcIiA9PT0gdHlwZSAmJiBcInN0eWxlc2hlZXRcIiA9PT0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIikpXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgIG5vZGUubmFtZXNwYWNlVVJJICE9PSBTVkdfTkFNRVNQQUNFXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBub2RlS2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoa2V5QXR0cmlidXRlKSB8fCBcIlwiO1xuICAgICAgICAgIG5vZGVLZXkgPSB0eXBlICsgbm9kZUtleTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBjYWNoZS5nZXQobm9kZUtleSk7XG4gICAgICAgICAgZXhpc3RpbmcgPyBleGlzdGluZy5wdXNoKG5vZGUpIDogY2FjaGUuc2V0KG5vZGVLZXksIFtub2RlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRIb2lzdGFibGUoaG9pc3RhYmxlUm9vdCwgdHlwZSwgaW5zdGFuY2UpIHtcbiAgICAgIGhvaXN0YWJsZVJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBcInRpdGxlXCIgPT09IHR5cGUgPyBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIikgOiBudWxsXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHByb3BzLCBob3N0Q29udGV4dCkge1xuICAgICAgdmFyIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCA9XG4gICAgICAgICFob3N0Q29udGV4dC5hbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZTtcbiAgICAgIGlmIChcbiAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VTdmcgfHxcbiAgICAgICAgbnVsbCAhPSBwcm9wcy5pdGVtUHJvcFxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgfHxcbiAgICAgICAgICAgIG51bGwgPT0gcHJvcHMuaXRlbVByb3AgfHxcbiAgICAgICAgICAgIChcIm1ldGFcIiAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICBcInRpdGxlXCIgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgXCJzdHlsZVwiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwibGlua1wiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwic2NyaXB0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8JXM+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgaWYgaXQgaGFzIGFuIGBpdGVtUHJvcGAgcHJvcC4gYGl0ZW1Qcm9wYCBzdWdnZXN0cyB0aGUgdGFnIGJlbG9uZ3MgdG8gYW4gYGl0ZW1TY29wZWAgd2hpY2ggY2FuIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgRE9NLiBJZiB5b3Ugd2VyZSBpbnRlbmRpbmcgZm9yIFJlYWN0IHRvIGhvaXN0IHRoaXMgPCVzPiByZW1vdmUgdGhlIGBpdGVtUHJvcGAgcHJvcC4gT3RoZXJ3aXNlLCB0cnkgbW92aW5nIHRoaXMgdGFnIGludG8gdGhlIDxoZWFkPiBvciA8Ym9keT4gb2YgdGhlIERvY3VtZW50LlwiLFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSB8fFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLmhyZWYgfHxcbiAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgPHN0eWxlPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgcHJlY2VkZW5jZSBhbmQgYSB1bmlxdWUgaHJlZiBrZXkuIFJlYWN0IGNhbiBob2lzdCBhbmQgZGVkdXBsaWNhdGUgPHN0eWxlPiB0YWdzIGlmIHlvdSBwcm92aWRlIGEgYHByZWNlZGVuY2VgIHByb3AgYWxvbmcgd2l0aCBhbiBgaHJlZmAgcHJvcCB0aGF0IGRvZXMgbm90IGNvbmZsaWMgd2l0aCB0aGUgYGhyZWZgIHZhbHVlcyB1c2VkIGluIGFueSBvdGhlciBob2lzdGVkIDxzdHlsZT4gb3IgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIC4uLj4gdGFncy4gIE5vdGUgdGhhdCBob2lzdGluZyA8c3R5bGU+IHRhZ3MgaXMgY29uc2lkZXJlZCBhbiBhZHZhbmNlZCBmZWF0dXJlIHRoYXQgbW9zdCB3aWxsIG5vdCB1c2UgZGlyZWN0bHkuIENvbnNpZGVyIG1vdmluZyB0aGUgPHN0eWxlPiB0YWcgdG8gdGhlIDxoZWFkPiBvciBjb25zaWRlciBhZGRpbmcgYSBgcHJlY2VkZW5jZT1cImRlZmF1bHRcImAgYW5kIGBocmVmPVwic29tZSB1bmlxdWUgcmVzb3VyY2UgaWRlbnRpZmllclwiYCwgb3IgbW92ZSB0aGUgPHN0eWxlPiB0byB0aGUgPHN0eWxlPiB0YWcuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucmVsIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgXCJcIiA9PT0gcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgcHJvcHMub25Mb2FkIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkVycm9yXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBwcm9wcy5yZWwgJiZcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLnByZWNlZGVuY2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0eXBlID0gcHJvcHMuaHJlZjtcbiAgICAgICAgICAgICAgdmFyIG9uRXJyb3IgPSBwcm9wcy5vbkVycm9yLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgIGhvc3RDb250ZXh0ID0gW107XG4gICAgICAgICAgICAgIHByb3BzLm9uTG9hZCAmJiBob3N0Q29udGV4dC5wdXNoKFwiYG9uTG9hZGBcIik7XG4gICAgICAgICAgICAgIG9uRXJyb3IgJiYgaG9zdENvbnRleHQucHVzaChcImBvbkVycm9yYFwiKTtcbiAgICAgICAgICAgICAgbnVsbCAhPSBkaXNhYmxlZCAmJiBob3N0Q29udGV4dC5wdXNoKFwiYGRpc2FibGVkYFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciA9IHByb3BOYW1lc0xpc3RKb2luKGhvc3RDb250ZXh0LCBcImFuZFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciArPSAxID09PSBob3N0Q29udGV4dC5sZW5ndGggPyBcIiBwcm9wXCIgOiBcIiBwcm9wc1wiO1xuICAgICAgICAgICAgICBkaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgMSA9PT0gaG9zdENvbnRleHQubGVuZ3RoID8gXCJhbiBcIiArIG9uRXJyb3IgOiBcInRoZSBcIiArIG9uRXJyb3I7XG4gICAgICAgICAgICAgIGhvc3RDb250ZXh0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnUmVhY3QgZW5jb3VudGVyZWQgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIiVzXCIgLi4uIC8+IHdpdGggYSBgcHJlY2VkZW5jZWAgcHJvcCB0aGF0IGFsc28gaW5jbHVkZWQgJXMuIFRoZSBwcmVzZW5jZSBvZiBsb2FkaW5nIGFuZCBlcnJvciBoYW5kbGVycyBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvIG1hbmFnZSB0aGUgc3R5bGVzaGVldCBsb2FkaW5nIHN0YXRlIGZyb20geW91ciBmcm9tIHlvdXIgQ29tcG9uZW50IGNvZGUgYW5kIFJlYWN0IHdpbGwgbm90IGhvaXN0IG9yIGRlZHVwbGljYXRlIHRoaXMgc3R5bGVzaGVldC4gSWYgeW91ciBpbnRlbnQgd2FzIHRvIGhhdmUgUmVhY3QgaG9pc3QgYW5kIGRlZHVwbGNpYXRlIHRoaXMgc3R5bGVzaGVldCB1c2luZyB0aGUgYHByZWNlZGVuY2VgIHByb3AgcmVtb3ZlIHRoZSAlcywgb3RoZXJ3aXNlIHJlbW92ZSB0aGUgYHByZWNlZGVuY2VgIHByb3AuJyxcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucmVsIHx8XG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5ocmVmIHx8XG4gICAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDxsaW5rPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYSBgcmVsYCBhbmQgYGhyZWZgIHByb3AuIFRyeSBhZGRpbmcgYSBgcmVsYCBhbmQvb3IgYGhyZWZgIHByb3AgdG8gdGhpcyA8bGluaz4gb3IgbW92aW5nIHRoZSBsaW5rIGludG8gdGhlIDxoZWFkPiB0YWdcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogKHByb3BzLm9uRXJyb3IgfHwgcHJvcHMub25Mb2FkKSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPGxpbms+IHdpdGggb25Mb2FkIG9yIG9uRXJyb3IgbGlzdGVuZXJzIG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQuIFRyeSByZW1vdmluZyBvbkxvYWQ9ey4uLn0gYW5kIG9uRXJyb3I9ey4uLn0gb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZyBvciBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi5cIlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpdGNoIChwcm9wcy5yZWwpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZXNoZWV0XCI6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHR5cGUgPSBwcm9wcy5wcmVjZWRlbmNlKSxcbiAgICAgICAgICAgICAgICAocHJvcHMgPSBwcm9wcy5kaXNhYmxlZCksXG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCByZW5kZXIgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgLz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIHByZWNlZGVuY2UuIENvbnNpZGVyIGFkZGluZyBwcmVjZWRlbmNlPVwiZGVmYXVsdFwiIG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuJ1xuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSAmJiBudWxsID09IHByb3BzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgdHlwZSA9XG4gICAgICAgICAgICBwcm9wcy5hc3luYyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJvcHMuYXN5bmMgJiZcbiAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBwcm9wcy5hc3luYztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdHlwZSB8fFxuICAgICAgICAgICAgcHJvcHMub25Mb2FkIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkVycm9yIHx8XG4gICAgICAgICAgICAhcHJvcHMuc3JjIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuc3JjXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgICAgKHR5cGVcbiAgICAgICAgICAgICAgICA/IHByb3BzLm9uTG9hZCB8fCBwcm9wcy5vbkVycm9yXG4gICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPHNjcmlwdD4gd2l0aCBvbkxvYWQgb3Igb25FcnJvciBsaXN0ZW5lcnMgb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IHJlbW92aW5nIG9uTG9hZD17Li4ufSBhbmQgb25FcnJvcj17Li4ufSBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYGFzeW5jPXt0cnVlfWAgYW5kIGEgbm9uLWVtcHR5IGBzcmNgIHByb3AuIEVuc3VyZSB0aGVyZSBpcyBhIHZhbGlkIGBzcmNgIGFuZCBlaXRoZXIgbWFrZSB0aGUgc2NyaXB0IGFzeW5jIG9yIG1vdmUgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgc3luYyBvciBkZWZlciA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgb3JkZXIuIFRyeSBhZGRpbmcgYXN5bmM9XCJcIiBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnLidcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcIm5vc2NyaXB0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZW1wbGF0ZVwiOlxuICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIDwlcz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgU2V0dGxlZCkgPT09IE5vdExvYWRlZFxuICAgICAgICA/ICExXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIHN1c3BlbmRSZXNvdXJjZShob2lzdGFibGVSb290LCByZXNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRTdGF0ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBFcnJvcjogc3VzcGVuZGVkU3RhdGUgbnVsbCB3aGVuIGl0IHdhcyBleHBlY3RlZCB0byBleGlzdHMuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIFJlYWN0IGJ1Zy5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHN0YXRlID0gc3VzcGVuZGVkU3RhdGU7XG4gICAgICBpZiAoXG4gICAgICAgIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMubWVkaWEgfHxcbiAgICAgICAgICAhMSAhPT0gbWF0Y2hNZWRpYShwcm9wcy5tZWRpYSkubWF0Y2hlcykgJiZcbiAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkgPT09IE5vdExvYWRlZFxuICAgICAgKSB7XG4gICAgICAgIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSkge1xuICAgICAgICAgIHZhciBrZXkgPSBnZXRTdHlsZUtleShwcm9wcy5ocmVmKSxcbiAgICAgICAgICAgIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBob2lzdGFibGVSb290ID0gaW5zdGFuY2UuX3A7XG4gICAgICAgICAgICBudWxsICE9PSBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGhvaXN0YWJsZVJvb3QudGhlbiAmJlxuICAgICAgICAgICAgICAoc3RhdGUuY291bnQrKyxcbiAgICAgICAgICAgICAgKHN0YXRlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290LnRoZW4oc3RhdGUsIHN0YXRlKSk7XG4gICAgICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICAgICAgICAgIHByb3BzID0gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHByb3BzKTtcbiAgICAgICAgICAoa2V5ID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHByb3BzLCBrZXkpO1xuICAgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgdmFyIGxpbmtJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgIGxpbmtJbnN0YW5jZS5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgbGlua0luc3RhbmNlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsIFwibGlua1wiLCBwcm9wcyk7XG4gICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBzdGF0ZS5zdHlsZXNoZWV0cyAmJiAoc3RhdGUuc3R5bGVzaGVldHMgPSBuZXcgTWFwKCkpO1xuICAgICAgICBzdGF0ZS5zdHlsZXNoZWV0cy5zZXQocmVzb3VyY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAoaG9pc3RhYmxlUm9vdCA9IHJlc291cmNlLnN0YXRlLnByZWxvYWQpICYmXG4gICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBTZXR0bGVkKSA9PT0gTm90TG9hZGVkICYmXG4gICAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgICAgKHJlc291cmNlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb3VyY2UpLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlc291cmNlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gc3VzcGVuZGVkU3RhdGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgRXJyb3I6IHN1c3BlbmRlZFN0YXRlIG51bGwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3RzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBSZWFjdCBidWcuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBzdGF0ZSA9IHN1c3BlbmRlZFN0YXRlO1xuICAgICAgc3RhdGUuc3R5bGVzaGVldHMgJiZcbiAgICAgICAgMCA9PT0gc3RhdGUuY291bnQgJiZcbiAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgICAgIHJldHVybiAwIDwgc3RhdGUuY291bnRcbiAgICAgICAgPyBmdW5jdGlvbiAoY29tbWl0KSB7XG4gICAgICAgICAgICB2YXIgc3R5bGVzaGVldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnN0eWxlc2hlZXRzICYmXG4gICAgICAgICAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlLnVuc3VzcGVuZCkge1xuICAgICAgICAgICAgICAgIHZhciB1bnN1c3BlbmQgPSBzdGF0ZS51bnN1c3BlbmQ7XG4gICAgICAgICAgICAgICAgc3RhdGUudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNmU0KTtcbiAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IGNvbW1pdDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IG51bGw7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChzdHlsZXNoZWV0VGltZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25VbnN1c3BlbmQoKSB7XG4gICAgICB0aGlzLmNvdW50LS07XG4gICAgICBpZiAoMCA9PT0gdGhpcy5jb3VudClcbiAgICAgICAgaWYgKHRoaXMuc3R5bGVzaGVldHMpXG4gICAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHModGhpcywgdGhpcy5zdHlsZXNoZWV0cyk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudW5zdXNwZW5kKSB7XG4gICAgICAgICAgdmFyIHVuc3VzcGVuZCA9IHRoaXMudW5zdXNwZW5kO1xuICAgICAgICAgIHRoaXMudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyhzdGF0ZSwgcmVzb3VyY2VzKSB7XG4gICAgICBzdGF0ZS5zdHlsZXNoZWV0cyA9IG51bGw7XG4gICAgICBudWxsICE9PSBzdGF0ZS51bnN1c3BlbmQgJiZcbiAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgIChwcmVjZWRlbmNlc0J5Um9vdCA9IG5ldyBNYXAoKSksXG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdCwgc3RhdGUpLFxuICAgICAgICAocHJlY2VkZW5jZXNCeVJvb3QgPSBudWxsKSxcbiAgICAgICAgb25VbnN1c3BlbmQuY2FsbChzdGF0ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdHlsZXNoZWV0SW50b1Jvb3Qocm9vdCwgcmVzb3VyY2UpIHtcbiAgICAgIGlmICghKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkpIHtcbiAgICAgICAgdmFyIHByZWNlZGVuY2VzID0gcHJlY2VkZW5jZXNCeVJvb3QuZ2V0KHJvb3QpO1xuICAgICAgICBpZiAocHJlY2VkZW5jZXMpIHZhciBsYXN0ID0gcHJlY2VkZW5jZXMuZ2V0KExBU1RfUFJFQ0VERU5DRSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHByZWNlZGVuY2VzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHByZWNlZGVuY2VzQnlSb290LnNldChyb290LCBwcmVjZWRlbmNlcyk7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICBcImxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICBpIDwgbm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgaSsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcIkxJTktcIiA9PT0gbm9kZS5ub2RlTmFtZSB8fFxuICAgICAgICAgICAgICBcIm5vdCBhbGxcIiAhPT0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJtZWRpYVwiKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBwcmVjZWRlbmNlcy5zZXQobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UsIG5vZGUpLCAobGFzdCA9IG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0ICYmIHByZWNlZGVuY2VzLnNldChMQVNUX1BSRUNFREVOQ0UsIGxhc3QpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzID0gcmVzb3VyY2UuaW5zdGFuY2U7XG4gICAgICAgIG5vZGUgPSBub2Rlcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIik7XG4gICAgICAgIGkgPSBwcmVjZWRlbmNlcy5nZXQobm9kZSkgfHwgbGFzdDtcbiAgICAgICAgaSA9PT0gbGFzdCAmJiBwcmVjZWRlbmNlcy5zZXQoTEFTVF9QUkVDRURFTkNFLCBub2Rlcyk7XG4gICAgICAgIHByZWNlZGVuY2VzLnNldChub2RlLCBub2Rlcyk7XG4gICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgbGFzdCA9IG9uVW5zdXNwZW5kLmJpbmQodGhpcyk7XG4gICAgICAgIG5vZGVzLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGxhc3QpO1xuICAgICAgICBub2Rlcy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbGFzdCk7XG4gICAgICAgIGlcbiAgICAgICAgICA/IGkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZXMsIGkubmV4dFNpYmxpbmcpXG4gICAgICAgICAgOiAoKHJvb3QgPSA5ID09PSByb290Lm5vZGVUeXBlID8gcm9vdC5oZWFkIDogcm9vdCksXG4gICAgICAgICAgICByb290Lmluc2VydEJlZm9yZShub2Rlcywgcm9vdC5maXJzdENoaWxkKSk7XG4gICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRUb0NvbnNvbGUobWV0aG9kTmFtZSwgYXJncywgYmFkZ2VOYW1lKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgIHN3aXRjaCAobWV0aG9kTmFtZSkge1xuICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgIGNhc2UgXCJkaXJ4bWxcIjpcbiAgICAgICAgY2FzZSBcImdyb3VwRW5kXCI6XG4gICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICAgIHJldHVybiBiaW5kLmFwcGx5KGNvbnNvbGVbbWV0aG9kTmFtZV0sIFtjb25zb2xlXS5jb25jYXQoYXJncykpO1xuICAgICAgICBjYXNlIFwiYXNzZXJ0XCI6XG4gICAgICAgICAgb2Zmc2V0ID0gMTtcbiAgICAgIH1cbiAgICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDApO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGFyZ3Nbb2Zmc2V0XVxuICAgICAgICA/IGFyZ3Muc3BsaWNlKFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIGJhZGdlRm9ybWF0ICsgYXJnc1tvZmZzZXRdLFxuICAgICAgICAgICAgYmFkZ2VTdHlsZSxcbiAgICAgICAgICAgIHBhZCArIGJhZGdlTmFtZSArIHBhZCxcbiAgICAgICAgICAgIHJlc2V0U3R5bGVcbiAgICAgICAgICApXG4gICAgICAgIDogYXJncy5zcGxpY2UoXG4gICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgYmFkZ2VGb3JtYXQsXG4gICAgICAgICAgICBiYWRnZVN0eWxlLFxuICAgICAgICAgICAgcGFkICsgYmFkZ2VOYW1lICsgcGFkLFxuICAgICAgICAgICAgcmVzZXRTdHlsZVxuICAgICAgICAgICk7XG4gICAgICBhcmdzLnVuc2hpZnQoY29uc29sZSk7XG4gICAgICByZXR1cm4gYmluZC5hcHBseShjb25zb2xlW21ldGhvZE5hbWVdLCBhcmdzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gRmliZXJSb290Tm9kZShcbiAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICB0YWcsXG4gICAgICBoeWRyYXRlLFxuICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICBmb3JtU3RhdGVcbiAgICApIHtcbiAgICAgIHRoaXMudGFnID0gMTtcbiAgICAgIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gICAgICB0aGlzLmZpbmlzaGVkV29yayA9XG4gICAgICAgIHRoaXMucGluZ0NhY2hlID1cbiAgICAgICAgdGhpcy5jdXJyZW50ID1cbiAgICAgICAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gICAgICB0aGlzLmNhbGxiYWNrTm9kZSA9XG4gICAgICAgIHRoaXMubmV4dCA9XG4gICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPVxuICAgICAgICB0aGlzLmNvbnRleHQgPVxuICAgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdDb21taXQgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSAwO1xuICAgICAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKC0xKTtcbiAgICAgIHRoaXMuZW50YW5nbGVkTGFuZXMgPVxuICAgICAgICB0aGlzLnNoZWxsU3VzcGVuZENvdW50ZXIgPVxuICAgICAgICB0aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID1cbiAgICAgICAgdGhpcy5maW5pc2hlZExhbmVzID1cbiAgICAgICAgdGhpcy5leHBpcmVkTGFuZXMgPVxuICAgICAgICB0aGlzLndhcm1MYW5lcyA9XG4gICAgICAgIHRoaXMucGluZ2VkTGFuZXMgPVxuICAgICAgICB0aGlzLnN1c3BlbmRlZExhbmVzID1cbiAgICAgICAgdGhpcy5wZW5kaW5nTGFuZXMgPVxuICAgICAgICAgIDA7XG4gICAgICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKDApO1xuICAgICAgdGhpcy5oaWRkZW5VcGRhdGVzID0gY3JlYXRlTGFuZU1hcChudWxsKTtcbiAgICAgIHRoaXMuaWRlbnRpZmllclByZWZpeCA9IGlkZW50aWZpZXJQcmVmaXg7XG4gICAgICB0aGlzLm9uVW5jYXVnaHRFcnJvciA9IG9uVW5jYXVnaHRFcnJvcjtcbiAgICAgIHRoaXMub25DYXVnaHRFcnJvciA9IG9uQ2F1Z2h0RXJyb3I7XG4gICAgICB0aGlzLm9uUmVjb3ZlcmFibGVFcnJvciA9IG9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICAgIHRoaXMucG9vbGVkQ2FjaGUgPSBudWxsO1xuICAgICAgdGhpcy5wb29sZWRDYWNoZUxhbmVzID0gMDtcbiAgICAgIHRoaXMuZm9ybVN0YXRlID0gZm9ybVN0YXRlO1xuICAgICAgdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IHRoaXMuZWZmZWN0RHVyYXRpb24gPSAtMDtcbiAgICAgIHRoaXMubWVtb2l6ZWRVcGRhdGVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnRhaW5lckluZm8gPSB0aGlzLnBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSBbXTtcbiAgICAgIGZvciAodGFnID0gMDsgMzEgPiB0YWc7IHRhZysrKSBjb250YWluZXJJbmZvLnB1c2gobmV3IFNldCgpKTtcbiAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSBoeWRyYXRlID8gXCJoeWRyYXRlUm9vdCgpXCIgOiBcImNyZWF0ZVJvb3QoKVwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoXG4gICAgICBjb250YWluZXJJbmZvLFxuICAgICAgdGFnLFxuICAgICAgaHlkcmF0ZSxcbiAgICAgIGluaXRpYWxDaGlsZHJlbixcbiAgICAgIGh5ZHJhdGlvbkNhbGxiYWNrcyxcbiAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgICAgIGZvcm1TdGF0ZVxuICAgICkge1xuICAgICAgY29udGFpbmVySW5mbyA9IG5ldyBGaWJlclJvb3ROb2RlKFxuICAgICAgICBjb250YWluZXJJbmZvLFxuICAgICAgICB0YWcsXG4gICAgICAgIGh5ZHJhdGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICBmb3JtU3RhdGVcbiAgICAgICk7XG4gICAgICB0YWcgPSBDb25jdXJyZW50TW9kZTtcbiAgICAgICEwID09PSBpc1N0cmljdE1vZGUgJiYgKHRhZyB8PSBTdHJpY3RMZWdhY3lNb2RlIHwgU3RyaWN0RWZmZWN0c01vZGUpO1xuICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgKHRhZyB8PSBQcm9maWxlTW9kZSk7XG4gICAgICBpc1N0cmljdE1vZGUgPSBjcmVhdGVGaWJlcigzLCBudWxsLCBudWxsLCB0YWcpO1xuICAgICAgY29udGFpbmVySW5mby5jdXJyZW50ID0gaXNTdHJpY3RNb2RlO1xuICAgICAgaXNTdHJpY3RNb2RlLnN0YXRlTm9kZSA9IGNvbnRhaW5lckluZm87XG4gICAgICB0YWcgPSBjcmVhdGVDYWNoZSgpO1xuICAgICAgcmV0YWluQ2FjaGUodGFnKTtcbiAgICAgIGNvbnRhaW5lckluZm8ucG9vbGVkQ2FjaGUgPSB0YWc7XG4gICAgICByZXRhaW5DYWNoZSh0YWcpO1xuICAgICAgaXNTdHJpY3RNb2RlLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgIGVsZW1lbnQ6IGluaXRpYWxDaGlsZHJlbixcbiAgICAgICAgaXNEZWh5ZHJhdGVkOiBoeWRyYXRlLFxuICAgICAgICBjYWNoZTogdGFnXG4gICAgICB9O1xuICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGlzU3RyaWN0TW9kZSk7XG4gICAgICByZXR1cm4gY29udGFpbmVySW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICBpZiAoIXBhcmVudENvbXBvbmVudCkgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHBhcmVudENvbXBvbmVudCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHJldHVybiBwYXJlbnRDb21wb25lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lclN5bmMoXG4gICAgICBlbGVtZW50LFxuICAgICAgY29udGFpbmVyLFxuICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIDAgPT09IGNvbnRhaW5lci50YWcgJiYgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgdXBkYXRlQ29udGFpbmVySW1wbChcbiAgICAgICAgY29udGFpbmVyLmN1cnJlbnQsXG4gICAgICAgIDIsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgcGFyZW50Q29tcG9uZW50LFxuICAgICAgICBjYWxsYmFja1xuICAgICAgKTtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDb250YWluZXJJbXBsKFxuICAgICAgcm9vdEZpYmVyLFxuICAgICAgbGFuZSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3RcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCBjb250YWluZXIsIGVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTY2hlZHVsZWQobGFuZSk7XG4gICAgICBwYXJlbnRDb21wb25lbnQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuICAgICAgbnVsbCA9PT0gY29udGFpbmVyLmNvbnRleHRcbiAgICAgICAgPyAoY29udGFpbmVyLmNvbnRleHQgPSBwYXJlbnRDb21wb25lbnQpXG4gICAgICAgIDogKGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IHBhcmVudENvbXBvbmVudCk7XG4gICAgICBpc1JlbmRlcmluZyAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzICYmXG4gICAgICAgICgoZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy5cIixcbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnQpIHx8IFwiVW5rbm93blwiXG4gICAgICAgICkpO1xuICAgICAgY29udGFpbmVyID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgY29udGFpbmVyLnBheWxvYWQgPSB7IGVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgICAgIGNhbGxiYWNrID0gdm9pZCAwID09PSBjYWxsYmFjayA/IG51bGwgOiBjYWxsYmFjaztcbiAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjYWxsYmFjayAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICksXG4gICAgICAgIChjb250YWluZXIuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgZWxlbWVudCA9IGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCBjb250YWluZXIsIGxhbmUpO1xuICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGVsZW1lbnQsIHJvb3RGaWJlciwgbGFuZSksXG4gICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoZWxlbWVudCwgcm9vdEZpYmVyLCBsYW5lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBmaWJlciAmJiBudWxsICE9PSBmaWJlci5kZWh5ZHJhdGVkKSB7XG4gICAgICAgIHZhciBhID0gZmliZXIucmV0cnlMYW5lO1xuICAgICAgICBmaWJlci5yZXRyeUxhbmUgPSAwICE9PSBhICYmIGEgPCByZXRyeUxhbmUgPyBhIDogcmV0cnlMYW5lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gICAgICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgICAgIChmaWJlciA9IGZpYmVyLmFsdGVybmF0ZSkgJiYgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAoMTMgPT09IGZpYmVyLnRhZykge1xuICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgNjcxMDg4NjQpO1xuICAgICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgNjcxMDg4NjQpO1xuICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgNjcxMDg4NjQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMYW5lTGFiZWxNYXAoKSB7XG4gICAgICBmb3IgKHZhciBtYXAgPSBuZXcgTWFwKCksIGxhbmUgPSAxLCBpbmRleCA9IDA7IDMxID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxGb3JMYW5lKGxhbmUpO1xuICAgICAgICBtYXAuc2V0KGxhbmUsIGxhYmVsKTtcbiAgICAgICAgbGFuZSAqPSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICB0cnkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eSksXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hDb250aW51b3VzRXZlbnQoXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gQ29udGludW91c0V2ZW50UHJpb3JpdHkpLFxuICAgICAgICAgIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIGlmIChfZW5hYmxlZCkge1xuICAgICAgICB2YXIgYmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCk7XG4gICAgICAgIGlmIChudWxsID09PSBibG9ja2VkT24pXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgcmV0dXJuX3RhcmdldEluc3QsXG4gICAgICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICAgICApLFxuICAgICAgICAgICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgcXVldWVJZkNvbnRpbnVvdXNFdmVudChcbiAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIG5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSxcbiAgICAgICAgICBldmVudFN5c3RlbUZsYWdzICYgNCAmJlxuICAgICAgICAgICAgLTEgPCBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihkb21FdmVudE5hbWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3IgKDsgbnVsbCAhPT0gYmxvY2tlZE9uOyApIHtcbiAgICAgICAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBmaWJlcilcbiAgICAgICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICBmaWJlciA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWJlci5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGZpYmVyLnBlbmRpbmdMYW5lcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgwICE9PSBsYW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciByb290ID0gZmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gMjtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gMjsgbGFuZXM7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSAxIDw8ICgzMSAtIGNsejMyKGxhbmVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmVudGFuZ2xlbWVudHNbMV0gfD0gbGFuZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoZmliZXIpO1xuICAgICAgICAgICAgICAgICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vdyQxKCkgKyBSRU5ERVJfVElNRU9VVF9NUyksXG4gICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgKHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpLFxuICAgICAgICAgICAgICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgICAgICAgICAgICAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIDIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWJlciA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgICAgICAgICAgbnVsbCA9PT0gZmliZXIgJiZcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIHJldHVybl90YXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZpYmVyID09PSBibG9ja2VkT24pIGJyZWFrO1xuICAgICAgICAgICAgYmxvY2tlZE9uID0gZmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRPbiAmJiBuYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgICAgIG5hdGl2ZUV2ZW50ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuIGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQodGFyZ2V0Tm9kZSkge1xuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsO1xuICAgICAgdGFyZ2V0Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpO1xuICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHtcbiAgICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXROb2RlKTtcbiAgICAgICAgaWYgKG51bGwgPT09IG5lYXJlc3RNb3VudGVkKSB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcbiAgICAgICAgICBpZiAoMTMgPT09IHRhZykge1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHJldHVybiB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgzID09PSB0YWcpIHtcbiAgICAgICAgICAgIGlmIChuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClcbiAgICAgICAgICAgICAgcmV0dXJuIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgbmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldE5vZGUgJiYgKHRhcmdldE5vZGUgPSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSB0YXJnZXROb2RlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiYmVmb3JldG9nZ2xlXCI6XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjpcbiAgICAgICAgY2FzZSBcImNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgY2FzZSBcImNvcHlcIjpcbiAgICAgICAgY2FzZSBcImN1dFwiOlxuICAgICAgICBjYXNlIFwiYXV4Y2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImRibGNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcImRyb3BcIjpcbiAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBjYXNlIFwiaW52YWxpZFwiOlxuICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgY2FzZSBcIm1vdXNldXBcIjpcbiAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICBjYXNlIFwicGxheVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmRvd25cIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJ1cFwiOlxuICAgICAgICBjYXNlIFwicmF0ZWNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwicmVzZXRcIjpcbiAgICAgICAgY2FzZSBcInJlc2l6ZVwiOlxuICAgICAgICBjYXNlIFwic2Vla2VkXCI6XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjpcbiAgICAgICAgY2FzZSBcInRvZ2dsZVwiOlxuICAgICAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjpcbiAgICAgICAgY2FzZSBcInRvdWNoZW5kXCI6XG4gICAgICAgIGNhc2UgXCJ0b3VjaHN0YXJ0XCI6XG4gICAgICAgIGNhc2UgXCJ2b2x1bWVjaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcImNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOlxuICAgICAgICBjYXNlIFwiYmVmb3JlYmx1clwiOlxuICAgICAgICBjYXNlIFwiYWZ0ZXJibHVyXCI6XG4gICAgICAgIGNhc2UgXCJiZWZvcmVpbnB1dFwiOlxuICAgICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICBjYXNlIFwiZnVsbHNjcmVlbmNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNcIjpcbiAgICAgICAgY2FzZSBcImhhc2hjaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcInBvcHN0YXRlXCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgY2FzZSBcInNlbGVjdHN0YXJ0XCI6XG4gICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgY2FzZSBcImRyYWdcIjpcbiAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2V4aXRcIjpcbiAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICBjYXNlIFwiZHJhZ292ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlbW92ZVwiOlxuICAgICAgICBjYXNlIFwibW91c2VvdXRcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlb3ZlclwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm1vdmVcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgY2FzZSBcInRvdWNobW92ZVwiOlxuICAgICAgICBjYXNlIFwid2hlZWxcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlbGVhdmVcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJlbnRlclwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmxlYXZlXCI6XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgIHN3aXRjaCAoZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgICAgICAgICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgICAgICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgICAgICAgICByZXR1cm4gSWRsZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShuYXRpdmVFdmVudC5wb2ludGVySWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudCxcbiAgICAgIGJsb2NrZWRPbixcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBleGlzdGluZ1F1ZXVlZEV2ZW50IHx8XG4gICAgICAgIGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50XG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGV4aXN0aW5nUXVldWVkRXZlbnQgPSB7XG4gICAgICAgICAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZE9uICYmXG4gICAgICAgICAgICAoKGJsb2NrZWRPbiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKSksXG4gICAgICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiYgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYmxvY2tlZE9uKSksXG4gICAgICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudFxuICAgICAgICApO1xuICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gICAgICBibG9ja2VkT24gPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG4gICAgICBudWxsICE9PSB0YXJnZXRDb250YWluZXIgJiZcbiAgICAgICAgLTEgPT09IGJsb2NrZWRPbi5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgJiZcbiAgICAgICAgYmxvY2tlZE9uLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgICAgIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KFxuICAgICAgYmxvY2tlZE9uLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWRGb2N1cyxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkRHJhZyxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgIHF1ZXVlZE1vdXNlLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KFxuICAgICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgICAgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQpLFxuICAgICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChcbiAgICAgICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQocG9pbnRlcklkKSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAgICAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcbiAgICAgIGlmIChudWxsICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG4gICAgICAgIGlmIChudWxsICE9PSBuZWFyZXN0TW91bnRlZClcbiAgICAgICAgICBpZiAoKCh0YXJnZXRJbnN0ID0gbmVhcmVzdE1vdW50ZWQudGFnKSwgMTMgPT09IHRhcmdldEluc3QpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgodGFyZ2V0SW5zdCA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICAgICAgcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICgxMyA9PT0gbmVhcmVzdE1vdW50ZWQudGFnKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKG5lYXJlc3RNb3VudGVkKSxcbiAgICAgICAgICAgICAgICAgICAgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShuZWFyZXN0TW91bnRlZCwgbGFuZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSByb290ICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBuZWFyZXN0TW91bnRlZCwgbGFuZSk7XG4gICAgICAgICAgICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChuZWFyZXN0TW91bnRlZCwgbGFuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAzID09PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9XG4gICAgICAgICAgICAgIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgICAgIGlmIChudWxsICE9PSBxdWV1ZWRFdmVudC5ibG9ja2VkT24pIHJldHVybiAhMTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcbiAgICAgICAgMCA8IHRhcmdldENvbnRhaW5lcnMubGVuZ3RoO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICAgICAgaWYgKG51bGwgPT09IG5leHRCbG9ja2VkT24pIHtcbiAgICAgICAgICBuZXh0QmxvY2tlZE9uID0gcXVldWVkRXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgdmFyIG5hdGl2ZUV2ZW50Q2xvbmUgPSBuZXcgbmV4dEJsb2NrZWRPbi5jb25zdHJ1Y3RvcihcbiAgICAgICAgICAgICAgbmV4dEJsb2NrZWRPbi50eXBlLFxuICAgICAgICAgICAgICBuZXh0QmxvY2tlZE9uXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZXZlbnQgPSBuYXRpdmVFdmVudENsb25lO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjdXJyZW50bHkgcmVwbGF5aW5nIGV2ZW50IHRvIGJlIG51bGwuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgbmV4dEJsb2NrZWRPbi50YXJnZXQuZGlzcGF0Y2hFdmVudChuYXRpdmVFdmVudENsb25lKTtcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50UmVwbGF5aW5nRXZlbnQgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgY3VycmVudGx5IHJlcGxheWluZyBldmVudCB0byBub3QgYmUgbnVsbC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRhcmdldENvbnRhaW5lcnMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pKSxcbiAgICAgICAgICAgIG51bGwgIT09IHRhcmdldENvbnRhaW5lcnMgJiZcbiAgICAgICAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24odGFyZ2V0Q29udGFpbmVycyksXG4gICAgICAgICAgICAocXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbiksXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkgJiYgbWFwLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gITE7XG4gICAgICBudWxsICE9PSBxdWV1ZWRGb2N1cyAmJlxuICAgICAgICBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSAmJlxuICAgICAgICAocXVldWVkRm9jdXMgPSBudWxsKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZERyYWcgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSAmJlxuICAgICAgICAocXVldWVkRHJhZyA9IG51bGwpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkTW91c2UgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkgJiZcbiAgICAgICAgKHF1ZXVlZE1vdXNlID0gbnVsbCk7XG4gICAgICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQgJiZcbiAgICAgICAgKChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsKSxcbiAgICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCB8fFxuICAgICAgICAgICgoaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9ICEwKSxcbiAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICAgICAgICAgIHJlcGxheVVuYmxvY2tlZEV2ZW50c1xuICAgICAgICAgICkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGZvcm1SZXBsYXlpbmdRdWV1ZSkge1xuICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlICE9PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgKChsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPSBmb3JtUmVwbGF5aW5nUXVldWUpLFxuICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID09PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgICAgICAgKGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtUmVwbGF5aW5nUXVldWUubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgdmFyIGZvcm0gPSBmb3JtUmVwbGF5aW5nUXVldWVbaV0sXG4gICAgICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24gPSBmb3JtUmVwbGF5aW5nUXVldWVbaSArIDFdLFxuICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gZm9ybVJlcGxheWluZ1F1ZXVlW2kgKyAyXTtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN1Ym1pdHRlck9yQWN0aW9uKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KHN1Ym1pdHRlck9yQWN0aW9uIHx8IGZvcm0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgICAgICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZm9ybUluc3QgJiZcbiAgICAgICAgICAgICAgICAoZm9ybVJlcGxheWluZ1F1ZXVlLnNwbGljZShpLCAzKSxcbiAgICAgICAgICAgICAgICAoaSAtPSAzKSxcbiAgICAgICAgICAgICAgICAoZm9ybSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmc6ICEwLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBtZXRob2Q6IGZvcm0ubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBzdWJtaXR0ZXJPckFjdGlvblxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoZm9ybSksXG4gICAgICAgICAgICAgICAgc3RhcnRIb3N0VHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAgIGZvcm1JbnN0LFxuICAgICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgZm9ybURhdGFcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAgICAgZnVuY3Rpb24gdW5ibG9jayhxdWV1ZWRFdmVudCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcXVldWVkRm9jdXMgJiZcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkRHJhZyAmJiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZE1vdXNlICYmXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgICAgIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbaV07XG4gICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCAmJiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGwpO1xuICAgICAgfVxuICAgICAgZm9yIChcbiAgICAgICAgO1xuICAgICAgICAwIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCAmJlxuICAgICAgICAoKGkgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF0pLCBudWxsID09PSBpLmJsb2NrZWRPbik7XG5cbiAgICAgIClcbiAgICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KGkpLFxuICAgICAgICAgIG51bGwgPT09IGkuYmxvY2tlZE9uICYmIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgaSA9ICh1bmJsb2NrZWQub3duZXJEb2N1bWVudCB8fCB1bmJsb2NrZWQpLiQkcmVhY3RGb3JtUmVwbGF5O1xuICAgICAgaWYgKG51bGwgIT0gaSlcbiAgICAgICAgZm9yIChxdWV1ZWRUYXJnZXQgPSAwOyBxdWV1ZWRUYXJnZXQgPCBpLmxlbmd0aDsgcXVldWVkVGFyZ2V0ICs9IDMpIHtcbiAgICAgICAgICB2YXIgZm9ybSA9IGlbcXVldWVkVGFyZ2V0XSxcbiAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uID0gaVtxdWV1ZWRUYXJnZXQgKyAxXSxcbiAgICAgICAgICAgIGZvcm1Qcm9wcyA9IGZvcm1baW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc3VibWl0dGVyT3JBY3Rpb24pXG4gICAgICAgICAgICBmb3JtUHJvcHMgfHwgc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGkpO1xuICAgICAgICAgIGVsc2UgaWYgKGZvcm1Qcm9wcykge1xuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uICYmXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLmhhc0F0dHJpYnV0ZShcImZvcm1BY3Rpb25cIilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgoZm9ybSA9IHN1Ym1pdHRlck9yQWN0aW9uKSxcbiAgICAgICAgICAgICAgICAoZm9ybVByb3BzID0gc3VibWl0dGVyT3JBY3Rpb25baW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbCkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBmb3JtUHJvcHMuZm9ybUFjdGlvbjtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KGZvcm0pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBhY3Rpb24gPSBmb3JtUHJvcHMuYWN0aW9uO1xuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uXG4gICAgICAgICAgICAgID8gKGlbcXVldWVkVGFyZ2V0ICsgMV0gPSBhY3Rpb24pXG4gICAgICAgICAgICAgIDogKGkuc3BsaWNlKHF1ZXVlZFRhcmdldCwgMyksIChxdWV1ZWRUYXJnZXQgLT0gMykpO1xuICAgICAgICAgICAgc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdERPTVJvb3QoaW50ZXJuYWxSb290KSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBpbnRlcm5hbFJvb3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RE9NSHlkcmF0aW9uUm9vdChpbnRlcm5hbFJvb3QpIHtcbiAgICAgIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSAmJlxuICAgICAgICAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5IHBhc3NlZCB0byBSZWFjdERPTS5yZW5kZXIoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBhcmUgY2FsbGluZyBSZWFjdERPTUNsaWVudC5jcmVhdGVSb290KCkgb24gYSBjb250YWluZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byBjcmVhdGVSb290KCkgYmVmb3JlLiBJbnN0ZWFkLCBjYWxsIHJvb3QucmVuZGVyKCkgb24gdGhlIGV4aXN0aW5nIHJvb3QgaW5zdGVhZCBpZiB5b3Ugd2FudCB0byB1cGRhdGUgaXQuXCJcbiAgICAgICAgICAgICkpO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBTY2hlZHVsZXIgPSByZXF1aXJlKFwic2NoZWR1bGVyXCIpLFxuICAgICAgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIiksXG4gICAgICBSZWFjdERPTSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIiksXG4gICAgICBSRUFDVF9MRUdBQ1lfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgICBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO1xuICAgIHZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnRyYWNpbmdfbWFya2VyXCIpO1xuICAgIHZhciBSRUFDVF9NRU1PX0NBQ0hFX1NFTlRJTkVMID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9fY2FjaGVfc2VudGluZWxcIiksXG4gICAgICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24sXG4gICAgICBkaXNhYmxlZERlcHRoID0gMCxcbiAgICAgIHByZXZMb2csXG4gICAgICBwcmV2SW5mbyxcbiAgICAgIHByZXZXYXJuLFxuICAgICAgcHJldkVycm9yLFxuICAgICAgcHJldkdyb3VwLFxuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkLFxuICAgICAgcHJldkdyb3VwRW5kO1xuICAgIGRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9ICEwO1xuICAgIHZhciBwcmVmaXgsXG4gICAgICBzdWZmaXgsXG4gICAgICByZWVudHJ5ID0gITE7XG4gICAgdmFyIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgKFxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha01hcCA/IFdlYWtNYXAgOiBNYXBcbiAgICApKCk7XG4gICAgdmFyIGN1cnJlbnQgPSBudWxsLFxuICAgICAgaXNSZW5kZXJpbmcgPSAhMSxcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3RET00uX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgTm90UGVuZGluZyA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBwZW5kaW5nOiAhMSxcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgbWV0aG9kOiBudWxsLFxuICAgICAgICBhY3Rpb246IG51bGxcbiAgICAgIH0pLFxuICAgICAgdmFsdWVTdGFjayA9IFtdO1xuICAgIHZhciBmaWJlclN0YWNrID0gW107XG4gICAgdmFyIGluZGV4JGpzY29tcCQwID0gLTEsXG4gICAgICBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMyA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgICAgY2FuY2VsQ2FsbGJhY2skMSA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgICAgIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgICAgcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgICAgIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICAgIGdldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgICAgSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgICBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICAgIE5vcm1hbFByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICBMb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICAgIElkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHksXG4gICAgICBsb2ckMSA9IFNjaGVkdWxlci5sb2csXG4gICAgICB1bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSA9IFNjaGVkdWxlci51bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSxcbiAgICAgIHJlbmRlcmVySUQgPSBudWxsLFxuICAgICAgaW5qZWN0ZWRIb29rID0gbnVsbCxcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MgPSBudWxsLFxuICAgICAgaGFzTG9nZ2VkRXJyb3IgPSAhMSxcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyxcbiAgICAgIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrLFxuICAgICAgbG9nID0gTWF0aC5sb2csXG4gICAgICBMTjIgPSBNYXRoLkxOMixcbiAgICAgIG5leHRUcmFuc2l0aW9uTGFuZSA9IDEyOCxcbiAgICAgIG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0LFxuICAgICAgRGlzY3JldGVFdmVudFByaW9yaXR5ID0gMixcbiAgICAgIENvbnRpbnVvdXNFdmVudFByaW9yaXR5ID0gOCxcbiAgICAgIERlZmF1bHRFdmVudFByaW9yaXR5ID0gMzIsXG4gICAgICBJZGxlRXZlbnRQcmlvcml0eSA9IDI2ODQzNTQ1NixcbiAgICAgIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUtleSA9IFwiX19yZWFjdEZpYmVyJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxQcm9wc0tleSA9IFwiX19yZWFjdFByb3BzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9IFwiX19yZWFjdENvbnRhaW5lciRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9IFwiX19yZWFjdEV2ZW50cyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsRXZlbnRIYW5kbGVyTGlzdGVuZXJzS2V5ID0gXCJfX3JlYWN0TGlzdGVuZXJzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXkgPSBcIl9fcmVhY3RIYW5kbGVzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleSA9IFwiX19yZWFjdFJlc291cmNlcyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsSG9pc3RhYmxlTWFya2VyID0gXCJfX3JlYWN0TWFya2VyJFwiICsgcmFuZG9tS2V5LFxuICAgICAgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpLFxuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9LFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IHt9LFxuICAgICAgY2FuVXNlRE9NID0gIShcbiAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdyB8fFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93LmRvY3VtZW50IHx8XG4gICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgICAgKSxcbiAgICAgIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gICAgICAgIGJ1dHRvbjogITAsXG4gICAgICAgIGNoZWNrYm94OiAhMCxcbiAgICAgICAgaW1hZ2U6ICEwLFxuICAgICAgICBoaWRkZW46ICEwLFxuICAgICAgICByYWRpbzogITAsXG4gICAgICAgIHJlc2V0OiAhMCxcbiAgICAgICAgc3VibWl0OiAhMFxuICAgICAgfSxcbiAgICAgIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gUmVnRXhwKFxuICAgICAgICBcIl5bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRF1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge30sXG4gICAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fSxcbiAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXNSZWdleCA9IC9bXFxuXCJcXFxcXS9nLFxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSAhMSxcbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gITEsXG4gICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gITEsXG4gICAgICBkaWRXYXJuSW52YWxpZElubmVySFRNTCA9ICExO1xuICAgIHZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSAhMTtcbiAgICB2YXIgdmFsdWVQcm9wTmFtZXMgPSBbXCJ2YWx1ZVwiLCBcImRlZmF1bHRWYWx1ZVwiXSxcbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gITEsXG4gICAgICBuZWVkc0VzY2FwaW5nID0gL1tcIicmPD5cXG5cXHRdfF5cXHN8XFxzJC8sXG4gICAgICBzcGVjaWFsVGFncyA9XG4gICAgICAgIFwiYWRkcmVzcyBhcHBsZXQgYXJlYSBhcnRpY2xlIGFzaWRlIGJhc2UgYmFzZWZvbnQgYmdzb3VuZCBibG9ja3F1b3RlIGJvZHkgYnIgYnV0dG9uIGNhcHRpb24gY2VudGVyIGNvbCBjb2xncm91cCBkZCBkZXRhaWxzIGRpciBkaXYgZGwgZHQgZW1iZWQgZmllbGRzZXQgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGZvcm0gZnJhbWUgZnJhbWVzZXQgaDEgaDIgaDMgaDQgaDUgaDYgaGVhZCBoZWFkZXIgaGdyb3VwIGhyIGh0bWwgaWZyYW1lIGltZyBpbnB1dCBpc2luZGV4IGxpIGxpbmsgbGlzdGluZyBtYWluIG1hcnF1ZWUgbWVudSBtZW51aXRlbSBtZXRhIG5hdiBub2VtYmVkIG5vZnJhbWVzIG5vc2NyaXB0IG9iamVjdCBvbCBwIHBhcmFtIHBsYWludGV4dCBwcmUgc2NyaXB0IHNlY3Rpb24gc2VsZWN0IHNvdXJjZSBzdHlsZSBzdW1tYXJ5IHRhYmxlIHRib2R5IHRkIHRlbXBsYXRlIHRleHRhcmVhIHRmb290IHRoIHRoZWFkIHRpdGxlIHRyIHRyYWNrIHVsIHdiciB4bXBcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgaW5TY29wZVRhZ3MgPVxuICAgICAgICBcImFwcGxldCBjYXB0aW9uIGh0bWwgdGFibGUgdGQgdGggbWFycXVlZSBvYmplY3QgdGVtcGxhdGUgZm9yZWlnbk9iamVjdCBkZXNjIHRpdGxlXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbXCJidXR0b25cIl0pLFxuICAgICAgaW1wbGllZEVuZFRhZ3MgPSBcImRkIGR0IGxpIG9wdGlvbiBvcHRncm91cCBwIHJwIHJ0XCIuc3BsaXQoXCIgXCIpLFxuICAgICAgZW1wdHlBbmNlc3RvckluZm9EZXYgPSB7XG4gICAgICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgICAgIGZvcm1UYWc6IG51bGwsXG4gICAgICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgICAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgICAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgICAgIGRsSXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgICAgICBjb250YWluZXJUYWdJblNjb3BlOiBudWxsXG4gICAgICB9LFxuICAgICAgZGlkV2FybiA9IHt9LFxuICAgICAgTUFUSF9OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixcbiAgICAgIFNWR19OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBzaG9ydGhhbmRUb0xvbmdoYW5kID0ge1xuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgXCJhbmltYXRpb25EZWxheSBhbmltYXRpb25EaXJlY3Rpb24gYW5pbWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uRmlsbE1vZGUgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgYW5pbWF0aW9uTmFtZSBhbmltYXRpb25QbGF5U3RhdGUgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb25cIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBcImJhY2tncm91bmRBdHRhY2htZW50IGJhY2tncm91bmRDbGlwIGJhY2tncm91bmRDb2xvciBiYWNrZ3JvdW5kSW1hZ2UgYmFja2dyb3VuZE9yaWdpbiBiYWNrZ3JvdW5kUG9zaXRpb25YIGJhY2tncm91bmRQb3NpdGlvblkgYmFja2dyb3VuZFJlcGVhdCBiYWNrZ3JvdW5kU2l6ZVwiLnNwbGl0KFxuICAgICAgICAgICAgXCIgXCJcbiAgICAgICAgICApLFxuICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246IFtcImJhY2tncm91bmRQb3NpdGlvblhcIiwgXCJiYWNrZ3JvdW5kUG9zaXRpb25ZXCJdLFxuICAgICAgICBib3JkZXI6XG4gICAgICAgICAgXCJib3JkZXJCb3R0b21Db2xvciBib3JkZXJCb3R0b21TdHlsZSBib3JkZXJCb3R0b21XaWR0aCBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVJlcGVhdCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlU291cmNlIGJvcmRlckltYWdlV2lkdGggYm9yZGVyTGVmdENvbG9yIGJvcmRlckxlZnRTdHlsZSBib3JkZXJMZWZ0V2lkdGggYm9yZGVyUmlnaHRDb2xvciBib3JkZXJSaWdodFN0eWxlIGJvcmRlclJpZ2h0V2lkdGggYm9yZGVyVG9wQ29sb3IgYm9yZGVyVG9wU3R5bGUgYm9yZGVyVG9wV2lkdGhcIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgYm9yZGVyQmxvY2tFbmQ6IFtcbiAgICAgICAgICBcImJvcmRlckJsb2NrRW5kQ29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrRW5kU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrRW5kV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJCbG9ja1N0YXJ0OiBbXG4gICAgICAgICAgXCJib3JkZXJCbG9ja1N0YXJ0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrU3RhcnRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyQmxvY2tTdGFydFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyQm90dG9tOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21Db2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyQ29sb3I6IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbUNvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJMZWZ0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlclRvcENvbG9yXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVySW1hZ2U6IFtcbiAgICAgICAgICBcImJvcmRlckltYWdlT3V0c2V0XCIsXG4gICAgICAgICAgXCJib3JkZXJJbWFnZVJlcGVhdFwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VTbGljZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VTb3VyY2VcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJJbmxpbmVFbmQ6IFtcbiAgICAgICAgICBcImJvcmRlcklubGluZUVuZENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVFbmRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lRW5kV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJJbmxpbmVTdGFydDogW1xuICAgICAgICAgIFwiYm9yZGVySW5saW5lU3RhcnRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lU3RhcnRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lU3RhcnRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckxlZnQ6IFtcImJvcmRlckxlZnRDb2xvclwiLCBcImJvcmRlckxlZnRTdHlsZVwiLCBcImJvcmRlckxlZnRXaWR0aFwiXSxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wUmlnaHRSYWRpdXNcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJSaWdodDogW1xuICAgICAgICAgIFwiYm9yZGVyUmlnaHRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlclN0eWxlOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21TdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyTGVmdFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BTdHlsZVwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlclRvcDogW1wiYm9yZGVyVG9wQ29sb3JcIiwgXCJib3JkZXJUb3BTdHlsZVwiLCBcImJvcmRlclRvcFdpZHRoXCJdLFxuICAgICAgICBib3JkZXJXaWR0aDogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tV2lkdGhcIixcbiAgICAgICAgICBcImJvcmRlckxlZnRXaWR0aFwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRXaWR0aFwiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBjb2x1bW5SdWxlOiBbXCJjb2x1bW5SdWxlQ29sb3JcIiwgXCJjb2x1bW5SdWxlU3R5bGVcIiwgXCJjb2x1bW5SdWxlV2lkdGhcIl0sXG4gICAgICAgIGNvbHVtbnM6IFtcImNvbHVtbkNvdW50XCIsIFwiY29sdW1uV2lkdGhcIl0sXG4gICAgICAgIGZsZXg6IFtcImZsZXhCYXNpc1wiLCBcImZsZXhHcm93XCIsIFwiZmxleFNocmlua1wiXSxcbiAgICAgICAgZmxleEZsb3c6IFtcImZsZXhEaXJlY3Rpb25cIiwgXCJmbGV4V3JhcFwiXSxcbiAgICAgICAgZm9udDogXCJmb250RmFtaWx5IGZvbnRGZWF0dXJlU2V0dGluZ3MgZm9udEtlcm5pbmcgZm9udExhbmd1YWdlT3ZlcnJpZGUgZm9udFNpemUgZm9udFNpemVBZGp1c3QgZm9udFN0cmV0Y2ggZm9udFN0eWxlIGZvbnRWYXJpYW50IGZvbnRWYXJpYW50QWx0ZXJuYXRlcyBmb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRFYXN0QXNpYW4gZm9udFZhcmlhbnRMaWdhdHVyZXMgZm9udFZhcmlhbnROdW1lcmljIGZvbnRWYXJpYW50UG9zaXRpb24gZm9udFdlaWdodCBsaW5lSGVpZ2h0XCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgICAgZm9udFZhcmlhbnQ6XG4gICAgICAgICAgXCJmb250VmFyaWFudEFsdGVybmF0ZXMgZm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50RWFzdEFzaWFuIGZvbnRWYXJpYW50TGlnYXR1cmVzIGZvbnRWYXJpYW50TnVtZXJpYyBmb250VmFyaWFudFBvc2l0aW9uXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGdhcDogW1wiY29sdW1uR2FwXCIsIFwicm93R2FwXCJdLFxuICAgICAgICBncmlkOiBcImdyaWRBdXRvQ29sdW1ucyBncmlkQXV0b0Zsb3cgZ3JpZEF1dG9Sb3dzIGdyaWRUZW1wbGF0ZUFyZWFzIGdyaWRUZW1wbGF0ZUNvbHVtbnMgZ3JpZFRlbXBsYXRlUm93c1wiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICAgIGdyaWRBcmVhOiBbXG4gICAgICAgICAgXCJncmlkQ29sdW1uRW5kXCIsXG4gICAgICAgICAgXCJncmlkQ29sdW1uU3RhcnRcIixcbiAgICAgICAgICBcImdyaWRSb3dFbmRcIixcbiAgICAgICAgICBcImdyaWRSb3dTdGFydFwiXG4gICAgICAgIF0sXG4gICAgICAgIGdyaWRDb2x1bW46IFtcImdyaWRDb2x1bW5FbmRcIiwgXCJncmlkQ29sdW1uU3RhcnRcIl0sXG4gICAgICAgIGdyaWRDb2x1bW5HYXA6IFtcImNvbHVtbkdhcFwiXSxcbiAgICAgICAgZ3JpZEdhcDogW1wiY29sdW1uR2FwXCIsIFwicm93R2FwXCJdLFxuICAgICAgICBncmlkUm93OiBbXCJncmlkUm93RW5kXCIsIFwiZ3JpZFJvd1N0YXJ0XCJdLFxuICAgICAgICBncmlkUm93R2FwOiBbXCJyb3dHYXBcIl0sXG4gICAgICAgIGdyaWRUZW1wbGF0ZTogW1xuICAgICAgICAgIFwiZ3JpZFRlbXBsYXRlQXJlYXNcIixcbiAgICAgICAgICBcImdyaWRUZW1wbGF0ZUNvbHVtbnNcIixcbiAgICAgICAgICBcImdyaWRUZW1wbGF0ZVJvd3NcIlxuICAgICAgICBdLFxuICAgICAgICBsaXN0U3R5bGU6IFtcImxpc3RTdHlsZUltYWdlXCIsIFwibGlzdFN0eWxlUG9zaXRpb25cIiwgXCJsaXN0U3R5bGVUeXBlXCJdLFxuICAgICAgICBtYXJnaW46IFtcIm1hcmdpbkJvdHRvbVwiLCBcIm1hcmdpbkxlZnRcIiwgXCJtYXJnaW5SaWdodFwiLCBcIm1hcmdpblRvcFwiXSxcbiAgICAgICAgbWFya2VyOiBbXCJtYXJrZXJFbmRcIiwgXCJtYXJrZXJNaWRcIiwgXCJtYXJrZXJTdGFydFwiXSxcbiAgICAgICAgbWFzazogXCJtYXNrQ2xpcCBtYXNrQ29tcG9zaXRlIG1hc2tJbWFnZSBtYXNrTW9kZSBtYXNrT3JpZ2luIG1hc2tQb3NpdGlvblggbWFza1Bvc2l0aW9uWSBtYXNrUmVwZWF0IG1hc2tTaXplXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgICAgbWFza1Bvc2l0aW9uOiBbXCJtYXNrUG9zaXRpb25YXCIsIFwibWFza1Bvc2l0aW9uWVwiXSxcbiAgICAgICAgb3V0bGluZTogW1wib3V0bGluZUNvbG9yXCIsIFwib3V0bGluZVN0eWxlXCIsIFwib3V0bGluZVdpZHRoXCJdLFxuICAgICAgICBvdmVyZmxvdzogW1wib3ZlcmZsb3dYXCIsIFwib3ZlcmZsb3dZXCJdLFxuICAgICAgICBwYWRkaW5nOiBbXCJwYWRkaW5nQm90dG9tXCIsIFwicGFkZGluZ0xlZnRcIiwgXCJwYWRkaW5nUmlnaHRcIiwgXCJwYWRkaW5nVG9wXCJdLFxuICAgICAgICBwbGFjZUNvbnRlbnQ6IFtcImFsaWduQ29udGVudFwiLCBcImp1c3RpZnlDb250ZW50XCJdLFxuICAgICAgICBwbGFjZUl0ZW1zOiBbXCJhbGlnbkl0ZW1zXCIsIFwianVzdGlmeUl0ZW1zXCJdLFxuICAgICAgICBwbGFjZVNlbGY6IFtcImFsaWduU2VsZlwiLCBcImp1c3RpZnlTZWxmXCJdLFxuICAgICAgICB0ZXh0RGVjb3JhdGlvbjogW1xuICAgICAgICAgIFwidGV4dERlY29yYXRpb25Db2xvclwiLFxuICAgICAgICAgIFwidGV4dERlY29yYXRpb25MaW5lXCIsXG4gICAgICAgICAgXCJ0ZXh0RGVjb3JhdGlvblN0eWxlXCJcbiAgICAgICAgXSxcbiAgICAgICAgdGV4dEVtcGhhc2lzOiBbXCJ0ZXh0RW1waGFzaXNDb2xvclwiLCBcInRleHRFbXBoYXNpc1N0eWxlXCJdLFxuICAgICAgICB0cmFuc2l0aW9uOiBbXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uRGVsYXlcIixcbiAgICAgICAgICBcInRyYW5zaXRpb25EdXJhdGlvblwiLFxuICAgICAgICAgIFwidHJhbnNpdGlvblByb3BlcnR5XCIsXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cIlxuICAgICAgICBdLFxuICAgICAgICB3b3JkV3JhcDogW1wib3ZlcmZsb3dXcmFwXCJdXG4gICAgICB9LFxuICAgICAgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2csXG4gICAgICBtc1BhdHRlcm4kMSA9IC9ebXMtLyxcbiAgICAgIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLyxcbiAgICAgIG1zUGF0dGVybiA9IC9eLW1zLS8sXG4gICAgICBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZyxcbiAgICAgIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvLFxuICAgICAgd2FybmVkU3R5bGVOYW1lcyA9IHt9LFxuICAgICAgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fSxcbiAgICAgIHdhcm5lZEZvck5hTlZhbHVlID0gITEsXG4gICAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gITEsXG4gICAgICB1bml0bGVzc051bWJlcnMgPSBuZXcgU2V0KFxuICAgICAgICBcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFzcGVjdFJhdGlvIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VXaWR0aCBib3hGbGV4IGJveEZsZXhHcm91cCBib3hPcmRpbmFsR3JvdXAgY29sdW1uQ291bnQgY29sdW1ucyBmbGV4IGZsZXhHcm93IGZsZXhQb3NpdGl2ZSBmbGV4U2hyaW5rIGZsZXhOZWdhdGl2ZSBmbGV4T3JkZXIgZ3JpZEFyZWEgZ3JpZFJvdyBncmlkUm93RW5kIGdyaWRSb3dTcGFuIGdyaWRSb3dTdGFydCBncmlkQ29sdW1uIGdyaWRDb2x1bW5FbmQgZ3JpZENvbHVtblNwYW4gZ3JpZENvbHVtblN0YXJ0IGZvbnRXZWlnaHQgbGluZUNsYW1wIGxpbmVIZWlnaHQgb3BhY2l0eSBvcmRlciBvcnBoYW5zIHNjYWxlIHRhYlNpemUgd2lkb3dzIHpJbmRleCB6b29tIGZpbGxPcGFjaXR5IGZsb29kT3BhY2l0eSBzdG9wT3BhY2l0eSBzdHJva2VEYXNoYXJyYXkgc3Ryb2tlRGFzaG9mZnNldCBzdHJva2VNaXRlcmxpbWl0IHN0cm9rZU9wYWNpdHkgc3Ryb2tlV2lkdGggTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgTW96Qm94RmxleCBNb3pCb3hGbGV4R3JvdXAgTW96TGluZUNsYW1wIG1zQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgbXNGbGV4IG1zWm9vbSBtc0ZsZXhHcm93IG1zRmxleE5lZ2F0aXZlIG1zRmxleE9yZGVyIG1zRmxleFBvc2l0aXZlIG1zRmxleFNocmluayBtc0dyaWRDb2x1bW4gbXNHcmlkQ29sdW1uU3BhbiBtc0dyaWRSb3cgbXNHcmlkUm93U3BhbiBXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCBXZWJraXRCb3hGbGV4IFdlYktpdEJveEZsZXhHcm91cCBXZWJraXRCb3hPcmRpbmFsR3JvdXAgV2Via2l0Q29sdW1uQ291bnQgV2Via2l0Q29sdW1ucyBXZWJraXRGbGV4IFdlYmtpdEZsZXhHcm93IFdlYmtpdEZsZXhQb3NpdGl2ZSBXZWJraXRGbGV4U2hyaW5rIFdlYmtpdExpbmVDbGFtcFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBhbGlhc2VzID0gbmV3IE1hcChbXG4gICAgICAgIFtcImFjY2VwdENoYXJzZXRcIiwgXCJhY2NlcHQtY2hhcnNldFwiXSxcbiAgICAgICAgW1wiaHRtbEZvclwiLCBcImZvclwiXSxcbiAgICAgICAgW1wiaHR0cEVxdWl2XCIsIFwiaHR0cC1lcXVpdlwiXSxcbiAgICAgICAgW1wiY3Jvc3NPcmlnaW5cIiwgXCJjcm9zc29yaWdpblwiXSxcbiAgICAgICAgW1wiYWNjZW50SGVpZ2h0XCIsIFwiYWNjZW50LWhlaWdodFwiXSxcbiAgICAgICAgW1wiYWxpZ25tZW50QmFzZWxpbmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIl0sXG4gICAgICAgIFtcImFyYWJpY0Zvcm1cIiwgXCJhcmFiaWMtZm9ybVwiXSxcbiAgICAgICAgW1wiYmFzZWxpbmVTaGlmdFwiLCBcImJhc2VsaW5lLXNoaWZ0XCJdLFxuICAgICAgICBbXCJjYXBIZWlnaHRcIiwgXCJjYXAtaGVpZ2h0XCJdLFxuICAgICAgICBbXCJjbGlwUGF0aFwiLCBcImNsaXAtcGF0aFwiXSxcbiAgICAgICAgW1wiY2xpcFJ1bGVcIiwgXCJjbGlwLXJ1bGVcIl0sXG4gICAgICAgIFtcImNvbG9ySW50ZXJwb2xhdGlvblwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIl0sXG4gICAgICAgIFtcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIl0sXG4gICAgICAgIFtcImNvbG9yUHJvZmlsZVwiLCBcImNvbG9yLXByb2ZpbGVcIl0sXG4gICAgICAgIFtcImNvbG9yUmVuZGVyaW5nXCIsIFwiY29sb3ItcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJkb21pbmFudEJhc2VsaW5lXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIl0sXG4gICAgICAgIFtcImVuYWJsZUJhY2tncm91bmRcIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiXSxcbiAgICAgICAgW1wiZmlsbE9wYWNpdHlcIiwgXCJmaWxsLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcImZpbGxSdWxlXCIsIFwiZmlsbC1ydWxlXCJdLFxuICAgICAgICBbXCJmbG9vZENvbG9yXCIsIFwiZmxvb2QtY29sb3JcIl0sXG4gICAgICAgIFtcImZsb29kT3BhY2l0eVwiLCBcImZsb29kLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcImZvbnRGYW1pbHlcIiwgXCJmb250LWZhbWlseVwiXSxcbiAgICAgICAgW1wiZm9udFNpemVcIiwgXCJmb250LXNpemVcIl0sXG4gICAgICAgIFtcImZvbnRTaXplQWRqdXN0XCIsIFwiZm9udC1zaXplLWFkanVzdFwiXSxcbiAgICAgICAgW1wiZm9udFN0cmV0Y2hcIiwgXCJmb250LXN0cmV0Y2hcIl0sXG4gICAgICAgIFtcImZvbnRTdHlsZVwiLCBcImZvbnQtc3R5bGVcIl0sXG4gICAgICAgIFtcImZvbnRWYXJpYW50XCIsIFwiZm9udC12YXJpYW50XCJdLFxuICAgICAgICBbXCJmb250V2VpZ2h0XCIsIFwiZm9udC13ZWlnaHRcIl0sXG4gICAgICAgIFtcImdseXBoTmFtZVwiLCBcImdseXBoLW5hbWVcIl0sXG4gICAgICAgIFtcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiXSxcbiAgICAgICAgW1wiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIl0sXG4gICAgICAgIFtcImhvcml6QWR2WFwiLCBcImhvcml6LWFkdi14XCJdLFxuICAgICAgICBbXCJob3Jpek9yaWdpblhcIiwgXCJob3Jpei1vcmlnaW4teFwiXSxcbiAgICAgICAgW1wiaW1hZ2VSZW5kZXJpbmdcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIl0sXG4gICAgICAgIFtcImxldHRlclNwYWNpbmdcIiwgXCJsZXR0ZXItc3BhY2luZ1wiXSxcbiAgICAgICAgW1wibGlnaHRpbmdDb2xvclwiLCBcImxpZ2h0aW5nLWNvbG9yXCJdLFxuICAgICAgICBbXCJtYXJrZXJFbmRcIiwgXCJtYXJrZXItZW5kXCJdLFxuICAgICAgICBbXCJtYXJrZXJNaWRcIiwgXCJtYXJrZXItbWlkXCJdLFxuICAgICAgICBbXCJtYXJrZXJTdGFydFwiLCBcIm1hcmtlci1zdGFydFwiXSxcbiAgICAgICAgW1wib3ZlcmxpbmVQb3NpdGlvblwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCJdLFxuICAgICAgICBbXCJvdmVybGluZVRoaWNrbmVzc1wiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1wicGFpbnRPcmRlclwiLCBcInBhaW50LW9yZGVyXCJdLFxuICAgICAgICBbXCJwYW5vc2UtMVwiLCBcInBhbm9zZS0xXCJdLFxuICAgICAgICBbXCJwb2ludGVyRXZlbnRzXCIsIFwicG9pbnRlci1ldmVudHNcIl0sXG4gICAgICAgIFtcInJlbmRlcmluZ0ludGVudFwiLCBcInJlbmRlcmluZy1pbnRlbnRcIl0sXG4gICAgICAgIFtcInNoYXBlUmVuZGVyaW5nXCIsIFwic2hhcGUtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJzdG9wQ29sb3JcIiwgXCJzdG9wLWNvbG9yXCJdLFxuICAgICAgICBbXCJzdG9wT3BhY2l0eVwiLCBcInN0b3Atb3BhY2l0eVwiXSxcbiAgICAgICAgW1wic3RyaWtldGhyb3VnaFBvc2l0aW9uXCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiXSxcbiAgICAgICAgW1wic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCJdLFxuICAgICAgICBbXCJzdHJva2VEYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaGFycmF5XCJdLFxuICAgICAgICBbXCJzdHJva2VEYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIl0sXG4gICAgICAgIFtcInN0cm9rZUxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWNhcFwiXSxcbiAgICAgICAgW1wic3Ryb2tlTGluZWpvaW5cIiwgXCJzdHJva2UtbGluZWpvaW5cIl0sXG4gICAgICAgIFtcInN0cm9rZU1pdGVybGltaXRcIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiXSxcbiAgICAgICAgW1wic3Ryb2tlT3BhY2l0eVwiLCBcInN0cm9rZS1vcGFjaXR5XCJdLFxuICAgICAgICBbXCJzdHJva2VXaWR0aFwiLCBcInN0cm9rZS13aWR0aFwiXSxcbiAgICAgICAgW1widGV4dEFuY2hvclwiLCBcInRleHQtYW5jaG9yXCJdLFxuICAgICAgICBbXCJ0ZXh0RGVjb3JhdGlvblwiLCBcInRleHQtZGVjb3JhdGlvblwiXSxcbiAgICAgICAgW1widGV4dFJlbmRlcmluZ1wiLCBcInRleHQtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJ0cmFuc2Zvcm0tb3JpZ2luXCJdLFxuICAgICAgICBbXCJ1bmRlcmxpbmVQb3NpdGlvblwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiXSxcbiAgICAgICAgW1widW5kZXJsaW5lVGhpY2tuZXNzXCIsIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1widW5pY29kZUJpZGlcIiwgXCJ1bmljb2RlLWJpZGlcIl0sXG4gICAgICAgIFtcInVuaWNvZGVSYW5nZVwiLCBcInVuaWNvZGUtcmFuZ2VcIl0sXG4gICAgICAgIFtcInVuaXRzUGVyRW1cIiwgXCJ1bml0cy1wZXItZW1cIl0sXG4gICAgICAgIFtcInZBbHBoYWJldGljXCIsIFwidi1hbHBoYWJldGljXCJdLFxuICAgICAgICBbXCJ2SGFuZ2luZ1wiLCBcInYtaGFuZ2luZ1wiXSxcbiAgICAgICAgW1widklkZW9ncmFwaGljXCIsIFwidi1pZGVvZ3JhcGhpY1wiXSxcbiAgICAgICAgW1widk1hdGhlbWF0aWNhbFwiLCBcInYtbWF0aGVtYXRpY2FsXCJdLFxuICAgICAgICBbXCJ2ZWN0b3JFZmZlY3RcIiwgXCJ2ZWN0b3ItZWZmZWN0XCJdLFxuICAgICAgICBbXCJ2ZXJ0QWR2WVwiLCBcInZlcnQtYWR2LXlcIl0sXG4gICAgICAgIFtcInZlcnRPcmlnaW5YXCIsIFwidmVydC1vcmlnaW4teFwiXSxcbiAgICAgICAgW1widmVydE9yaWdpbllcIiwgXCJ2ZXJ0LW9yaWdpbi15XCJdLFxuICAgICAgICBbXCJ3b3JkU3BhY2luZ1wiLCBcIndvcmQtc3BhY2luZ1wiXSxcbiAgICAgICAgW1wid3JpdGluZ01vZGVcIiwgXCJ3cml0aW5nLW1vZGVcIl0sXG4gICAgICAgIFtcInhtbG5zWGxpbmtcIiwgXCJ4bWxuczp4bGlua1wiXSxcbiAgICAgICAgW1wieEhlaWdodFwiLCBcIngtaGVpZ2h0XCJdXG4gICAgICBdKSxcbiAgICAgIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgICAgICAgYWNjZXB0OiBcImFjY2VwdFwiLFxuICAgICAgICBhY2NlcHRjaGFyc2V0OiBcImFjY2VwdENoYXJzZXRcIixcbiAgICAgICAgXCJhY2NlcHQtY2hhcnNldFwiOiBcImFjY2VwdENoYXJzZXRcIixcbiAgICAgICAgYWNjZXNza2V5OiBcImFjY2Vzc0tleVwiLFxuICAgICAgICBhY3Rpb246IFwiYWN0aW9uXCIsXG4gICAgICAgIGFsbG93ZnVsbHNjcmVlbjogXCJhbGxvd0Z1bGxTY3JlZW5cIixcbiAgICAgICAgYWx0OiBcImFsdFwiLFxuICAgICAgICBhczogXCJhc1wiLFxuICAgICAgICBhc3luYzogXCJhc3luY1wiLFxuICAgICAgICBhdXRvY2FwaXRhbGl6ZTogXCJhdXRvQ2FwaXRhbGl6ZVwiLFxuICAgICAgICBhdXRvY29tcGxldGU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICAgIGF1dG9jb3JyZWN0OiBcImF1dG9Db3JyZWN0XCIsXG4gICAgICAgIGF1dG9mb2N1czogXCJhdXRvRm9jdXNcIixcbiAgICAgICAgYXV0b3BsYXk6IFwiYXV0b1BsYXlcIixcbiAgICAgICAgYXV0b3NhdmU6IFwiYXV0b1NhdmVcIixcbiAgICAgICAgY2FwdHVyZTogXCJjYXB0dXJlXCIsXG4gICAgICAgIGNlbGxwYWRkaW5nOiBcImNlbGxQYWRkaW5nXCIsXG4gICAgICAgIGNlbGxzcGFjaW5nOiBcImNlbGxTcGFjaW5nXCIsXG4gICAgICAgIGNoYWxsZW5nZTogXCJjaGFsbGVuZ2VcIixcbiAgICAgICAgY2hhcnNldDogXCJjaGFyU2V0XCIsXG4gICAgICAgIGNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgICAgICBjaGlsZHJlbjogXCJjaGlsZHJlblwiLFxuICAgICAgICBjaXRlOiBcImNpdGVcIixcbiAgICAgICAgY2xhc3M6IFwiY2xhc3NOYW1lXCIsXG4gICAgICAgIGNsYXNzaWQ6IFwiY2xhc3NJRFwiLFxuICAgICAgICBjbGFzc25hbWU6IFwiY2xhc3NOYW1lXCIsXG4gICAgICAgIGNvbHM6IFwiY29sc1wiLFxuICAgICAgICBjb2xzcGFuOiBcImNvbFNwYW5cIixcbiAgICAgICAgY29udGVudDogXCJjb250ZW50XCIsXG4gICAgICAgIGNvbnRlbnRlZGl0YWJsZTogXCJjb250ZW50RWRpdGFibGVcIixcbiAgICAgICAgY29udGV4dG1lbnU6IFwiY29udGV4dE1lbnVcIixcbiAgICAgICAgY29udHJvbHM6IFwiY29udHJvbHNcIixcbiAgICAgICAgY29udHJvbHNsaXN0OiBcImNvbnRyb2xzTGlzdFwiLFxuICAgICAgICBjb29yZHM6IFwiY29vcmRzXCIsXG4gICAgICAgIGNyb3Nzb3JpZ2luOiBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIsXG4gICAgICAgIGRhdGE6IFwiZGF0YVwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRlVGltZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgZGVmYXVsdGNoZWNrZWQ6IFwiZGVmYXVsdENoZWNrZWRcIixcbiAgICAgICAgZGVmYXVsdHZhbHVlOiBcImRlZmF1bHRWYWx1ZVwiLFxuICAgICAgICBkZWZlcjogXCJkZWZlclwiLFxuICAgICAgICBkaXI6IFwiZGlyXCIsXG4gICAgICAgIGRpc2FibGVkOiBcImRpc2FibGVkXCIsXG4gICAgICAgIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCIsXG4gICAgICAgIGRpc2FibGVyZW1vdGVwbGF5YmFjazogXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIixcbiAgICAgICAgZG93bmxvYWQ6IFwiZG93bmxvYWRcIixcbiAgICAgICAgZHJhZ2dhYmxlOiBcImRyYWdnYWJsZVwiLFxuICAgICAgICBlbmN0eXBlOiBcImVuY1R5cGVcIixcbiAgICAgICAgZW50ZXJrZXloaW50OiBcImVudGVyS2V5SGludFwiLFxuICAgICAgICBmZXRjaHByaW9yaXR5OiBcImZldGNoUHJpb3JpdHlcIixcbiAgICAgICAgZm9yOiBcImh0bWxGb3JcIixcbiAgICAgICAgZm9ybTogXCJmb3JtXCIsXG4gICAgICAgIGZvcm1tZXRob2Q6IFwiZm9ybU1ldGhvZFwiLFxuICAgICAgICBmb3JtYWN0aW9uOiBcImZvcm1BY3Rpb25cIixcbiAgICAgICAgZm9ybWVuY3R5cGU6IFwiZm9ybUVuY1R5cGVcIixcbiAgICAgICAgZm9ybW5vdmFsaWRhdGU6IFwiZm9ybU5vVmFsaWRhdGVcIixcbiAgICAgICAgZm9ybXRhcmdldDogXCJmb3JtVGFyZ2V0XCIsXG4gICAgICAgIGZyYW1lYm9yZGVyOiBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIGhlYWRlcnM6IFwiaGVhZGVyc1wiLFxuICAgICAgICBoZWlnaHQ6IFwiaGVpZ2h0XCIsXG4gICAgICAgIGhpZGRlbjogXCJoaWRkZW5cIixcbiAgICAgICAgaGlnaDogXCJoaWdoXCIsXG4gICAgICAgIGhyZWY6IFwiaHJlZlwiLFxuICAgICAgICBocmVmbGFuZzogXCJocmVmTGFuZ1wiLFxuICAgICAgICBodG1sZm9yOiBcImh0bWxGb3JcIixcbiAgICAgICAgaHR0cGVxdWl2OiBcImh0dHBFcXVpdlwiLFxuICAgICAgICBcImh0dHAtZXF1aXZcIjogXCJodHRwRXF1aXZcIixcbiAgICAgICAgaWNvbjogXCJpY29uXCIsXG4gICAgICAgIGlkOiBcImlkXCIsXG4gICAgICAgIGltYWdlc2l6ZXM6IFwiaW1hZ2VTaXplc1wiLFxuICAgICAgICBpbWFnZXNyY3NldDogXCJpbWFnZVNyY1NldFwiLFxuICAgICAgICBpbmVydDogXCJpbmVydFwiLFxuICAgICAgICBpbm5lcmh0bWw6IFwiaW5uZXJIVE1MXCIsXG4gICAgICAgIGlucHV0bW9kZTogXCJpbnB1dE1vZGVcIixcbiAgICAgICAgaW50ZWdyaXR5OiBcImludGVncml0eVwiLFxuICAgICAgICBpczogXCJpc1wiLFxuICAgICAgICBpdGVtaWQ6IFwiaXRlbUlEXCIsXG4gICAgICAgIGl0ZW1wcm9wOiBcIml0ZW1Qcm9wXCIsXG4gICAgICAgIGl0ZW1yZWY6IFwiaXRlbVJlZlwiLFxuICAgICAgICBpdGVtc2NvcGU6IFwiaXRlbVNjb3BlXCIsXG4gICAgICAgIGl0ZW10eXBlOiBcIml0ZW1UeXBlXCIsXG4gICAgICAgIGtleXBhcmFtczogXCJrZXlQYXJhbXNcIixcbiAgICAgICAga2V5dHlwZTogXCJrZXlUeXBlXCIsXG4gICAgICAgIGtpbmQ6IFwia2luZFwiLFxuICAgICAgICBsYWJlbDogXCJsYWJlbFwiLFxuICAgICAgICBsYW5nOiBcImxhbmdcIixcbiAgICAgICAgbGlzdDogXCJsaXN0XCIsXG4gICAgICAgIGxvb3A6IFwibG9vcFwiLFxuICAgICAgICBsb3c6IFwibG93XCIsXG4gICAgICAgIG1hbmlmZXN0OiBcIm1hbmlmZXN0XCIsXG4gICAgICAgIG1hcmdpbndpZHRoOiBcIm1hcmdpbldpZHRoXCIsXG4gICAgICAgIG1hcmdpbmhlaWdodDogXCJtYXJnaW5IZWlnaHRcIixcbiAgICAgICAgbWF4OiBcIm1heFwiLFxuICAgICAgICBtYXhsZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG4gICAgICAgIG1lZGlhOiBcIm1lZGlhXCIsXG4gICAgICAgIG1lZGlhZ3JvdXA6IFwibWVkaWFHcm91cFwiLFxuICAgICAgICBtZXRob2Q6IFwibWV0aG9kXCIsXG4gICAgICAgIG1pbjogXCJtaW5cIixcbiAgICAgICAgbWlubGVuZ3RoOiBcIm1pbkxlbmd0aFwiLFxuICAgICAgICBtdWx0aXBsZTogXCJtdWx0aXBsZVwiLFxuICAgICAgICBtdXRlZDogXCJtdXRlZFwiLFxuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgbm9tb2R1bGU6IFwibm9Nb2R1bGVcIixcbiAgICAgICAgbm9uY2U6IFwibm9uY2VcIixcbiAgICAgICAgbm92YWxpZGF0ZTogXCJub1ZhbGlkYXRlXCIsXG4gICAgICAgIG9wZW46IFwib3BlblwiLFxuICAgICAgICBvcHRpbXVtOiBcIm9wdGltdW1cIixcbiAgICAgICAgcGF0dGVybjogXCJwYXR0ZXJuXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIHBsYXlzaW5saW5lOiBcInBsYXlzSW5saW5lXCIsXG4gICAgICAgIHBvc3RlcjogXCJwb3N0ZXJcIixcbiAgICAgICAgcHJlbG9hZDogXCJwcmVsb2FkXCIsXG4gICAgICAgIHByb2ZpbGU6IFwicHJvZmlsZVwiLFxuICAgICAgICByYWRpb2dyb3VwOiBcInJhZGlvR3JvdXBcIixcbiAgICAgICAgcmVhZG9ubHk6IFwicmVhZE9ubHlcIixcbiAgICAgICAgcmVmZXJyZXJwb2xpY3k6IFwicmVmZXJyZXJQb2xpY3lcIixcbiAgICAgICAgcmVsOiBcInJlbFwiLFxuICAgICAgICByZXF1aXJlZDogXCJyZXF1aXJlZFwiLFxuICAgICAgICByZXZlcnNlZDogXCJyZXZlcnNlZFwiLFxuICAgICAgICByb2xlOiBcInJvbGVcIixcbiAgICAgICAgcm93czogXCJyb3dzXCIsXG4gICAgICAgIHJvd3NwYW46IFwicm93U3BhblwiLFxuICAgICAgICBzYW5kYm94OiBcInNhbmRib3hcIixcbiAgICAgICAgc2NvcGU6IFwic2NvcGVcIixcbiAgICAgICAgc2NvcGVkOiBcInNjb3BlZFwiLFxuICAgICAgICBzY3JvbGxpbmc6IFwic2Nyb2xsaW5nXCIsXG4gICAgICAgIHNlYW1sZXNzOiBcInNlYW1sZXNzXCIsXG4gICAgICAgIHNlbGVjdGVkOiBcInNlbGVjdGVkXCIsXG4gICAgICAgIHNoYXBlOiBcInNoYXBlXCIsXG4gICAgICAgIHNpemU6IFwic2l6ZVwiLFxuICAgICAgICBzaXplczogXCJzaXplc1wiLFxuICAgICAgICBzcGFuOiBcInNwYW5cIixcbiAgICAgICAgc3BlbGxjaGVjazogXCJzcGVsbENoZWNrXCIsXG4gICAgICAgIHNyYzogXCJzcmNcIixcbiAgICAgICAgc3JjZG9jOiBcInNyY0RvY1wiLFxuICAgICAgICBzcmNsYW5nOiBcInNyY0xhbmdcIixcbiAgICAgICAgc3Jjc2V0OiBcInNyY1NldFwiLFxuICAgICAgICBzdGFydDogXCJzdGFydFwiLFxuICAgICAgICBzdGVwOiBcInN0ZXBcIixcbiAgICAgICAgc3R5bGU6IFwic3R5bGVcIixcbiAgICAgICAgc3VtbWFyeTogXCJzdW1tYXJ5XCIsXG4gICAgICAgIHRhYmluZGV4OiBcInRhYkluZGV4XCIsXG4gICAgICAgIHRhcmdldDogXCJ0YXJnZXRcIixcbiAgICAgICAgdGl0bGU6IFwidGl0bGVcIixcbiAgICAgICAgdHlwZTogXCJ0eXBlXCIsXG4gICAgICAgIHVzZW1hcDogXCJ1c2VNYXBcIixcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICAgICAgd2lkdGg6IFwid2lkdGhcIixcbiAgICAgICAgd21vZGU6IFwid21vZGVcIixcbiAgICAgICAgd3JhcDogXCJ3cmFwXCIsXG4gICAgICAgIGFib3V0OiBcImFib3V0XCIsXG4gICAgICAgIGFjY2VudGhlaWdodDogXCJhY2NlbnRIZWlnaHRcIixcbiAgICAgICAgXCJhY2NlbnQtaGVpZ2h0XCI6IFwiYWNjZW50SGVpZ2h0XCIsXG4gICAgICAgIGFjY3VtdWxhdGU6IFwiYWNjdW11bGF0ZVwiLFxuICAgICAgICBhZGRpdGl2ZTogXCJhZGRpdGl2ZVwiLFxuICAgICAgICBhbGlnbm1lbnRiYXNlbGluZTogXCJhbGlnbm1lbnRCYXNlbGluZVwiLFxuICAgICAgICBcImFsaWdubWVudC1iYXNlbGluZVwiOiBcImFsaWdubWVudEJhc2VsaW5lXCIsXG4gICAgICAgIGFsbG93cmVvcmRlcjogXCJhbGxvd1Jlb3JkZXJcIixcbiAgICAgICAgYWxwaGFiZXRpYzogXCJhbHBoYWJldGljXCIsXG4gICAgICAgIGFtcGxpdHVkZTogXCJhbXBsaXR1ZGVcIixcbiAgICAgICAgYXJhYmljZm9ybTogXCJhcmFiaWNGb3JtXCIsXG4gICAgICAgIFwiYXJhYmljLWZvcm1cIjogXCJhcmFiaWNGb3JtXCIsXG4gICAgICAgIGFzY2VudDogXCJhc2NlbnRcIixcbiAgICAgICAgYXR0cmlidXRlbmFtZTogXCJhdHRyaWJ1dGVOYW1lXCIsXG4gICAgICAgIGF0dHJpYnV0ZXR5cGU6IFwiYXR0cmlidXRlVHlwZVwiLFxuICAgICAgICBhdXRvcmV2ZXJzZTogXCJhdXRvUmV2ZXJzZVwiLFxuICAgICAgICBhemltdXRoOiBcImF6aW11dGhcIixcbiAgICAgICAgYmFzZWZyZXF1ZW5jeTogXCJiYXNlRnJlcXVlbmN5XCIsXG4gICAgICAgIGJhc2VsaW5lc2hpZnQ6IFwiYmFzZWxpbmVTaGlmdFwiLFxuICAgICAgICBcImJhc2VsaW5lLXNoaWZ0XCI6IFwiYmFzZWxpbmVTaGlmdFwiLFxuICAgICAgICBiYXNlcHJvZmlsZTogXCJiYXNlUHJvZmlsZVwiLFxuICAgICAgICBiYm94OiBcImJib3hcIixcbiAgICAgICAgYmVnaW46IFwiYmVnaW5cIixcbiAgICAgICAgYmlhczogXCJiaWFzXCIsXG4gICAgICAgIGJ5OiBcImJ5XCIsXG4gICAgICAgIGNhbGNtb2RlOiBcImNhbGNNb2RlXCIsXG4gICAgICAgIGNhcGhlaWdodDogXCJjYXBIZWlnaHRcIixcbiAgICAgICAgXCJjYXAtaGVpZ2h0XCI6IFwiY2FwSGVpZ2h0XCIsXG4gICAgICAgIGNsaXA6IFwiY2xpcFwiLFxuICAgICAgICBjbGlwcGF0aDogXCJjbGlwUGF0aFwiLFxuICAgICAgICBcImNsaXAtcGF0aFwiOiBcImNsaXBQYXRoXCIsXG4gICAgICAgIGNsaXBwYXRodW5pdHM6IFwiY2xpcFBhdGhVbml0c1wiLFxuICAgICAgICBjbGlwcnVsZTogXCJjbGlwUnVsZVwiLFxuICAgICAgICBcImNsaXAtcnVsZVwiOiBcImNsaXBSdWxlXCIsXG4gICAgICAgIGNvbG9yOiBcImNvbG9yXCIsXG4gICAgICAgIGNvbG9yaW50ZXJwb2xhdGlvbjogXCJjb2xvckludGVycG9sYXRpb25cIixcbiAgICAgICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCI6IFwiY29sb3JJbnRlcnBvbGF0aW9uXCIsXG4gICAgICAgIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6IFwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLFxuICAgICAgICBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiOiBcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIixcbiAgICAgICAgY29sb3Jwcm9maWxlOiBcImNvbG9yUHJvZmlsZVwiLFxuICAgICAgICBcImNvbG9yLXByb2ZpbGVcIjogXCJjb2xvclByb2ZpbGVcIixcbiAgICAgICAgY29sb3JyZW5kZXJpbmc6IFwiY29sb3JSZW5kZXJpbmdcIixcbiAgICAgICAgXCJjb2xvci1yZW5kZXJpbmdcIjogXCJjb2xvclJlbmRlcmluZ1wiLFxuICAgICAgICBjb250ZW50c2NyaXB0dHlwZTogXCJjb250ZW50U2NyaXB0VHlwZVwiLFxuICAgICAgICBjb250ZW50c3R5bGV0eXBlOiBcImNvbnRlbnRTdHlsZVR5cGVcIixcbiAgICAgICAgY3Vyc29yOiBcImN1cnNvclwiLFxuICAgICAgICBjeDogXCJjeFwiLFxuICAgICAgICBjeTogXCJjeVwiLFxuICAgICAgICBkOiBcImRcIixcbiAgICAgICAgZGF0YXR5cGU6IFwiZGF0YXR5cGVcIixcbiAgICAgICAgZGVjZWxlcmF0ZTogXCJkZWNlbGVyYXRlXCIsXG4gICAgICAgIGRlc2NlbnQ6IFwiZGVzY2VudFwiLFxuICAgICAgICBkaWZmdXNlY29uc3RhbnQ6IFwiZGlmZnVzZUNvbnN0YW50XCIsXG4gICAgICAgIGRpcmVjdGlvbjogXCJkaXJlY3Rpb25cIixcbiAgICAgICAgZGlzcGxheTogXCJkaXNwbGF5XCIsXG4gICAgICAgIGRpdmlzb3I6IFwiZGl2aXNvclwiLFxuICAgICAgICBkb21pbmFudGJhc2VsaW5lOiBcImRvbWluYW50QmFzZWxpbmVcIixcbiAgICAgICAgXCJkb21pbmFudC1iYXNlbGluZVwiOiBcImRvbWluYW50QmFzZWxpbmVcIixcbiAgICAgICAgZHVyOiBcImR1clwiLFxuICAgICAgICBkeDogXCJkeFwiLFxuICAgICAgICBkeTogXCJkeVwiLFxuICAgICAgICBlZGdlbW9kZTogXCJlZGdlTW9kZVwiLFxuICAgICAgICBlbGV2YXRpb246IFwiZWxldmF0aW9uXCIsXG4gICAgICAgIGVuYWJsZWJhY2tncm91bmQ6IFwiZW5hYmxlQmFja2dyb3VuZFwiLFxuICAgICAgICBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwiZW5hYmxlQmFja2dyb3VuZFwiLFxuICAgICAgICBlbmQ6IFwiZW5kXCIsXG4gICAgICAgIGV4cG9uZW50OiBcImV4cG9uZW50XCIsXG4gICAgICAgIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6IFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBmaWxsOiBcImZpbGxcIixcbiAgICAgICAgZmlsbG9wYWNpdHk6IFwiZmlsbE9wYWNpdHlcIixcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIjogXCJmaWxsT3BhY2l0eVwiLFxuICAgICAgICBmaWxscnVsZTogXCJmaWxsUnVsZVwiLFxuICAgICAgICBcImZpbGwtcnVsZVwiOiBcImZpbGxSdWxlXCIsXG4gICAgICAgIGZpbHRlcjogXCJmaWx0ZXJcIixcbiAgICAgICAgZmlsdGVycmVzOiBcImZpbHRlclJlc1wiLFxuICAgICAgICBmaWx0ZXJ1bml0czogXCJmaWx0ZXJVbml0c1wiLFxuICAgICAgICBmbG9vZG9wYWNpdHk6IFwiZmxvb2RPcGFjaXR5XCIsXG4gICAgICAgIFwiZmxvb2Qtb3BhY2l0eVwiOiBcImZsb29kT3BhY2l0eVwiLFxuICAgICAgICBmbG9vZGNvbG9yOiBcImZsb29kQ29sb3JcIixcbiAgICAgICAgXCJmbG9vZC1jb2xvclwiOiBcImZsb29kQ29sb3JcIixcbiAgICAgICAgZm9jdXNhYmxlOiBcImZvY3VzYWJsZVwiLFxuICAgICAgICBmb250ZmFtaWx5OiBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgXCJmb250LWZhbWlseVwiOiBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgZm9udHNpemU6IFwiZm9udFNpemVcIixcbiAgICAgICAgXCJmb250LXNpemVcIjogXCJmb250U2l6ZVwiLFxuICAgICAgICBmb250c2l6ZWFkanVzdDogXCJmb250U2l6ZUFkanVzdFwiLFxuICAgICAgICBcImZvbnQtc2l6ZS1hZGp1c3RcIjogXCJmb250U2l6ZUFkanVzdFwiLFxuICAgICAgICBmb250c3RyZXRjaDogXCJmb250U3RyZXRjaFwiLFxuICAgICAgICBcImZvbnQtc3RyZXRjaFwiOiBcImZvbnRTdHJldGNoXCIsXG4gICAgICAgIGZvbnRzdHlsZTogXCJmb250U3R5bGVcIixcbiAgICAgICAgXCJmb250LXN0eWxlXCI6IFwiZm9udFN0eWxlXCIsXG4gICAgICAgIGZvbnR2YXJpYW50OiBcImZvbnRWYXJpYW50XCIsXG4gICAgICAgIFwiZm9udC12YXJpYW50XCI6IFwiZm9udFZhcmlhbnRcIixcbiAgICAgICAgZm9udHdlaWdodDogXCJmb250V2VpZ2h0XCIsXG4gICAgICAgIFwiZm9udC13ZWlnaHRcIjogXCJmb250V2VpZ2h0XCIsXG4gICAgICAgIGZvcm1hdDogXCJmb3JtYXRcIixcbiAgICAgICAgZnJvbTogXCJmcm9tXCIsXG4gICAgICAgIGZ4OiBcImZ4XCIsXG4gICAgICAgIGZ5OiBcImZ5XCIsXG4gICAgICAgIGcxOiBcImcxXCIsXG4gICAgICAgIGcyOiBcImcyXCIsXG4gICAgICAgIGdseXBobmFtZTogXCJnbHlwaE5hbWVcIixcbiAgICAgICAgXCJnbHlwaC1uYW1lXCI6IFwiZ2x5cGhOYW1lXCIsXG4gICAgICAgIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiBcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXG4gICAgICAgIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiOiBcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXG4gICAgICAgIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIixcbiAgICAgICAgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiOiBcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLFxuICAgICAgICBnbHlwaHJlZjogXCJnbHlwaFJlZlwiLFxuICAgICAgICBncmFkaWVudHRyYW5zZm9ybTogXCJncmFkaWVudFRyYW5zZm9ybVwiLFxuICAgICAgICBncmFkaWVudHVuaXRzOiBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgaGFuZ2luZzogXCJoYW5naW5nXCIsXG4gICAgICAgIGhvcml6YWR2eDogXCJob3JpekFkdlhcIixcbiAgICAgICAgXCJob3Jpei1hZHYteFwiOiBcImhvcml6QWR2WFwiLFxuICAgICAgICBob3Jpem9yaWdpbng6IFwiaG9yaXpPcmlnaW5YXCIsXG4gICAgICAgIFwiaG9yaXotb3JpZ2luLXhcIjogXCJob3Jpek9yaWdpblhcIixcbiAgICAgICAgaWRlb2dyYXBoaWM6IFwiaWRlb2dyYXBoaWNcIixcbiAgICAgICAgaW1hZ2VyZW5kZXJpbmc6IFwiaW1hZ2VSZW5kZXJpbmdcIixcbiAgICAgICAgXCJpbWFnZS1yZW5kZXJpbmdcIjogXCJpbWFnZVJlbmRlcmluZ1wiLFxuICAgICAgICBpbjI6IFwiaW4yXCIsXG4gICAgICAgIGluOiBcImluXCIsXG4gICAgICAgIGlubGlzdDogXCJpbmxpc3RcIixcbiAgICAgICAgaW50ZXJjZXB0OiBcImludGVyY2VwdFwiLFxuICAgICAgICBrMTogXCJrMVwiLFxuICAgICAgICBrMjogXCJrMlwiLFxuICAgICAgICBrMzogXCJrM1wiLFxuICAgICAgICBrNDogXCJrNFwiLFxuICAgICAgICBrOiBcImtcIixcbiAgICAgICAga2VybmVsbWF0cml4OiBcImtlcm5lbE1hdHJpeFwiLFxuICAgICAgICBrZXJuZWx1bml0bGVuZ3RoOiBcImtlcm5lbFVuaXRMZW5ndGhcIixcbiAgICAgICAga2VybmluZzogXCJrZXJuaW5nXCIsXG4gICAgICAgIGtleXBvaW50czogXCJrZXlQb2ludHNcIixcbiAgICAgICAga2V5c3BsaW5lczogXCJrZXlTcGxpbmVzXCIsXG4gICAgICAgIGtleXRpbWVzOiBcImtleVRpbWVzXCIsXG4gICAgICAgIGxlbmd0aGFkanVzdDogXCJsZW5ndGhBZGp1c3RcIixcbiAgICAgICAgbGV0dGVyc3BhY2luZzogXCJsZXR0ZXJTcGFjaW5nXCIsXG4gICAgICAgIFwibGV0dGVyLXNwYWNpbmdcIjogXCJsZXR0ZXJTcGFjaW5nXCIsXG4gICAgICAgIGxpZ2h0aW5nY29sb3I6IFwibGlnaHRpbmdDb2xvclwiLFxuICAgICAgICBcImxpZ2h0aW5nLWNvbG9yXCI6IFwibGlnaHRpbmdDb2xvclwiLFxuICAgICAgICBsaW1pdGluZ2NvbmVhbmdsZTogXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFxuICAgICAgICBsb2NhbDogXCJsb2NhbFwiLFxuICAgICAgICBtYXJrZXJlbmQ6IFwibWFya2VyRW5kXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiOiBcIm1hcmtlckVuZFwiLFxuICAgICAgICBtYXJrZXJoZWlnaHQ6IFwibWFya2VySGVpZ2h0XCIsXG4gICAgICAgIG1hcmtlcm1pZDogXCJtYXJrZXJNaWRcIixcbiAgICAgICAgXCJtYXJrZXItbWlkXCI6IFwibWFya2VyTWlkXCIsXG4gICAgICAgIG1hcmtlcnN0YXJ0OiBcIm1hcmtlclN0YXJ0XCIsXG4gICAgICAgIFwibWFya2VyLXN0YXJ0XCI6IFwibWFya2VyU3RhcnRcIixcbiAgICAgICAgbWFya2VydW5pdHM6IFwibWFya2VyVW5pdHNcIixcbiAgICAgICAgbWFya2Vyd2lkdGg6IFwibWFya2VyV2lkdGhcIixcbiAgICAgICAgbWFzazogXCJtYXNrXCIsXG4gICAgICAgIG1hc2tjb250ZW50dW5pdHM6IFwibWFza0NvbnRlbnRVbml0c1wiLFxuICAgICAgICBtYXNrdW5pdHM6IFwibWFza1VuaXRzXCIsXG4gICAgICAgIG1hdGhlbWF0aWNhbDogXCJtYXRoZW1hdGljYWxcIixcbiAgICAgICAgbW9kZTogXCJtb2RlXCIsXG4gICAgICAgIG51bW9jdGF2ZXM6IFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBvZmZzZXQ6IFwib2Zmc2V0XCIsXG4gICAgICAgIG9wYWNpdHk6IFwib3BhY2l0eVwiLFxuICAgICAgICBvcGVyYXRvcjogXCJvcGVyYXRvclwiLFxuICAgICAgICBvcmRlcjogXCJvcmRlclwiLFxuICAgICAgICBvcmllbnQ6IFwib3JpZW50XCIsXG4gICAgICAgIG9yaWVudGF0aW9uOiBcIm9yaWVudGF0aW9uXCIsXG4gICAgICAgIG9yaWdpbjogXCJvcmlnaW5cIixcbiAgICAgICAgb3ZlcmZsb3c6IFwib3ZlcmZsb3dcIixcbiAgICAgICAgb3ZlcmxpbmVwb3NpdGlvbjogXCJvdmVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIFwib3ZlcmxpbmUtcG9zaXRpb25cIjogXCJvdmVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIG92ZXJsaW5ldGhpY2tuZXNzOiBcIm92ZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCI6IFwib3ZlcmxpbmVUaGlja25lc3NcIixcbiAgICAgICAgcGFpbnRvcmRlcjogXCJwYWludE9yZGVyXCIsXG4gICAgICAgIFwicGFpbnQtb3JkZXJcIjogXCJwYWludE9yZGVyXCIsXG4gICAgICAgIHBhbm9zZTE6IFwicGFub3NlMVwiLFxuICAgICAgICBcInBhbm9zZS0xXCI6IFwicGFub3NlMVwiLFxuICAgICAgICBwYXRobGVuZ3RoOiBcInBhdGhMZW5ndGhcIixcbiAgICAgICAgcGF0dGVybmNvbnRlbnR1bml0czogXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsXG4gICAgICAgIHBhdHRlcm50cmFuc2Zvcm06IFwicGF0dGVyblRyYW5zZm9ybVwiLFxuICAgICAgICBwYXR0ZXJudW5pdHM6IFwicGF0dGVyblVuaXRzXCIsXG4gICAgICAgIHBvaW50ZXJldmVudHM6IFwicG9pbnRlckV2ZW50c1wiLFxuICAgICAgICBcInBvaW50ZXItZXZlbnRzXCI6IFwicG9pbnRlckV2ZW50c1wiLFxuICAgICAgICBwb2ludHM6IFwicG9pbnRzXCIsXG4gICAgICAgIHBvaW50c2F0eDogXCJwb2ludHNBdFhcIixcbiAgICAgICAgcG9pbnRzYXR5OiBcInBvaW50c0F0WVwiLFxuICAgICAgICBwb2ludHNhdHo6IFwicG9pbnRzQXRaXCIsXG4gICAgICAgIHBvcG92ZXI6IFwicG9wb3ZlclwiLFxuICAgICAgICBwb3BvdmVydGFyZ2V0OiBcInBvcG92ZXJUYXJnZXRcIixcbiAgICAgICAgcG9wb3ZlcnRhcmdldGFjdGlvbjogXCJwb3BvdmVyVGFyZ2V0QWN0aW9uXCIsXG4gICAgICAgIHByZWZpeDogXCJwcmVmaXhcIixcbiAgICAgICAgcHJlc2VydmVhbHBoYTogXCJwcmVzZXJ2ZUFscGhhXCIsXG4gICAgICAgIHByZXNlcnZlYXNwZWN0cmF0aW86IFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLFxuICAgICAgICBwcmltaXRpdmV1bml0czogXCJwcmltaXRpdmVVbml0c1wiLFxuICAgICAgICBwcm9wZXJ0eTogXCJwcm9wZXJ0eVwiLFxuICAgICAgICByOiBcInJcIixcbiAgICAgICAgcmFkaXVzOiBcInJhZGl1c1wiLFxuICAgICAgICByZWZ4OiBcInJlZlhcIixcbiAgICAgICAgcmVmeTogXCJyZWZZXCIsXG4gICAgICAgIHJlbmRlcmluZ2ludGVudDogXCJyZW5kZXJpbmdJbnRlbnRcIixcbiAgICAgICAgXCJyZW5kZXJpbmctaW50ZW50XCI6IFwicmVuZGVyaW5nSW50ZW50XCIsXG4gICAgICAgIHJlcGVhdGNvdW50OiBcInJlcGVhdENvdW50XCIsXG4gICAgICAgIHJlcGVhdGR1cjogXCJyZXBlYXREdXJcIixcbiAgICAgICAgcmVxdWlyZWRleHRlbnNpb25zOiBcInJlcXVpcmVkRXh0ZW5zaW9uc1wiLFxuICAgICAgICByZXF1aXJlZGZlYXR1cmVzOiBcInJlcXVpcmVkRmVhdHVyZXNcIixcbiAgICAgICAgcmVzb3VyY2U6IFwicmVzb3VyY2VcIixcbiAgICAgICAgcmVzdGFydDogXCJyZXN0YXJ0XCIsXG4gICAgICAgIHJlc3VsdDogXCJyZXN1bHRcIixcbiAgICAgICAgcmVzdWx0czogXCJyZXN1bHRzXCIsXG4gICAgICAgIHJvdGF0ZTogXCJyb3RhdGVcIixcbiAgICAgICAgcng6IFwicnhcIixcbiAgICAgICAgcnk6IFwicnlcIixcbiAgICAgICAgc2NhbGU6IFwic2NhbGVcIixcbiAgICAgICAgc2VjdXJpdHk6IFwic2VjdXJpdHlcIixcbiAgICAgICAgc2VlZDogXCJzZWVkXCIsXG4gICAgICAgIHNoYXBlcmVuZGVyaW5nOiBcInNoYXBlUmVuZGVyaW5nXCIsXG4gICAgICAgIFwic2hhcGUtcmVuZGVyaW5nXCI6IFwic2hhcGVSZW5kZXJpbmdcIixcbiAgICAgICAgc2xvcGU6IFwic2xvcGVcIixcbiAgICAgICAgc3BhY2luZzogXCJzcGFjaW5nXCIsXG4gICAgICAgIHNwZWN1bGFyY29uc3RhbnQ6IFwic3BlY3VsYXJDb25zdGFudFwiLFxuICAgICAgICBzcGVjdWxhcmV4cG9uZW50OiBcInNwZWN1bGFyRXhwb25lbnRcIixcbiAgICAgICAgc3BlZWQ6IFwic3BlZWRcIixcbiAgICAgICAgc3ByZWFkbWV0aG9kOiBcInNwcmVhZE1ldGhvZFwiLFxuICAgICAgICBzdGFydG9mZnNldDogXCJzdGFydE9mZnNldFwiLFxuICAgICAgICBzdGRkZXZpYXRpb246IFwic3RkRGV2aWF0aW9uXCIsXG4gICAgICAgIHN0ZW1oOiBcInN0ZW1oXCIsXG4gICAgICAgIHN0ZW12OiBcInN0ZW12XCIsXG4gICAgICAgIHN0aXRjaHRpbGVzOiBcInN0aXRjaFRpbGVzXCIsXG4gICAgICAgIHN0b3Bjb2xvcjogXCJzdG9wQ29sb3JcIixcbiAgICAgICAgXCJzdG9wLWNvbG9yXCI6IFwic3RvcENvbG9yXCIsXG4gICAgICAgIHN0b3BvcGFjaXR5OiBcInN0b3BPcGFjaXR5XCIsXG4gICAgICAgIFwic3RvcC1vcGFjaXR5XCI6IFwic3RvcE9wYWNpdHlcIixcbiAgICAgICAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiBcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIjogXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIixcbiAgICAgICAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXG4gICAgICAgIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIjogXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXG4gICAgICAgIHN0cmluZzogXCJzdHJpbmdcIixcbiAgICAgICAgc3Ryb2tlOiBcInN0cm9rZVwiLFxuICAgICAgICBzdHJva2VkYXNoYXJyYXk6IFwic3Ryb2tlRGFzaGFycmF5XCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcInN0cm9rZURhc2hhcnJheVwiLFxuICAgICAgICBzdHJva2VkYXNob2Zmc2V0OiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICAgICAgc3Ryb2tlbGluZWNhcDogXCJzdHJva2VMaW5lY2FwXCIsXG4gICAgICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogXCJzdHJva2VMaW5lY2FwXCIsXG4gICAgICAgIHN0cm9rZWxpbmVqb2luOiBcInN0cm9rZUxpbmVqb2luXCIsXG4gICAgICAgIFwic3Ryb2tlLWxpbmVqb2luXCI6IFwic3Ryb2tlTGluZWpvaW5cIixcbiAgICAgICAgc3Ryb2tlbWl0ZXJsaW1pdDogXCJzdHJva2VNaXRlcmxpbWl0XCIsXG4gICAgICAgIFwic3Ryb2tlLW1pdGVybGltaXRcIjogXCJzdHJva2VNaXRlcmxpbWl0XCIsXG4gICAgICAgIHN0cm9rZXdpZHRoOiBcInN0cm9rZVdpZHRoXCIsXG4gICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwic3Ryb2tlV2lkdGhcIixcbiAgICAgICAgc3Ryb2tlb3BhY2l0eTogXCJzdHJva2VPcGFjaXR5XCIsXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIjogXCJzdHJva2VPcGFjaXR5XCIsXG4gICAgICAgIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIixcbiAgICAgICAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiLFxuICAgICAgICBzdXJmYWNlc2NhbGU6IFwic3VyZmFjZVNjYWxlXCIsXG4gICAgICAgIHN5c3RlbWxhbmd1YWdlOiBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIHRhYmxldmFsdWVzOiBcInRhYmxlVmFsdWVzXCIsXG4gICAgICAgIHRhcmdldHg6IFwidGFyZ2V0WFwiLFxuICAgICAgICB0YXJnZXR5OiBcInRhcmdldFlcIixcbiAgICAgICAgdGV4dGFuY2hvcjogXCJ0ZXh0QW5jaG9yXCIsXG4gICAgICAgIFwidGV4dC1hbmNob3JcIjogXCJ0ZXh0QW5jaG9yXCIsXG4gICAgICAgIHRleHRkZWNvcmF0aW9uOiBcInRleHREZWNvcmF0aW9uXCIsXG4gICAgICAgIFwidGV4dC1kZWNvcmF0aW9uXCI6IFwidGV4dERlY29yYXRpb25cIixcbiAgICAgICAgdGV4dGxlbmd0aDogXCJ0ZXh0TGVuZ3RoXCIsXG4gICAgICAgIHRleHRyZW5kZXJpbmc6IFwidGV4dFJlbmRlcmluZ1wiLFxuICAgICAgICBcInRleHQtcmVuZGVyaW5nXCI6IFwidGV4dFJlbmRlcmluZ1wiLFxuICAgICAgICB0bzogXCJ0b1wiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNmb3JtXCIsXG4gICAgICAgIHRyYW5zZm9ybW9yaWdpbjogXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgICAgICAgXCJ0cmFuc2Zvcm0tb3JpZ2luXCI6IFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gICAgICAgIHR5cGVvZjogXCJ0eXBlb2ZcIixcbiAgICAgICAgdTE6IFwidTFcIixcbiAgICAgICAgdTI6IFwidTJcIixcbiAgICAgICAgdW5kZXJsaW5lcG9zaXRpb246IFwidW5kZXJsaW5lUG9zaXRpb25cIixcbiAgICAgICAgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIjogXCJ1bmRlcmxpbmVQb3NpdGlvblwiLFxuICAgICAgICB1bmRlcmxpbmV0aGlja25lc3M6IFwidW5kZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiOiBcInVuZGVybGluZVRoaWNrbmVzc1wiLFxuICAgICAgICB1bmljb2RlOiBcInVuaWNvZGVcIixcbiAgICAgICAgdW5pY29kZWJpZGk6IFwidW5pY29kZUJpZGlcIixcbiAgICAgICAgXCJ1bmljb2RlLWJpZGlcIjogXCJ1bmljb2RlQmlkaVwiLFxuICAgICAgICB1bmljb2RlcmFuZ2U6IFwidW5pY29kZVJhbmdlXCIsXG4gICAgICAgIFwidW5pY29kZS1yYW5nZVwiOiBcInVuaWNvZGVSYW5nZVwiLFxuICAgICAgICB1bml0c3BlcmVtOiBcInVuaXRzUGVyRW1cIixcbiAgICAgICAgXCJ1bml0cy1wZXItZW1cIjogXCJ1bml0c1BlckVtXCIsXG4gICAgICAgIHVuc2VsZWN0YWJsZTogXCJ1bnNlbGVjdGFibGVcIixcbiAgICAgICAgdmFscGhhYmV0aWM6IFwidkFscGhhYmV0aWNcIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIjogXCJ2QWxwaGFiZXRpY1wiLFxuICAgICAgICB2YWx1ZXM6IFwidmFsdWVzXCIsXG4gICAgICAgIHZlY3RvcmVmZmVjdDogXCJ2ZWN0b3JFZmZlY3RcIixcbiAgICAgICAgXCJ2ZWN0b3ItZWZmZWN0XCI6IFwidmVjdG9yRWZmZWN0XCIsXG4gICAgICAgIHZlcnNpb246IFwidmVyc2lvblwiLFxuICAgICAgICB2ZXJ0YWR2eTogXCJ2ZXJ0QWR2WVwiLFxuICAgICAgICBcInZlcnQtYWR2LXlcIjogXCJ2ZXJ0QWR2WVwiLFxuICAgICAgICB2ZXJ0b3JpZ2lueDogXCJ2ZXJ0T3JpZ2luWFwiLFxuICAgICAgICBcInZlcnQtb3JpZ2luLXhcIjogXCJ2ZXJ0T3JpZ2luWFwiLFxuICAgICAgICB2ZXJ0b3JpZ2lueTogXCJ2ZXJ0T3JpZ2luWVwiLFxuICAgICAgICBcInZlcnQtb3JpZ2luLXlcIjogXCJ2ZXJ0T3JpZ2luWVwiLFxuICAgICAgICB2aGFuZ2luZzogXCJ2SGFuZ2luZ1wiLFxuICAgICAgICBcInYtaGFuZ2luZ1wiOiBcInZIYW5naW5nXCIsXG4gICAgICAgIHZpZGVvZ3JhcGhpYzogXCJ2SWRlb2dyYXBoaWNcIixcbiAgICAgICAgXCJ2LWlkZW9ncmFwaGljXCI6IFwidklkZW9ncmFwaGljXCIsXG4gICAgICAgIHZpZXdib3g6IFwidmlld0JveFwiLFxuICAgICAgICB2aWV3dGFyZ2V0OiBcInZpZXdUYXJnZXRcIixcbiAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIHZtYXRoZW1hdGljYWw6IFwidk1hdGhlbWF0aWNhbFwiLFxuICAgICAgICBcInYtbWF0aGVtYXRpY2FsXCI6IFwidk1hdGhlbWF0aWNhbFwiLFxuICAgICAgICB2b2NhYjogXCJ2b2NhYlwiLFxuICAgICAgICB3aWR0aHM6IFwid2lkdGhzXCIsXG4gICAgICAgIHdvcmRzcGFjaW5nOiBcIndvcmRTcGFjaW5nXCIsXG4gICAgICAgIFwid29yZC1zcGFjaW5nXCI6IFwid29yZFNwYWNpbmdcIixcbiAgICAgICAgd3JpdGluZ21vZGU6IFwid3JpdGluZ01vZGVcIixcbiAgICAgICAgXCJ3cml0aW5nLW1vZGVcIjogXCJ3cml0aW5nTW9kZVwiLFxuICAgICAgICB4MTogXCJ4MVwiLFxuICAgICAgICB4MjogXCJ4MlwiLFxuICAgICAgICB4OiBcInhcIixcbiAgICAgICAgeGNoYW5uZWxzZWxlY3RvcjogXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIHhoZWlnaHQ6IFwieEhlaWdodFwiLFxuICAgICAgICBcIngtaGVpZ2h0XCI6IFwieEhlaWdodFwiLFxuICAgICAgICB4bGlua2FjdHVhdGU6IFwieGxpbmtBY3R1YXRlXCIsXG4gICAgICAgIFwieGxpbms6YWN0dWF0ZVwiOiBcInhsaW5rQWN0dWF0ZVwiLFxuICAgICAgICB4bGlua2FyY3JvbGU6IFwieGxpbmtBcmNyb2xlXCIsXG4gICAgICAgIFwieGxpbms6YXJjcm9sZVwiOiBcInhsaW5rQXJjcm9sZVwiLFxuICAgICAgICB4bGlua2hyZWY6IFwieGxpbmtIcmVmXCIsXG4gICAgICAgIFwieGxpbms6aHJlZlwiOiBcInhsaW5rSHJlZlwiLFxuICAgICAgICB4bGlua3JvbGU6IFwieGxpbmtSb2xlXCIsXG4gICAgICAgIFwieGxpbms6cm9sZVwiOiBcInhsaW5rUm9sZVwiLFxuICAgICAgICB4bGlua3Nob3c6IFwieGxpbmtTaG93XCIsXG4gICAgICAgIFwieGxpbms6c2hvd1wiOiBcInhsaW5rU2hvd1wiLFxuICAgICAgICB4bGlua3RpdGxlOiBcInhsaW5rVGl0bGVcIixcbiAgICAgICAgXCJ4bGluazp0aXRsZVwiOiBcInhsaW5rVGl0bGVcIixcbiAgICAgICAgeGxpbmt0eXBlOiBcInhsaW5rVHlwZVwiLFxuICAgICAgICBcInhsaW5rOnR5cGVcIjogXCJ4bGlua1R5cGVcIixcbiAgICAgICAgeG1sYmFzZTogXCJ4bWxCYXNlXCIsXG4gICAgICAgIFwieG1sOmJhc2VcIjogXCJ4bWxCYXNlXCIsXG4gICAgICAgIHhtbGxhbmc6IFwieG1sTGFuZ1wiLFxuICAgICAgICBcInhtbDpsYW5nXCI6IFwieG1sTGFuZ1wiLFxuICAgICAgICB4bWxuczogXCJ4bWxuc1wiLFxuICAgICAgICBcInhtbDpzcGFjZVwiOiBcInhtbFNwYWNlXCIsXG4gICAgICAgIHhtbG5zeGxpbms6IFwieG1sbnNYbGlua1wiLFxuICAgICAgICBcInhtbG5zOnhsaW5rXCI6IFwieG1sbnNYbGlua1wiLFxuICAgICAgICB4bWxzcGFjZTogXCJ4bWxTcGFjZVwiLFxuICAgICAgICB5MTogXCJ5MVwiLFxuICAgICAgICB5MjogXCJ5MlwiLFxuICAgICAgICB5OiBcInlcIixcbiAgICAgICAgeWNoYW5uZWxzZWxlY3RvcjogXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIHo6IFwielwiLFxuICAgICAgICB6b29tYW5kcGFuOiBcInpvb21BbmRQYW5cIlxuICAgICAgfSxcbiAgICAgIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAgICAgICBcImFyaWEtY3VycmVudFwiOiAwLFxuICAgICAgICBcImFyaWEtZGVzY3JpcHRpb25cIjogMCxcbiAgICAgICAgXCJhcmlhLWRldGFpbHNcIjogMCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogMCxcbiAgICAgICAgXCJhcmlhLWludmFsaWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWtleXNob3J0Y3V0c1wiOiAwLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvbGVkZXNjcmlwdGlvblwiOiAwLFxuICAgICAgICBcImFyaWEtYXV0b2NvbXBsZXRlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiAwLFxuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogMCxcbiAgICAgICAgXCJhcmlhLWxldmVsXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tb2RhbFwiOiAwLFxuICAgICAgICBcImFyaWEtbXVsdGlsaW5lXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogMCxcbiAgICAgICAgXCJhcmlhLW9yaWVudGF0aW9uXCI6IDAsXG4gICAgICAgIFwiYXJpYS1wbGFjZWhvbGRlclwiOiAwLFxuICAgICAgICBcImFyaWEtcHJlc3NlZFwiOiAwLFxuICAgICAgICBcImFyaWEtcmVhZG9ubHlcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAwLFxuICAgICAgICBcImFyaWEtc29ydFwiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogMCxcbiAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IDAsXG4gICAgICAgIFwiYXJpYS12YWx1ZW5vd1wiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWV0ZXh0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1hdG9taWNcIjogMCxcbiAgICAgICAgXCJhcmlhLWJ1c3lcIjogMCxcbiAgICAgICAgXCJhcmlhLWxpdmVcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlbGV2YW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1kcm9wZWZmZWN0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1ncmFiYmVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1jb2xjb3VudFwiOiAwLFxuICAgICAgICBcImFyaWEtY29saW5kZXhcIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbHNwYW5cIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiAwLFxuICAgICAgICBcImFyaWEtZXJyb3JtZXNzYWdlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1mbG93dG9cIjogMCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogMCxcbiAgICAgICAgXCJhcmlhLW93bnNcIjogMCxcbiAgICAgICAgXCJhcmlhLXBvc2luc2V0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1yb3djb3VudFwiOiAwLFxuICAgICAgICBcImFyaWEtcm93aW5kZXhcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvd3NwYW5cIjogMCxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogMFxuICAgICAgfSxcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9LFxuICAgICAgckFSSUEkMSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpLVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIHJBUklBQ2FtZWwkMSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpW0EtWl1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gITEsXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzID0ge30sXG4gICAgICBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vLFxuICAgICAgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS8sXG4gICAgICByQVJJQSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpLVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIHJBUklBQ2FtZWwgPSBSZWdFeHAoXG4gICAgICAgIFwiXihhcmlhKVtBLVpdWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPVxuICAgICAgICAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qOi9pLFxuICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gbnVsbCxcbiAgICAgIHJlc3RvcmVUYXJnZXQgPSBudWxsLFxuICAgICAgcmVzdG9yZVF1ZXVlID0gbnVsbCxcbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITEsXG4gICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICExO1xuICAgIGlmIChjYW5Vc2VET00pXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyRqc2NvbXAkMCA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucyRqc2NvbXAkMCwgXCJwYXNzaXZlXCIsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gITA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMkanNjb21wJDAsIG9wdGlvbnMkanNjb21wJDApO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucyRqc2NvbXAkMCwgb3B0aW9ucyRqc2NvbXAkMCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gITE7XG4gICAgICB9XG4gICAgdmFyIHJvb3QgPSBudWxsLFxuICAgICAgc3RhcnRUZXh0ID0gbnVsbCxcbiAgICAgIGZhbGxiYWNrVGV4dCA9IG51bGwsXG4gICAgICBFdmVudEludGVyZmFjZSA9IHtcbiAgICAgICAgZXZlbnRQaGFzZTogMCxcbiAgICAgICAgYnViYmxlczogMCxcbiAgICAgICAgY2FuY2VsYWJsZTogMCxcbiAgICAgICAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IDAsXG4gICAgICAgIGlzVHJ1c3RlZDogMFxuICAgICAgfSxcbiAgICAgIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVUlFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHsgdmlldzogMCwgZGV0YWlsOiAwIH0pLFxuICAgICAgU3ludGhldGljVUlFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFVJRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgbGFzdE1vdmVtZW50WCxcbiAgICAgIGxhc3RNb3ZlbWVudFksXG4gICAgICBsYXN0TW91c2VFdmVudCxcbiAgICAgIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgc2NyZWVuWDogMCxcbiAgICAgICAgc2NyZWVuWTogMCxcbiAgICAgICAgY2xpZW50WDogMCxcbiAgICAgICAgY2xpZW50WTogMCxcbiAgICAgICAgcGFnZVg6IDAsXG4gICAgICAgIHBhZ2VZOiAwLFxuICAgICAgICBjdHJsS2V5OiAwLFxuICAgICAgICBzaGlmdEtleTogMCxcbiAgICAgICAgYWx0S2V5OiAwLFxuICAgICAgICBtZXRhS2V5OiAwLFxuICAgICAgICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gICAgICAgIGJ1dHRvbjogMCxcbiAgICAgICAgYnV0dG9uczogMCxcbiAgICAgICAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZXZlbnQucmVsYXRlZFRhcmdldFxuICAgICAgICAgICAgPyBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudFxuICAgICAgICAgICAgICA/IGV2ZW50LnRvRWxlbWVudFxuICAgICAgICAgICAgICA6IGV2ZW50LmZyb21FbGVtZW50XG4gICAgICAgICAgICA6IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKFwibW92ZW1lbnRYXCIgaW4gZXZlbnQpIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgICAgICAgZXZlbnQgIT09IGxhc3RNb3VzZUV2ZW50ICYmXG4gICAgICAgICAgICAobGFzdE1vdXNlRXZlbnQgJiYgXCJtb3VzZW1vdmVcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgICA/ICgobGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YKSxcbiAgICAgICAgICAgICAgICAobGFzdE1vdmVtZW50WSA9IGV2ZW50LnNjcmVlblkgLSBsYXN0TW91c2VFdmVudC5zY3JlZW5ZKSlcbiAgICAgICAgICAgICAgOiAobGFzdE1vdmVtZW50WSA9IGxhc3RNb3ZlbWVudFggPSAwKSxcbiAgICAgICAgICAgIChsYXN0TW91c2VFdmVudCA9IGV2ZW50KSk7XG4gICAgICAgICAgcmV0dXJuIGxhc3RNb3ZlbWVudFg7XG4gICAgICAgIH0sXG4gICAgICAgIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwibW92ZW1lbnRZXCIgaW4gZXZlbnQgPyBldmVudC5tb3ZlbWVudFkgOiBsYXN0TW92ZW1lbnRZO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIERyYWdFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwgeyBkYXRhVHJhbnNmZXI6IDAgfSksXG4gICAgICBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgRm9jdXNFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwgeyByZWxhdGVkVGFyZ2V0OiAwIH0pLFxuICAgICAgU3ludGhldGljRm9jdXNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEZvY3VzRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGFuaW1hdGlvbk5hbWU6IDAsXG4gICAgICAgIGVsYXBzZWRUaW1lOiAwLFxuICAgICAgICBwc2V1ZG9FbGVtZW50OiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImNsaXBib2FyZERhdGFcIiBpbiBldmVudFxuICAgICAgICAgICAgPyBldmVudC5jbGlwYm9hcmREYXRhXG4gICAgICAgICAgICA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHsgZGF0YTogMCB9KSxcbiAgICAgIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChcbiAgICAgICAgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZVxuICAgICAgKSxcbiAgICAgIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LFxuICAgICAgbm9ybWFsaXplS2V5ID0ge1xuICAgICAgICBFc2M6IFwiRXNjYXBlXCIsXG4gICAgICAgIFNwYWNlYmFyOiBcIiBcIixcbiAgICAgICAgTGVmdDogXCJBcnJvd0xlZnRcIixcbiAgICAgICAgVXA6IFwiQXJyb3dVcFwiLFxuICAgICAgICBSaWdodDogXCJBcnJvd1JpZ2h0XCIsXG4gICAgICAgIERvd246IFwiQXJyb3dEb3duXCIsXG4gICAgICAgIERlbDogXCJEZWxldGVcIixcbiAgICAgICAgV2luOiBcIk9TXCIsXG4gICAgICAgIE1lbnU6IFwiQ29udGV4dE1lbnVcIixcbiAgICAgICAgQXBwczogXCJDb250ZXh0TWVudVwiLFxuICAgICAgICBTY3JvbGw6IFwiU2Nyb2xsTG9ja1wiLFxuICAgICAgICBNb3pQcmludGFibGVLZXk6IFwiVW5pZGVudGlmaWVkXCJcbiAgICAgIH0sXG4gICAgICB0cmFuc2xhdGVUb0tleSA9IHtcbiAgICAgICAgODogXCJCYWNrc3BhY2VcIixcbiAgICAgICAgOTogXCJUYWJcIixcbiAgICAgICAgMTI6IFwiQ2xlYXJcIixcbiAgICAgICAgMTM6IFwiRW50ZXJcIixcbiAgICAgICAgMTY6IFwiU2hpZnRcIixcbiAgICAgICAgMTc6IFwiQ29udHJvbFwiLFxuICAgICAgICAxODogXCJBbHRcIixcbiAgICAgICAgMTk6IFwiUGF1c2VcIixcbiAgICAgICAgMjA6IFwiQ2Fwc0xvY2tcIixcbiAgICAgICAgMjc6IFwiRXNjYXBlXCIsXG4gICAgICAgIDMyOiBcIiBcIixcbiAgICAgICAgMzM6IFwiUGFnZVVwXCIsXG4gICAgICAgIDM0OiBcIlBhZ2VEb3duXCIsXG4gICAgICAgIDM1OiBcIkVuZFwiLFxuICAgICAgICAzNjogXCJIb21lXCIsXG4gICAgICAgIDM3OiBcIkFycm93TGVmdFwiLFxuICAgICAgICAzODogXCJBcnJvd1VwXCIsXG4gICAgICAgIDM5OiBcIkFycm93UmlnaHRcIixcbiAgICAgICAgNDA6IFwiQXJyb3dEb3duXCIsXG4gICAgICAgIDQ1OiBcIkluc2VydFwiLFxuICAgICAgICA0NjogXCJEZWxldGVcIixcbiAgICAgICAgMTEyOiBcIkYxXCIsXG4gICAgICAgIDExMzogXCJGMlwiLFxuICAgICAgICAxMTQ6IFwiRjNcIixcbiAgICAgICAgMTE1OiBcIkY0XCIsXG4gICAgICAgIDExNjogXCJGNVwiLFxuICAgICAgICAxMTc6IFwiRjZcIixcbiAgICAgICAgMTE4OiBcIkY3XCIsXG4gICAgICAgIDExOTogXCJGOFwiLFxuICAgICAgICAxMjA6IFwiRjlcIixcbiAgICAgICAgMTIxOiBcIkYxMFwiLFxuICAgICAgICAxMjI6IFwiRjExXCIsXG4gICAgICAgIDEyMzogXCJGMTJcIixcbiAgICAgICAgMTQ0OiBcIk51bUxvY2tcIixcbiAgICAgICAgMTQ1OiBcIlNjcm9sbExvY2tcIixcbiAgICAgICAgMjI0OiBcIk1ldGFcIlxuICAgICAgfSxcbiAgICAgIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICAgICAgICBBbHQ6IFwiYWx0S2V5XCIsXG4gICAgICAgIENvbnRyb2w6IFwiY3RybEtleVwiLFxuICAgICAgICBNZXRhOiBcIm1ldGFLZXlcIixcbiAgICAgICAgU2hpZnQ6IFwic2hpZnRLZXlcIlxuICAgICAgfSxcbiAgICAgIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAga2V5OiBmdW5jdGlvbiAobmF0aXZlRXZlbnQpIHtcbiAgICAgICAgICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuICAgICAgICAgICAgaWYgKFwiVW5pZGVudGlmaWVkXCIgIT09IGtleSkgcmV0dXJuIGtleTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gbmF0aXZlRXZlbnQudHlwZVxuICAgICAgICAgICAgPyAoKG5hdGl2ZUV2ZW50ID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkpLFxuICAgICAgICAgICAgICAxMyA9PT0gbmF0aXZlRXZlbnQgPyBcIkVudGVyXCIgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50KSlcbiAgICAgICAgICAgIDogXCJrZXlkb3duXCIgPT09IG5hdGl2ZUV2ZW50LnR5cGUgfHwgXCJrZXl1cFwiID09PSBuYXRpdmVFdmVudC50eXBlXG4gICAgICAgICAgICAgID8gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgXCJVbmlkZW50aWZpZWRcIlxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGNvZGU6IDAsXG4gICAgICAgIGxvY2F0aW9uOiAwLFxuICAgICAgICBjdHJsS2V5OiAwLFxuICAgICAgICBzaGlmdEtleTogMCxcbiAgICAgICAgYWx0S2V5OiAwLFxuICAgICAgICBtZXRhS2V5OiAwLFxuICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgIGxvY2FsZTogMCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAgICAgICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gZXZlbnQudHlwZSA/IGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5ZG93blwiID09PSBldmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgPyBldmVudC5rZXlDb2RlXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXlwcmVzc1wiID09PSBldmVudC50eXBlXG4gICAgICAgICAgICA/IGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpXG4gICAgICAgICAgICA6IFwia2V5ZG93blwiID09PSBldmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgICA/IGV2ZW50LmtleUNvZGVcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICAgICAgICBwb2ludGVySWQ6IDAsXG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHByZXNzdXJlOiAwLFxuICAgICAgICB0YW5nZW50aWFsUHJlc3N1cmU6IDAsXG4gICAgICAgIHRpbHRYOiAwLFxuICAgICAgICB0aWx0WTogMCxcbiAgICAgICAgdHdpc3Q6IDAsXG4gICAgICAgIHBvaW50ZXJUeXBlOiAwLFxuICAgICAgICBpc1ByaW1hcnk6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgdG91Y2hlczogMCxcbiAgICAgICAgdGFyZ2V0VG91Y2hlczogMCxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IDAsXG4gICAgICAgIGFsdEtleTogMCxcbiAgICAgICAgbWV0YUtleTogMCxcbiAgICAgICAgY3RybEtleTogMCxcbiAgICAgICAgc2hpZnRLZXk6IDAsXG4gICAgICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNUb3VjaEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG91Y2hFdmVudEludGVyZmFjZSksXG4gICAgICBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogMCxcbiAgICAgICAgZWxhcHNlZFRpbWU6IDAsXG4gICAgICAgIHBzZXVkb0VsZW1lbnQ6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJkZWx0YVhcIiBpbiBldmVudFxuICAgICAgICAgICAgPyBldmVudC5kZWx0YVhcbiAgICAgICAgICAgIDogXCJ3aGVlbERlbHRhWFwiIGluIGV2ZW50XG4gICAgICAgICAgICAgID8gLWV2ZW50LndoZWVsRGVsdGFYXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJkZWx0YVlcIiBpbiBldmVudFxuICAgICAgICAgICAgPyBldmVudC5kZWx0YVlcbiAgICAgICAgICAgIDogXCJ3aGVlbERlbHRhWVwiIGluIGV2ZW50XG4gICAgICAgICAgICAgID8gLWV2ZW50LndoZWVsRGVsdGFZXG4gICAgICAgICAgICAgIDogXCJ3aGVlbERlbHRhXCIgaW4gZXZlbnRcbiAgICAgICAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9LFxuICAgICAgICBkZWx0YVo6IDAsXG4gICAgICAgIGRlbHRhTW9kZTogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSksXG4gICAgICBUb2dnbGVFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgbmV3U3RhdGU6IDAsXG4gICAgICAgIG9sZFN0YXRlOiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1RvZ2dsZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG9nZ2xlRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdLFxuICAgICAgU1RBUlRfS0VZQ09ERSA9IDIyOSxcbiAgICAgIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgXCJDb21wb3NpdGlvbkV2ZW50XCIgaW4gd2luZG93LFxuICAgICAgZG9jdW1lbnRNb2RlID0gbnVsbDtcbiAgICBjYW5Vc2VET00gJiZcbiAgICAgIFwiZG9jdW1lbnRNb2RlXCIgaW4gZG9jdW1lbnQgJiZcbiAgICAgIChkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGUpO1xuICAgIHZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9XG4gICAgICAgIGNhblVzZURPTSAmJiBcIlRleHRFdmVudFwiIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlLFxuICAgICAgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPVxuICAgICAgICBjYW5Vc2VET00gJiZcbiAgICAgICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8XG4gICAgICAgICAgKGRvY3VtZW50TW9kZSAmJiA4IDwgZG9jdW1lbnRNb2RlICYmIDExID49IGRvY3VtZW50TW9kZSkpLFxuICAgICAgU1BBQ0VCQVJfQ09ERSA9IDMyLFxuICAgICAgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSksXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gITEsXG4gICAgICBpc0NvbXBvc2luZyA9ICExLFxuICAgICAgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgICAgICAgY29sb3I6ICEwLFxuICAgICAgICBkYXRlOiAhMCxcbiAgICAgICAgZGF0ZXRpbWU6ICEwLFxuICAgICAgICBcImRhdGV0aW1lLWxvY2FsXCI6ICEwLFxuICAgICAgICBlbWFpbDogITAsXG4gICAgICAgIG1vbnRoOiAhMCxcbiAgICAgICAgbnVtYmVyOiAhMCxcbiAgICAgICAgcGFzc3dvcmQ6ICEwLFxuICAgICAgICByYW5nZTogITAsXG4gICAgICAgIHNlYXJjaDogITAsXG4gICAgICAgIHRlbDogITAsXG4gICAgICAgIHRleHQ6ICEwLFxuICAgICAgICB0aW1lOiAhMCxcbiAgICAgICAgdXJsOiAhMCxcbiAgICAgICAgd2VlazogITBcbiAgICAgIH0sXG4gICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsLFxuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGwsXG4gICAgICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSAhMTtcbiAgICBjYW5Vc2VET00gJiZcbiAgICAgIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPVxuICAgICAgICBpc0V2ZW50U3VwcG9ydGVkKFwiaW5wdXRcIikgJiZcbiAgICAgICAgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgOSA8IGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO1xuICAgIHZhciBvYmplY3RJcyA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE9iamVjdC5pcyA/IE9iamVjdC5pcyA6IGlzLFxuICAgICAgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID1cbiAgICAgICAgY2FuVXNlRE9NICYmIFwiZG9jdW1lbnRNb2RlXCIgaW4gZG9jdW1lbnQgJiYgMTEgPj0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlLFxuICAgICAgYWN0aXZlRWxlbWVudCA9IG51bGwsXG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGwsXG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbCxcbiAgICAgIG1vdXNlRG93biA9ICExLFxuICAgICAgdmVuZG9yUHJlZml4ZXMgPSB7XG4gICAgICAgIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcChcIkFuaW1hdGlvblwiLCBcIkFuaW1hdGlvbkVuZFwiKSxcbiAgICAgICAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKFwiQW5pbWF0aW9uXCIsIFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLFxuICAgICAgICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcChcIkFuaW1hdGlvblwiLCBcIkFuaW1hdGlvblN0YXJ0XCIpLFxuICAgICAgICB0cmFuc2l0aW9ucnVuOiBtYWtlUHJlZml4TWFwKFwiVHJhbnNpdGlvblwiLCBcIlRyYW5zaXRpb25SdW5cIiksXG4gICAgICAgIHRyYW5zaXRpb25zdGFydDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uU3RhcnRcIiksXG4gICAgICAgIHRyYW5zaXRpb25jYW5jZWw6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvbkNhbmNlbFwiKSxcbiAgICAgICAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uRW5kXCIpXG4gICAgICB9LFxuICAgICAgcHJlZml4ZWRFdmVudE5hbWVzID0ge30sXG4gICAgICBzdHlsZSA9IHt9O1xuICAgIGNhblVzZURPTSAmJlxuICAgICAgKChzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUpLFxuICAgICAgXCJBbmltYXRpb25FdmVudFwiIGluIHdpbmRvdyB8fFxuICAgICAgICAoZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sXG4gICAgICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLFxuICAgICAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSxcbiAgICAgIFwiVHJhbnNpdGlvbkV2ZW50XCIgaW4gd2luZG93IHx8XG4gICAgICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO1xuICAgIHZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25lbmRcIiksXG4gICAgICBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25pdGVyYXRpb25cIiksXG4gICAgICBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcImFuaW1hdGlvbnN0YXJ0XCIpLFxuICAgICAgVFJBTlNJVElPTl9SVU4gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcInRyYW5zaXRpb25ydW5cIiksXG4gICAgICBUUkFOU0lUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uc3RhcnRcIiksXG4gICAgICBUUkFOU0lUSU9OX0NBTkNFTCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbmNhbmNlbFwiKSxcbiAgICAgIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uZW5kXCIpLFxuICAgICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCksXG4gICAgICBzaW1wbGVFdmVudFBsdWdpbkV2ZW50cyA9XG4gICAgICAgIFwiYWJvcnQgYXV4Q2xpY2sgYmVmb3JlVG9nZ2xlIGNhbmNlbCBjYW5QbGF5IGNhblBsYXlUaHJvdWdoIGNsaWNrIGNsb3NlIGNvbnRleHRNZW51IGNvcHkgY3V0IGRyYWcgZHJhZ0VuZCBkcmFnRW50ZXIgZHJhZ0V4aXQgZHJhZ0xlYXZlIGRyYWdPdmVyIGRyYWdTdGFydCBkcm9wIGR1cmF0aW9uQ2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGdvdFBvaW50ZXJDYXB0dXJlIGlucHV0IGludmFsaWQga2V5RG93biBrZXlQcmVzcyBrZXlVcCBsb2FkIGxvYWRlZERhdGEgbG9hZGVkTWV0YWRhdGEgbG9hZFN0YXJ0IGxvc3RQb2ludGVyQ2FwdHVyZSBtb3VzZURvd24gbW91c2VNb3ZlIG1vdXNlT3V0IG1vdXNlT3ZlciBtb3VzZVVwIHBhc3RlIHBhdXNlIHBsYXkgcGxheWluZyBwb2ludGVyQ2FuY2VsIHBvaW50ZXJEb3duIHBvaW50ZXJNb3ZlIHBvaW50ZXJPdXQgcG9pbnRlck92ZXIgcG9pbnRlclVwIHByb2dyZXNzIHJhdGVDaGFuZ2UgcmVzZXQgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VibWl0IHN1c3BlbmQgdGltZVVwZGF0ZSB0b3VjaENhbmNlbCB0b3VjaEVuZCB0b3VjaFN0YXJ0IHZvbHVtZUNoYW5nZSBzY3JvbGwgc2Nyb2xsRW5kIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBPZmZzY3JlZW5WaXNpYmxlID0gMSxcbiAgICAgIE9mZnNjcmVlbkRldGFjaGVkID0gMixcbiAgICAgIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkID0gNCxcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXMgPSBbXSxcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDAsXG4gICAgICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSAwLFxuICAgICAgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG4gICAgT2JqZWN0LmZyZWV6ZShlbXB0eUNvbnRleHRPYmplY3QpO1xuICAgIHZhciByZXNvbHZlRmFtaWx5ID0gbnVsbCxcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsLFxuICAgICAgTm9Nb2RlID0gMCxcbiAgICAgIENvbmN1cnJlbnRNb2RlID0gMSxcbiAgICAgIFByb2ZpbGVNb2RlID0gMixcbiAgICAgIFN0cmljdExlZ2FjeU1vZGUgPSA4LFxuICAgICAgU3RyaWN0RWZmZWN0c01vZGUgPSAxNixcbiAgICAgIE5vU3RyaWN0UGFzc2l2ZUVmZmVjdHNNb2RlID0gNjQsXG4gICAgICBub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgICAgcmVuZGVyU3RhcnRUaW1lID0gLTAsXG4gICAgICBjb21taXRTdGFydFRpbWUgPSAtMCxcbiAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTEuMSxcbiAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gPSAtMCxcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9ICExLFxuICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gITEsXG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgICAgICAgcmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIGRpc2NhcmRQZW5kaW5nV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9XG4gICAgICB9LFxuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXSxcbiAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoXG4gICAgICBmaWJlcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSB8fFxuICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgITAgIT09IGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICYmXG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgITAgIT09XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgJiZcbiAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAhMCAhPT0gaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICYmXG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpKTtcbiAgICB9O1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChcbiAgICAgICAgICBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10pKTtcbiAgICAgIGlmICgwIDwgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUpIHtcbiAgICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIDAgPCBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXNcbiAgICAgICAgKSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4qIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGVyaXZlZC1zdGF0ZVxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lc1xuICAgICAgICApKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKSksXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcImNvbXBvbmVudFdpbGxNb3VudCBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4qIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIGBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXNcbiAgICAgICAgKSksXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9kZXJpdmVkLXN0YXRlXFxuKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIGBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpKSxcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIGBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgIH07XG4gICAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKSxcbiAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoXG4gICAgICBmaWJlcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICB2YXIgc3RyaWN0Um9vdCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBub2RlID0gZmliZXI7IG51bGwgIT09IG5vZGU7IClcbiAgICAgICAgbm9kZS5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJiAoc3RyaWN0Um9vdCA9IG5vZGUpLFxuICAgICAgICAgIChub2RlID0gbm9kZS5yZXR1cm4pO1xuICAgICAgbnVsbCA9PT0gc3RyaWN0Um9vdFxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApXG4gICAgICAgIDogIWRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuaGFzKGZpYmVyLnR5cGUpICYmXG4gICAgICAgICAgKChub2RlID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KSksXG4gICAgICAgICAgbnVsbCAhPSBmaWJlci50eXBlLmNvbnRleHRUeXBlcyB8fFxuICAgICAgICAgICAgbnVsbCAhPSBmaWJlci50eXBlLmNoaWxkQ29udGV4dFR5cGVzIHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KSkgJiZcbiAgICAgICAgICAodm9pZCAwID09PSBub2RlICYmXG4gICAgICAgICAgICAoKG5vZGUgPSBbXSksIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgbm9kZSkpLFxuICAgICAgICAgIG5vZGUucHVzaChmaWJlcikpO1xuICAgIH07XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5KSB7XG4gICAgICAgIGlmICgwICE9PSBmaWJlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXSxcbiAgICAgICAgICAgIHVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiKTtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaXJzdEZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkxlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLlxcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zIHVzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0XCIsXG4gICAgICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICAgIH07XG4gICAgdmFyIENhcHR1cmVkU3RhY2tzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGZvcmtTdGFjayA9IFtdLFxuICAgICAgZm9ya1N0YWNrSW5kZXggPSAwLFxuICAgICAgdHJlZUZvcmtQcm92aWRlciA9IG51bGwsXG4gICAgICB0cmVlRm9ya0NvdW50ID0gMCxcbiAgICAgIGlkU3RhY2sgPSBbXSxcbiAgICAgIGlkU3RhY2tJbmRleCA9IDAsXG4gICAgICB0cmVlQ29udGV4dFByb3ZpZGVyID0gbnVsbCxcbiAgICAgIHRyZWVDb250ZXh0SWQgPSAxLFxuICAgICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IFwiXCIsXG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGwsXG4gICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCxcbiAgICAgIGlzSHlkcmF0aW5nID0gITEsXG4gICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViA9ICExLFxuICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsLFxuICAgICAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbCxcbiAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSxcbiAgICAgIEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiSHlkcmF0aW9uIE1pc21hdGNoIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLCBhbmQgc2hvdWxkIG5vdCBsZWFrIGludG8gdXNlcnNwYWNlLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIGl0J3MgbGlrZWx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICApLFxuICAgICAgU3VzcGVuc2VFeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciEgSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgYHVzZWAgdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IHJlbmRlci4gWW91IG11c3QgZWl0aGVyIHJldGhyb3cgaXQgaW1tZWRpYXRlbHksIG9yIG1vdmUgdGhlIGB1c2VgIGNhbGwgb3V0c2lkZSBvZiB0aGUgYHRyeS9jYXRjaGAgYmxvY2suIENhcHR1cmluZyB3aXRob3V0IHJldGhyb3dpbmcgd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXFxuXFxuVG8gaGFuZGxlIGFzeW5jIGVycm9ycywgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhbiBlcnJvciBib3VuZGFyeSwgb3IgY2FsbCB0aGUgcHJvbWlzZSdzIGAuY2F0Y2hgIG1ldGhvZCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIGB1c2VgXCJcbiAgICAgICksXG4gICAgICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciwgYW5kIHNob3VsZCBub3QgbGVhayBpbnRvIHVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKSxcbiAgICAgIG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSA9IHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEEgbGlzdGVuZXIgd2FzIHVuZXhwZWN0ZWRseSBhdHRhY2hlZCB0byBhIFwibm9vcFwiIHRoZW5hYmxlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN1c3BlbmRlZFRoZW5hYmxlID0gbnVsbCxcbiAgICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITEsXG4gICAgICBjYWxsQ29tcG9uZW50ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gICAgICAgICAgdmFyIHdhc1JlbmRlcmluZyA9IGlzUmVuZGVyaW5nO1xuICAgICAgICAgIGlzUmVuZGVyaW5nID0gITA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlzUmVuZGVyaW5nID0gd2FzUmVuZGVyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxDb21wb25lbnRJbkRFViA9XG4gICAgICAgIGNhbGxDb21wb25lbnRbXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIl0uYmluZChjYWxsQ29tcG9uZW50KSxcbiAgICAgIGNhbGxSZW5kZXIgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgIHZhciB3YXNSZW5kZXJpbmcgPSBpc1JlbmRlcmluZztcbiAgICAgICAgICBpc1JlbmRlcmluZyA9ICEwO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlzUmVuZGVyaW5nID0gd2FzUmVuZGVyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxSZW5kZXJJbkRFViA9IGNhbGxSZW5kZXJbXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIl0uYmluZChjYWxsUmVuZGVyKSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudCA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGZpbmlzaGVkV29yaywgaW5zdGFuY2UpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYgPSBjYWxsQ29tcG9uZW50RGlkTW91bnRbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjYWxsQ29tcG9uZW50RGlkTW91bnQpLFxuICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZSA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgIHNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZUluREVWID0gY2FsbENvbXBvbmVudERpZFVwZGF0ZVtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKGNhbGxDb21wb25lbnREaWRVcGRhdGUpLFxuICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoaW5zdGFuY2UsIGVycm9ySW5mbykge1xuICAgICAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvckluZm8udmFsdWUsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBudWxsICE9PSBzdGFjayA/IHN0YWNrIDogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoSW5ERVYgPSBjYWxsQ29tcG9uZW50RGlkQ2F0Y2hbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjYWxsQ29tcG9uZW50RGlkQ2F0Y2gpLFxuICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50SW5ERVYgPSBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRbXG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICAgIF0uYmluZChjYWxsQ29tcG9uZW50V2lsbFVubW91bnQpLFxuICAgICAgY2FsbENyZWF0ZSA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGVmZmVjdCkge1xuICAgICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICAgIGNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgICAgICAgIHJldHVybiAoZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENyZWF0ZUluREVWID0gY2FsbENyZWF0ZVtcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiXS5iaW5kKGNhbGxDcmVhdGUpLFxuICAgICAgY2FsbERlc3Ryb3kgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgZGVzdHJveVxuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbERlc3Ryb3lJbkRFViA9XG4gICAgICAgIGNhbGxEZXN0cm95W1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoY2FsbERlc3Ryb3kpLFxuICAgICAgY2FsbExhenlJbml0ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAobGF6eSkge1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eS5faW5pdDtcbiAgICAgICAgICByZXR1cm4gaW5pdChsYXp5Ll9wYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxMYXp5SW5pdEluREVWID1cbiAgICAgICAgY2FsbExhenlJbml0W1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoY2FsbExhenlJbml0KSxcbiAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGwsXG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMCxcbiAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBudWxsLFxuICAgICAgZGlkV2FybkFib3V0TWFwcztcbiAgICB2YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IChkaWRXYXJuQWJvdXRNYXBzID0gITEpO1xuICAgIHZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgICB2YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG4gICAgdmFyIG93bmVySGFzU3ltYm9sVHlwZVdhcm5pbmcgPSB7fTtcbiAgICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IGNoaWxkICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjaGlsZCAmJlxuICAgICAgICBjaGlsZC5fc3RvcmUgJiZcbiAgICAgICAgKCghY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCAmJiBudWxsID09IGNoaWxkLmtleSkgfHxcbiAgICAgICAgICAyID09PSBjaGlsZC5fc3RvcmUudmFsaWRhdGVkKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgY2hpbGQuX3N0b3JlKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gMTtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSxcbiAgICAgICAgICBjb21wb25lbnRLZXkgPSBjb21wb25lbnROYW1lIHx8IFwibnVsbFwiO1xuICAgICAgICBpZiAoIW93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnRLZXldKSB7XG4gICAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudEtleV0gPSAhMDtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLl9vd25lcjtcbiAgICAgICAgICByZXR1cm5GaWJlciA9IHJldHVybkZpYmVyLl9kZWJ1Z093bmVyO1xuICAgICAgICAgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gXCJcIjtcbiAgICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHJldHVybkZpYmVyLnRhZyAmJlxuICAgICAgICAgICAgKGNvbXBvbmVudEtleSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpKSAmJlxuICAgICAgICAgICAgKGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPVxuICAgICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIGNvbXBvbmVudEtleSArIFwiYC5cIik7XG4gICAgICAgICAgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyB8fFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgKGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPVxuICAgICAgICAgICAgICAgIFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgK1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPi5cIikpO1xuICAgICAgICAgIHZhciBjaGlsZE93bmVyQXBwZW5kaXggPSBcIlwiO1xuICAgICAgICAgIG51bGwgIT0gY2hpbGQgJiZcbiAgICAgICAgICAgIHJldHVybkZpYmVyICE9PSBjaGlsZCAmJlxuICAgICAgICAgICAgKChjb21wb25lbnROYW1lID0gbnVsbCksXG4gICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2hpbGQudGFnXG4gICAgICAgICAgICAgID8gKGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGNoaWxkKSlcbiAgICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2YgY2hpbGQubmFtZSAmJiAoY29tcG9uZW50TmFtZSA9IGNoaWxkLm5hbWUpLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgICAgICAoY2hpbGRPd25lckFwcGVuZGl4ID1cbiAgICAgICAgICAgICAgICBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNvbXBvbmVudE5hbWUgKyBcIi5cIikpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKHdvcmtJblByb2dyZXNzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLiVzJXMgU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsXG4gICAgICAgICAgICAgIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sXG4gICAgICAgICAgICAgIGNoaWxkT3duZXJBcHBlbmRpeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKCEwKSxcbiAgICAgIG1vdW50Q2hpbGRGaWJlcnMgPSBjcmVhdGVDaGlsZFJlY29uY2lsZXIoITEpLFxuICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKSxcbiAgICAgIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgc2hlbGxCb3VuZGFyeSA9IG51bGwsXG4gICAgICBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDEsXG4gICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyLFxuICAgICAgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKSxcbiAgICAgIE5vRmxhZ3MgPSAwLFxuICAgICAgSGFzRWZmZWN0ID0gMSxcbiAgICAgIEluc2VydGlvbiA9IDIsXG4gICAgICBMYXlvdXQgPSA0LFxuICAgICAgUGFzc2l2ZSA9IDgsXG4gICAgICBBYm9ydENvbnRyb2xsZXJMb2NhbCA9XG4gICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgICA/IEFib3J0Q29udHJvbGxlclxuICAgICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gW10sXG4gICAgICAgICAgICAgICAgc2lnbmFsID0gKHRoaXMuc2lnbmFsID0ge1xuICAgICAgICAgICAgICAgICAgYWJvcnRlZDogITEsXG4gICAgICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNpZ25hbC5hYm9ydGVkID0gITA7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICBzY2hlZHVsZUNhbGxiYWNrJDIgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICAgIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgQ2FjaGVDb250ZXh0ID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgICBDb25zdW1lcjogbnVsbCxcbiAgICAgICAgUHJvdmlkZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWUyOiBudWxsLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgICAgIF9jdXJyZW50UmVuZGVyZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50UmVuZGVyZXIyOiBudWxsXG4gICAgICB9LFxuICAgICAgY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IG51bGwsXG4gICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRMYW5lID0gMCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IG51bGwsXG4gICAgICBwcmV2T25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlMgPSBmdW5jdGlvbiAodHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpIHtcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuICYmXG4gICAgICAgIGVudGFuZ2xlQXN5bmNBY3Rpb24odHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgbnVsbCAhPT0gcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgIHByZXZPblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgcmVzdW1lZENhY2hlID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3Q7XG4gICAgdmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2ggPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVc2VGb3JtU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHJlbmRlckxhbmVzID0gMCxcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsLFxuICAgICAgY3VycmVudEhvb2sgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbCxcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMSxcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExLFxuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSAhMSxcbiAgICAgIGxvY2FsSWRDb3VudGVyID0gMCxcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMCxcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsLFxuICAgICAgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMCxcbiAgICAgIFJFX1JFTkRFUl9MSU1JVCA9IDI1LFxuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsLFxuICAgICAgaG9va1R5cGVzRGV2ID0gbnVsbCxcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTEsXG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9ICExO1xuICAgIHZhciBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgbGFzdEVmZmVjdDogbnVsbCwgZXZlbnRzOiBudWxsLCBzdG9yZXM6IG51bGwsIG1lbW9DYWNoZTogbnVsbCB9O1xuICAgIH07XG4gICAgdmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICAgIHVzZTogdXNlLFxuICAgICAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICB1c2VJZDogdGhyb3dJbnZhbGlkSG9va0Vycm9yXG4gICAgfTtcbiAgICBDb250ZXh0T25seURpc3BhdGNoZXIudXNlQ2FjaGVSZWZyZXNoID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xuICAgIENvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VNZW1vQ2FjaGUgPSB0aHJvd0ludmFsaWRIb29rRXJyb3I7XG4gICAgQ29udGV4dE9ubHlEaXNwYXRjaGVyLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xuICAgIENvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VGb3JtU3RhdGUgPSB0aHJvd0ludmFsaWRIb29rRXJyb3I7XG4gICAgQ29udGV4dE9ubHlEaXNwYXRjaGVyLnVzZUFjdGlvblN0YXRlID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xuICAgIENvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VPcHRpbWlzdGljID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xuICAgIHZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsLFxuICAgICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGwsXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbCxcbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGwsXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICB9LFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZU1lbW9DYWNoZSA9IHVzZU1lbW9DYWNoZTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPVxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM7XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoXG4gICAgICBhY3Rpb24sXG4gICAgICBpbml0aWFsU3RhdGVcbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gKHBhc3N0aHJvdWdoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpO1xuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIG1vdW50RWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICB9LFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlTWVtb0NhY2hlID0gdXNlTWVtb0NhY2hlO1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPVxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM7XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVi51c2VGb3JtU3RhdGUgPSBmdW5jdGlvbiAoXG4gICAgICBhY3Rpb24sXG4gICAgICBpbml0aWFsU3RhdGVcbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoXG4gICAgICBhY3Rpb24sXG4gICAgICBpbml0aWFsU3RhdGVcbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAoXG4gICAgICBwYXNzdGhyb3VnaFxuICAgICkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IHVzZSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlTWVtb0NhY2hlID0gdXNlTWVtb0NhY2hlO1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPVxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM7XG4gICAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VGb3JtU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAoXG4gICAgICBwYXNzdGhyb3VnaCxcbiAgICAgIHJlZHVjZXJcbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VNZW1vQ2FjaGUgPSB1c2VNZW1vQ2FjaGU7XG4gICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID1cbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzO1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VGb3JtU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUFjdGlvblN0YXRlID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlT3B0aW1pc3RpYyA9IGZ1bmN0aW9uIChcbiAgICAgIHBhc3N0aHJvdWdoLFxuICAgICAgcmVkdWNlclxuICAgICkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgICB9LFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBtb3VudEVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgICAgfSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vQ2FjaGU6IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlTWVtb0NhY2hlKHNpemUpO1xuICAgICAgfVxuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VIb3N0VHJhbnNpdGlvblN0YXR1cyA9XG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cztcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIChcbiAgICAgIGFjdGlvbixcbiAgICAgIGluaXRpYWxTdGF0ZVxuICAgICkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VBY3Rpb25TdGF0ZSA9IGZ1bmN0aW9uIChcbiAgICAgIGFjdGlvbixcbiAgICAgIGluaXRpYWxTdGF0ZVxuICAgICkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAoXG4gICAgICBwYXNzdGhyb3VnaFxuICAgICkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpO1xuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlTWVtb0NhY2hlOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZU1lbW9DYWNoZShzaXplKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID1cbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzO1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUFjdGlvblN0YXRlID0gZnVuY3Rpb24gKFxuICAgICAgYWN0aW9uXG4gICAgKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAoXG4gICAgICBwYXNzdGhyb3VnaCxcbiAgICAgIHJlZHVjZXJcbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZSh1c2FibGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID1cbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzO1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gKFxuICAgICAgYWN0aW9uXG4gICAgKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoXG4gICAgICBhY3Rpb25cbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAoXG4gICAgICBwYXNzdGhyb3VnaCxcbiAgICAgIHJlZHVjZXJcbiAgICApIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfTtcbiAgICB2YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzJDEgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dENoaWxkQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcbiAgICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbiAgICB2YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICAgICAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgICB2YXIgb3duZXIgPSBjdXJyZW50O1xuICAgICAgICAgIGlmIChudWxsICE9PSBvd25lciAmJiBpc1JlbmRlcmluZyAmJiAxID09PSBvd25lci50YWcpIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciB8fFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiByZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkIG5ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzIHJlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kIGNvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXIpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gITA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoY29tcG9uZW50ID0gY29tcG9uZW50Ll9yZWFjdEludGVybmFscylcbiAgICAgICAgICAgID8gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihjb21wb25lbnQpID09PSBjb21wb25lbnRcbiAgICAgICAgICAgIDogITE7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoaW5zdCksXG4gICAgICAgICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAod2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSwgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICAgICAgcGF5bG9hZCA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgICBudWxsICE9PSBwYXlsb2FkICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBheWxvYWQsIGluc3QsIGxhbmUpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhwYXlsb2FkLCBpbnN0LCBsYW5lKSk7XG4gICAgICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGluc3QsIGxhbmUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgICAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgICB2b2lkIDAgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjayksICh1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgICAgIHBheWxvYWQgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICAgICAgbnVsbCAhPT0gcGF5bG9hZCAmJlxuICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXlsb2FkLCBpbnN0LCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocGF5bG9hZCwgaW5zdCwgbGFuZSkpO1xuICAgICAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChpbnN0LCBsYW5lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgICAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgICh3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2spLCAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spKTtcbiAgICAgICAgICBjYWxsYmFjayA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihjYWxsYmFjaywgaW5zdCwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKGNhbGxiYWNrLCBpbnN0LCBsYW5lKSk7XG4gICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQgJiZcbiAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkKGluc3QsIGxhbmUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXBvcnRFcnJvclxuICAgICAgICAgID8gcmVwb3J0RXJyb3JcbiAgICAgICAgICA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHdpbmRvdyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogITAsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9jZXNzLmVtaXRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICBjb21wb25lbnROYW1lID0gbnVsbCxcbiAgICAgIGVycm9yQm91bmRhcnlOYW1lID0gbnVsbCxcbiAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlRoaXMgaXMgbm90IGEgcmVhbCBlcnJvci4gSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgUmVhY3QncyBzZWxlY3RpdmUgaHlkcmF0aW9uIGZlYXR1cmUuIElmIHRoaXMgbGVha3MgaW50byB1c2Vyc3BhY2UsIGl0J3MgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApLFxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xuICAgIHZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICAgICAgICBkZWh5ZHJhdGVkOiBudWxsLFxuICAgICAgICB0cmVlQ29udGV4dDogbnVsbCxcbiAgICAgICAgcmV0cnlMYW5lOiAwXG4gICAgICB9LFxuICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSAhMSxcbiAgICAgIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciByZW5kZXJlckN1cnNvckRFViA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbiAgICB2YXIgcmVuZGVyZXJTaWdpbCA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGwsXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsLFxuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExLFxuICAgICAgVXBkYXRlU3RhdGUgPSAwLFxuICAgICAgUmVwbGFjZVN0YXRlID0gMSxcbiAgICAgIEZvcmNlVXBkYXRlID0gMixcbiAgICAgIENhcHR1cmVVcGRhdGUgPSAzLFxuICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICB2YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9ICExO1xuICAgIHZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICAgIHZhciBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITEsXG4gICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG4gICAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9ICExLFxuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9ICExLFxuICAgICAgbmVlZHNGb3JtUmVzZXQgPSAhMSxcbiAgICAgIFBvc3NpYmx5V2Vha1NldCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtTZXQgPyBXZWFrU2V0IDogU2V0LFxuICAgICAgbmV4dEVmZmVjdCA9IG51bGwsXG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBudWxsLFxuICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsLFxuICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gITEsXG4gICAgICBob3N0UGFyZW50ID0gbnVsbCxcbiAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICExLFxuICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBudWxsLFxuICAgICAgc3VzcGVuc2V5Q29tbWl0RmxhZyA9IDgxOTI7XG4gICAgdmFyIGhhc0JhZE1hcFBvbHlmaWxsID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIH0gY2F0Y2ggKGUkNykge1xuICAgICAgaGFzQmFkTWFwUG9seWZpbGwgPSAhMDtcbiAgICB9XG4gICAgdmFyIERlZmF1bHRBc3luY0Rpc3BhdGNoZXIgPSB7XG4gICAgICBnZXRDYWNoZUZvclR5cGU6IGZ1bmN0aW9uIChyZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gcmVhZENvbnRleHQoQ2FjaGVDb250ZXh0KSxcbiAgICAgICAgICBjYWNoZUZvclR5cGUgPSBjYWNoZS5kYXRhLmdldChyZXNvdXJjZVR5cGUpO1xuICAgICAgICB2b2lkIDAgPT09IGNhY2hlRm9yVHlwZSAmJlxuICAgICAgICAgICgoY2FjaGVGb3JUeXBlID0gcmVzb3VyY2VUeXBlKCkpLFxuICAgICAgICAgIGNhY2hlLmRhdGEuc2V0KHJlc291cmNlVHlwZSwgY2FjaGVGb3JUeXBlKSk7XG4gICAgICAgIHJldHVybiBjYWNoZUZvclR5cGU7XG4gICAgICB9LFxuICAgICAgZ2V0T3duZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmIFN5bWJvbC5mb3IpIHtcbiAgICAgIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuY29tcG9uZW50XCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzc1wiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnJvbGVcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXN0X2lkXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IudGV4dFwiKTtcbiAgICB9XG4gICAgdmFyIGNvbW1pdEhvb2tzID0gW10sXG4gICAgICBQb3NzaWJseVdlYWtNYXAgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcCxcbiAgICAgIE5vQ29udGV4dCA9IDAsXG4gICAgICBSZW5kZXJDb250ZXh0ID0gMixcbiAgICAgIENvbW1pdENvbnRleHQgPSA0LFxuICAgICAgUm9vdEluUHJvZ3Jlc3MgPSAwLFxuICAgICAgUm9vdEZhdGFsRXJyb3JlZCA9IDEsXG4gICAgICBSb290RXJyb3JlZCA9IDIsXG4gICAgICBSb290U3VzcGVuZGVkID0gMyxcbiAgICAgIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0LFxuICAgICAgUm9vdENvbXBsZXRlZCA9IDUsXG4gICAgICBSb290RGlkTm90Q29tcGxldGUgPSA2LFxuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDAsXG4gICAgICBOb3RTdXNwZW5kZWQgPSAwLFxuICAgICAgU3VzcGVuZGVkT25FcnJvciA9IDEsXG4gICAgICBTdXNwZW5kZWRPbkRhdGEgPSAyLFxuICAgICAgU3VzcGVuZGVkT25JbW1lZGlhdGUgPSAzLFxuICAgICAgU3VzcGVuZGVkT25JbnN0YW5jZSA9IDQsXG4gICAgICBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlID0gNSxcbiAgICAgIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZSA9IDYsXG4gICAgICBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWUgPSA3LFxuICAgICAgU3VzcGVuZGVkT25IeWRyYXRpb24gPSA4LFxuICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyA9ICExLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgPSAhMSxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICExLFxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJblByb2dyZXNzLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUgPSAhMSxcbiAgICAgIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSAwLFxuICAgICAgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSAzMDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gSW5maW5pdHksXG4gICAgICBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMCxcbiAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBudWxsLFxuICAgICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsLFxuICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSAhMSxcbiAgICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbCxcbiAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gMCxcbiAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gMCxcbiAgICAgIHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnMgPSBudWxsLFxuICAgICAgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwLFxuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwLFxuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbCxcbiAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICExLFxuICAgICAgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTAsXG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwLFxuICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwsXG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMSxcbiAgICAgIElNTUVESUFURV9DT01NSVQgPSAwLFxuICAgICAgU1VTUEVOREVEX0NPTU1JVCA9IDEsXG4gICAgICBUSFJPVFRMRURfQ09NTUlUID0gMixcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsLFxuICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSAhMTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEgPSB7fSxcbiAgICAgIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gICAgICBsYXN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gICAgICBkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gITEsXG4gICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMSxcbiAgICAgIGlzRmx1c2hpbmdXb3JrID0gITEsXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IDAsXG4gICAgICBmYWtlQWN0Q2FsbGJhY2tOb2RlID0ge307XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzW2ldLFxuICAgICAgICAgIGRvbUV2ZW50TmFtZSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWVbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50TmFtZS5zbGljZSgxKTtcbiAgICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIFwib25cIiArIGV2ZW50TmFtZSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9FTkQsIFwib25BbmltYXRpb25FbmRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9JVEVSQVRJT04sIFwib25BbmltYXRpb25JdGVyYXRpb25cIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9TVEFSVCwgXCJvbkFuaW1hdGlvblN0YXJ0XCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImRibGNsaWNrXCIsIFwib25Eb3VibGVDbGlja1wiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoXCJmb2N1c2luXCIsIFwib25Gb2N1c1wiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoXCJmb2N1c291dFwiLCBcIm9uQmx1clwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoVFJBTlNJVElPTl9SVU4sIFwib25UcmFuc2l0aW9uUnVuXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX1NUQVJULCBcIm9uVHJhbnNpdGlvblN0YXJ0XCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX0NBTkNFTCwgXCJvblRyYW5zaXRpb25DYW5jZWxcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fRU5ELCBcIm9uVHJhbnNpdGlvbkVuZFwiKTtcbiAgICB9KSgpO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvbk1vdXNlRW50ZXJcIiwgW1wibW91c2VvdXRcIiwgXCJtb3VzZW92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvbk1vdXNlTGVhdmVcIiwgW1wibW91c2VvdXRcIiwgXCJtb3VzZW92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJFbnRlclwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJMZWF2ZVwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgIFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcbiAgICAgICAgXCIgXCJcbiAgICAgIClcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25TZWxlY3RcIixcbiAgICAgIFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXG4gICAgICAgIFwiIFwiXG4gICAgICApXG4gICAgKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQoXCJvbkJlZm9yZUlucHV0XCIsIFtcbiAgICAgIFwiY29tcG9zaXRpb25lbmRcIixcbiAgICAgIFwia2V5cHJlc3NcIixcbiAgICAgIFwidGV4dElucHV0XCIsXG4gICAgICBcInBhc3RlXCJcbiAgICBdKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQoXG4gICAgICBcIm9uQ29tcG9zaXRpb25FbmRcIixcbiAgICAgIFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvblN0YXJ0XCIsXG4gICAgICBcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFxuICAgICAgXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgdmFyIG1lZGlhRXZlbnRUeXBlcyA9XG4gICAgICAgIFwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChcbiAgICAgICAgXCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZVwiXG4gICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgIC5jb25jYXQobWVkaWFFdmVudFR5cGVzKVxuICAgICAgKSxcbiAgICAgIGxpc3RlbmluZ01hcmtlciA9IFwiX3JlYWN0TGlzdGVuaW5nXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxcbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZSA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSAhMSxcbiAgICAgIGRpZFdhcm5Qb3BvdmVyVGFyZ2V0T2JqZWN0ID0gITE7XG4gICAgdmFyIGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZSA9IHt9O1xuICAgIHZhciBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nID0gITA7XG4gICAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2csXG4gICAgICBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2csXG4gICAgICB4bGlua05hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgeG1sTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICAgIEVYUEVDVEVEX0ZPUk1fQUNUSU9OX1VSTCA9XG4gICAgICAgIFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGZvcm0gdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4nKVwiLFxuICAgICAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiLFxuICAgICAgU1VTUEVOU0VfU1RBUlRfREFUQSA9IFwiJFwiLFxuICAgICAgU1VTUEVOU0VfRU5EX0RBVEEgPSBcIi8kXCIsXG4gICAgICBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSBcIiQ/XCIsXG4gICAgICBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBID0gXCIkIVwiLFxuICAgICAgRk9STV9TVEFURV9JU19NQVRDSElORyA9IFwiRiFcIixcbiAgICAgIEZPUk1fU1RBVEVfSVNfTk9UX01BVENISU5HID0gXCJGXCIsXG4gICAgICBTVFlMRSA9IFwic3R5bGVcIixcbiAgICAgIEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSA9IDAsXG4gICAgICBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZyA9IDEsXG4gICAgICBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGggPSAyLFxuICAgICAgZXZlbnRzRW5hYmxlZCA9IG51bGwsXG4gICAgICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGwsXG4gICAgICB3YXJuZWRVbmtub3duVGFncyA9IHsgZGlhbG9nOiAhMCwgd2VidmlldzogITAgfSxcbiAgICAgIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IG51bGwsXG4gICAgICBzY2hlZHVsZVRpbWVvdXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzZXRUaW1lb3V0ID8gc2V0VGltZW91dCA6IHZvaWQgMCxcbiAgICAgIGNhbmNlbFRpbWVvdXQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjbGVhclRpbWVvdXQgPyBjbGVhclRpbWVvdXQgOiB2b2lkIDAsXG4gICAgICBub1RpbWVvdXQgPSAtMSxcbiAgICAgIGxvY2FsUHJvbWlzZSA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFByb21pc2UgPyBQcm9taXNlIDogdm9pZCAwLFxuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2sgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgID8gcXVldWVNaWNyb3Rhc2tcbiAgICAgICAgICA6IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBsb2NhbFByb21pc2VcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUHJvbWlzZVxuICAgICAgICAgICAgICAgICAgLnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgICAgIC50aGVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGhhbmRsZUVycm9ySW5OZXh0VGljayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogc2NoZWR1bGVUaW1lb3V0LFxuICAgICAgTm90TG9hZGVkID0gMCxcbiAgICAgIExvYWRlZCA9IDEsXG4gICAgICBFcnJvcmVkID0gMixcbiAgICAgIFNldHRsZWQgPSAzLFxuICAgICAgSW5zZXJ0ZWQgPSA0LFxuICAgICAgcHJlbG9hZFByb3BzTWFwID0gbmV3IE1hcCgpLFxuICAgICAgcHJlY29ubmVjdHNTZXQgPSBuZXcgU2V0KCksXG4gICAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5kO1xuICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmQgPSB7XG4gICAgICBmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2aW91c1dhc1JlbmRlcmluZyA9IHByZXZpb3VzRGlzcGF0Y2hlci5mKCksXG4gICAgICAgICAgd2FzUmVuZGVyaW5nID0gZmx1c2hTeW5jV29yayQxKCk7XG4gICAgICAgIHJldHVybiBwcmV2aW91c1dhc1JlbmRlcmluZyB8fCB3YXNSZW5kZXJpbmc7XG4gICAgICB9LFxuICAgICAgcjogZnVuY3Rpb24gKGZvcm0pIHtcbiAgICAgICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcbiAgICAgICAgbnVsbCAhPT0gZm9ybUluc3QgJiYgNSA9PT0gZm9ybUluc3QudGFnICYmIFwiZm9ybVwiID09PSBmb3JtSW5zdC50eXBlXG4gICAgICAgICAgPyByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUluc3QpXG4gICAgICAgICAgOiBwcmV2aW91c0Rpc3BhdGNoZXIucihmb3JtKTtcbiAgICAgIH0sXG4gICAgICBEOiBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuRChocmVmKTtcbiAgICAgICAgcHJlY29ubmVjdEFzKFwiZG5zLXByZWZldGNoXCIsIGhyZWYsIG51bGwpO1xuICAgICAgfSxcbiAgICAgIEM6IGZ1bmN0aW9uIChocmVmLCBjcm9zc09yaWdpbikge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuQyhocmVmLCBjcm9zc09yaWdpbik7XG4gICAgICAgIHByZWNvbm5lY3RBcyhcInByZWNvbm5lY3RcIiwgaHJlZiwgY3Jvc3NPcmlnaW4pO1xuICAgICAgfSxcbiAgICAgIEw6IGZ1bmN0aW9uIChocmVmLCBhcywgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuTChocmVmLCBhcywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIGhyZWYgJiYgYXMpIHtcbiAgICAgICAgICB2YXIgcHJlbG9hZFNlbGVjdG9yID1cbiAgICAgICAgICAgICdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCInICtcbiAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoYXMpICtcbiAgICAgICAgICAgICdcIl0nO1xuICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gYXNcbiAgICAgICAgICAgID8gb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgID8gKChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAgICdbaW1hZ2VzcmNzZXQ9XCInICtcbiAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgJ1wiXScpLFxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmltYWdlU2l6ZXMgJiZcbiAgICAgICAgICAgICAgICAgIChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAgICAgJ1tpbWFnZXNpemVzPVwiJyArXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAnXCJdJykpXG4gICAgICAgICAgICAgIDogKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgICAgICAgJ1tocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICtcbiAgICAgICAgICAgICAgICAgICdcIl0nKVxuICAgICAgICAgICAgOiAocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgJ1tocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgICAgICAgJ1wiXScpO1xuICAgICAgICAgIHZhciBrZXkgPSBwcmVsb2FkU2VsZWN0b3I7XG4gICAgICAgICAgc3dpdGNoIChhcykge1xuICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgIGtleSA9IGdldFN0eWxlS2V5KGhyZWYpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KGhyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuaGFzKGtleSkgfHxcbiAgICAgICAgICAgICgoaHJlZiA9IGFzc2lnbihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgaHJlZjpcbiAgICAgICAgICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gYXMgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgIDogaHJlZixcbiAgICAgICAgICAgICAgICBhczogYXNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KGtleSwgaHJlZiksXG4gICAgICAgICAgICBudWxsICE9PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSB8fFxuICAgICAgICAgICAgICAoXCJzdHlsZVwiID09PSBhcyAmJlxuICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgICAgIChcInNjcmlwdFwiID09PSBhcyAmJlxuICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSkpIHx8XG4gICAgICAgICAgICAgICgoYXMgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoYXMsIFwibGlua1wiLCBocmVmKSxcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShhcyksXG4gICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhcykpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG06IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5tKGhyZWYsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBocmVmKSB7XG4gICAgICAgICAgdmFyIGFzID1cbiAgICAgICAgICAgICAgb3B0aW9ucyAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hcyA/IG9wdGlvbnMuYXMgOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgcHJlbG9hZFNlbGVjdG9yID1cbiAgICAgICAgICAgICAgJ2xpbmtbcmVsPVwibW9kdWxlcHJlbG9hZFwiXVthcz1cIicgK1xuICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGFzKSArXG4gICAgICAgICAgICAgICdcIl1baHJlZj1cIicgK1xuICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICtcbiAgICAgICAgICAgICAgJ1wiXScsXG4gICAgICAgICAgICBrZXkgPSBwcmVsb2FkU2VsZWN0b3I7XG4gICAgICAgICAgc3dpdGNoIChhcykge1xuICAgICAgICAgICAgY2FzZSBcImF1ZGlvd29ya2xldFwiOlxuICAgICAgICAgICAgY2FzZSBcInBhaW50d29ya2xldFwiOlxuICAgICAgICAgICAgY2FzZSBcInNlcnZpY2V3b3JrZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzaGFyZWR3b3JrZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ3b3JrZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KGhyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcHJlbG9hZFByb3BzTWFwLmhhcyhrZXkpICYmXG4gICAgICAgICAgICAoKGhyZWYgPSBhc3NpZ24oeyByZWw6IFwibW9kdWxlcHJlbG9hZFwiLCBocmVmOiBocmVmIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICAgIHByZWxvYWRQcm9wc01hcC5zZXQoa2V5LCBocmVmKSxcbiAgICAgICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihwcmVsb2FkU2VsZWN0b3IpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc3dpdGNoIChhcykge1xuICAgICAgICAgICAgICBjYXNlIFwiYXVkaW93b3JrbGV0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwYWludHdvcmtsZXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNlcnZpY2V3b3JrZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNoYXJlZHdvcmtlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwid29ya2VyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgICBpZiAob3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGFzLCBcImxpbmtcIiwgaHJlZik7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGFzKTtcbiAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgWDogZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuWChzcmMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBzcmMpIHtcbiAgICAgICAgICB2YXIgc2NyaXB0cyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVNjcmlwdHMsXG4gICAgICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoc3JjKSxcbiAgICAgICAgICAgIHJlc291cmNlID0gc2NyaXB0cy5nZXQoa2V5KTtcbiAgICAgICAgICByZXNvdXJjZSB8fFxuICAgICAgICAgICAgKChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgKChzcmMgPSBhc3NpZ24oeyBzcmM6IHNyYywgYXN5bmM6ICEwIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc3JjLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXNvdXJjZSksXG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHJlc291cmNlLCBcImxpbmtcIiwgc3JjKSxcbiAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlc291cmNlKSksXG4gICAgICAgICAgICAocmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNjcmlwdHMuc2V0KGtleSwgcmVzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFM6IGZ1bmN0aW9uIChocmVmLCBwcmVjZWRlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5TKGhyZWYsIHByZWNlZGVuY2UsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBocmVmKSB7XG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVN0eWxlcyxcbiAgICAgICAgICAgIGtleSA9IGdldFN0eWxlS2V5KGhyZWYpO1xuICAgICAgICAgIHByZWNlZGVuY2UgPSBwcmVjZWRlbmNlIHx8IFwiZGVmYXVsdFwiO1xuICAgICAgICAgIHZhciByZXNvdXJjZSA9IHN0eWxlcy5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB7IGxvYWRpbmc6IE5vdExvYWRlZCwgcHJlbG9hZDogbnVsbCB9O1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgPSBMb2FkZWQgfCBJbnNlcnRlZDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBocmVmID0gYXNzaWduKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlbDogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAob3B0aW9ucyA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaHJlZiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIHZhciBsaW5rID0gKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSk7XG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUobGluayk7XG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGxpbmssIFwibGlua1wiLCBocmVmKTtcbiAgICAgICAgICAgICAgbGluay5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBsaW5rLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgbGluay5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyB8PSBMb2FkZWQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyB8PSBFcnJvcmVkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChyZXNvdXJjZSwgcHJlY2VkZW5jZSwgb3duZXJEb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHN0eWxlcy5zZXQoa2V5LCByZXNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgTTogZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuTShzcmMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBzcmMpIHtcbiAgICAgICAgICB2YXIgc2NyaXB0cyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVNjcmlwdHMsXG4gICAgICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoc3JjKSxcbiAgICAgICAgICAgIHJlc291cmNlID0gc2NyaXB0cy5nZXQoa2V5KTtcbiAgICAgICAgICByZXNvdXJjZSB8fFxuICAgICAgICAgICAgKChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgKChzcmMgPSBhc3NpZ24oeyBzcmM6IHNyYywgYXN5bmM6ICEwLCB0eXBlOiBcIm1vZHVsZVwiIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc3JjLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXNvdXJjZSksXG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHJlc291cmNlLCBcImxpbmtcIiwgc3JjKSxcbiAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlc291cmNlKSksXG4gICAgICAgICAgICAocmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNjcmlwdHMuc2V0KGtleSwgcmVzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGdsb2JhbERvY3VtZW50ID0gXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGRvY3VtZW50ID8gbnVsbCA6IGRvY3VtZW50LFxuICAgICAgdGFnQ2FjaGVzID0gbnVsbCxcbiAgICAgIHN1c3BlbmRlZFN0YXRlID0gbnVsbCxcbiAgICAgIExBU1RfUFJFQ0VERU5DRSA9IG51bGwsXG4gICAgICBwcmVjZWRlbmNlc0J5Um9vdCA9IG51bGwsXG4gICAgICBOb3RQZW5kaW5nVHJhbnNpdGlvbiA9IE5vdFBlbmRpbmcsXG4gICAgICBIb3N0VHJhbnNpdGlvbkNvbnRleHQgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgICBDb25zdW1lcjogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIF9jdXJyZW50VmFsdWUyOiBOb3RQZW5kaW5nVHJhbnNpdGlvbixcbiAgICAgICAgX3RocmVhZENvdW50OiAwXG4gICAgICB9LFxuICAgICAgYmFkZ2VGb3JtYXQgPSBcIiVjJXMlYyBcIixcbiAgICAgIGJhZGdlU3R5bGUgPVxuICAgICAgICBcImJhY2tncm91bmQ6ICNlNmU2ZTY7YmFja2dyb3VuZDogbGlnaHQtZGFyayhyZ2JhKDAsMCwwLDAuMSksIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkpO2NvbG9yOiAjMDAwMDAwO2NvbG9yOiBsaWdodC1kYXJrKCMwMDAwMDAsICNmZmZmZmYpO2JvcmRlci1yYWRpdXM6IDJweFwiLFxuICAgICAgcmVzZXRTdHlsZSA9IFwiXCIsXG4gICAgICBwYWQgPSBcIiBcIixcbiAgICAgIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbiAgICB2YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9ICExO1xuICAgIHZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGwsXG4gICAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlUHJvcHMgPSBudWxsLFxuICAgICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsLFxuICAgICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsLFxuICAgICAgc2NoZWR1bGVVcGRhdGUgPSBudWxsLFxuICAgICAgc2V0RXJyb3JIYW5kbGVyID0gbnVsbCxcbiAgICAgIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG4gICAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgICAgaWQgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuICAgICAgbnVsbCAhPT0gaWQgJiZcbiAgICAgICAgKChwYXRoID0gY29weVdpdGhTZXRJbXBsKGlkLm1lbW9pemVkU3RhdGUsIHBhdGgsIDAsIHZhbHVlKSksXG4gICAgICAgIChpZC5tZW1vaXplZFN0YXRlID0gcGF0aCksXG4gICAgICAgIChpZC5iYXNlU3RhdGUgPSBwYXRoKSxcbiAgICAgICAgKGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpKSxcbiAgICAgICAgKHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICAgIGlkID0gZmluZEhvb2soZmliZXIsIGlkKTtcbiAgICAgIG51bGwgIT09IGlkICYmXG4gICAgICAgICgocGF0aCA9IGNvcHlXaXRoRGVsZXRlSW1wbChpZC5tZW1vaXplZFN0YXRlLCBwYXRoLCAwKSksXG4gICAgICAgIChpZC5tZW1vaXplZFN0YXRlID0gcGF0aCksXG4gICAgICAgIChpZC5iYXNlU3RhdGUgPSBwYXRoKSxcbiAgICAgICAgKGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpKSxcbiAgICAgICAgKHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgIGlkID0gZmluZEhvb2soZmliZXIsIGlkKTtcbiAgICAgIG51bGwgIT09IGlkICYmXG4gICAgICAgICgob2xkUGF0aCA9IGNvcHlXaXRoUmVuYW1lKGlkLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpKSxcbiAgICAgICAgKGlkLm1lbW9pemVkU3RhdGUgPSBvbGRQYXRoKSxcbiAgICAgICAgKGlkLmJhc2VTdGF0ZSA9IG9sZFBhdGgpLFxuICAgICAgICAoZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcykpLFxuICAgICAgICAob2xkUGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMikpLFxuICAgICAgICBudWxsICE9PSBvbGRQYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihvbGRQYXRoLCBmaWJlciwgMikpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0SW1wbChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCAwLCB2YWx1ZSk7XG4gICAgICBmaWJlci5hbHRlcm5hdGUgJiYgKGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHMpO1xuICAgICAgcGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSBwYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXRoLCBmaWJlciwgMik7XG4gICAgfTtcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGVJbXBsKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIDApO1xuICAgICAgZmliZXIuYWx0ZXJuYXRlICYmIChmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzKTtcbiAgICAgIHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKFxuICAgICAgICBmaWJlci5tZW1vaXplZFByb3BzLFxuICAgICAgICBvbGRQYXRoLFxuICAgICAgICBuZXdQYXRoXG4gICAgICApO1xuICAgICAgZmliZXIuYWx0ZXJuYXRlICYmIChmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzKTtcbiAgICAgIG9sZFBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gb2xkUGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIob2xkUGF0aCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIHNldEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRFcnJvckltcGwpIHtcbiAgICAgIHNob3VsZEVycm9ySW1wbCA9IG5ld1Nob3VsZEVycm9ySW1wbDtcbiAgICB9O1xuICAgIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgICAgc2hvdWxkU3VzcGVuZEltcGwgPSBuZXdTaG91bGRTdXNwZW5kSW1wbDtcbiAgICB9O1xuICAgIHZhciBfZW5hYmxlZCA9ICEwLFxuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsLFxuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9ICExLFxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsLFxuICAgICAgcXVldWVkRHJhZyA9IG51bGwsXG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGwsXG4gICAgICBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKSxcbiAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcyA9IG5ldyBNYXAoKSxcbiAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdLFxuICAgICAgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID1cbiAgICAgICAgXCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXRcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gbnVsbDtcbiAgICBSZWFjdERPTUh5ZHJhdGlvblJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID1cbiAgICAgIGZ1bmN0aW9uIChjaGlsZHJlbiwgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AyKSB7XG4gICAgICAgIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICAgICAgICBpZiAobnVsbCA9PT0gcm9vdCkgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGFuIHVubW91bnRlZCByb290LlwiKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AyXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGlzVmFsaWRDb250YWluZXIoSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AyKVxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHBhc3NlZCBhIGNvbnRhaW5lciB0byB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHJvb3QucmVuZGVyKC4uLikuIFlvdSBkb24ndCBuZWVkIHRvIHBhc3MgaXQgYWdhaW4gc2luY2UgeW91IGFscmVhZHkgcGFzc2VkIGl0IHRvIGNyZWF0ZSB0aGUgcm9vdC5cIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDIgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBzZWNvbmQgYXJndW1lbnQgdG8gcm9vdC5yZW5kZXIoLi4uKSBidXQgaXQgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDIgPSByb290LmN1cnJlbnQ7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AyKTtcbiAgICAgICAgdXBkYXRlQ29udGFpbmVySW1wbChcbiAgICAgICAgICBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDIsXG4gICAgICAgICAgbGFuZSxcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICByb290LFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgfTtcbiAgICBSZWFjdERPTUh5ZHJhdGlvblJvb3QucHJvdG90eXBlLnVubW91bnQgPSBSZWFjdERPTVJvb3QucHJvdG90eXBlLnVubW91bnQgPVxuICAgICAgZnVuY3Rpb24gKEpTQ29tcGlsZXJfT3B0aW1pemVBcmd1bWVudHNBcnJheV9wMykge1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBKU0NvbXBpbGVyX09wdGltaXplQXJndW1lbnRzQXJyYXlfcDMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AzID0gdGhpcy5faW50ZXJuYWxSb290O1xuICAgICAgICBpZiAobnVsbCAhPT0gSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AzKSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJuYWxSb290ID0gbnVsbDtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AzLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkF0dGVtcHRlZCB0byBzeW5jaHJvbm91c2x5IHVubW91bnQgYSByb290IHdoaWxlIFJlYWN0IHdhcyBhbHJlYWR5IHJlbmRlcmluZy4gUmVhY3QgY2Fubm90IGZpbmlzaCB1bm1vdW50aW5nIHRoZSByb290IHVudGlsIHRoZSBjdXJyZW50IHJlbmRlciBoYXMgY29tcGxldGVkLCB3aGljaCBtYXkgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZUNvbnRhaW5lclN5bmMoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgSlNDb21waWxlcl9PcHRpbWl6ZUFyZ3VtZW50c0FycmF5X3AzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICAgIGZsdXNoU3luY1dvcmskMSgpO1xuICAgICAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbiA9IGZ1bmN0aW9uIChcbiAgICAgIHRhcmdldFxuICAgICkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB2YXIgdXBkYXRlUHJpb3JpdHkgPSByZXNvbHZlVXBkYXRlUHJpb3JpdHkoKTtcbiAgICAgICAgdGFyZ2V0ID0geyBibG9ja2VkT246IG51bGwsIHRhcmdldDogdGFyZ2V0LCBwcmlvcml0eTogdXBkYXRlUHJpb3JpdHkgfTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggJiZcbiAgICAgICAgICAwICE9PSB1cGRhdGVQcmlvcml0eSAmJlxuICAgICAgICAgIHVwZGF0ZVByaW9yaXR5IDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW2ldLnByaW9yaXR5O1xuICAgICAgICAgIGkrK1xuICAgICAgICApO1xuICAgICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc3BsaWNlKGksIDAsIHRhcmdldCk7XG4gICAgICAgIDAgPT09IGkgJiYgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHRhcmdldCk7XG4gICAgICB9XG4gICAgfTtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlzb21vcnBoaWNSZWFjdFBhY2thZ2VWZXJzaW9uID0gUmVhY3QudmVyc2lvbjtcbiAgICAgIGlmIChcIjE5LjAuMFwiICE9PSBpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbilcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0luY29tcGF0aWJsZSBSZWFjdCB2ZXJzaW9uczogVGhlIFwicmVhY3RcIiBhbmQgXCJyZWFjdC1kb21cIiBwYWNrYWdlcyBtdXN0IGhhdmUgdGhlIGV4YWN0IHNhbWUgdmVyc2lvbi4gSW5zdGVhZCBnb3Q6XFxuICAtIHJlYWN0OiAgICAgICcgK1xuICAgICAgICAgICAgKGlzb21vcnBoaWNSZWFjdFBhY2thZ2VWZXJzaW9uICtcbiAgICAgICAgICAgICAgXCJcXG4gIC0gcmVhY3QtZG9tOiAgMTkuMC4wXFxuTGVhcm4gbW9yZTogaHR0cHM6Ly9yZWFjdC5kZXYvd2FybmluZ3MvdmVyc2lvbi1taXNtYXRjaFwiKVxuICAgICAgICApO1xuICAgIH0pKCk7XG4gICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcCAmJlxuICAgICAgbnVsbCAhPSBNYXAucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldCAmJlxuICAgICAgbnVsbCAhPSBTZXQucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2gpIHx8XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtcG9seWZpbGxzXCJcbiAgICAgICk7XG4gICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZmluZERPTU5vZGUgPSBmdW5jdGlvbiAoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gICAgICB2YXIgZmliZXIgPSBjb21wb25lbnRPckVsZW1lbnQuX3JlYWN0SW50ZXJuYWxzO1xuICAgICAgaWYgKHZvaWQgMCA9PT0gZmliZXIpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICBjb21wb25lbnRPckVsZW1lbnQgPSBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpLmpvaW4oXCIsXCIpO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICtcbiAgICAgICAgICAgIGNvbXBvbmVudE9yRWxlbWVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50T3JFbGVtZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpO1xuICAgICAgY29tcG9uZW50T3JFbGVtZW50ID1cbiAgICAgICAgbnVsbCAhPT0gY29tcG9uZW50T3JFbGVtZW50XG4gICAgICAgICAgPyBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwoY29tcG9uZW50T3JFbGVtZW50KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGNvbXBvbmVudE9yRWxlbWVudCA9XG4gICAgICAgIG51bGwgPT09IGNvbXBvbmVudE9yRWxlbWVudCA/IG51bGwgOiBjb21wb25lbnRPckVsZW1lbnQuc3RhdGVOb2RlO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgICB9O1xuICAgIGlmIChcbiAgICAgICEoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW50ZXJuYWxzID0ge1xuICAgICAgICAgIGJ1bmRsZVR5cGU6IDEsXG4gICAgICAgICAgdmVyc2lvbjogXCIxOS4wLjBcIixcbiAgICAgICAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBcInJlYWN0LWRvbVwiLFxuICAgICAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdFNoYXJlZEludGVybmFscyxcbiAgICAgICAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsXG4gICAgICAgICAgcmVjb25jaWxlclZlcnNpb246IFwiMTkuMC4wXCJcbiAgICAgICAgfTtcbiAgICAgICAgaW50ZXJuYWxzLm92ZXJyaWRlSG9va1N0YXRlID0gb3ZlcnJpZGVIb29rU3RhdGU7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzID0gb3ZlcnJpZGVQcm9wcztcbiAgICAgICAgaW50ZXJuYWxzLm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMuc2NoZWR1bGVVcGRhdGUgPSBzY2hlZHVsZVVwZGF0ZTtcbiAgICAgICAgaW50ZXJuYWxzLnNldEVycm9ySGFuZGxlciA9IHNldEVycm9ySGFuZGxlcjtcbiAgICAgICAgaW50ZXJuYWxzLnNldFN1c3BlbnNlSGFuZGxlciA9IHNldFN1c3BlbnNlSGFuZGxlcjtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlUmVmcmVzaCA9IHNjaGVkdWxlUmVmcmVzaDtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlUm9vdCA9IHNjaGVkdWxlUm9vdDtcbiAgICAgICAgaW50ZXJuYWxzLnNldFJlZnJlc2hIYW5kbGVyID0gc2V0UmVmcmVzaEhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5nZXRDdXJyZW50RmliZXIgPSBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scztcbiAgICAgICAgaW50ZXJuYWxzLmdldExhbmVMYWJlbE1hcCA9IGdldExhbmVMYWJlbE1hcDtcbiAgICAgICAgaW50ZXJuYWxzLmluamVjdFByb2ZpbGluZ0hvb2tzID0gaW5qZWN0UHJvZmlsaW5nSG9va3M7XG4gICAgICAgIHJldHVybiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKTtcbiAgICAgIH0pKCkgJiZcbiAgICAgIGNhblVzZURPTSAmJlxuICAgICAgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYgJiZcbiAgICAgICgoLTEgPCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJDaHJvbWVcIikgJiZcbiAgICAgICAgLTEgPT09IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkVkZ2VcIikpIHx8XG4gICAgICAgIC0xIDwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiRmlyZWZveFwiKSlcbiAgICApIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgIC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSAmJlxuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgXCIlY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29sc1wiICtcbiAgICAgICAgICAgIChcImZpbGU6XCIgPT09IHByb3RvY29sXG4gICAgICAgICAgICAgID8gXCJcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29scy1mYXFcIlxuICAgICAgICAgICAgICA6IFwiXCIpLFxuICAgICAgICAgIFwiZm9udC13ZWlnaHQ6Ym9sZFwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGV4cG9ydHMuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uIChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICAgIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgICAgd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpO1xuICAgICAgdmFyIGlzU3RyaWN0TW9kZSA9ICExLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJcIixcbiAgICAgICAgb25VbmNhdWdodEVycm9yID0gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvciA9IGRlZmF1bHRPbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IgPSBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICB0cmFuc2l0aW9uQ2FsbGJhY2tzID0gbnVsbDtcbiAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmXG4gICAgICAgIChvcHRpb25zLmh5ZHJhdGVcbiAgICAgICAgICA/IGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJoeWRyYXRlIHRocm91Z2ggY3JlYXRlUm9vdCBpcyBkZXByZWNhdGVkLiBVc2UgUmVhY3RET01DbGllbnQuaHlkcmF0ZVJvb3QoY29udGFpbmVyLCA8QXBwIC8+KSBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICAgICAgb3B0aW9ucy4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBKU1ggZWxlbWVudCB0byBjcmVhdGVSb290LiBZb3UgcHJvYmFibHkgbWVhbnQgdG8gY2FsbCByb290LnJlbmRlciBpbnN0ZWFkLiBFeGFtcGxlIHVzYWdlOlxcblxcbiAgbGV0IHJvb3QgPSBjcmVhdGVSb290KGRvbUNvbnRhaW5lcik7XFxuICByb290LnJlbmRlcig8QXBwIC8+KTtcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCAmJlxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4KSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvblVuY2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vbkNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uQ2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICYmXG4gICAgICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MgJiZcbiAgICAgICAgICAodHJhbnNpdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcykpO1xuICAgICAgb3B0aW9ucyA9IGNyZWF0ZUZpYmVyUm9vdChcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAxLFxuICAgICAgICAhMSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgaXNTdHJpY3RNb2RlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG9wdGlvbnMuY3VycmVudDtcbiAgICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKFxuICAgICAgICA4ID09PSBjb250YWluZXIubm9kZVR5cGUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RET01Sb290KG9wdGlvbnMpO1xuICAgIH07XG4gICAgZXhwb3J0cy5oeWRyYXRlUm9vdCA9IGZ1bmN0aW9uIChjb250YWluZXIsIGluaXRpYWxDaGlsZHJlbiwgb3B0aW9ucykge1xuICAgICAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpXG4gICAgICAgIHRocm93IEVycm9yKFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgICB3YXJuSWZSZWFjdERPTUNvbnRhaW5lckluREVWKGNvbnRhaW5lcik7XG4gICAgICB2b2lkIDAgPT09IGluaXRpYWxDaGlsZHJlbiAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiTXVzdCBwcm92aWRlIGluaXRpYWwgY2hpbGRyZW4gYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGh5ZHJhdGVSb290LiBFeGFtcGxlIHVzYWdlOiBoeWRyYXRlUm9vdChkb21Db250YWluZXIsIDxBcHAgLz4pXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBpc1N0cmljdE1vZGUgPSAhMSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IFwiXCIsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvciA9IGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yID0gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyA9IG51bGwsXG4gICAgICAgIGZvcm1TdGF0ZSA9IG51bGw7XG4gICAgICBudWxsICE9PSBvcHRpb25zICYmXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICAoITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCAmJlxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4KSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvblVuY2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vbkNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uQ2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICYmXG4gICAgICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MgJiZcbiAgICAgICAgICAodHJhbnNpdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcyksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5mb3JtU3RhdGUgJiYgKGZvcm1TdGF0ZSA9IG9wdGlvbnMuZm9ybVN0YXRlKSk7XG4gICAgICBpbml0aWFsQ2hpbGRyZW4gPSBjcmVhdGVGaWJlclJvb3QoXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgMSxcbiAgICAgICAgITAsXG4gICAgICAgIGluaXRpYWxDaGlsZHJlbixcbiAgICAgICAgbnVsbCAhPSBvcHRpb25zID8gb3B0aW9ucyA6IG51bGwsXG4gICAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MsXG4gICAgICAgIGZvcm1TdGF0ZVxuICAgICAgKTtcbiAgICAgIGluaXRpYWxDaGlsZHJlbi5jb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUobnVsbCk7XG4gICAgICBvcHRpb25zID0gaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQ7XG4gICAgICBpc1N0cmljdE1vZGUgPSByZXF1ZXN0VXBkYXRlTGFuZShvcHRpb25zKTtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBjcmVhdGVVcGRhdGUoaXNTdHJpY3RNb2RlKTtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXguY2FsbGJhY2sgPSBudWxsO1xuICAgICAgZW5xdWV1ZVVwZGF0ZShvcHRpb25zLCBpZGVudGlmaWVyUHJlZml4LCBpc1N0cmljdE1vZGUpO1xuICAgICAgaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQubGFuZXMgPSBpc1N0cmljdE1vZGU7XG4gICAgICBtYXJrUm9vdFVwZGF0ZWQkMShpbml0aWFsQ2hpbGRyZW4sIGlzU3RyaWN0TW9kZSk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoaW5pdGlhbENoaWxkcmVuKTtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGluaXRpYWxDaGlsZHJlbi5jdXJyZW50O1xuICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoY29udGFpbmVyKTtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RET01IeWRyYXRpb25Sb290KGluaXRpYWxDaGlsZHJlbik7XG4gICAgfTtcbiAgICBleHBvcnRzLnZlcnNpb24gPSBcIjE5LjAuMFwiO1xuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKEVycm9yKCkpO1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react-dom/cjs/react-dom-client.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react-dom/cjs/react-dom.development.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/react-dom/cjs/react-dom.development.js ***!
|
||
\*************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n try {\n testStringCoercion(key);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n JSCompiler_inline_result &&\n (console.error(\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n key[Symbol.toStringTag]) ||\n key.constructor.name ||\n \"Object\"\n ),\n testStringCoercion(key));\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n }\n function getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n }\n function getValueDescriptorExpectingObjectForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function getValueDescriptorExpectingEnumForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : \"string\" === typeof thing\n ? JSON.stringify(thing)\n : \"number\" === typeof thing\n ? \"`\" + thing + \"`\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\"),\n Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(\n \"Invalid form element. requestFormReset must be passed a form that was rendered by React.\"\n );\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"\n );\n exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\n exports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(\"Target container is not a DOM element.\");\n return createPortal$1(children, container, null, key);\n };\n exports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))\n return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f() &&\n console.error(\n \"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\"\n );\n }\n };\n exports.preconnect = function (href, options) {\n \"string\" === typeof href && href\n ? null != options && \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : null != options &&\n \"string\" !== typeof options.crossOrigin &&\n console.error(\n \"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.\",\n getValueDescriptorExpectingObjectForWarning(options.crossOrigin)\n )\n : console.error(\n \"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n };\n exports.prefetchDNS = function (href) {\n if (\"string\" !== typeof href || !href)\n console.error(\n \"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n else if (1 < arguments.length) {\n var options = arguments[1];\n \"object\" === typeof options && options.hasOwnProperty(\"crossOrigin\")\n ? console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n );\n }\n \"string\" === typeof href && Internals.d.D(href);\n };\n exports.preinit = function (href, options) {\n \"string\" === typeof href && href\n ? null == options || \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : \"style\" !== options.as &&\n \"script\" !== options.as &&\n console.error(\n 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".',\n getValueDescriptorExpectingEnumForWarning(options.as)\n )\n : console.error(\n \"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n if (\n \"string\" === typeof href &&\n options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence\n ? options.precedence\n : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n };\n exports.preinitModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"script\" !== options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingEnumForWarning(options.as) +\n \".\");\n if (encountered)\n console.error(\n \"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s\",\n encountered\n );\n else\n switch (\n ((encountered =\n options && \"string\" === typeof options.as ? options.as : \"script\"),\n encountered)\n ) {\n case \"script\":\n break;\n default:\n (encountered =\n getValueDescriptorExpectingEnumForWarning(encountered)),\n console.error(\n 'ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',\n encountered,\n href\n );\n }\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as)\n (encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.M(href, {\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0,\n nonce:\n \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n } else null == options && Internals.d.M(href);\n };\n exports.preload = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n null == options || \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : (\"string\" === typeof options.as && options.as) ||\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel=\"preload\" as=\"...\" />` tag.%s',\n encountered\n );\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n encountered = options.as;\n var crossOrigin = getCrossOriginStringAs(\n encountered,\n options.crossOrigin\n );\n Internals.d.L(href, encountered, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet\n ? options.imageSrcSet\n : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes\n ? options.imageSizes\n : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n };\n exports.preloadModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"string\" !== typeof options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel=\"modulepreload\" as=\"...\" />` tag.%s',\n encountered\n );\n \"string\" === typeof href &&\n (options\n ? ((encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0\n }))\n : Internals.d.m(href));\n };\n exports.requestFormReset = function (form) {\n Internals.d.r(form);\n };\n exports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n };\n exports.useFormState = function (action, initialState, permalink) {\n return resolveDispatcher().useFormState(action, initialState, permalink);\n };\n exports.useFormStatus = function () {\n return resolveDispatcher().useHostTransitionStatus();\n };\n exports.version = \"19.0.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsNENBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksb0VBQW9FO0FBQ3hFO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaUJBQWlCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsVUFBVTtBQUNWO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLElBQUksd0JBQXdCO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcz9hYzg5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCBpbXBsZW1lbnRhdGlvbikge1xuICAgICAgdmFyIGtleSA9XG4gICAgICAgIDMgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbihrZXkpO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICYmXG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgICBTeW1ib2wudG9TdHJpbmdUYWcgJiZcbiAgICAgICAgICAgIGtleVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgICAga2V5LmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICAgIFwiT2JqZWN0XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKGtleSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgICAgICBrZXk6IG51bGwgPT0ga2V5ID8gbnVsbCA6IFwiXCIgKyBrZXksXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICAgICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDcm9zc09yaWdpblN0cmluZ0FzKGFzLCBpbnB1dCkge1xuICAgICAgaWYgKFwiZm9udFwiID09PSBhcykgcmV0dXJuIFwiXCI7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGlucHV0KVxuICAgICAgICByZXR1cm4gXCJ1c2UtY3JlZGVudGlhbHNcIiA9PT0gaW5wdXQgPyBpbnB1dCA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcodGhpbmcpIHtcbiAgICAgIHJldHVybiBudWxsID09PSB0aGluZ1xuICAgICAgICA/IFwiYG51bGxgXCJcbiAgICAgICAgOiB2b2lkIDAgPT09IHRoaW5nXG4gICAgICAgICAgPyBcImB1bmRlZmluZWRgXCJcbiAgICAgICAgICA6IFwiXCIgPT09IHRoaW5nXG4gICAgICAgICAgICA/IFwiYW4gZW1wdHkgc3RyaW5nXCJcbiAgICAgICAgICAgIDogJ3NvbWV0aGluZyB3aXRoIHR5cGUgXCInICsgdHlwZW9mIHRoaW5nICsgJ1wiJztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcodGhpbmcpIHtcbiAgICAgIHJldHVybiBudWxsID09PSB0aGluZ1xuICAgICAgICA/IFwiYG51bGxgXCJcbiAgICAgICAgOiB2b2lkIDAgPT09IHRoaW5nXG4gICAgICAgICAgPyBcImB1bmRlZmluZWRgXCJcbiAgICAgICAgICA6IFwiXCIgPT09IHRoaW5nXG4gICAgICAgICAgICA/IFwiYW4gZW1wdHkgc3RyaW5nXCJcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHRoaW5nXG4gICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpbmcpXG4gICAgICAgICAgICAgIDogXCJudW1iZXJcIiA9PT0gdHlwZW9mIHRoaW5nXG4gICAgICAgICAgICAgICAgPyBcImBcIiArIHRoaW5nICsgXCJgXCJcbiAgICAgICAgICAgICAgICA6ICdzb21ldGhpbmcgd2l0aCB0eXBlIFwiJyArIHR5cGVvZiB0aGluZyArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgbnVsbCA9PT0gZGlzcGF0Y2hlciAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICB2YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIiksXG4gICAgICBJbnRlcm5hbHMgPSB7XG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBmOiBub29wLFxuICAgICAgICAgIHI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZm9ybSBlbGVtZW50LiByZXF1ZXN0Rm9ybVJlc2V0IG11c3QgYmUgcGFzc2VkIGEgZm9ybSB0aGF0IHdhcyByZW5kZXJlZCBieSBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIEQ6IG5vb3AsXG4gICAgICAgICAgQzogbm9vcCxcbiAgICAgICAgICBMOiBub29wLFxuICAgICAgICAgIG06IG5vb3AsXG4gICAgICAgICAgWDogbm9vcCxcbiAgICAgICAgICBTOiBub29wLFxuICAgICAgICAgIE06IG5vb3BcbiAgICAgICAgfSxcbiAgICAgICAgcDogMCxcbiAgICAgICAgZmluZERPTU5vZGU6IG51bGxcbiAgICAgIH0sXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERTtcbiAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgTWFwICYmXG4gICAgICBudWxsICE9IE1hcC5wcm90b3R5cGUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0ICYmXG4gICAgICBudWxsICE9IFNldC5wcm90b3R5cGUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCkgfHxcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiXG4gICAgICApO1xuICAgIGV4cG9ydHMuX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIEludGVybmFscztcbiAgICBleHBvcnRzLmNyZWF0ZVBvcnRhbCA9IGZ1bmN0aW9uIChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gICAgICB2YXIga2V5ID1cbiAgICAgICAgMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICAgICAgaWYgKFxuICAgICAgICAhY29udGFpbmVyIHx8XG4gICAgICAgICgxICE9PSBjb250YWluZXIubm9kZVR5cGUgJiZcbiAgICAgICAgICA5ICE9PSBjb250YWluZXIubm9kZVR5cGUgJiZcbiAgICAgICAgICAxMSAhPT0gY29udGFpbmVyLm5vZGVUeXBlKVxuICAgICAgKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG4gICAgfTtcbiAgICBleHBvcnRzLmZsdXNoU3luYyA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgdmFyIHByZXZpb3VzVHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIHByZXZpb3VzVXBkYXRlUHJpb3JpdHkgPSBJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICgoKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsKSwgKEludGVybmFscy5wID0gMiksIGZuKSlcbiAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldmlvdXNUcmFuc2l0aW9uKSxcbiAgICAgICAgICAoSW50ZXJuYWxzLnAgPSBwcmV2aW91c1VwZGF0ZVByaW9yaXR5KSxcbiAgICAgICAgICBJbnRlcm5hbHMuZC5mKCkgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiZmx1c2hTeW5jIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBsaWZlY3ljbGUgbWV0aG9kLiBSZWFjdCBjYW5ub3QgZmx1c2ggd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4gQ29uc2lkZXIgbW92aW5nIHRoaXMgY2FsbCB0byBhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suXCJcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWNvbm5lY3QgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZlxuICAgICAgICA/IG51bGwgIT0gb3B0aW9ucyAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVjb25uZWN0KCk6IEV4cGVjdGVkIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgKHNlY29uZCkgdG8gYmUgYW4gb2JqZWN0IGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLiBUaGUgb25seSBzdXBwb3J0ZWQgb3B0aW9uIGF0IHRoaXMgdGltZSBpcyBgY3Jvc3NPcmlnaW5gIHdoaWNoIGFjY2VwdHMgYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBudWxsICE9IG9wdGlvbnMgJiZcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBvcHRpb25zLmNyb3NzT3JpZ2luICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBjcm9zc09yaWdpbmAgb3B0aW9uIChzZWNvbmQgYXJndW1lbnQpIHRvIGJlIGEgc3RyaW5nIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLiBUcnkgcmVtb3ZpbmcgdGhpcyBvcHRpb24gb3IgcGFzc2luZyBhIHN0cmluZyB2YWx1ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMuY3Jvc3NPcmlnaW4pXG4gICAgICAgICAgICApXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3RET00ucHJlY29ubmVjdCgpOiBFeHBlY3RlZCB0aGUgYGhyZWZgIGFyZ3VtZW50IChmaXJzdCkgdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKVxuICAgICAgICAgICk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICAob3B0aW9uc1xuICAgICAgICAgID8gKChvcHRpb25zID0gb3B0aW9ucy5jcm9zc09yaWdpbiksXG4gICAgICAgICAgICAob3B0aW9ucyA9XG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgICAgICAgICAgPyBcInVzZS1jcmVkZW50aWFsc1wiID09PSBvcHRpb25zXG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIDogdm9pZCAwKSlcbiAgICAgICAgICA6IChvcHRpb25zID0gbnVsbCksXG4gICAgICAgIEludGVybmFscy5kLkMoaHJlZiwgb3B0aW9ucykpO1xuICAgIH07XG4gICAgZXhwb3J0cy5wcmVmZXRjaEROUyA9IGZ1bmN0aW9uIChocmVmKSB7XG4gICAgICBpZiAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGhyZWYgfHwgIWhyZWYpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCB0aGUgYGhyZWZgIGFyZ3VtZW50IChmaXJzdCkgdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZilcbiAgICAgICAgKTtcbiAgICAgIGVsc2UgaWYgKDEgPCBhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KFwiY3Jvc3NPcmlnaW5cIilcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlZmV0Y2hETlMoKTogRXhwZWN0ZWQgb25seSBvbmUgYXJndW1lbnQsIGBocmVmYCwgYnV0IGVuY291bnRlcmVkICVzIGFzIGEgc2Vjb25kIGFyZ3VtZW50IGluc3RlYWQuIFRoaXMgYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBvcHRpb25zIGFuZCBpcyBjdXJyZW50bHkgZGlzYWxsb3dlZC4gSXQgbG9va3MgbGlrZSB0aGUgeW91IGFyZSBhdHRlbXB0aW5nIHRvIHNldCBhIGNyb3NzT3JpZ2luIHByb3BlcnR5IGZvciB0aGlzIEROUyBsb29rdXAgaGludC4gQnJvd3NlcnMgZG8gbm90IHBlcmZvcm0gRE5TIHF1ZXJpZXMgdXNpbmcgQ09SUyBhbmQgc2V0dGluZyB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgcmVzb3VyY2UgaGludCBoYXMgbm8gZWZmZWN0LiBUcnkgY2FsbGluZyBSZWFjdERPTS5wcmVmZXRjaEROUygpIHdpdGgganVzdCBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGBocmVmYC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlZmV0Y2hETlMoKTogRXhwZWN0ZWQgb25seSBvbmUgYXJndW1lbnQsIGBocmVmYCwgYnV0IGVuY291bnRlcmVkICVzIGFzIGEgc2Vjb25kIGFyZ3VtZW50IGluc3RlYWQuIFRoaXMgYXJndW1lbnQgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBvcHRpb25zIGFuZCBpcyBjdXJyZW50bHkgZGlzYWxsb3dlZC4gVHJ5IGNhbGxpbmcgUmVhY3RET00ucHJlZmV0Y2hETlMoKSB3aXRoIGp1c3QgYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LCBgaHJlZmAuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgSW50ZXJuYWxzLmQuRChocmVmKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucHJlaW5pdCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmXG4gICAgICAgID8gbnVsbCA9PSBvcHRpb25zIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhbiBgYXNgIHByb3BlcnR5IGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgcmVzb3VyY2UgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcInN0eWxlXCIgIT09IG9wdGlvbnMuYXMgJiZcbiAgICAgICAgICAgIFwic2NyaXB0XCIgIT09IG9wdGlvbnMuYXMgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdSZWFjdERPTS5wcmVpbml0KCk6IEV4cGVjdGVkIHRoZSBgYXNgIHByb3BlcnR5IGluIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgKHNlY29uZCkgdG8gY29udGFpbiBhIHZhbGlkIHZhbHVlIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgcmVzb3VyY2UgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuIFZhbGlkIHZhbHVlcyBmb3IgYGFzYCBhcmUgXCJzdHlsZVwiIGFuZCBcInNjcmlwdFwiLicsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMuYXMpXG4gICAgICAgICAgICApXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3RET00ucHJlaW5pdCgpOiBFeHBlY3RlZCB0aGUgYGhyZWZgIGFyZ3VtZW50IChmaXJzdCkgdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKVxuICAgICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmXG4gICAgICAgIG9wdGlvbnMgJiZcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXNcbiAgICAgICkge1xuICAgICAgICB2YXIgYXMgPSBvcHRpb25zLmFzLFxuICAgICAgICAgIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhhcywgb3B0aW9ucy5jcm9zc09yaWdpbiksXG4gICAgICAgICAgaW50ZWdyaXR5ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmludGVncml0eSA/IG9wdGlvbnMuaW50ZWdyaXR5IDogdm9pZCAwLFxuICAgICAgICAgIGZldGNoUHJpb3JpdHkgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuZmV0Y2hQcmlvcml0eVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmV0Y2hQcmlvcml0eVxuICAgICAgICAgICAgICA6IHZvaWQgMDtcbiAgICAgICAgXCJzdHlsZVwiID09PSBhc1xuICAgICAgICAgID8gSW50ZXJuYWxzLmQuUyhcbiAgICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMucHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5wcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBpbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgZmV0Y2hQcmlvcml0eTogZmV0Y2hQcmlvcml0eVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcInNjcmlwdFwiID09PSBhcyAmJlxuICAgICAgICAgICAgSW50ZXJuYWxzLmQuWChocmVmLCB7XG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgaW50ZWdyaXR5OiBpbnRlZ3JpdHksXG4gICAgICAgICAgICAgIGZldGNoUHJpb3JpdHk6IGZldGNoUHJpb3JpdHksXG4gICAgICAgICAgICAgIG5vbmNlOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5ub25jZSA/IG9wdGlvbnMubm9uY2UgOiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5wcmVpbml0TW9kdWxlID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBlbmNvdW50ZXJlZCA9IFwiXCI7XG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZikgfHxcbiAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgXCIgVGhlIGBocmVmYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikgK1xuICAgICAgICAgIFwiLlwiKTtcbiAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucyAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICA/IChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBvcHRpb25zYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zKSArXG4gICAgICAgICAgICBcIi5cIilcbiAgICAgICAgOiBvcHRpb25zICYmXG4gICAgICAgICAgXCJhc1wiIGluIG9wdGlvbnMgJiZcbiAgICAgICAgICBcInNjcmlwdFwiICE9PSBvcHRpb25zLmFzICYmXG4gICAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYGFzYCBvcHRpb24gZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMuYXMpICtcbiAgICAgICAgICAgIFwiLlwiKTtcbiAgICAgIGlmIChlbmNvdW50ZXJlZClcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlYWN0RE9NLnByZWluaXRNb2R1bGUoKTogRXhwZWN0ZWQgdXAgdG8gdHdvIGFyZ3VtZW50cywgYSBub24tZW1wdHkgYGhyZWZgIHN0cmluZyBhbmQsIG9wdGlvbmFsbHksIGFuIGBvcHRpb25zYCBvYmplY3Qgd2l0aCBhIHZhbGlkIGBhc2AgcHJvcGVydHkuJXNcIixcbiAgICAgICAgICBlbmNvdW50ZXJlZFxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICgoZW5jb3VudGVyZWQgPVxuICAgICAgICAgICAgb3B0aW9ucyAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hcyA/IG9wdGlvbnMuYXMgOiBcInNjcmlwdFwiKSxcbiAgICAgICAgICBlbmNvdW50ZXJlZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIChlbmNvdW50ZXJlZCA9XG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKGVuY291bnRlcmVkKSksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1JlYWN0RE9NLnByZWluaXRNb2R1bGUoKTogQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCBcImFzXCIgdHlwZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBcInNjcmlwdFwiIGJ1dCByZWNlaXZlZCBcIiVzXCIgaW5zdGVhZC4gVGhpcyB3YXJuaW5nIHdhcyBnZW5lcmF0ZWQgZm9yIGBocmVmYCBcIiVzXCIuIEluIHRoZSBmdXR1cmUgb3RoZXIgbW9kdWxlIHR5cGVzIHdpbGwgYmUgc3VwcG9ydGVkLCBhbGlnbmluZyB3aXRoIHRoZSBpbXBvcnQtYXR0cmlidXRlcyBwcm9wb3NhbC4gTGVhcm4gbW9yZSBoZXJlOiAoaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaW1wb3J0LWF0dHJpYnV0ZXMpJyxcbiAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZCxcbiAgICAgICAgICAgICAgICBocmVmXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZilcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmIG51bGwgIT09IG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAobnVsbCA9PSBvcHRpb25zLmFzIHx8IFwic2NyaXB0XCIgPT09IG9wdGlvbnMuYXMpXG4gICAgICAgICAgICAoZW5jb3VudGVyZWQgPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKFxuICAgICAgICAgICAgICBvcHRpb25zLmFzLFxuICAgICAgICAgICAgICBvcHRpb25zLmNyb3NzT3JpZ2luXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgSW50ZXJuYWxzLmQuTShocmVmLCB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGVuY291bnRlcmVkLFxuICAgICAgICAgICAgICAgIGludGVncml0eTpcbiAgICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgICAgICAgIG5vbmNlOlxuICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgbnVsbCA9PSBvcHRpb25zICYmIEludGVybmFscy5kLk0oaHJlZik7XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWxvYWQgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIGVuY291bnRlcmVkID0gXCJcIjtcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB8fFxuICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKSArXG4gICAgICAgICAgXCIuXCIpO1xuICAgICAgbnVsbCA9PSBvcHRpb25zIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgID8gKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYG9wdGlvbnNgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICtcbiAgICAgICAgICAgIFwiLlwiKVxuICAgICAgICA6IChcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hcyAmJiBvcHRpb25zLmFzKSB8fFxuICAgICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBhc2Agb3B0aW9uIGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMuYXMpICtcbiAgICAgICAgICAgIFwiLlwiKTtcbiAgICAgIGVuY291bnRlcmVkICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1JlYWN0RE9NLnByZWxvYWQoKTogRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cywgYSBub24tZW1wdHkgYGhyZWZgIHN0cmluZyBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdCB3aXRoIGFuIGBhc2AgcHJvcGVydHkgdmFsaWQgZm9yIGEgYDxsaW5rIHJlbD1cInByZWxvYWRcIiBhcz1cIi4uLlwiIC8+YCB0YWcuJXMnLFxuICAgICAgICAgIGVuY291bnRlcmVkXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmXG4gICAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXNcbiAgICAgICkge1xuICAgICAgICBlbmNvdW50ZXJlZCA9IG9wdGlvbnMuYXM7XG4gICAgICAgIHZhciBjcm9zc09yaWdpbiA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoXG4gICAgICAgICAgZW5jb3VudGVyZWQsXG4gICAgICAgICAgb3B0aW9ucy5jcm9zc09yaWdpblxuICAgICAgICApO1xuICAgICAgICBJbnRlcm5hbHMuZC5MKGhyZWYsIGVuY291bnRlcmVkLCB7XG4gICAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICAgIGludGVncml0eTpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmludGVncml0eSA/IG9wdGlvbnMuaW50ZWdyaXR5IDogdm9pZCAwLFxuICAgICAgICAgIG5vbmNlOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5ub25jZSA/IG9wdGlvbnMubm9uY2UgOiB2b2lkIDAsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMudHlwZSA/IG9wdGlvbnMudHlwZSA6IHZvaWQgMCxcbiAgICAgICAgICBmZXRjaFByaW9yaXR5OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuZmV0Y2hQcmlvcml0eVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmV0Y2hQcmlvcml0eVxuICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICByZWZlcnJlclBvbGljeTpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLnJlZmVycmVyUG9saWN5XG4gICAgICAgICAgICAgID8gb3B0aW9ucy5yZWZlcnJlclBvbGljeVxuICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICBpbWFnZVNyY1NldDpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgID8gb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICBpbWFnZVNpemVzOlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VTaXplc1xuICAgICAgICAgICAgICA/IG9wdGlvbnMuaW1hZ2VTaXplc1xuICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICBtZWRpYTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubWVkaWEgPyBvcHRpb25zLm1lZGlhIDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5wcmVsb2FkTW9kdWxlID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBlbmNvdW50ZXJlZCA9IFwiXCI7XG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZikgfHxcbiAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgXCIgVGhlIGBocmVmYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikgK1xuICAgICAgICAgIFwiLlwiKTtcbiAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucyAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICA/IChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBvcHRpb25zYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zKSArXG4gICAgICAgICAgICBcIi5cIilcbiAgICAgICAgOiBvcHRpb25zICYmXG4gICAgICAgICAgXCJhc1wiIGluIG9wdGlvbnMgJiZcbiAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2Ygb3B0aW9ucy5hcyAmJlxuICAgICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBhc2Agb3B0aW9uIGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMuYXMpICtcbiAgICAgICAgICAgIFwiLlwiKTtcbiAgICAgIGVuY291bnRlcmVkICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1JlYWN0RE9NLnByZWxvYWRNb2R1bGUoKTogRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cywgYSBub24tZW1wdHkgYGhyZWZgIHN0cmluZyBhbmQsIG9wdGlvbmFsbHksIGFuIGBvcHRpb25zYCBvYmplY3Qgd2l0aCBhbiBgYXNgIHByb3BlcnR5IHZhbGlkIGZvciBhIGA8bGluayByZWw9XCJtb2R1bGVwcmVsb2FkXCIgYXM9XCIuLi5cIiAvPmAgdGFnLiVzJyxcbiAgICAgICAgICBlbmNvdW50ZXJlZFxuICAgICAgICApO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgKG9wdGlvbnNcbiAgICAgICAgICA/ICgoZW5jb3VudGVyZWQgPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKFxuICAgICAgICAgICAgICBvcHRpb25zLmFzLFxuICAgICAgICAgICAgICBvcHRpb25zLmNyb3NzT3JpZ2luXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIEludGVybmFscy5kLm0oaHJlZiwge1xuICAgICAgICAgICAgICBhczpcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hcyAmJiBcInNjcmlwdFwiICE9PSBvcHRpb25zLmFzXG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuYXNcbiAgICAgICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgICAgICBjcm9zc09yaWdpbjogZW5jb3VudGVyZWQsXG4gICAgICAgICAgICAgIGludGVncml0eTpcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHlcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5pbnRlZ3JpdHlcbiAgICAgICAgICAgICAgICAgIDogdm9pZCAwXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IEludGVybmFscy5kLm0oaHJlZikpO1xuICAgIH07XG4gICAgZXhwb3J0cy5yZXF1ZXN0Rm9ybVJlc2V0ID0gZnVuY3Rpb24gKGZvcm0pIHtcbiAgICAgIEludGVybmFscy5kLnIoZm9ybSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gZnVuY3Rpb24gKGZuLCBhKSB7XG4gICAgICByZXR1cm4gZm4oYSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VGb3JtU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluayk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUZvcm1TdGF0dXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VIb3N0VHJhbnNpdGlvblN0YXR1cygpO1xuICAgIH07XG4gICAgZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4wLjBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react-dom/client.js":
|
||
/*!******************************************!*\
|
||
!*** ./node_modules/react-dom/client.js ***!
|
||
\******************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom-client.development.js */ \"./node_modules/react-dom/cjs/react-dom-client.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLEtBQXFDLEVBQUUsRUFLMUMsQ0FBQztBQUNGLEVBQUUsaUpBQWlFO0FBQ25FIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2xpZW50LmpzP2FmODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react-dom/client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react-dom/index.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/react-dom/index.js ***!
|
||
\*****************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"./node_modules/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSxtSUFBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcz83NzIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react-dom/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react/cjs/react-jsx-runtime.development.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***!
|
||
\*****************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE$2\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeUnknownElementTypeFrameInDEV(type) {\n if (null == type) return \"\";\n if (\"function\" === typeof type) {\n var prototype = type.prototype;\n return describeNativeComponentFrame(\n type,\n !(!prototype || !prototype.isReactComponent)\n );\n }\n if (\"string\" === typeof type) return describeBuiltInComponentFrame(type);\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame(\"Suspense\");\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return (type = describeNativeComponentFrame(type.render, !1)), type;\n case REACT_MEMO_TYPE:\n return describeUnknownElementTypeFrameInDEV(type.type);\n case REACT_LAZY_TYPE:\n prototype = type._payload;\n type = type._init;\n try {\n return describeUnknownElementTypeFrameInDEV(type(prototype));\n } catch (x) {}\n }\n return \"\";\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, self, source, owner, props) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self\n ) {\n if (\n \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE$1 ||\n void 0 !== type.getModuleId))\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren], type);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children, type);\n } else {\n children = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n children +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n null === type\n ? (isStaticChildren = \"null\")\n : isArrayImpl(type)\n ? (isStaticChildren = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((isStaticChildren =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (children =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (isStaticChildren = typeof type);\n console.error(\n \"React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\",\n isStaticChildren,\n children\n );\n }\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(type, children, self, source, getOwner(), maybeKey);\n }\n function validateChildKeys(node, parentType) {\n if (\n \"object\" === typeof node &&\n node &&\n node.$$typeof !== REACT_CLIENT_REFERENCE\n )\n if (isArrayImpl(node))\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n isValidElement(child) && validateExplicitKey(child, parentType);\n }\n else if (isValidElement(node))\n node._store && (node._store.validated = 1);\n else if (\n (null === node || \"object\" !== typeof node\n ? (i = null)\n : ((i =\n (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||\n node[\"@@iterator\"]),\n (i = \"function\" === typeof i ? i : null)),\n \"function\" === typeof i &&\n i !== node.entries &&\n ((i = i.call(node)), i !== node))\n )\n for (; !(node = i.next()).done; )\n isValidElement(node.value) &&\n validateExplicitKey(node.value, parentType);\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function validateExplicitKey(element, parentType) {\n if (\n element._store &&\n !element._store.validated &&\n null == element.key &&\n ((element._store.validated = 1),\n (parentType = getCurrentComponentErrorInfo(parentType)),\n !ownerHasKeyUseWarning[parentType])\n ) {\n ownerHasKeyUseWarning[parentType] = !0;\n var childOwner = \"\";\n element &&\n null != element._owner &&\n element._owner !== getOwner() &&\n ((childOwner = null),\n \"number\" === typeof element._owner.tag\n ? (childOwner = getComponentNameFromType(element._owner.type))\n : \"string\" === typeof element._owner.name &&\n (childOwner = element._owner.name),\n (childOwner = \" It was passed a child from \" + childOwner + \".\"));\n var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = function () {\n var stack = describeUnknownElementTypeFrameInDEV(element.type);\n prevGetCurrentStack && (stack += prevGetCurrentStack() || \"\");\n return stack;\n };\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n parentType,\n childOwner\n );\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function getCurrentComponentErrorInfo(parentType) {\n var info = \"\",\n owner = getOwner();\n owner &&\n (owner = getComponentNameFromType(owner.type)) &&\n (info = \"\\n\\nCheck the render method of `\" + owner + \"`.\");\n info ||\n ((parentType = getComponentNameFromType(parentType)) &&\n (info =\n \"\\n\\nCheck the top-level render call using <\" + parentType + \">.\"));\n return info;\n }\n var React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n REACT_CLIENT_REFERENCE$2 = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n assign = Object.assign,\n REACT_CLIENT_REFERENCE$1 = Symbol.for(\"react.client.reference\"),\n isArrayImpl = Array.isArray,\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var didWarnAboutKeySpread = {},\n ownerHasKeyUseWarning = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n return jsxDEVImpl(type, config, maybeKey, !1, source, self);\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n return jsxDEVImpl(type, config, maybeKey, !0, source, self);\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0Esd0JBQXdCLFdBQVcsZ0JBQWdCO0FBQ25ELHlCQUF5QixXQUFXLGlCQUFpQjtBQUNyRCx5QkFBeUIsV0FBVyxpQkFBaUI7QUFDckQsMEJBQTBCLFdBQVcsa0JBQWtCO0FBQ3ZELDBCQUEwQixXQUFXLGtCQUFrQjtBQUN2RCxtQ0FBbUMsV0FBVywyQkFBMkI7QUFDekUsNkJBQTZCLFdBQVcscUJBQXFCO0FBQzdELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCwrQ0FBK0MsNkJBQTZCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdCQUFnQixnREFBZ0Q7QUFDaEUsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBLGdDQUFnQyxrQ0FBa0MsT0FBTztBQUN6RTtBQUNBLGdHQUFnRyxTQUFTLFVBQVUsc0ZBQXNGLGFBQWEsVUFBVSxVQUFVO0FBQzFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGlCQUFpQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix5QkFBeUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLDRDQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxXQUFXO0FBQ2Y7QUFDQTtBQUNBLElBQUksWUFBWTtBQUNoQjtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzPzJmYzAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDJcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBjb25zb2xlO1xuICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmVycm9yO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID1cbiAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgICBTeW1ib2wudG9TdHJpbmdUYWcgJiZcbiAgICAgICAgICAgIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIFwiT2JqZWN0XCI7XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdC5jYWxsKFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCxcbiAgICAgICAgICBcIlRoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG4gICAgZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDtcbiAgICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICAgIHdyaXRhYmxlOiAhMFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkaXNhYmxlZERlcHRoKys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAgICAgIGRpc2FibGVkRGVwdGgtLTtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHsgY29uZmlndXJhYmxlOiAhMCwgZW51bWVyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2TG9nIH0pLFxuICAgICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZJbmZvIH0pLFxuICAgICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZXYXJuIH0pLFxuICAgICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2RXJyb3IgfSksXG4gICAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cCB9KSxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkIH0pLFxuICAgICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBFbmQgfSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAwID4gZGlzYWJsZWREZXB0aCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIHtcbiAgICAgIGlmICh2b2lkIDAgPT09IHByZWZpeClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgICBwcmVmaXggPSAobWF0Y2ggJiYgbWF0Y2hbMV0pIHx8IFwiXCI7XG4gICAgICAgICAgc3VmZml4ID1cbiAgICAgICAgICAgIC0xIDwgeC5zdGFjay5pbmRleE9mKFwiXFxuICAgIGF0XCIpXG4gICAgICAgICAgICAgID8gXCIgKDxhbm9ueW1vdXM+KVwiXG4gICAgICAgICAgICAgIDogLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJAXCIpXG4gICAgICAgICAgICAgICAgPyBcIkB1bmtub3duOjA6MFwiXG4gICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICB9XG4gICAgICByZXR1cm4gXCJcXG5cIiArIHByZWZpeCArIG5hbWUgKyBzdWZmaXg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAgICAgaWYgKCFmbiB8fCByZWVudHJ5KSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcbiAgICAgIGlmICh2b2lkIDAgIT09IGZyYW1lKSByZXR1cm4gZnJhbWU7XG4gICAgICByZWVudHJ5ID0gITA7XG4gICAgICBmcmFtZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyID0gbnVsbDtcbiAgICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gbnVsbDtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgICAgICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCBcInByb3BzXCIsIHtcbiAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgUmVmbGVjdCAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbCA9IHg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgkMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sID0geCQwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgkMSkge1xuICAgICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKEZha2UgPSBmbigpKSAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgRmFrZS5jYXRjaCAmJlxuICAgICAgICAgICAgICAgICAgRmFrZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgICAgICAgICAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHNhbXBsZS5zdGFjaylcbiAgICAgICAgICAgICAgICByZXR1cm4gW3NhbXBsZS5zdGFjaywgY29udHJvbC5zdGFja107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LmRpc3BsYXlOYW1lID1cbiAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiO1xuICAgICAgICB2YXIgbmFtZVByb3BEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgICAgXCJuYW1lXCJcbiAgICAgICAgKTtcbiAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yICYmXG4gICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAmJlxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgeyB2YWx1ZTogXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIiB9XG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIF9SdW5JblJvb3RGcmFtZSREZXRlciA9XG4gICAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgICBzYW1wbGVTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclswXSxcbiAgICAgICAgICBjb250cm9sU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMV07XG4gICAgICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGVTdGFjay5zcGxpdChcIlxcblwiKSxcbiAgICAgICAgICAgIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2xTdGFjay5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID0gbmFtZVByb3BEZXNjcmlwdG9yID0gMDtcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgIXNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IrKztcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyIDwgY29udHJvbExpbmVzLmxlbmd0aCAmJlxuICAgICAgICAgICAgIWNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyKys7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID09PSBzYW1wbGVMaW5lcy5sZW5ndGggfHxcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9PT0gY29udHJvbExpbmVzLmxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmXG4gICAgICAgICAgICAgIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyICYmXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl07XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyLS07XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yLS0sIF9SdW5JblJvb3RGcmFtZSREZXRlci0tXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICgxICE9PSBuYW1lUHJvcERlc2NyaXB0b3IgfHwgMSAhPT0gX1J1bkluUm9vdEZyYW1lJERldGVyKSB7XG4gICAgICAgICAgICAgICAgZG9cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKG5hbWVQcm9wRGVzY3JpcHRvci0tLFxuICAgICAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLSxcbiAgICAgICAgICAgICAgICAgICAgMCA+IF9SdW5JblJvb3RGcmFtZSREZXRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXSlcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBhdCBuZXcgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBhdCBcIlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGZuLmRpc3BsYXlOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgX2ZyYW1lLmluY2x1ZGVzKFwiPGFub255bW91cz5cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoXCI8YW5vbnltb3VzPlwiLCBmbi5kaXNwbGF5TmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmbiAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlICgxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJiAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChyZWVudHJ5ID0gITEpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldmlvdXNEaXNwYXRjaGVyKSxcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKSxcbiAgICAgICAgICAoRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBmcmFtZSk7XG4gICAgICB9XG4gICAgICBzYW1wbGVMaW5lcyA9IChzYW1wbGVMaW5lcyA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6IFwiXCIpXG4gICAgICAgID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoc2FtcGxlTGluZXMpXG4gICAgICAgIDogXCJcIjtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzYW1wbGVMaW5lcyk7XG4gICAgICByZXR1cm4gc2FtcGxlTGluZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gXCJcIjtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKSB7XG4gICAgICAgIHZhciBwcm90b3R5cGUgPSB0eXBlLnByb3RvdHlwZTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICAhKCFwcm90b3R5cGUgfHwgIXByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIpO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZUxpc3RcIik7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZSA9IGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIsICExKSksIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBwcm90b3R5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUocHJvdG90eXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3duZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkE7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gZGlzcGF0Y2hlciA/IG51bGwgOiBkaXNwYXRjaGVyLmdldE93bmVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsIFwia2V5XCIpLmdldDtcbiAgICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICAgICAgZnVuY3Rpb24gd2FybkFib3V0QWNjZXNzaW5nS2V5KCkge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biB8fFxuICAgICAgICAgICgoc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSAhMCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50IHByb3AuIChodHRwczovL3JlYWN0LmRldi9saW5rL3NwZWNpYWwtcHJvcHMpXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gITA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsIFwia2V5XCIsIHtcbiAgICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHRoaXMudHlwZSk7XG4gICAgICBkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICgoZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFjY2Vzc2luZyBlbGVtZW50LnJlZiB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gcmVmIGlzIG5vdyBhIHJlZ3VsYXIgcHJvcC4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEpTWCBFbGVtZW50IHR5cGUgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgICAgICApKTtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSB0aGlzLnByb3BzLnJlZjtcbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbXBvbmVudE5hbWUgPyBjb21wb25lbnROYW1lIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgICAgIHNlbGYgPSBwcm9wcy5yZWY7XG4gICAgICB0eXBlID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICBfb3duZXI6IG93bmVyXG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gKHZvaWQgMCAhPT0gc2VsZiA/IHNlbGYgOiBudWxsKVxuICAgICAgICA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgIGdldDogZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICB9KVxuICAgICAgICA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7IGVudW1lcmFibGU6ICExLCB2YWx1ZTogbnVsbCB9KTtcbiAgICAgIHR5cGUuX3N0b3JlID0ge307XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZS5fc3RvcmUsIFwidmFsaWRhdGVkXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IDBcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5mcmVlemUgJiYgKE9iamVjdC5mcmVlemUodHlwZS5wcm9wcyksIE9iamVjdC5mcmVlemUodHlwZSkpO1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGpzeERFVkltcGwoXG4gICAgICB0eXBlLFxuICAgICAgY29uZmlnLFxuICAgICAgbWF5YmVLZXksXG4gICAgICBpc1N0YXRpY0NoaWxkcmVuLFxuICAgICAgc291cmNlLFxuICAgICAgc2VsZlxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxIHx8XG4gICAgICAgICAgICB2b2lkIDAgIT09IHR5cGUuZ2V0TW9kdWxlSWQpKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcbiAgICAgICAgaWYgKHZvaWQgMCAhPT0gY2hpbGRyZW4pXG4gICAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pXG4gICAgICAgICAgICBpZiAoaXNBcnJheUltcGwoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9IDA7XG4gICAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA8IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2lzU3RhdGljQ2hpbGRyZW5dLCB0eXBlKTtcbiAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSAmJiBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiBVc2UgdGhlIEJhYmVsIHRyYW5zZm9ybSBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgZWxzZSB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbiwgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbiA9IFwiXCI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2b2lkIDAgPT09IHR5cGUgfHxcbiAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAgIDAgPT09IE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aClcbiAgICAgICAgKVxuICAgICAgICAgIGNoaWxkcmVuICs9XG4gICAgICAgICAgICBcIiBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICAgIG51bGwgPT09IHR5cGVcbiAgICAgICAgICA/IChpc1N0YXRpY0NoaWxkcmVuID0gXCJudWxsXCIpXG4gICAgICAgICAgOiBpc0FycmF5SW1wbCh0eXBlKVxuICAgICAgICAgICAgPyAoaXNTdGF0aWNDaGlsZHJlbiA9IFwiYXJyYXlcIilcbiAgICAgICAgICAgIDogdm9pZCAwICE9PSB0eXBlICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgICAgICAgICA/ICgoaXNTdGF0aWNDaGlsZHJlbiA9XG4gICAgICAgICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICAgICAgICAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJVbmtub3duXCIpICtcbiAgICAgICAgICAgICAgICAgIFwiIC8+XCIpLFxuICAgICAgICAgICAgICAgIChjaGlsZHJlbiA9XG4gICAgICAgICAgICAgICAgICBcIiBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50P1wiKSlcbiAgICAgICAgICAgICAgOiAoaXNTdGF0aWNDaGlsZHJlbiA9IHR5cGVvZiB0eXBlKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiAlcy4lc1wiLFxuICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJrZXlcIikpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXlcIiAhPT0gaztcbiAgICAgICAgfSk7XG4gICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPVxuICAgICAgICAgIDAgPCBrZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBcIntrZXk6IHNvbWVLZXksIFwiICsga2V5cy5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCJcbiAgICAgICAgICAgIDogXCJ7a2V5OiBzb21lS2V5fVwiO1xuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY2hpbGRyZW4gKyBpc1N0YXRpY0NoaWxkcmVuXSB8fFxuICAgICAgICAgICgoa2V5cyA9XG4gICAgICAgICAgICAwIDwga2V5cy5sZW5ndGggPyBcIntcIiArIGtleXMuam9pbihcIjogLi4uLCBcIikgKyBcIjogLi4ufVwiIDogXCJ7fVwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0EgcHJvcHMgb2JqZWN0IGNvbnRhaW5pbmcgYSBcImtleVwiIHByb3AgaXMgYmVpbmcgc3ByZWFkIGludG8gSlNYOlxcbiAgbGV0IHByb3BzID0gJXM7XFxuICA8JXMgey4uLnByb3BzfSAvPlxcblJlYWN0IGtleXMgbXVzdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gSlNYIHdpdGhvdXQgdXNpbmcgc3ByZWFkOlxcbiAgbGV0IHByb3BzID0gJXM7XFxuICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JyxcbiAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEtleVNwcmVhZFtjaGlsZHJlbiArIGlzU3RhdGljQ2hpbGRyZW5dID0gITApKTtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZvaWQgMCAhPT0gbWF5YmVLZXkgJiZcbiAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpLCAoY2hpbGRyZW4gPSBcIlwiICsgbWF5YmVLZXkpKTtcbiAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChjaGlsZHJlbiA9IFwiXCIgKyBjb25maWcua2V5KSk7XG4gICAgICBpZiAoXCJrZXlcIiBpbiBjb25maWcpIHtcbiAgICAgICAgbWF5YmVLZXkgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gY29uZmlnKVxuICAgICAgICAgIFwia2V5XCIgIT09IHByb3BOYW1lICYmIChtYXliZUtleVtwcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdKTtcbiAgICAgIH0gZWxzZSBtYXliZUtleSA9IGNvbmZpZztcbiAgICAgIGNoaWxkcmVuICYmXG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKFxuICAgICAgICAgIG1heWJlS2V5LFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICAgICAgID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICAgIDogdHlwZVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBjaGlsZHJlbiwgc2VsZiwgc291cmNlLCBnZXRPd25lcigpLCBtYXliZUtleSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5vZGUgJiZcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICBub2RlLiQkdHlwZW9mICE9PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICApXG4gICAgICAgIGlmIChpc0FycmF5SW1wbChub2RlKSlcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG4gICAgICAgICAgICBpc1ZhbGlkRWxlbWVudChjaGlsZCkgJiYgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSlcbiAgICAgICAgICBub2RlLl9zdG9yZSAmJiAobm9kZS5fc3RvcmUudmFsaWRhdGVkID0gMSk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIChudWxsID09PSBub2RlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBub2RlXG4gICAgICAgICAgICA/IChpID0gbnVsbClcbiAgICAgICAgICAgIDogKChpID1cbiAgICAgICAgICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG5vZGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgICAgICAgICBub2RlW1wiQEBpdGVyYXRvclwiXSksXG4gICAgICAgICAgICAgIChpID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSA/IGkgOiBudWxsKSksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSAmJlxuICAgICAgICAgICAgaSAhPT0gbm9kZS5lbnRyaWVzICYmXG4gICAgICAgICAgICAoKGkgPSBpLmNhbGwobm9kZSkpLCBpICE9PSBub2RlKSlcbiAgICAgICAgKVxuICAgICAgICAgIGZvciAoOyAhKG5vZGUgPSBpLm5leHQoKSkuZG9uZTsgKVxuICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQobm9kZS52YWx1ZSkgJiZcbiAgICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShub2RlLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ICYmXG4gICAgICAgIG51bGwgIT09IG9iamVjdCAmJlxuICAgICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGVsZW1lbnQuX3N0b3JlICYmXG4gICAgICAgICFlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgJiZcbiAgICAgICAgbnVsbCA9PSBlbGVtZW50LmtleSAmJlxuICAgICAgICAoKGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IDEpLFxuICAgICAgICAocGFyZW50VHlwZSA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkpLFxuICAgICAgICAhb3duZXJIYXNLZXlVc2VXYXJuaW5nW3BhcmVudFR5cGVdKVxuICAgICAgKSB7XG4gICAgICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1twYXJlbnRUeXBlXSA9ICEwO1xuICAgICAgICB2YXIgY2hpbGRPd25lciA9IFwiXCI7XG4gICAgICAgIGVsZW1lbnQgJiZcbiAgICAgICAgICBudWxsICE9IGVsZW1lbnQuX293bmVyICYmXG4gICAgICAgICAgZWxlbWVudC5fb3duZXIgIT09IGdldE93bmVyKCkgJiZcbiAgICAgICAgICAoKGNoaWxkT3duZXIgPSBudWxsKSxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgZWxlbWVudC5fb3duZXIudGFnXG4gICAgICAgICAgICA/IChjaGlsZE93bmVyID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGVsZW1lbnQuX293bmVyLnR5cGUpKVxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2YgZWxlbWVudC5fb3duZXIubmFtZSAmJlxuICAgICAgICAgICAgICAoY2hpbGRPd25lciA9IGVsZW1lbnQuX293bmVyLm5hbWUpLFxuICAgICAgICAgIChjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBjaGlsZE93bmVyICsgXCIuXCIpKTtcbiAgICAgICAgdmFyIHByZXZHZXRDdXJyZW50U3RhY2sgPSBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2s7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlKTtcbiAgICAgICAgICBwcmV2R2V0Q3VycmVudFN0YWNrICYmIChzdGFjayArPSBwcmV2R2V0Q3VycmVudFN0YWNrKCkgfHwgXCJcIik7XG4gICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9O1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyxcbiAgICAgICAgICBwYXJlbnRUeXBlLFxuICAgICAgICAgIGNoaWxkT3duZXJcbiAgICAgICAgKTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gcHJldkdldEN1cnJlbnRTdGFjaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gICAgICB2YXIgaW5mbyA9IFwiXCIsXG4gICAgICAgIG93bmVyID0gZ2V0T3duZXIoKTtcbiAgICAgIG93bmVyICYmXG4gICAgICAgIChvd25lciA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShvd25lci50eXBlKSkgJiZcbiAgICAgICAgKGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIG93bmVyICsgXCJgLlwiKTtcbiAgICAgIGluZm8gfHxcbiAgICAgICAgKChwYXJlbnRUeXBlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHBhcmVudFR5cGUpKSAmJlxuICAgICAgICAgIChpbmZvID1cbiAgICAgICAgICAgIFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnRUeXBlICsgXCI+LlwiKSk7XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgdmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTtcbiAgICB2YXIgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIiksXG4gICAgICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgZGlzYWJsZWREZXB0aCA9IDAsXG4gICAgICBwcmV2TG9nLFxuICAgICAgcHJldkluZm8sXG4gICAgICBwcmV2V2FybixcbiAgICAgIHByZXZFcnJvcixcbiAgICAgIHByZXZHcm91cCxcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCxcbiAgICAgIHByZXZHcm91cEVuZDtcbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICB2YXIgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgcmVlbnRyeSA9ICExO1xuICAgIHZhciBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IChcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwXG4gICAgKSgpO1xuICAgIHZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbiAgICB2YXIgZGlkV2FybkFib3V0RWxlbWVudFJlZiA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fSxcbiAgICAgIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICAgIGV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuICAgIGV4cG9ydHMuanN4ID0gZnVuY3Rpb24gKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICAgICAgcmV0dXJuIGpzeERFVkltcGwodHlwZSwgY29uZmlnLCBtYXliZUtleSwgITEsIHNvdXJjZSwgc2VsZik7XG4gICAgfTtcbiAgICBleHBvcnRzLmpzeHMgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gICAgICByZXR1cm4ganN4REVWSW1wbCh0eXBlLCBjb25maWcsIG1heWJlS2V5LCAhMCwgc291cmNlLCBzZWxmKTtcbiAgICB9O1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/cjs/react-jsx-runtime.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react/cjs/react.development.js":
|
||
/*!*****************************************************!*\
|
||
!*** ./node_modules/react/cjs/react.development.js ***!
|
||
\*****************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"./node_modules/next/dist/build/polyfills/process.js\");\n/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE$2\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function isValidElementType(type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n type === REACT_OFFSCREEN_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE$1 ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeUnknownElementTypeFrameInDEV(type) {\n if (null == type) return \"\";\n if (\"function\" === typeof type) {\n var prototype = type.prototype;\n return describeNativeComponentFrame(\n type,\n !(!prototype || !prototype.isReactComponent)\n );\n }\n if (\"string\" === typeof type) return describeBuiltInComponentFrame(type);\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame(\"Suspense\");\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return (type = describeNativeComponentFrame(type.render, !1)), type;\n case REACT_MEMO_TYPE:\n return describeUnknownElementTypeFrameInDEV(type.type);\n case REACT_LAZY_TYPE:\n prototype = type._payload;\n type = type._init;\n try {\n return describeUnknownElementTypeFrameInDEV(type(prototype));\n } catch (x) {}\n }\n return \"\";\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, self, source, owner, props) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props\n );\n newKey._store.validated = oldElement._store.validated;\n return newKey;\n }\n function validateChildKeys(node, parentType) {\n if (\n \"object\" === typeof node &&\n node &&\n node.$$typeof !== REACT_CLIENT_REFERENCE\n )\n if (isArrayImpl(node))\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n isValidElement(child) && validateExplicitKey(child, parentType);\n }\n else if (isValidElement(node))\n node._store && (node._store.validated = 1);\n else if (\n ((i = getIteratorFn(node)),\n \"function\" === typeof i &&\n i !== node.entries &&\n ((i = i.call(node)), i !== node))\n )\n for (; !(node = i.next()).done; )\n isValidElement(node.value) &&\n validateExplicitKey(node.value, parentType);\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function validateExplicitKey(element, parentType) {\n if (\n element._store &&\n !element._store.validated &&\n null == element.key &&\n ((element._store.validated = 1),\n (parentType = getCurrentComponentErrorInfo(parentType)),\n !ownerHasKeyUseWarning[parentType])\n ) {\n ownerHasKeyUseWarning[parentType] = !0;\n var childOwner = \"\";\n element &&\n null != element._owner &&\n element._owner !== getOwner() &&\n ((childOwner = null),\n \"number\" === typeof element._owner.tag\n ? (childOwner = getComponentNameFromType(element._owner.type))\n : \"string\" === typeof element._owner.name &&\n (childOwner = element._owner.name),\n (childOwner = \" It was passed a child from \" + childOwner + \".\"));\n var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = function () {\n var stack = describeUnknownElementTypeFrameInDEV(element.type);\n prevGetCurrentStack && (stack += prevGetCurrentStack() || \"\");\n return stack;\n };\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n parentType,\n childOwner\n );\n ReactSharedInternals.getCurrentStack = prevGetCurrentStack;\n }\n }\n function getCurrentComponentErrorInfo(parentType) {\n var info = \"\",\n owner = getOwner();\n owner &&\n (owner = getComponentNameFromType(owner.type)) &&\n (info = \"\\n\\nCheck the render method of `\" + owner + \"`.\");\n info ||\n ((parentType = getComponentNameFromType(parentType)) &&\n (info =\n \"\\n\\nCheck the top-level render call using <\" + parentType + \">.\"));\n return info;\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function noop$1() {}\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function noop() {}\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE$2 = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n actQueue: null,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n REACT_CLIENT_REFERENCE$1 = Symbol.for(\"react.client.reference\"),\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n specialPropKeyWarningShown,\n didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var ownerHasKeyUseWarning = {},\n didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$2) {\n ReactSharedInternals.thrownErrors.push(error$2);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(element.type, key, void 0, void 0, owner, props);\n for (key = 2; key < arguments.length; key++)\n validateChildKeys(arguments[key], props.type);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n if (isValidElementType(type))\n for (var i = 2; i < arguments.length; i++)\n validateChildKeys(arguments[i], type);\n else {\n i = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n i +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n if (null === type) var typeString = \"null\";\n else\n isArrayImpl(type)\n ? (typeString = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((typeString =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (i =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (typeString = typeof type);\n console.error(\n \"React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\",\n typeString,\n i\n );\n }\n var propName;\n i = {};\n typeString = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (typeString = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n typeString &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(type, typeString, void 0, void 0, getOwner(), i);\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n isValidElementType(type) ||\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, deps) {\n return resolveDispatcher().useEffect(create, deps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.0.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9NQUFvTTtBQUNwTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSx3QkFBd0IsV0FBVyxnQkFBZ0I7QUFDbkQseUJBQXlCLFdBQVcsaUJBQWlCO0FBQ3JELHlCQUF5QixXQUFXLGlCQUFpQjtBQUNyRCwwQkFBMEIsV0FBVyxrQkFBa0I7QUFDdkQsMEJBQTBCLFdBQVcsa0JBQWtCO0FBQ3ZELG1DQUFtQyxXQUFXLDJCQUEyQjtBQUN6RSw2QkFBNkIsV0FBVyxxQkFBcUI7QUFDN0QsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLCtDQUErQyw2QkFBNkI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsaUJBQWlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIseUJBQXlCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx5Q0FBeUM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FB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YWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcz8xYjdlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIiVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzXCIsXG4gICAgICAgICAgICBpbmZvWzBdLFxuICAgICAgICAgICAgaW5mb1sxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIG1heWJlSXRlcmFibGUgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSA/IG1heWJlSXRlcmFibGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICAgICAgcHVibGljSW5zdGFuY2UgPVxuICAgICAgICAoKHB1YmxpY0luc3RhbmNlID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3IpICYmXG4gICAgICAgICAgKHB1YmxpY0luc3RhbmNlLmRpc3BsYXlOYW1lIHx8IHB1YmxpY0luc3RhbmNlLm5hbWUpKSB8fFxuICAgICAgICBcIlJlYWN0Q2xhc3NcIjtcbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gcHVibGljSW5zdGFuY2UgKyBcIi5cIiArIGNhbGxlck5hbWU7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LlwiLFxuICAgICAgICAgIGNhbGxlck5hbWUsXG4gICAgICAgICAgcHVibGljSW5zdGFuY2VcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9ICEwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuICAgIGZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDJcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxIHx8XG4gICAgICAgICAgICB2b2lkIDAgIT09IHR5cGUuZ2V0TW9kdWxlSWQpKVxuICAgICAgICA/ICEwXG4gICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cbiAgICBmdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kO1xuICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgICAgd3JpdGFibGU6ICEwXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRpc2FibGVkRGVwdGgrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICAgICAgZGlzYWJsZWREZXB0aC0tO1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgdmFyIHByb3BzID0geyBjb25maWd1cmFibGU6ICEwLCBlbnVtZXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZMb2cgfSksXG4gICAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkluZm8gfSksXG4gICAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldldhcm4gfSksXG4gICAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZFcnJvciB9KSxcbiAgICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwIH0pLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWQgfSksXG4gICAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cEVuZCB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIDAgPiBkaXNhYmxlZERlcHRoICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gcHJlZml4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICAgIHByZWZpeCA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgXCJcIjtcbiAgICAgICAgICBzdWZmaXggPVxuICAgICAgICAgICAgLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIilcbiAgICAgICAgICAgICAgPyBcIiAoPGFub255bW91cz4pXCJcbiAgICAgICAgICAgICAgOiAtMSA8IHguc3RhY2suaW5kZXhPZihcIkBcIilcbiAgICAgICAgICAgICAgICA/IFwiQHVua25vd246MDowXCJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlxcblwiICsgcHJlZml4ICsgbmFtZSArIHN1ZmZpeDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gICAgICBpZiAoIWZuIHx8IHJlZW50cnkpIHJldHVybiBcIlwiO1xuICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gZnJhbWUpIHJldHVybiBmcmFtZTtcbiAgICAgIHJlZW50cnkgPSAhMDtcbiAgICAgIGZyYW1lID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcmV2aW91c0Rpc3BhdGNoZXIgPSBudWxsO1xuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBudWxsO1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcbiAgICAgICAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sID0geDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQxKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sID0geCQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoRmFrZSA9IGZuKCkpICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGYWtlLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgICBGYWtlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgICAgICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2FtcGxlLnN0YWNrKVxuICAgICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlLnN0YWNrLCBjb250cm9sLnN0YWNrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPVxuICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCI7XG4gICAgICAgIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICApO1xuICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgICB7IHZhbHVlOiBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiIH1cbiAgICAgICAgICApO1xuICAgICAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID1cbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgICAgIHNhbXBsZVN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzBdLFxuICAgICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcbiAgICAgICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuICAgICAgICAgICAgY29udHJvbExpbmVzID0gY29udHJvbFN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBuYW1lUHJvcERlc2NyaXB0b3IgPSAwO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yIDwgc2FtcGxlTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvcisrO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPCBjb250cm9sTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIrKztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID09PSBjb250cm9sTGluZXMubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgJiZcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXTtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXI7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3ItLSwgX1J1bkluUm9vdEZyYW1lJERldGVyLS1cbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKDEgIT09IG5hbWVQcm9wRGVzY3JpcHRvciB8fCAxICE9PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpIHtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAobmFtZVByb3BEZXNjcmlwdG9yLS0sXG4gICAgICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tLFxuICAgICAgICAgICAgICAgICAgICAwID4gX1J1bkluUm9vdEZyYW1lJERldGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0ucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IG5ldyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IFwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm4uZGlzcGxheU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfZnJhbWUuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIChfZnJhbWUgPSBfZnJhbWUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsIGZuLmRpc3BsYXlOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKHJlZW50cnkgPSAhMSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2aW91c0Rpc3BhdGNoZXIpLFxuICAgICAgICAgIHJlZW5hYmxlTG9ncygpLFxuICAgICAgICAgIChFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZyYW1lKTtcbiAgICAgIH1cbiAgICAgIHNhbXBsZUxpbmVzID0gKHNhbXBsZUxpbmVzID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogXCJcIilcbiAgICAgICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShzYW1wbGVMaW5lcylcbiAgICAgICAgOiBcIlwiO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHNhbXBsZUxpbmVzKTtcbiAgICAgIHJldHVybiBzYW1wbGVMaW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpIHtcbiAgICAgICAgdmFyIHByb3RvdHlwZSA9IHR5cGUucHJvdG90eXBlO1xuICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgICEoIXByb3RvdHlwZSB8fCAhcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlID0gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLnJlbmRlciwgITEpKSwgdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIHByb3RvdHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZShwcm90b3R5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25lcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuQTtcbiAgICAgIHJldHVybiBudWxsID09PSBkaXNwYXRjaGVyID8gbnVsbCA6IGRpc3BhdGNoZXIuZ2V0T3duZXIoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgXCJrZXlcIikuZ2V0O1xuICAgICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29uZmlnLmtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gICAgICBmdW5jdGlvbiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkoKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duIHx8XG4gICAgICAgICAgKChzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9ICEwKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgcHJvcC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvc3BlY2lhbC1wcm9wcylcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSAhMDtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgXCJrZXlcIiwge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nKCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodGhpcy50eXBlKTtcbiAgICAgIGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgKChkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQWNjZXNzaW5nIGVsZW1lbnQucmVmIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiByZWYgaXMgbm93IGEgcmVndWxhciBwcm9wLiBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgSlNYIEVsZW1lbnQgdHlwZSBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiXG4gICAgICAgICkpO1xuICAgICAgY29tcG9uZW50TmFtZSA9IHRoaXMucHJvcHMucmVmO1xuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29tcG9uZW50TmFtZSA/IGNvbXBvbmVudE5hbWUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmZyZWV6ZSAmJiAoT2JqZWN0LmZyZWV6ZSh0eXBlLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh0eXBlKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICAgICAgbmV3S2V5ID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBvbGRFbGVtZW50LnR5cGUsXG4gICAgICAgIG5ld0tleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG9sZEVsZW1lbnQuX293bmVyLFxuICAgICAgICBvbGRFbGVtZW50LnByb3BzXG4gICAgICApO1xuICAgICAgbmV3S2V5Ll9zdG9yZS52YWxpZGF0ZWQgPSBvbGRFbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQ7XG4gICAgICByZXR1cm4gbmV3S2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBub2RlICYmXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobm9kZSkpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpXG4gICAgICAgICAgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKGkgPSBnZXRJdGVyYXRvckZuKG5vZGUpKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpICYmXG4gICAgICAgICAgICBpICE9PSBub2RlLmVudHJpZXMgJiZcbiAgICAgICAgICAgICgoaSA9IGkuY2FsbChub2RlKSksIGkgIT09IG5vZGUpKVxuICAgICAgICApXG4gICAgICAgICAgZm9yICg7ICEobm9kZSA9IGkubmV4dCgpKS5kb25lOyApXG4gICAgICAgICAgICBpc1ZhbGlkRWxlbWVudChub2RlLnZhbHVlKSAmJlxuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KG5vZGUudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICAgICAgbnVsbCAhPT0gb2JqZWN0ICYmXG4gICAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZWxlbWVudC5fc3RvcmUgJiZcbiAgICAgICAgIWVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCAmJlxuICAgICAgICBudWxsID09IGVsZW1lbnQua2V5ICYmXG4gICAgICAgICgoZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gMSksXG4gICAgICAgIChwYXJlbnRUeXBlID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSksXG4gICAgICAgICFvd25lckhhc0tleVVzZVdhcm5pbmdbcGFyZW50VHlwZV0pXG4gICAgICApIHtcbiAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW3BhcmVudFR5cGVdID0gITA7XG4gICAgICAgIHZhciBjaGlsZE93bmVyID0gXCJcIjtcbiAgICAgICAgZWxlbWVudCAmJlxuICAgICAgICAgIG51bGwgIT0gZWxlbWVudC5fb3duZXIgJiZcbiAgICAgICAgICBlbGVtZW50Ll9vd25lciAhPT0gZ2V0T3duZXIoKSAmJlxuICAgICAgICAgICgoY2hpbGRPd25lciA9IG51bGwpLFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBlbGVtZW50Ll9vd25lci50YWdcbiAgICAgICAgICAgID8gKGNoaWxkT3duZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkpXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50Ll9vd25lci5uYW1lICYmXG4gICAgICAgICAgICAgIChjaGlsZE93bmVyID0gZWxlbWVudC5fb3duZXIubmFtZSksXG4gICAgICAgICAgKGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNoaWxkT3duZXIgKyBcIi5cIikpO1xuICAgICAgICB2YXIgcHJldkdldEN1cnJlbnRTdGFjayA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjaztcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUpO1xuICAgICAgICAgIHByZXZHZXRDdXJyZW50U3RhY2sgJiYgKHN0YWNrICs9IHByZXZHZXRDdXJyZW50U3RhY2soKSB8fCBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4lcyVzIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgY2hpbGRPd25lclxuICAgICAgICApO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBwcmV2R2V0Q3VycmVudFN0YWNrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gXCJcIixcbiAgICAgICAgb3duZXIgPSBnZXRPd25lcigpO1xuICAgICAgb3duZXIgJiZcbiAgICAgICAgKG93bmVyID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKG93bmVyLnR5cGUpKSAmJlxuICAgICAgICAoaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgb3duZXIgKyBcImAuXCIpO1xuICAgICAgaW5mbyB8fFxuICAgICAgICAoKHBhcmVudFR5cGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUocGFyZW50VHlwZSkpICYmXG4gICAgICAgICAgKGluZm8gPVxuICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudFR5cGUgKyBcIj4uXCIpKTtcbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gICAgICB2YXIgZXNjYXBlckxvb2t1cCA9IHsgXCI9XCI6IFwiPTBcIiwgXCI6XCI6IFwiPTJcIiB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCIkXCIgK1xuICAgICAgICBrZXkucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICBudWxsICE9IGVsZW1lbnQua2V5XG4gICAgICAgID8gKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpLCBlc2NhcGUoXCJcIiArIGVsZW1lbnQua2V5KSlcbiAgICAgICAgOiBpbmRleC50b1N0cmluZygzNik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMSgpIHt9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgICAgID8gdGhlbmFibGUudGhlbihub29wJDEsIG5vb3AkMSlcbiAgICAgICAgICAgICAgOiAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicGVuZGluZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnJlYXNvbiA9IGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGUgfHwgXCJib29sZWFuXCIgPT09IHR5cGUpIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZhciBpbnZva2VDYWxsYmFjayA9ICExO1xuICAgICAgaWYgKG51bGwgPT09IGNoaWxkcmVuKSBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbi5faW5pdCksXG4gICAgICAgICAgICAgICAgICBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNoaWxkcmVuLl9wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbjtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhpbnZva2VDYWxsYmFjayk7XG4gICAgICAgIHZhciBjaGlsZEtleSA9XG4gICAgICAgICAgXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgKyBnZXRFbGVtZW50S2V5KGludm9rZUNhbGxiYWNrLCAwKSA6IG5hbWVTb0ZhcjtcbiAgICAgICAgaXNBcnJheUltcGwoY2FsbGJhY2spXG4gICAgICAgICAgPyAoKGVzY2FwZWRQcmVmaXggPSBcIlwiKSxcbiAgICAgICAgICAgIG51bGwgIT0gY2hpbGRLZXkgJiZcbiAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNoaWxkS2V5LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsIFwiJCYvXCIpICsgXCIvXCIpLFxuICAgICAgICAgICAgbWFwSW50b0FycmF5KGNhbGxiYWNrLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgXCJcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IG51bGwgIT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChpc1ZhbGlkRWxlbWVudChjYWxsYmFjaykgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gY2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgKChpbnZva2VDYWxsYmFjayAmJiBpbnZva2VDYWxsYmFjay5rZXkgPT09IGNhbGxiYWNrLmtleSkgfHxcbiAgICAgICAgICAgICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY2FsbGJhY2sua2V5KSksXG4gICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID0gY2xvbmVBbmRSZXBsYWNlS2V5KFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXggK1xuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY2FsbGJhY2sua2V5IHx8XG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgJiYgaW52b2tlQ2FsbGJhY2sua2V5ID09PSBjYWxsYmFjay5rZXkpXG4gICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICA6IChcIlwiICsgY2FsbGJhY2sua2V5KS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiQmL1wiXG4gICAgICAgICAgICAgICAgICAgICAgKSArIFwiL1wiKSArXG4gICAgICAgICAgICAgICAgICBjaGlsZEtleVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gbmFtZVNvRmFyICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBpbnZva2VDYWxsYmFjayAmJlxuICAgICAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KGludm9rZUNhbGxiYWNrKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgPT0gaW52b2tlQ2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2suX3N0b3JlICYmXG4gICAgICAgICAgICAgICAgIWludm9rZUNhbGxiYWNrLl9zdG9yZS52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeC5fc3RvcmUudmFsaWRhdGVkID0gMiksXG4gICAgICAgICAgICAgIChjYWxsYmFjayA9IGVzY2FwZWRQcmVmaXgpKSxcbiAgICAgICAgICAgIGFycmF5LnB1c2goY2FsbGJhY2spKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBpbnZva2VDYWxsYmFjayA9IDA7XG4gICAgICBjaGlsZEtleSA9IFwiXCIgPT09IG5hbWVTb0ZhciA/IFwiLlwiIDogbmFtZVNvRmFyICsgXCI6XCI7XG4gICAgICBpZiAoaXNBcnJheUltcGwoY2hpbGRyZW4pKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIChuYW1lU29GYXIgPSBjaGlsZHJlbltpXSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkpKSxcbiAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApKTtcbiAgICAgIGVsc2UgaWYgKCgoaSA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pKSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSkpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaSA9PT0gY2hpbGRyZW4uZW50cmllcyAmJlxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSksXG4gICAgICAgICAgICBjaGlsZHJlbiA9IGkuY2FsbChjaGlsZHJlbiksXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAhKG5hbWVTb0ZhciA9IGNoaWxkcmVuLm5leHQoKSkuZG9uZTtcblxuICAgICAgICApXG4gICAgICAgICAgKG5hbWVTb0ZhciA9IG5hbWVTb0Zhci52YWx1ZSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkrKykpLFxuICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICs9IG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZSkge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2hpbGRyZW4udGhlbilcbiAgICAgICAgICByZXR1cm4gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgcmVzb2x2ZVRoZW5hYmxlKGNoaWxkcmVuKSxcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJyYXkgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IGFycmF5XG4gICAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgICA6IGFycmF5KSArXG4gICAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICAgICAgaWYgKG51bGwgPT0gY2hpbGRyZW4pIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgY291bnQgPSAwO1xuICAgICAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsIFwiXCIsIFwiXCIsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgICAgIGlmICgtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKSB7XG4gICAgICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgICAgICBjdG9yID0gY3RvcigpO1xuICAgICAgICBjdG9yLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgICAgICAgaWYgKDAgPT09IHBheWxvYWQuX3N0YXR1cyB8fCAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMSksIChwYXlsb2FkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgICAgIChwYXlsb2FkLl9zdGF0dXMgPSAyKSwgKHBheWxvYWQuX3Jlc3VsdCA9IGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC0xID09PSBwYXlsb2FkLl9zdGF0dXMgJiZcbiAgICAgICAgICAoKHBheWxvYWQuX3N0YXR1cyA9IDApLCAocGF5bG9hZC5fcmVzdWx0ID0gY3RvcikpO1xuICAgICAgfVxuICAgICAgaWYgKDEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoY3RvciA9IHBheWxvYWQuX3Jlc3VsdCksXG4gICAgICAgICAgdm9pZCAwID09PSBjdG9yICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImxhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcbkRpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/XCIsXG4gICAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXCJkZWZhdWx0XCIgaW4gY3RvciB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiBJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gIGNvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vTXlDb21wb25lbnQnKSlcIixcbiAgICAgICAgICAgICAgY3RvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjdG9yLmRlZmF1bHRcbiAgICAgICAgKTtcbiAgICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVGFzayh0YXNrKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZW5xdWV1ZVRhc2tJbXBsKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKFwicmVxdWlyZVwiICsgTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gKG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ10pLmNhbGwoXG4gICAgICAgICAgICBtb2R1bGUsXG4gICAgICAgICAgICBcInRpbWVyc1wiXG4gICAgICAgICAgKS5zZXRJbW1lZGlhdGU7XG4gICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICBlbnF1ZXVlVGFza0ltcGwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICExID09PSBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITApLFxuICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCBzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3VlcyBpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHZvaWQgMCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIGVucXVldWVUYXNrSW1wbCh0YXNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWdncmVnYXRlRXJyb3JzKGVycm9ycykge1xuICAgICAgcmV0dXJuIDEgPCBlcnJvcnMubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yXG4gICAgICAgID8gbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycylcbiAgICAgICAgOiBlcnJvcnNbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgIHByZXZBY3RTY29wZURlcHRoICE9PSBhY3RTY29wZURlcHRoIC0gMSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBCZSBzdXJlIHRvIGF3YWl0IHByZXZpb3VzIGFjdCgpIGNhbGxzIGJlZm9yZSBtYWtpbmcgYSBuZXcgb25lLiBcIlxuICAgICAgICApO1xuICAgICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBxdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKVxuICAgICAgICBpZiAoMCAhPT0gcXVldWUubGVuZ3RoKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGw7XG4gICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICA/ICgocXVldWUgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICByZWplY3QocXVldWUpKVxuICAgICAgICA6IHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgICBpZiAoIWlzRmx1c2hpbmcpIHtcbiAgICAgICAgaXNGbHVzaGluZyA9ICEwO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMTtcbiAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbiA9IGNhbGxiYWNrKCExKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGNvbnRpbnVhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdFNoYXJlZEludGVybmFscy5kaWRVc2VQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZVtpXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvbnRpbnVhdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkgKyAxKSwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlzRmx1c2hpbmcgPSAhMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpO1xuICAgIHZhciBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSxcbiAgICAgIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9LFxuICAgICAgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJmb3JjZVVwZGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwicmVwbGFjZVN0YXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcInNldFN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIGVtcHR5T2JqZWN0ID0ge307XG4gICAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcGFydGlhbFN0YXRlICYmXG4gICAgICAgIG51bGwgIT0gcGFydGlhbFN0YXRlXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgXCJzZXRTdGF0ZVwiKTtcbiAgICB9O1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgfTtcbiAgICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgICAgIGlzTW91bnRlZDogW1xuICAgICAgICAgIFwiaXNNb3VudGVkXCIsXG4gICAgICAgICAgXCJJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cIlxuICAgICAgICBdLFxuICAgICAgICByZXBsYWNlU3RhdGU6IFtcbiAgICAgICAgICBcInJlcGxhY2VTdGF0ZVwiLFxuICAgICAgICAgIFwiUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS5cIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgZm5OYW1lO1xuICAgIGZvciAoZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKVxuICAgICAgZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSAmJlxuICAgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICBDb21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbiAgICBkZXByZWNhdGVkQVBJcy5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7XG4gICAgYXNzaWduKGRlcHJlY2F0ZWRBUElzLCBDb21wb25lbnQucHJvdG90eXBlKTtcbiAgICBkZXByZWNhdGVkQVBJcy5pc1B1cmVSZWFjdENvbXBvbmVudCA9ICEwO1xuICAgIHZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICAgICAgICBIOiBudWxsLFxuICAgICAgICBBOiBudWxsLFxuICAgICAgICBUOiBudWxsLFxuICAgICAgICBTOiBudWxsLFxuICAgICAgICBhY3RRdWV1ZTogbnVsbCxcbiAgICAgICAgaXNCYXRjaGluZ0xlZ2FjeTogITEsXG4gICAgICAgIGRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlOiAhMSxcbiAgICAgICAgZGlkVXNlUHJvbWlzZTogITEsXG4gICAgICAgIHRocm93bkVycm9yczogW10sXG4gICAgICAgIGdldEN1cnJlbnRTdGFjazogbnVsbFxuICAgICAgfSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgZGlzYWJsZWREZXB0aCA9IDAsXG4gICAgICBwcmV2TG9nLFxuICAgICAgcHJldkluZm8sXG4gICAgICBwcmV2V2FybixcbiAgICAgIHByZXZFcnJvcixcbiAgICAgIHByZXZHcm91cCxcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCxcbiAgICAgIHByZXZHcm91cEVuZDtcbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICB2YXIgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgcmVlbnRyeSA9ICExO1xuICAgIHZhciBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IChcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwXG4gICAgKSgpO1xuICAgIHZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bixcbiAgICAgIGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWU7XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge30sXG4gICAgICBkaWRXYXJuQWJvdXRNYXBzID0gITEsXG4gICAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2csXG4gICAgICByZXBvcnRHbG9iYWxFcnJvciA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlcG9ydEVycm9yXG4gICAgICAgICAgPyByZXBvcnRFcnJvclxuICAgICAgICAgIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd2luZG93LkVycm9yRXZlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgICAgYnViYmxlczogITAsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCkpIHJldHVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb2Nlc3MuZW1pdFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITEsXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBudWxsLFxuICAgICAgYWN0U2NvcGVEZXB0aCA9IDAsXG4gICAgICBkaWRXYXJuTm9Bd2FpdEFjdCA9ICExLFxuICAgICAgaXNGbHVzaGluZyA9ICExLFxuICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogZW5xdWV1ZVRhc2s7XG4gICAgZXhwb3J0cy5DaGlsZHJlbiA9IHtcbiAgICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgICAgICBtYXBDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yRWFjaENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBuKys7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0sXG4gICAgICB0b0FycmF5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbmx5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuYWN0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcHJldkFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUsXG4gICAgICAgIHByZXZBY3RTY29wZURlcHRoID0gYWN0U2NvcGVEZXB0aDtcbiAgICAgIGFjdFNjb3BlRGVwdGgrKztcbiAgICAgIHZhciBxdWV1ZSA9IChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gcHJldkFjdFF1ZXVlID8gcHJldkFjdFF1ZXVlIDogW10pLFxuICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpLFxuICAgICAgICAgIChjYWxsYmFjayA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIGNhbGxiYWNrKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSByZXN1bHQgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJlc3VsdCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXN1bHQudGhlblxuICAgICAgKSB7XG4gICAgICAgIHZhciB0aGVuYWJsZSA9IHJlc3VsdDtcbiAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlkQXdhaXRBY3RDYWxsIHx8XG4gICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCB8fFxuICAgICAgICAgICAgKChkaWRXYXJuTm9Bd2FpdEFjdCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGNhbGxlZCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aXRob3V0IGF3YWl0LiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCB0ZXN0aW5nIGJlaGF2aW91ciwgaW50ZXJsZWF2aW5nIG11bHRpcGxlIGFjdCBjYWxscyBhbmQgbWl4aW5nIHRoZWlyIHNjb3Blcy4gWW91IHNob3VsZCAtIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pO1wiXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgZGlkQXdhaXRBY3RDYWxsID0gITA7XG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpLFxuICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IkMikge1xuICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvciQyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3Rocm93bkVycm9yID0gYWdncmVnYXRlRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9yc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KF90aHJvd25FcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgPyAoKGVycm9yID0gYWdncmVnYXRlRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9yc1xuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKSlcbiAgICAgICAgICAgICAgICAgIDogcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgcmV0dXJuVmFsdWUkanNjb21wJDAgPSByZXN1bHQ7XG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgIDAgPT09IHByZXZBY3RTY29wZURlcHRoICYmXG4gICAgICAgIChmbHVzaEFjdFF1ZXVlKHF1ZXVlKSxcbiAgICAgICAgMCAhPT0gcXVldWUubGVuZ3RoICYmXG4gICAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgfHxcbiAgICAgICAgICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgfHxcbiAgICAgICAgICAgICAgKChkaWRXYXJuTm9Bd2FpdEFjdCA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IHN1c3BlbmRlZCBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGJ1dCB0aGUgYGFjdGAgY2FsbCB3YXMgbm90IGF3YWl0ZWQuIFdoZW4gdGVzdGluZyBSZWFjdCBjb21wb25lbnRzIHRoYXQgZGVwZW5kIG9uIGFzeW5jaHJvbm91cyBkYXRhLCB5b3UgbXVzdCBhd2FpdCB0aGUgcmVzdWx0OlxcblxcbmF3YWl0IGFjdCgoKSA9PiAuLi4pXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGwpKTtcbiAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICgoY2FsbGJhY2sgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICBjYWxsYmFjaylcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMDtcbiAgICAgICAgICAwID09PSBwcmV2QWN0U2NvcGVEZXB0aFxuICAgICAgICAgICAgPyAoKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gcXVldWUpLFxuICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsoXG4gICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogcmVzb2x2ZShyZXR1cm5WYWx1ZSRqc2NvbXAkMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLmNhY2hlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZWxlbWVudCB8fCB2b2lkIDAgPT09IGVsZW1lbnQpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArXG4gICAgICAgICAgICBlbGVtZW50ICtcbiAgICAgICAgICAgIFwiLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpLFxuICAgICAgICBrZXkgPSBlbGVtZW50LmtleSxcbiAgICAgICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZykge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgICBhOiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwicmVmXCIpICYmXG4gICAgICAgICAgICAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBcInJlZlwiXG4gICAgICAgICAgICApLmdldCkgJiZcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5pc1JlYWN0V2FybmluZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSB2b2lkIDAgIT09IGNvbmZpZy5yZWY7XG4gICAgICAgIH1cbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICYmIChvd25lciA9IGdldE93bmVyKCkpO1xuICAgICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChrZXkgPSBcIlwiICsgY29uZmlnLmtleSkpO1xuICAgICAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZylcbiAgICAgICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSB8fFxuICAgICAgICAgICAgXCJrZXlcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIFwiX19zZWxmXCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICBcIl9fc291cmNlXCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICAoXCJyZWZcIiA9PT0gcHJvcE5hbWUgJiYgdm9pZCAwID09PSBjb25maWcucmVmKSB8fFxuICAgICAgICAgICAgKHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BOYW1lID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgICBpZiAoMSA9PT0gcHJvcE5hbWUpIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBlbHNlIGlmICgxIDwgcHJvcE5hbWUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gQXJyYXkocHJvcE5hbWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BOYW1lOyBpKyspXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgdm9pZCAwLCB2b2lkIDAsIG93bmVyLCBwcm9wcyk7XG4gICAgICBmb3IgKGtleSA9IDI7IGtleSA8IGFyZ3VtZW50cy5sZW5ndGg7IGtleSsrKVxuICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNba2V5XSwgcHJvcHMudHlwZSk7XG4gICAgICByZXR1cm4gcHJvcHM7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgX3RocmVhZENvdW50OiAwLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgQ29uc3VtZXI6IG51bGxcbiAgICAgIH07XG4gICAgICBkZWZhdWx0VmFsdWUuUHJvdmlkZXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgICBkZWZhdWx0VmFsdWUuQ29uc3VtZXIgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05TVU1FUl9UWVBFLFxuICAgICAgICBfY29udGV4dDogZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuICAgICAgZGVmYXVsdFZhbHVlLl9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgICAgZGVmYXVsdFZhbHVlLl9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSlcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZvaWQgMCA9PT0gdHlwZSB8fFxuICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgMCA9PT0gT2JqZWN0LmtleXModHlwZSkubGVuZ3RoKVxuICAgICAgICApXG4gICAgICAgICAgaSArPVxuICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICBpZiAobnVsbCA9PT0gdHlwZSkgdmFyIHR5cGVTdHJpbmcgPSBcIm51bGxcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGlzQXJyYXlJbXBsKHR5cGUpXG4gICAgICAgICAgICA/ICh0eXBlU3RyaW5nID0gXCJhcnJheVwiKVxuICAgICAgICAgICAgOiB2b2lkIDAgIT09IHR5cGUgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgICAgID8gKCh0eXBlU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgICAgICAgIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIlVua25vd25cIikgK1xuICAgICAgICAgICAgICAgICAgXCIgLz5cIiksXG4gICAgICAgICAgICAgICAgKGkgPVxuICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgIDogKHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzXCIsXG4gICAgICAgICAgdHlwZVN0cmluZyxcbiAgICAgICAgICBpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcE5hbWU7XG4gICAgICBpID0ge307XG4gICAgICB0eXBlU3RyaW5nID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoZGlkV2FybkFib3V0T2xkSlNYUnVudGltZSB8fFxuICAgICAgICAgICEoXCJfX3NlbGZcIiBpbiBjb25maWcpIHx8XG4gICAgICAgICAgXCJrZXlcIiBpbiBjb25maWcgfHxcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgPSAhMCksXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJZb3VyIGFwcCAob3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMpIGlzIHVzaW5nIGFuIG91dGRhdGVkIEpTWCB0cmFuc2Zvcm0uIFVwZGF0ZSB0byB0aGUgbW9kZXJuIEpTWCB0cmFuc2Zvcm0gZm9yIGZhc3RlciBwZXJmb3JtYW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9uZXctanN4LXRyYW5zZm9ybVwiXG4gICAgICAgICAgKSksXG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKHR5cGVTdHJpbmcgPSBcIlwiICsgY29uZmlnLmtleSkpLFxuICAgICAgICBjb25maWcpKVxuICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiZcbiAgICAgICAgICAgIFwia2V5XCIgIT09IHByb3BOYW1lICYmXG4gICAgICAgICAgICBcIl9fc2VsZlwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NvdXJjZVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgKGlbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBjaGlsZHJlbkxlbmd0aCkgaS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgZWxzZSBpZiAoMSA8IGNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCksIF9pID0gMDtcbiAgICAgICAgICBfaSA8IGNoaWxkcmVuTGVuZ3RoO1xuICAgICAgICAgIF9pKytcbiAgICAgICAgKVxuICAgICAgICAgIGNoaWxkQXJyYXlbX2ldID0gYXJndW1lbnRzW19pICsgMl07XG4gICAgICAgIE9iamVjdC5mcmVlemUgJiYgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgICAgaS5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoKGNoaWxkcmVuTGVuZ3RoID0gdHlwZS5kZWZhdWx0UHJvcHMpLCBjaGlsZHJlbkxlbmd0aCkpXG4gICAgICAgICAgdm9pZCAwID09PSBpW3Byb3BOYW1lXSAmJiAoaVtwcm9wTmFtZV0gPSBjaGlsZHJlbkxlbmd0aFtwcm9wTmFtZV0pO1xuICAgICAgdHlwZVN0cmluZyAmJlxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihcbiAgICAgICAgICBpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICAgICAgID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICAgIDogdHlwZVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCB0eXBlU3RyaW5nLCB2b2lkIDAsIHZvaWQgMCwgZ2V0T3duZXIoKSwgaSk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWZPYmplY3QgPSB7IGN1cnJlbnQ6IG51bGwgfTtcbiAgICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gICAgICByZXR1cm4gcmVmT2JqZWN0O1xuICAgIH07XG4gICAgZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCBjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgbWVtbyhmb3J3YXJkUmVmKC4uLikpLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlbmRlclxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlciA/IFwibnVsbFwiIDogdHlwZW9mIHJlbmRlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogMCAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgMiAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzXCIsXG4gICAgICAgICAgICAgIDEgPT09IHJlbmRlci5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFwiRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyP1wiXG4gICAgICAgICAgICAgICAgOiBcIkFueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIG51bGwgIT0gcmVuZGVyICYmXG4gICAgICAgIG51bGwgIT0gcmVuZGVyLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IGRlZmF1bHRQcm9wcy4gRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD9cIlxuICAgICAgICApO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfSxcbiAgICAgICAgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHJlbmRlci5uYW1lIHx8XG4gICAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHkocmVuZGVyLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgIChyZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuICAgIGV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChjdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgICAgICBfcGF5bG9hZDogeyBfc3RhdHVzOiAtMSwgX3Jlc3VsdDogY3RvciB9LFxuICAgICAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgICAgIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwibWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXCIsXG4gICAgICAgICAgbnVsbCA9PT0gdHlwZSA/IFwibnVsbFwiIDogdHlwZW9mIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNvbXBhcmUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbXBhcmU6IHZvaWQgMCA9PT0gY29tcGFyZSA/IG51bGwgOiBjb21wYXJlXG4gICAgICB9O1xuICAgICAgdmFyIG93bk5hbWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcGFyZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHR5cGUubmFtZSB8fFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgICh0eXBlLmRpc3BsYXlOYW1lID0gbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wYXJlO1xuICAgIH07XG4gICAgZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHNjb3BlKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICgoc2NvcGUgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgIDEwIDwgc2NvcGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhY2hlUmVmcmVzaCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2UodXNhYmxlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQWN0aW9uU3RhdGUoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBwZXJtYWxpbmtcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgICAgQ29udGV4dC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgYnVncy4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUlkKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QgPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU1lbW8gPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VSZWR1Y2VyID0gZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVJlZiA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZihpbml0aWFsVmFsdWUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZnVuY3Rpb24gKFxuICAgICAgc3Vic2NyaWJlLFxuICAgICAgZ2V0U25hcHNob3QsXG4gICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlVHJhbnNpdGlvbigpO1xuICAgIH07XG4gICAgZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4wLjBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react/cjs/react.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react/index.js":
|
||
/*!*************************************!*\
|
||
!*** ./node_modules/react/index.js ***!
|
||
\*************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./node_modules/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHVIQUFzRDtBQUN4RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanM/MWZiMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/react/jsx-runtime.js":
|
||
/*!*******************************************!*\
|
||
!*** ./node_modules/react/jsx-runtime.js ***!
|
||
\*******************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"./node_modules/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLCtJQUFrRTtBQUNwRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanM/MzRkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/jsx-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/scheduler/cjs/scheduler.development.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/scheduler/cjs/scheduler.development.js ***!
|
||
\*************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function performWorkUntilDeadline() {\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime &&\n shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n }\n function push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node),\n (heap[index] = parent),\n (index = parentIndex);\n else break a;\n }\n }\n function peek(heap) {\n return 0 === heap.length ? null : heap[0];\n }\n function pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex);\n else break a;\n }\n }\n return first;\n }\n function compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n }\n function advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n }\n function handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0), requestHostCallback();\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n }\n }\n function shouldYieldToHost() {\n return exports.unstable_now() - startTime < frameInterval ? !1 : !0;\n }\n function requestHostCallback() {\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n }\n function requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n exports.unstable_now = void 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n }\n var taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate =\n \"undefined\" !== typeof setImmediate ? setImmediate : null,\n isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\n if (\"function\" === typeof localSetImmediate)\n var schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n else if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n } else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n exports.unstable_IdlePriority = 5;\n exports.unstable_ImmediatePriority = 1;\n exports.unstable_LowPriority = 4;\n exports.unstable_NormalPriority = 3;\n exports.unstable_Profiling = null;\n exports.unstable_UserBlockingPriority = 2;\n exports.unstable_cancelCallback = function (task) {\n task.callback = null;\n };\n exports.unstable_continueExecution = function () {\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0), requestHostCallback());\n };\n exports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n };\n exports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n };\n exports.unstable_getFirstCallbackNode = function () {\n return peek(taskQueue);\n };\n exports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_pauseExecution = function () {};\n exports.unstable_requestPaint = function () {};\n exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n ) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0), requestHostCallback()));\n return priorityLevel;\n };\n exports.unstable_shouldYield = shouldYieldToHost;\n exports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsV0FBVztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGdCQUFnQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sb0JBQW9CO0FBQzFCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU0sb0JBQW9CO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUksNkJBQTZCO0FBQ2pDLElBQUksa0NBQWtDO0FBQ3RDLElBQUksNEJBQTRCO0FBQ2hDLElBQUksK0JBQStCO0FBQ25DLElBQUksMEJBQTBCO0FBQzlCLElBQUkscUNBQXFDO0FBQ3pDLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLGtDQUFrQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0NBQXdDO0FBQzVDO0FBQ0E7QUFDQSxJQUFJLHFDQUFxQztBQUN6QztBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkMsSUFBSSw2QkFBNkI7QUFDakMsSUFBSSxnQ0FBZ0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlDQUFpQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSw0QkFBNEI7QUFDaEMsSUFBSSw2QkFBNkI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcz9iY2QyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSB7XG4gICAgICBpZiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9ICEwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITE7XG4gICAgICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkICYmXG4gICAgICAgICAgICAgICgoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExKSxcbiAgICAgICAgICAgICAgbG9jYWxDbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCksXG4gICAgICAgICAgICAgICh0YXNrVGltZW91dElEID0gLTEpKTtcbiAgICAgICAgICAgIGlzUGVyZm9ybWluZ1dvcmsgPSAhMDtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VGFzayAmJlxuICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBzaG91bGRZaWVsZFRvSG9zdCgpXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpICYmIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudFRhc2spIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBmaXJzdFRpbWVyICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAoY3VycmVudFRhc2sgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgICAgICAgIChpc1BlcmZvcm1pbmdXb3JrID0gITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzTW9yZVdvcmsgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGhhc01vcmVXb3JrXG4gICAgICAgICAgICA/IHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKClcbiAgICAgICAgICAgIDogKGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICAgICAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gICAgICBoZWFwLnB1c2gobm9kZSk7XG4gICAgICBhOiBmb3IgKDsgMCA8IGluZGV4OyApIHtcbiAgICAgICAgdmFyIHBhcmVudEluZGV4ID0gKGluZGV4IC0gMSkgPj4+IDEsXG4gICAgICAgICAgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG4gICAgICAgIGlmICgwIDwgY29tcGFyZShwYXJlbnQsIG5vZGUpKVxuICAgICAgICAgIChoZWFwW3BhcmVudEluZGV4XSA9IG5vZGUpLFxuICAgICAgICAgICAgKGhlYXBbaW5kZXhdID0gcGFyZW50KSxcbiAgICAgICAgICAgIChpbmRleCA9IHBhcmVudEluZGV4KTtcbiAgICAgICAgZWxzZSBicmVhayBhO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgICAgIHJldHVybiAwID09PSBoZWFwLmxlbmd0aCA/IG51bGwgOiBoZWFwWzBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3AoaGVhcCkge1xuICAgICAgaWYgKDAgPT09IGhlYXAubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmaXJzdCA9IGhlYXBbMF0sXG4gICAgICAgIGxhc3QgPSBoZWFwLnBvcCgpO1xuICAgICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgICBhOiBmb3IgKFxuICAgICAgICAgIHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGhlYXAubGVuZ3RoLCBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+PiAxO1xuICAgICAgICAgIGluZGV4IDwgaGFsZkxlbmd0aDtcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgbGVmdEluZGV4ID0gMiAqIChpbmRleCArIDEpIC0gMSxcbiAgICAgICAgICAgIGxlZnQgPSBoZWFwW2xlZnRJbmRleF0sXG4gICAgICAgICAgICByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMSxcbiAgICAgICAgICAgIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTtcbiAgICAgICAgICBpZiAoMCA+IGNvbXBhcmUobGVmdCwgbGFzdCkpXG4gICAgICAgICAgICByaWdodEluZGV4IDwgbGVuZ3RoICYmIDAgPiBjb21wYXJlKHJpZ2h0LCBsZWZ0KVxuICAgICAgICAgICAgICA/ICgoaGVhcFtpbmRleF0gPSByaWdodCksXG4gICAgICAgICAgICAgICAgKGhlYXBbcmlnaHRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KSlcbiAgICAgICAgICAgICAgOiAoKGhlYXBbaW5kZXhdID0gbGVmdCksXG4gICAgICAgICAgICAgICAgKGhlYXBbbGVmdEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAgIChpbmRleCA9IGxlZnRJbmRleCkpO1xuICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgMCA+IGNvbXBhcmUocmlnaHQsIGxhc3QpKVxuICAgICAgICAgICAgKGhlYXBbaW5kZXhdID0gcmlnaHQpLFxuICAgICAgICAgICAgICAoaGVhcFtyaWdodEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KTtcbiAgICAgICAgICBlbHNlIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gICAgICByZXR1cm4gMCAhPT0gZGlmZiA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAgICAgZm9yICh2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpOyBudWxsICE9PSB0aW1lcjsgKSB7XG4gICAgICAgIGlmIChudWxsID09PSB0aW1lci5jYWxsYmFjaykgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgICBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpXG4gICAgICAgICAgcG9wKHRpbWVyUXVldWUpLFxuICAgICAgICAgICAgKHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lKSxcbiAgICAgICAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExO1xuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKVxuICAgICAgICBpZiAobnVsbCAhPT0gcGVlayh0YXNrUXVldWUpKVxuICAgICAgICAgIChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSwgcmVxdWVzdEhvc3RDYWxsYmFjaygpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgbnVsbCAhPT0gZmlyc3RUaW1lciAmJlxuICAgICAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KFxuICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFlpZWxkVG9Ib3N0KCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgLSBzdGFydFRpbWUgPCBmcmFtZUludGVydmFsID8gITEgOiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWVzdEhvc3RDYWxsYmFjaygpIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nIHx8XG4gICAgICAgICgoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMCksIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0SG9zdFRpbWVvdXQoY2FsbGJhY2ssIG1zKSB7XG4gICAgICB0YXNrVGltZW91dElEID0gbG9jYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gICAgICB9LCBtcyk7XG4gICAgfVxuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQoRXJyb3IoKSk7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSB2b2lkIDA7XG4gICAgaWYgKFxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwZXJmb3JtYW5jZS5ub3dcbiAgICApIHtcbiAgICAgIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG4gICAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbG9jYWxEYXRlID0gRGF0ZSxcbiAgICAgICAgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG4gICAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHRhc2tRdWV1ZSA9IFtdLFxuICAgICAgdGltZXJRdWV1ZSA9IFtdLFxuICAgICAgdGFza0lkQ291bnRlciA9IDEsXG4gICAgICBjdXJyZW50VGFzayA9IG51bGwsXG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IDMsXG4gICAgICBpc1BlcmZvcm1pbmdXb3JrID0gITEsXG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICExLFxuICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExLFxuICAgICAgbG9jYWxTZXRUaW1lb3V0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc2V0VGltZW91dCA/IHNldFRpbWVvdXQgOiBudWxsLFxuICAgICAgbG9jYWxDbGVhclRpbWVvdXQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjbGVhclRpbWVvdXQgPyBjbGVhclRpbWVvdXQgOiBudWxsLFxuICAgICAgbG9jYWxTZXRJbW1lZGlhdGUgPVxuICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2Ygc2V0SW1tZWRpYXRlID8gc2V0SW1tZWRpYXRlIDogbnVsbCxcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITEsXG4gICAgICB0YXNrVGltZW91dElEID0gLTEsXG4gICAgICBmcmFtZUludGVydmFsID0gNSxcbiAgICAgIHN0YXJ0VGltZSA9IC0xO1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsb2NhbFNldEltbWVkaWF0ZSlcbiAgICAgIHZhciBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9jYWxTZXRJbW1lZGlhdGUocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKTtcbiAgICAgIH07XG4gICAgZWxzZSBpZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpLFxuICAgICAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuICAgICAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICB9O1xuICAgIH0gZWxzZVxuICAgICAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2FsU2V0VGltZW91dChwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUsIDApO1xuICAgICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IDU7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IDE7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IDQ7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IDM7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSBudWxsO1xuICAgIGV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xuICAgIGV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGFzaykge1xuICAgICAgdGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgfHxcbiAgICAgICAgaXNQZXJmb3JtaW5nV29yayB8fFxuICAgICAgICAoKGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITApLCByZXF1ZXN0SG9zdENhbGxiYWNrKCkpO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uIChmcHMpIHtcbiAgICAgIDAgPiBmcHMgfHwgMTI1IDwgZnBzXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgICApXG4gICAgICAgIDogKGZyYW1lSW50ZXJ2YWwgPSAwIDwgZnBzID8gTWF0aC5mbG9vcigxZTMgLyBmcHMpIDogNSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX25leHQgPSBmdW5jdGlvbiAoZXZlbnRIYW5kbGVyKSB7XG4gICAgICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHByaW9yaXR5TGV2ZWwgPSAzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gICAgZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSBmdW5jdGlvbiAocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gICAgICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcHJpb3JpdHlMZXZlbCA9IDM7XG4gICAgICB9XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IGZ1bmN0aW9uIChcbiAgICAgIHByaW9yaXR5TGV2ZWwsXG4gICAgICBjYWxsYmFjayxcbiAgICAgIG9wdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBudWxsICE9PSBvcHRpb25zXG4gICAgICAgID8gKChvcHRpb25zID0gb3B0aW9ucy5kZWxheSksXG4gICAgICAgICAgKG9wdGlvbnMgPVxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgMCA8IG9wdGlvbnNcbiAgICAgICAgICAgICAgPyBjdXJyZW50VGltZSArIG9wdGlvbnNcbiAgICAgICAgICAgICAgOiBjdXJyZW50VGltZSkpXG4gICAgICAgIDogKG9wdGlvbnMgPSBjdXJyZW50VGltZSk7XG4gICAgICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHZhciB0aW1lb3V0ID0gLTE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aW1lb3V0ID0gMjUwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdGltZW91dCA9IDEwNzM3NDE4MjM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aW1lb3V0ID0gMWU0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRpbWVvdXQgPSA1ZTM7XG4gICAgICB9XG4gICAgICB0aW1lb3V0ID0gb3B0aW9ucyArIHRpbWVvdXQ7XG4gICAgICBwcmlvcml0eUxldmVsID0ge1xuICAgICAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgICAgIHN0YXJ0VGltZTogb3B0aW9ucyxcbiAgICAgICAgZXhwaXJhdGlvblRpbWU6IHRpbWVvdXQsXG4gICAgICAgIHNvcnRJbmRleDogLTFcbiAgICAgIH07XG4gICAgICBvcHRpb25zID4gY3VycmVudFRpbWVcbiAgICAgICAgPyAoKHByaW9yaXR5TGV2ZWwuc29ydEluZGV4ID0gb3B0aW9ucyksXG4gICAgICAgICAgcHVzaCh0aW1lclF1ZXVlLCBwcmlvcml0eUxldmVsKSxcbiAgICAgICAgICBudWxsID09PSBwZWVrKHRhc2tRdWV1ZSkgJiZcbiAgICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPT09IHBlZWsodGltZXJRdWV1ZSkgJiZcbiAgICAgICAgICAgIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkXG4gICAgICAgICAgICAgID8gKGxvY2FsQ2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpLCAodGFza1RpbWVvdXRJRCA9IC0xKSlcbiAgICAgICAgICAgICAgOiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBvcHRpb25zIC0gY3VycmVudFRpbWUpKSlcbiAgICAgICAgOiAoKHByaW9yaXR5TGV2ZWwuc29ydEluZGV4ID0gdGltZW91dCksXG4gICAgICAgICAgcHVzaCh0YXNrUXVldWUsIHByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkIHx8XG4gICAgICAgICAgICBpc1BlcmZvcm1pbmdXb3JrIHx8XG4gICAgICAgICAgICAoKGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITApLCByZXF1ZXN0SG9zdENhbGxiYWNrKCkpKTtcbiAgICAgIHJldHVybiBwcmlvcml0eUxldmVsO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IHNob3VsZFlpZWxkVG9Ib3N0O1xuICAgIGV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/scheduler/cjs/scheduler.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/scheduler/index.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/scheduler/index.js ***!
|
||
\*****************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"./node_modules/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxtSUFBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcz9jN2NjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/scheduler/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/@swc/helpers/esm/_interop_require_default.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***!
|
||
\*******************************************************************/
|
||
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _interop_require_default; },\n/* harmony export */ _interop_require_default: function() { return /* binding */ _interop_require_default; }\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQLDJDQUEyQztBQUMzQztBQUN5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanM/NjUyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/esm/_interop_require_default.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/@swc/helpers/esm/_interop_require_wildcard.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***!
|
||
\********************************************************************/
|
||
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _interop_require_wildcard; },\n/* harmony export */ _interop_require_wildcard: function() { return /* binding */ _interop_require_wildcard; }\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0EsdUZBQXVGOztBQUV2Rjs7QUFFQTs7QUFFQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUMwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzPzVlMTAiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGNhY2hlQmFiZWxJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5leHBvcnQgZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHJldHVybiBvYmo7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07XG5cbiAgICB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApO1xuXG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSByZXR1cm4gY2FjaGUuZ2V0KG9iaik7XG5cbiAgICB2YXIgbmV3T2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgICB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTtcbiAgICAgICAgICAgIGVsc2UgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuXG4gICAgaWYgKGNhY2hlKSBjYWNoZS5zZXQob2JqLCBuZXdPYmopO1xuXG4gICAgcmV0dXJuIG5ld09iajtcbn1cbmV4cG9ydCB7IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js ***!
|
||
\*************************************************************************/
|
||
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _tagged_template_literal_loose; },\n/* harmony export */ _tagged_template_literal_loose: function() { return /* binding */ _tagged_template_literal_loose; }\n/* harmony export */ });\nfunction _tagged_template_literal_loose(strings, raw) {\n if (!raw) raw = strings.slice(0);\n\n strings.raw = raw;\n\n return strings;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLmpzPzJhZWYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZShzdHJpbmdzLCByYXcpIHtcbiAgICBpZiAoIXJhdykgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcblxuICAgIHN0cmluZ3MucmF3ID0gcmF3O1xuXG4gICAgcmV0dXJuIHN0cmluZ3M7XG59XG5leHBvcnQgeyBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\n"));
|
||
|
||
/***/ })
|
||
|
||
},
|
||
/******/ function(__webpack_require__) { // webpackRuntimeModules
|
||
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
|
||
/******/ var __webpack_exports__ = (__webpack_exec__("./node_modules/next/dist/client/next-dev.js"));
|
||
/******/ _N_E = __webpack_exports__;
|
||
/******/ }
|
||
]); |