/*
* 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/).
*/
(() => {
var exports = {};
exports.id = "pages/index";
exports.ids = ["pages/index"];
exports.modules = {
/***/ "(pages-dir-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F&preferredRegion=&absolutePagePath=.%2Fsrc%2Fpages%2Findex.js&absoluteAppPath=private-next-pages%2F_app&absoluteDocumentPath=private-next-pages%2F_document&middlewareConfigBase64=e30%3D!":
/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F&preferredRegion=&absolutePagePath=.%2Fsrc%2Fpages%2Findex.js&absoluteAppPath=private-next-pages%2F_app&absoluteDocumentPath=private-next-pages%2F_document&middlewareConfigBase64=e30%3D! ***!
\***********************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getServerSideProps: () => (/* binding */ getServerSideProps),\n/* harmony export */ getStaticPaths: () => (/* binding */ getStaticPaths),\n/* harmony export */ getStaticProps: () => (/* binding */ getStaticProps),\n/* harmony export */ reportWebVitals: () => (/* binding */ reportWebVitals),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ unstable_getServerProps: () => (/* binding */ unstable_getServerProps),\n/* harmony export */ unstable_getServerSideProps: () => (/* binding */ unstable_getServerSideProps),\n/* harmony export */ unstable_getStaticParams: () => (/* binding */ unstable_getStaticParams),\n/* harmony export */ unstable_getStaticPaths: () => (/* binding */ unstable_getStaticPaths),\n/* harmony export */ unstable_getStaticProps: () => (/* binding */ unstable_getStaticProps)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/route-modules/pages/module.compiled */ \"(pages-dir-node)/./node_modules/next/dist/server/route-modules/pages/module.compiled.js\");\n/* harmony import */ var next_dist_server_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/route-kind */ \"(pages-dir-node)/./node_modules/next/dist/server/route-kind.js\");\n/* harmony import */ var next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/build/templates/helpers */ \"(pages-dir-node)/./node_modules/next/dist/build/templates/helpers.js\");\n/* harmony import */ var private_next_pages_document__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! private-next-pages/_document */ \"(pages-dir-node)/./src/pages/_document.js\");\n/* harmony import */ var private_next_pages_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! private-next-pages/_app */ \"(pages-dir-node)/./src/pages/_app.js\");\n/* harmony import */ var _src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./src/pages/index.js */ \"(pages-dir-node)/./src/pages/index.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([private_next_pages_app__WEBPACK_IMPORTED_MODULE_4__, _src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__]);\n([private_next_pages_app__WEBPACK_IMPORTED_MODULE_4__, _src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n// Import the app and document modules.\n\n\n// Import the userland code.\n\n// Re-export the component (should be the default export).\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'default'));\n// Re-export methods.\nconst getStaticProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'getStaticProps');\nconst getStaticPaths = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'getStaticPaths');\nconst getServerSideProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'getServerSideProps');\nconst config = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'config');\nconst reportWebVitals = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'reportWebVitals');\n// Re-export legacy methods.\nconst unstable_getStaticProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'unstable_getStaticProps');\nconst unstable_getStaticPaths = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'unstable_getStaticPaths');\nconst unstable_getStaticParams = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'unstable_getStaticParams');\nconst unstable_getServerProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'unstable_getServerProps');\nconst unstable_getServerSideProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__, 'unstable_getServerSideProps');\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__.PagesRouteModule({\n definition: {\n kind: next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.PAGES,\n page: \"/index\",\n pathname: \"/\",\n // The following aren't used in production.\n bundlePath: '',\n filename: ''\n },\n components: {\n // default export might not exist when optimized for data only\n App: private_next_pages_app__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n Document: private_next_pages_document__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n },\n userland: _src_pages_index_js__WEBPACK_IMPORTED_MODULE_5__\n});\n\n//# sourceMappingURL=pages.js.map\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtcm91dGUtbG9hZGVyL2luZGV4LmpzP2tpbmQ9UEFHRVMmcGFnZT0lMkYmcHJlZmVycmVkUmVnaW9uPSZhYnNvbHV0ZVBhZ2VQYXRoPS4lMkZzcmMlMkZwYWdlcyUyRmluZGV4LmpzJmFic29sdXRlQXBwUGF0aD1wcml2YXRlLW5leHQtcGFnZXMlMkZfYXBwJmFic29sdXRlRG9jdW1lbnRQYXRoPXByaXZhdGUtbmV4dC1wYWdlcyUyRl9kb2N1bWVudCZtaWRkbGV3YXJlQ29uZmlnQmFzZTY0PWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF3RjtBQUNoQztBQUNFO0FBQzFEO0FBQ3lEO0FBQ1Y7QUFDL0M7QUFDaUQ7QUFDakQ7QUFDQSxpRUFBZSx3RUFBSyxDQUFDLGdEQUFRLFlBQVksRUFBQztBQUMxQztBQUNPLHVCQUF1Qix3RUFBSyxDQUFDLGdEQUFRO0FBQ3JDLHVCQUF1Qix3RUFBSyxDQUFDLGdEQUFRO0FBQ3JDLDJCQUEyQix3RUFBSyxDQUFDLGdEQUFRO0FBQ3pDLGVBQWUsd0VBQUssQ0FBQyxnREFBUTtBQUM3Qix3QkFBd0Isd0VBQUssQ0FBQyxnREFBUTtBQUM3QztBQUNPLGdDQUFnQyx3RUFBSyxDQUFDLGdEQUFRO0FBQzlDLGdDQUFnQyx3RUFBSyxDQUFDLGdEQUFRO0FBQzlDLGlDQUFpQyx3RUFBSyxDQUFDLGdEQUFRO0FBQy9DLGdDQUFnQyx3RUFBSyxDQUFDLGdEQUFRO0FBQzlDLG9DQUFvQyx3RUFBSyxDQUFDLGdEQUFRO0FBQ3pEO0FBQ08sd0JBQXdCLGtHQUFnQjtBQUMvQztBQUNBLGNBQWMsa0VBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBYSw4REFBVztBQUN4QixrQkFBa0IsbUVBQWdCO0FBQ2xDLEtBQUs7QUFDTCxZQUFZO0FBQ1osQ0FBQzs7QUFFRCxpQyIsInNvdXJjZXMiOlsiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2VzUm91dGVNb2R1bGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1tb2R1bGVzL3BhZ2VzL21vZHVsZS5jb21waWxlZFwiO1xuaW1wb3J0IHsgUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcm91dGUta2luZFwiO1xuaW1wb3J0IHsgaG9pc3QgfSBmcm9tIFwibmV4dC9kaXN0L2J1aWxkL3RlbXBsYXRlcy9oZWxwZXJzXCI7XG4vLyBJbXBvcnQgdGhlIGFwcCBhbmQgZG9jdW1lbnQgbW9kdWxlcy5cbmltcG9ydCAqIGFzIGRvY3VtZW50IGZyb20gXCJwcml2YXRlLW5leHQtcGFnZXMvX2RvY3VtZW50XCI7XG5pbXBvcnQgKiBhcyBhcHAgZnJvbSBcInByaXZhdGUtbmV4dC1wYWdlcy9fYXBwXCI7XG4vLyBJbXBvcnQgdGhlIHVzZXJsYW5kIGNvZGUuXG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiLi9zcmMvcGFnZXMvaW5kZXguanNcIjtcbi8vIFJlLWV4cG9ydCB0aGUgY29tcG9uZW50IChzaG91bGQgYmUgdGhlIGRlZmF1bHQgZXhwb3J0KS5cbmV4cG9ydCBkZWZhdWx0IGhvaXN0KHVzZXJsYW5kLCAnZGVmYXVsdCcpO1xuLy8gUmUtZXhwb3J0IG1ldGhvZHMuXG5leHBvcnQgY29uc3QgZ2V0U3RhdGljUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgJ2dldFN0YXRpY1Byb3BzJyk7XG5leHBvcnQgY29uc3QgZ2V0U3RhdGljUGF0aHMgPSBob2lzdCh1c2VybGFuZCwgJ2dldFN0YXRpY1BhdGhzJyk7XG5leHBvcnQgY29uc3QgZ2V0U2VydmVyU2lkZVByb3BzID0gaG9pc3QodXNlcmxhbmQsICdnZXRTZXJ2ZXJTaWRlUHJvcHMnKTtcbmV4cG9ydCBjb25zdCBjb25maWcgPSBob2lzdCh1c2VybGFuZCwgJ2NvbmZpZycpO1xuZXhwb3J0IGNvbnN0IHJlcG9ydFdlYlZpdGFscyA9IGhvaXN0KHVzZXJsYW5kLCAncmVwb3J0V2ViVml0YWxzJyk7XG4vLyBSZS1leHBvcnQgbGVnYWN5IG1ldGhvZHMuXG5leHBvcnQgY29uc3QgdW5zdGFibGVfZ2V0U3RhdGljUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgJ3Vuc3RhYmxlX2dldFN0YXRpY1Byb3BzJyk7XG5leHBvcnQgY29uc3QgdW5zdGFibGVfZ2V0U3RhdGljUGF0aHMgPSBob2lzdCh1c2VybGFuZCwgJ3Vuc3RhYmxlX2dldFN0YXRpY1BhdGhzJyk7XG5leHBvcnQgY29uc3QgdW5zdGFibGVfZ2V0U3RhdGljUGFyYW1zID0gaG9pc3QodXNlcmxhbmQsICd1bnN0YWJsZV9nZXRTdGF0aWNQYXJhbXMnKTtcbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9nZXRTZXJ2ZXJQcm9wcyA9IGhvaXN0KHVzZXJsYW5kLCAndW5zdGFibGVfZ2V0U2VydmVyUHJvcHMnKTtcbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9nZXRTZXJ2ZXJTaWRlUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgJ3Vuc3RhYmxlX2dldFNlcnZlclNpZGVQcm9wcycpO1xuLy8gQ3JlYXRlIGFuZCBleHBvcnQgdGhlIHJvdXRlIG1vZHVsZSB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG5leHBvcnQgY29uc3Qgcm91dGVNb2R1bGUgPSBuZXcgUGFnZXNSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuUEFHRVMsXG4gICAgICAgIHBhZ2U6IFwiL2luZGV4XCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9cIixcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICAgICAgICBidW5kbGVQYXRoOiAnJyxcbiAgICAgICAgZmlsZW5hbWU6ICcnXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIC8vIGRlZmF1bHQgZXhwb3J0IG1pZ2h0IG5vdCBleGlzdCB3aGVuIG9wdGltaXplZCBmb3IgZGF0YSBvbmx5XG4gICAgICAgIEFwcDogYXBwLmRlZmF1bHQsXG4gICAgICAgIERvY3VtZW50OiBkb2N1bWVudC5kZWZhdWx0XG4gICAgfSxcbiAgICB1c2VybGFuZFxufSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhZ2VzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F&preferredRegion=&absolutePagePath=.%2Fsrc%2Fpages%2Findex.js&absoluteAppPath=private-next-pages%2F_app&absoluteDocumentPath=private-next-pages%2F_document&middlewareConfigBase64=e30%3D!\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/AudioProvider.js":
/*!*****************************************!*\
!*** ./src/components/AudioProvider.js ***!
\*****************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AudioProvider: () => (/* binding */ AudioProvider),\n/* harmony export */ useAudio: () => (/* binding */ useAudio)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, _utils_asset__WEBPACK_IMPORTED_MODULE_3__]);\n([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, _utils_asset__WEBPACK_IMPORTED_MODULE_3__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n// 全局音效 Provider:根据 estmodel 预加载并动态切换资源\n\n\n\n\nconst AudioCtx = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({\n play: ()=>{}\n});\nfunction AudioProvider({ children }) {\n const { estmodel } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const soundsRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)({});\n const ensureAudio = (key, path)=>{\n const url = (0,_utils_asset__WEBPACK_IMPORTED_MODULE_3__.getAssetUrl)(path);\n let audio = soundsRef.current[key];\n if (!audio) {\n audio = new Audio(url);\n audio.preload = 'auto';\n soundsRef.current[key] = audio;\n } else if (audio.src !== url) {\n audio.src = url;\n audio.load();\n }\n };\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"AudioProvider.useEffect\": ()=>{\n if (true) return;\n // 按需添加你要的音效键和值\n ensureAudio('install', '/sounds/generic_in.wav');\n ensureAudio('uninstall', '/sounds/generic_out.wav');\n ensureAudio('keyClick', '/sounds/key_click.wav');\n ensureAudio('pass', '/sounds/test_pass.wav');\n ensureAudio('fail', '/sounds/test_fail.wav');\n ensureAudio('connect', '/sounds/rmt_connect.wav');\n ensureAudio('disconnect', '/sounds/rmt_disconnect.wav');\n }\n }[\"AudioProvider.useEffect\"], [\n estmodel\n ]);\n const play = (key, opts = {})=>{\n const base = soundsRef.current[key];\n if (!base) return;\n // 克隆节点以支持频繁触发的并发播放\n const audio = base.cloneNode(true);\n if (opts.volume != null) audio.volume = Math.min(1, Math.max(0, opts.volume));\n if (opts.playbackRate != null) audio.playbackRate = opts.playbackRate;\n audio.currentTime = 0;\n audio.play().catch(()=>{});\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AudioCtx.Provider, {\n value: {\n play\n },\n children: children\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/AudioProvider.js\",\n lineNumber: 51,\n columnNumber: 5\n }, this);\n}\nconst useAudio = ()=>(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(AudioCtx);\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0F1ZGlvUHJvdmlkZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBdUM7O0FBQzhCO0FBQ3BCO0FBQ0w7QUFFNUMsTUFBTU0seUJBQVdOLG9EQUFhQSxDQUFDO0lBQUVPLE1BQU0sS0FBTztBQUFFO0FBRXpDLFNBQVNDLGNBQWMsRUFBRUMsUUFBUSxFQUFFO0lBQ3hDLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdOLDhEQUFjQTtJQUNuQyxNQUFNTyxZQUFZUiw2Q0FBTUEsQ0FBQyxDQUFDO0lBRTFCLE1BQU1TLGNBQWMsQ0FBQ0MsS0FBS0M7UUFDeEIsTUFBTUMsTUFBTVYseURBQVdBLENBQUNTO1FBQ3hCLElBQUlFLFFBQVFMLFVBQVVNLE9BQU8sQ0FBQ0osSUFBSTtRQUNsQyxJQUFJLENBQUNHLE9BQU87WUFDVkEsUUFBUSxJQUFJRSxNQUFNSDtZQUNsQkMsTUFBTUcsT0FBTyxHQUFHO1lBQ2hCUixVQUFVTSxPQUFPLENBQUNKLElBQUksR0FBR0c7UUFDM0IsT0FBTyxJQUFJQSxNQUFNSSxHQUFHLEtBQUtMLEtBQUs7WUFDNUJDLE1BQU1JLEdBQUcsR0FBR0w7WUFDWkMsTUFBTUssSUFBSTtRQUNaO0lBQ0Y7SUFFQW5CLGdEQUFTQTttQ0FBQztZQUNSLElBQUksSUFBNkQsRUFBRTtZQUNuRSxlQUFlO1lBQ2ZVLFlBQVksV0FBVztZQUN2QkEsWUFBWSxhQUFhO1lBQ3pCQSxZQUFZLFlBQVk7WUFFeEJBLFlBQVksUUFBUTtZQUNwQkEsWUFBWSxRQUFRO1lBRXBCQSxZQUFZLFdBQVc7WUFDdkJBLFlBQVksY0FBYztRQUM1QjtrQ0FBRztRQUFDRjtLQUFTO0lBRWIsTUFBTUgsT0FBTyxDQUFDTSxLQUFLUyxPQUFPLENBQUMsQ0FBQztRQUMxQixNQUFNQyxPQUFPWixVQUFVTSxPQUFPLENBQUNKLElBQUk7UUFDbkMsSUFBSSxDQUFDVSxNQUFNO1FBQ1gsbUJBQW1CO1FBQ25CLE1BQU1QLFFBQVFPLEtBQUtDLFNBQVMsQ0FBQztRQUM3QixJQUFJRixLQUFLRyxNQUFNLElBQUksTUFBTVQsTUFBTVMsTUFBTSxHQUFHQyxLQUFLQyxHQUFHLENBQUMsR0FBR0QsS0FBS0UsR0FBRyxDQUFDLEdBQUdOLEtBQUtHLE1BQU07UUFDM0UsSUFBSUgsS0FBS08sWUFBWSxJQUFJLE1BQU1iLE1BQU1hLFlBQVksR0FBR1AsS0FBS08sWUFBWTtRQUNyRWIsTUFBTWMsV0FBVyxHQUFHO1FBQ3BCZCxNQUFNVCxJQUFJLEdBQUd3QixLQUFLLENBQUMsS0FBTztJQUM1QjtJQUVBLHFCQUNFLDhEQUFDekIsU0FBUzBCLFFBQVE7UUFBQ0MsT0FBTztZQUFFMUI7UUFBSztrQkFDOUJFOzs7Ozs7QUFHUDtBQUVPLE1BQU15QixXQUFXLElBQU1qQyxpREFBVUEsQ0FBQ0ssVUFBVSIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9BdWRpb1Byb3ZpZGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOWFqOWxgOmfs+aViCBQcm92aWRlcu+8muagueaNriBlc3Rtb2RlbCDpooTliqDovb3lubbliqjmgIHliIfmjaLotYTmupBcclxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEZXZpY2VTdG9yZSBmcm9tICdAL3N0b3JlL2RldmljZVN0b3JlJztcclxuaW1wb3J0IHsgZ2V0QXNzZXRVcmwgfSBmcm9tICdAL3V0aWxzL2Fzc2V0JztcclxuXHJcbmNvbnN0IEF1ZGlvQ3R4ID0gY3JlYXRlQ29udGV4dCh7IHBsYXk6ICgpID0+IHt9IH0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEF1ZGlvUHJvdmlkZXIoeyBjaGlsZHJlbiB9KSB7XHJcbiAgY29uc3QgeyBlc3Rtb2RlbCB9ID0gdXNlRGV2aWNlU3RvcmUoKTtcclxuICBjb25zdCBzb3VuZHNSZWYgPSB1c2VSZWYoe30pO1xyXG5cclxuICBjb25zdCBlbnN1cmVBdWRpbyA9IChrZXksIHBhdGgpID0+IHtcclxuICAgIGNvbnN0IHVybCA9IGdldEFzc2V0VXJsKHBhdGgpO1xyXG4gICAgbGV0IGF1ZGlvID0gc291bmRzUmVmLmN1cnJlbnRba2V5XTtcclxuICAgIGlmICghYXVkaW8pIHtcclxuICAgICAgYXVkaW8gPSBuZXcgQXVkaW8odXJsKTtcclxuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcclxuICAgICAgc291bmRzUmVmLmN1cnJlbnRba2V5XSA9IGF1ZGlvO1xyXG4gICAgfSBlbHNlIGlmIChhdWRpby5zcmMgIT09IHVybCkge1xyXG4gICAgICBhdWRpby5zcmMgPSB1cmw7XHJcbiAgICAgIGF1ZGlvLmxvYWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBBdWRpbyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcclxuICAgIC8vIOaMiemcgOa3u+WKoOS9oOimgeeahOmfs+aViOmUruWSjOWAvFxyXG4gICAgZW5zdXJlQXVkaW8oJ2luc3RhbGwnLCAnL3NvdW5kcy9nZW5lcmljX2luLndhdicpO1xyXG4gICAgZW5zdXJlQXVkaW8oJ3VuaW5zdGFsbCcsICcvc291bmRzL2dlbmVyaWNfb3V0LndhdicpO1xyXG4gICAgZW5zdXJlQXVkaW8oJ2tleUNsaWNrJywgJy9zb3VuZHMva2V5X2NsaWNrLndhdicpO1xyXG4gICAgXHJcbiAgICBlbnN1cmVBdWRpbygncGFzcycsICcvc291bmRzL3Rlc3RfcGFzcy53YXYnKTtcclxuICAgIGVuc3VyZUF1ZGlvKCdmYWlsJywgJy9zb3VuZHMvdGVzdF9mYWlsLndhdicpO1xyXG5cclxuICAgIGVuc3VyZUF1ZGlvKCdjb25uZWN0JywgJy9zb3VuZHMvcm10X2Nvbm5lY3Qud2F2Jyk7XHJcbiAgICBlbnN1cmVBdWRpbygnZGlzY29ubmVjdCcsICcvc291bmRzL3JtdF9kaXNjb25uZWN0LndhdicpO1xyXG4gIH0sIFtlc3Rtb2RlbF0pO1xyXG5cclxuICBjb25zdCBwbGF5ID0gKGtleSwgb3B0cyA9IHt9KSA9PiB7XHJcbiAgICBjb25zdCBiYXNlID0gc291bmRzUmVmLmN1cnJlbnRba2V5XTtcclxuICAgIGlmICghYmFzZSkgcmV0dXJuO1xyXG4gICAgLy8g5YWL6ZqG6IqC54K55Lul5pSv5oyB6aKR57mB6Kem5Y+R55qE5bm25Y+R5pKt5pS+XHJcbiAgICBjb25zdCBhdWRpbyA9IGJhc2UuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgaWYgKG9wdHMudm9sdW1lICE9IG51bGwpIGF1ZGlvLnZvbHVtZSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIG9wdHMudm9sdW1lKSk7XHJcbiAgICBpZiAob3B0cy5wbGF5YmFja1JhdGUgIT0gbnVsbCkgYXVkaW8ucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGU7XHJcbiAgICBhdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICBhdWRpby5wbGF5KCkuY2F0Y2goKCkgPT4ge30pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8QXVkaW9DdHguUHJvdmlkZXIgdmFsdWU9e3sgcGxheSB9fT5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9BdWRpb0N0eC5Qcm92aWRlcj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXNlQXVkaW8gPSAoKSA9PiB1c2VDb250ZXh0KEF1ZGlvQ3R4KTsiXSwibmFtZXMiOlsiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VEZXZpY2VTdG9yZSIsImdldEFzc2V0VXJsIiwiQXVkaW9DdHgiLCJwbGF5IiwiQXVkaW9Qcm92aWRlciIsImNoaWxkcmVuIiwiZXN0bW9kZWwiLCJzb3VuZHNSZWYiLCJlbnN1cmVBdWRpbyIsImtleSIsInBhdGgiLCJ1cmwiLCJhdWRpbyIsImN1cnJlbnQiLCJBdWRpbyIsInByZWxvYWQiLCJzcmMiLCJsb2FkIiwib3B0cyIsImJhc2UiLCJjbG9uZU5vZGUiLCJ2b2x1bWUiLCJNYXRoIiwibWluIiwibWF4IiwicGxheWJhY2tSYXRlIiwiY3VycmVudFRpbWUiLCJjYXRjaCIsIlByb3ZpZGVyIiwidmFsdWUiLCJ1c2VBdWRpbyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/AudioProvider.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/CompetitionStatistics.js":
/*!*************************************************!*\
!*** ./src/components/CompetitionStatistics.js ***!
\*************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CompetitionStatistics)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _fingerprintjs_fingerprintjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @fingerprintjs/fingerprintjs */ \"@fingerprintjs/fingerprintjs\");\n/* harmony import */ var _fingerprintjs_fingerprintjs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fingerprintjs_fingerprintjs__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _config_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/config/api */ \"(pages-dir-node)/./src/config/api.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_displayStore__WEBPACK_IMPORTED_MODULE_1__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__]);\n([_store_displayStore__WEBPACK_IMPORTED_MODULE_1__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\nfunction CompetitionStatistics() {\n const [fingerprint, setFingerprint] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');\n const { faultScenarios, seatNumber, seatUUID, reports, cleanStatus } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const { getCurrentProject, getCurrentOperator, getCurrentTestConfig } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n const UUID = seatUUID;\n const SeatNumber = seatNumber;\n // 新增:获取历史数据\n const fetchHistoryData = async (uuid, fp)=>{\n try {\n const response = await fetch(`${_config_api__WEBPACK_IMPORTED_MODULE_4__.API_URLS.COMPETITION.DATA}?UUID=${uuid}&fingerprint=${fp}`);\n if (response.ok) {\n const data = await response.json();\n if (data[fp]?.projects) {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState().updateProjects(data[fp].projects);\n }\n if (data[fp]?.selectedIndexes) {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState().updateselectedIndexes(data[fp].selectedIndexes);\n }\n }\n } catch (error) {\n console.error('获取历史数据失败:', error);\n }\n };\n // 初始化指纹\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"CompetitionStatistics.useEffect\": ()=>{\n if (!UUID || !SeatNumber) return;\n const initFingerprint = {\n \"CompetitionStatistics.useEffect.initFingerprint\": async ()=>{\n try {\n const fp = await _fingerprintjs_fingerprintjs__WEBPACK_IMPORTED_MODULE_3___default().load();\n const { visitorId } = await fp.get();\n // 将SeatNumber编码后混合到指纹中\n const encodedSeatNumber = encodeURIComponent(SeatNumber);\n // const mixedFingerprint = `${visitorId}-${encodedSeatNumber}`;\n const mixedFingerprint = `${encodedSeatNumber}`;\n setFingerprint(mixedFingerprint);\n // 获取历史数据\n await fetchHistoryData(UUID, mixedFingerprint);\n } catch (error) {\n console.error('生成指纹失败:', error);\n }\n }\n }[\"CompetitionStatistics.useEffect.initFingerprint\"];\n initFingerprint();\n }\n }[\"CompetitionStatistics.useEffect\"], [\n UUID,\n SeatNumber\n ]);\n // 定时发送数据\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"CompetitionStatistics.useEffect\": ()=>{\n if (!UUID || !fingerprint) return;\n let intervalId = null; // 声明intervalId变量\n // 设置定时器,每3秒发送一次数据\n intervalId = setInterval({\n \"CompetitionStatistics.useEffect\": ()=>{\n sendStatistics();\n }\n }[\"CompetitionStatistics.useEffect\"], 3000);\n // 获取基准设置状态\n const getRefStatus = {\n \"CompetitionStatistics.useEffect.getRefStatus\": ()=>{\n const currentConfig = getCurrentTestConfig();\n const moduleType = currentConfig?.moduleType;\n if (!moduleType) return false;\n const { ref } = _store_displayStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState();\n if (moduleType === '8000') return ref.copper?.status || false;\n if (moduleType === 'cfp') return ref.cfp?.status || false;\n if (moduleType === 'ofp') return ref.ofp?.status || false;\n return false;\n }\n }[\"CompetitionStatistics.useEffect.getRefStatus\"];\n // 获取测试结果统计\n const getTestResults = {\n \"CompetitionStatistics.useEffect.getTestResults\": ()=>{\n const currentProject = getCurrentProject();\n if (!currentProject?.testResults) return {\n passCount: 0,\n failCount: 0\n };\n const passCount = currentProject?.testResults.filter({\n \"CompetitionStatistics.useEffect.getTestResults\": (result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }\n }[\"CompetitionStatistics.useEffect.getTestResults\"]).length;\n const failCount = currentProject?.testResults.filter({\n \"CompetitionStatistics.useEffect.getTestResults\": (result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }\n }[\"CompetitionStatistics.useEffect.getTestResults\"]).length;\n return {\n passCount,\n failCount\n };\n }\n }[\"CompetitionStatistics.useEffect.getTestResults\"];\n // 发送统计数据\n const sendStatistics = {\n \"CompetitionStatistics.useEffect.sendStatistics\": async ()=>{\n const currentProject = getCurrentProject();\n const currentOperator = getCurrentOperator();\n const currentConfig = getCurrentTestConfig();\n const refStatus = getRefStatus();\n const { passCount, failCount } = getTestResults();\n const currentReports = _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState().reports;\n const statisticsData = {\n userId: seatNumber,\n scenario: faultScenarios,\n project: currentProject?.name || '',\n operator: currentOperator?.name || '',\n testLimit: currentConfig?.params?.limitValue || '',\n refStatus,\n testResultsCount: {\n passCount,\n failCount\n },\n projects: _store_displayStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState().projects,\n selectedIndexes: _store_displayStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState().selectedIndexes,\n reports: currentReports\n };\n try {\n const response = await fetch(_config_api__WEBPACK_IMPORTED_MODULE_4__.API_URLS.COMPETITION.DATA, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n UUID,\n fingerprint,\n timestamp: Date.now(),\n data: statisticsData\n })\n });\n if (!response.ok) {\n const error = await response.json();\n console.error('发送比赛数据失败:', error);\n }\n } catch (error) {\n console.error('发送比赛数据出错:', error);\n }\n }\n }[\"CompetitionStatistics.useEffect.sendStatistics\"];\n // 返回清理函数\n return ({\n \"CompetitionStatistics.useEffect\": ()=>{\n if (intervalId) {\n clearInterval(intervalId);\n }\n }\n })[\"CompetitionStatistics.useEffect\"];\n }\n }[\"CompetitionStatistics.useEffect\"], [\n seatUUID,\n fingerprint,\n faultScenarios,\n seatNumber,\n getCurrentProject,\n getCurrentTestConfig\n ]);\n return null;\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0NvbXBldGl0aW9uU3RhdGlzdGljcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUE0QztBQUNPO0FBQ0Y7QUFDUTtBQUNqQjtBQUd6QixTQUFTTTtJQUN0QixNQUFNLENBQUNDLGFBQWFDLGVBQWUsR0FBR1AsK0NBQVFBLENBQUM7SUFDL0MsTUFBTSxFQUFFUSxjQUFjLEVBQUVDLFVBQVUsRUFBQ0MsUUFBUSxFQUFFQyxPQUFPLEVBQUNDLFdBQVcsRUFBQyxHQUFHViw4REFBY0E7SUFDbEYsTUFBTSxFQUFFVyxpQkFBaUIsRUFBQ0Msa0JBQWtCLEVBQUVDLG9CQUFvQixFQUFDLEdBQUdkLCtEQUFlQTtJQUNyRixNQUFNZSxPQUFPTjtJQUNiLE1BQU1PLGFBQWFSO0lBR3JCLFlBQVk7SUFDWixNQUFNUyxtQkFBbUIsT0FBT0MsTUFBTUM7UUFDcEMsSUFBSTtZQUNGLE1BQU1DLFdBQVcsTUFBTUMsTUFBTSxHQUFHbEIsaURBQVFBLENBQUNtQixXQUFXLENBQUNDLElBQUksQ0FBQyxNQUFNLEVBQUVMLEtBQUssYUFBYSxFQUFFQyxJQUFJO1lBQzFGLElBQUlDLFNBQVNJLEVBQUUsRUFBRTtnQkFDZixNQUFNQyxPQUFPLE1BQU1MLFNBQVNNLElBQUk7Z0JBQ2hDLElBQUlELElBQUksQ0FBQ04sR0FBRyxFQUFFUSxVQUFVO29CQUN0QjNCLG9FQUF3QixHQUFHNkIsY0FBYyxDQUFDSixJQUFJLENBQUNOLEdBQUcsQ0FBQ1EsUUFBUTtnQkFDN0Q7Z0JBQ0EsSUFBSUYsSUFBSSxDQUFDTixHQUFHLEVBQUVXLGlCQUFpQjtvQkFDN0I5QixvRUFBd0IsR0FBRytCLHFCQUFxQixDQUFDTixJQUFJLENBQUNOLEdBQUcsQ0FBQ1csZUFBZTtnQkFDM0U7WUFFRjtRQUNGLEVBQUUsT0FBT0UsT0FBTztZQUNkQyxRQUFRRCxLQUFLLENBQUMsYUFBYUE7UUFDN0I7SUFDRjtJQUdBLFFBQVE7SUFDUmxDLGdEQUFT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QU87b0JBR3hELE1BQU0yRCxpQkFBaUI7d0JBQ3JCQyxRQUFROUQ7d0JBQ1IrRCxVQUFVaEU7d0JBQ1ZpRSxTQUFTbkIsZ0JBQWdCb0IsUUFBUTt3QkFDakNDLFVBQVVSLGlCQUFpQk8sUUFBUTt3QkFDbkNFLFdBQVc5QixlQUFlK0IsUUFBUUMsY0FBYzt3QkFDaERWO3dCQUNBVyxrQkFBa0I7NEJBQUV2Qjs0QkFBV0M7d0JBQVU7d0JBQ3pDN0IsVUFBVTNCLG9FQUF3QixHQUFHMkIsUUFBUTt3QkFDN0NHLGlCQUFnQjlCLG9FQUF3QixHQUFHOEIsZUFBZTt3QkFDMURwQixTQUFTMEQ7b0JBRVg7b0JBRUEsSUFBSTt3QkFDRixNQUFNaEQsV0FBVyxNQUFNQyxNQUFNbEIsaURBQVFBLENBQUNtQixXQUFXLENBQUNDLElBQUksRUFBRTs0QkFDdER3RCxRQUFROzRCQUNSQyxTQUFTO2dDQUNQLGdCQUFnQjs0QkFDbEI7NEJBQ0FDLE1BQU1DLEtBQUtDLFNBQVMsQ0FBQztnQ0FDbkJwRTtnQ0FDQVY7Z0NBQ0ErRSxXQUFXQyxLQUFLQyxHQUFHO2dDQUNuQjdELE1BQU00Qzs0QkFDUjt3QkFDRjt3QkFFQSxJQUFJLENBQUNqRCxTQUFTSSxFQUFFLEVBQUU7NEJBQ2hCLE1BQU1RLFFBQVEsTUFBTVosU0FBU00sSUFBSTs0QkFDakNPLFFBQVFELEtBQUssQ0FBQyxhQUFhQTt3QkFDN0I7b0JBQ0YsRUFBRSxPQUFPQSxPQUFPO3dCQUNkQyxRQUFRRCxLQUFLLENBQUMsYUFBYUE7b0JBQzdCO2dCQUNGOztZQUdBLFNBQVM7WUFDVDttREFBTztvQkFDTCxJQUFJUyxZQUFZO3dCQUNkOEMsY0FBYzlDO29CQUNoQjtnQkFDRjs7UUFDRjswQ0FBRztRQUFDaEM7UUFBVUo7UUFBYUU7UUFBZ0JDO1FBQVlJO1FBQW1CRTtLQUFxQjtJQUUvRixPQUFPO0FBQ1QiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvQ29tcGV0aXRpb25TdGF0aXN0aWNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcbmltcG9ydCBGaW5nZXJwcmludEpTIGZyb20gJ0BmaW5nZXJwcmludGpzL2ZpbmdlcnByaW50anMnO1xyXG5pbXBvcnQgeyBBUElfVVJMUyB9IGZyb20gJ0AvY29uZmlnL2FwaSc7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29tcGV0aXRpb25TdGF0aXN0aWNzKCkge1xyXG4gIGNvbnN0IFtmaW5nZXJwcmludCwgc2V0RmluZ2VycHJpbnRdID0gdXNlU3RhdGUoJycpO1xyXG4gIGNvbnN0IHsgZmF1bHRTY2VuYXJpb3MsIHNlYXROdW1iZXIsc2VhdFVVSUQsIHJlcG9ydHMsY2xlYW5TdGF0dXN9ID0gdXNlRGV2aWNlU3RvcmUoKTtcclxuICBjb25zdCB7IGdldEN1cnJlbnRQcm9qZWN0LGdldEN1cnJlbnRPcGVyYXRvciwgZ2V0Q3VycmVudFRlc3RDb25maWd9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcbiAgY29uc3QgVVVJRCA9IHNlYXRVVUlEO1xyXG4gIGNvbnN0IFNlYXROdW1iZXIgPSBzZWF0TnVtYmVyO1xyXG5cclxuXHJcbi8vIOaWsOWinu+8muiOt+WPluWOhuWPsuaVsOaNrlxyXG5jb25zdCBmZXRjaEhpc3RvcnlEYXRhID0gYXN5bmMgKHV1aWQsIGZwKSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVBJX1VSTFMuQ09NUEVUSVRJT04uREFUQX0/VVVJRD0ke3V1aWR9JmZpbmdlcnByaW50PSR7ZnB9YCk7XHJcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgaWYgKGRhdGFbZnBdPy5wcm9qZWN0cykge1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnVwZGF0ZVByb2plY3RzKGRhdGFbZnBdLnByb2plY3RzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF0YVtmcF0/LnNlbGVjdGVkSW5kZXhlcykge1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnVwZGF0ZXNlbGVjdGVkSW5kZXhlcyhkYXRhW2ZwXS5zZWxlY3RlZEluZGV4ZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCfojrflj5bljoblj7LmlbDmja7lpLHotKU6JywgZXJyb3IpO1xyXG4gIH1cclxufTtcclxuXHJcblxyXG4vLyDliJ3lp4vljJbmjIfnurlcclxudXNlRWZmZWN0KCgpID0+IHtcclxuICBpZiAoIVVVSUQgfHwgIVNlYXROdW1iZXIpIHJldHVybjtcclxuXHJcbiAgY29uc3QgaW5pdEZpbmdlcnByaW50ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZnAgPSBhd2FpdCBGaW5nZXJwcmludEpTLmxvYWQoKTtcclxuICAgICAgY29uc3QgeyB2aXNpdG9ySWQgfSA9IGF3YWl0IGZwLmdldCgpO1xyXG4gICAgICAvLyDlsIZTZWF0TnVtYmVy57yW56CB5ZCO5re35ZCI5Yiw5oyH57q55LitXHJcbiAgICAgIGNvbnN0IGVuY29kZWRTZWF0TnVtYmVyID0gZW5jb2RlVVJJQ29tcG9uZW50KFNlYXROdW1iZXIpO1xyXG4gICAgICAvLyBjb25zdCBtaXhlZEZpbmdlcnByaW50ID0gYCR7dmlzaXRvcklkfS0ke2VuY29kZWRTZWF0TnVtYmVyfWA7XHJcbiAgICAgIGNvbnN0IG1peGVkRmluZ2VycHJpbnQgPSBgJHtlbmNvZGVkU2VhdE51bWJlcn1gO1xyXG4gICAgICBzZXRGaW5nZXJwcmludChtaXhlZEZpbmdlcnByaW50KTtcclxuICAgICAgXHJcbiAgICAgIC8vIOiOt+WPluWOhuWPsuaVsOaNrlxyXG4gICAgICBhd2FpdCBmZXRjaEhpc3RvcnlEYXRhKFVVSUQsIG1peGVkRmluZ2VycHJpbnQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcign55Sf5oiQ5oyH57q55aSx6LSlOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBpbml0RmluZ2VycHJpbnQoKTtcclxufSwgW1VVSUQsIFNlYXROdW1iZXJdKTtcclxuXHJcbi8vIOWumuaXtuWPkemAgeaVsOaNrlxyXG51c2VFZmZlY3QoKCkgPT4ge1xyXG4gIGlmICghVVVJRCB8fCAhZmluZ2VycHJpbnQpIHJldHVybjtcclxuXHJcbiAgbGV0IGludGVydmFsSWQgPSBudWxsOyAgLy8g5aOw5piOaW50ZXJ2YWxJZOWPmOmHj1xyXG5cclxuICAvLyDorr7nva7lrprml7blmajvvIzmr48z56eS5Y+R6YCB5LiA5qyh5pWw5o2uXHJcbiAgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgIHNlbmRTdGF0aXN0aWNzKCk7XHJcbiAgfSwgMzAwMCk7XHJcblxyXG4gIC8vIOiOt+WPluWfuuWHhuiuvue9rueKtuaAgVxyXG4gICAgY29uc3QgZ2V0UmVmU3RhdHVzID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFRlc3RDb25maWcoKTtcclxuICAgICAgY29uc3QgbW9kdWxlVHlwZSA9IGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGU7XHJcbiAgICAgIGlmICghbW9kdWxlVHlwZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgeyByZWYgfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpO1xyXG4gICAgICBpZiAobW9kdWxlVHlwZSA9PT0gJzgwMDAnKSByZXR1cm4gcmVmLmNvcHBlcj8uc3RhdHVzIHx8IGZhbHNlO1xyXG4gICAgICBpZiAobW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHJldHVybiByZWYuY2ZwPy5zdGF0dXMgfHwgZmFsc2U7XHJcbiAgICAgIGlmIChtb2R1bGVUeXBlID09PSAnb2ZwJykgcmV0dXJuIHJlZi5vZnA/LnN0YXR1cyB8fCBmYWxzZTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDojrflj5bmtYvor5Xnu5Pmnpznu5/orqFcclxuICAgIGNvbnN0IGdldFRlc3RSZXN1bHRzID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICAgIGlmICghY3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzKSByZXR1cm4geyBwYXNzQ291bnQ6IDAsIGZhaWxDb3VudDogMCB9O1xyXG4gICAgICBcclxuICAgICAgY29uc3QgcGFzc0NvdW50ID0gY3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvcHBlclN0YXR1cyA9IHJlc3VsdC5Db3BwZXJSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3QgY2ZwU3RhdHVzID0gcmVzdWx0LkNGUFJlc3VsdFN0YXR1cztcclxuICAgICAgICBjb25zdCBvZnBTdGF0dXMgPSByZXN1bHQub2ZwUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjb3BwZXJTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvcHBlclN0YXR1cyA9PT0gJ3Bhc3MnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2ZwU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZnBTdGF0dXMgPT09ICdwYXNzJztcclxuICAgICAgICB9IGVsc2UgaWYgKG9mcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gb2ZwU3RhdHVzID09PSAncGFzcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pLmxlbmd0aDtcclxuICAgIFxyXG4gICAgY29uc3QgZmFpbENvdW50ID0gY3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvcHBlclN0YXR1cyA9IHJlc3VsdC5Db3BwZXJSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3QgY2ZwU3RhdHVzID0gcmVzdWx0LkNGUFJlc3VsdFN0YXR1cztcclxuICAgICAgICBjb25zdCBvZnBTdGF0dXMgPSByZXN1bHQub2ZwUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjb3BwZXJTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvcHBlclN0YXR1cyA9PT0gJ2ZhaWwnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2ZwU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZnBTdGF0dXMgPT09ICdmYWlsJztcclxuICAgICAgICB9IGVsc2UgaWYgKG9mcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gb2ZwU3RhdHVzID09PSAnZmFpbCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pLmxlbmd0aDtcclxuXHJcblxyXG4gICAgICByZXR1cm4geyBwYXNzQ291bnQsIGZhaWxDb3VudCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDlj5HpgIHnu5/orqHmlbDmja5cclxuICAgIGNvbnN0IHNlbmRTdGF0aXN0aWNzID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRPcGVyYXRvciA9IGdldEN1cnJlbnRPcGVyYXRvcigpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFRlc3RDb25maWcoKTtcclxuICAgICAgY29uc3QgcmVmU3RhdHVzID0gZ2V0UmVmU3RhdHVzKCk7XHJcbiAgICAgIGNvbnN0IHsgcGFzc0NvdW50LCBmYWlsQ291bnQgfSA9IGdldFRlc3RSZXN1bHRzKCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSZXBvcnRzID0gdXNlRGV2aWNlU3RvcmUuZ2V0U3RhdGUoKS5yZXBvcnRzO1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IHN0YXRpc3RpY3NEYXRhID0ge1xyXG4gICAgICAgIHVzZXJJZDogc2VhdE51bWJlcixcclxuICAgICAgICBzY2VuYXJpbzogZmF1bHRTY2VuYXJpb3MsXHJcbiAgICAgICAgcHJvamVjdDogY3VycmVudFByb2plY3Q/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgb3BlcmF0b3I6IGN1cnJlbnRPcGVyYXRvcj8ubmFtZSB8fCAnJyxcclxuICAgICAgICB0ZXN0TGltaXQ6IGN1cnJlbnRDb25maWc/LnBhcmFtcz8ubGltaXRWYWx1ZSB8fCAnJyxcclxuICAgICAgICByZWZTdGF0dXMsXHJcbiAgICAgICAgdGVzdFJlc3VsdHNDb3VudDogeyBwYXNzQ291bnQsIGZhaWxDb3VudCB9LFxyXG4gICAgICAgIHByb2plY3RzOiB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5wcm9qZWN0cyxcclxuICAgICAgICBzZWxlY3RlZEluZGV4ZXM6dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLFxyXG4gICAgICAgIHJlcG9ydHM6IGN1cnJlbnRSZXBvcnRzLFxyXG5cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChBUElfVVJMUy5DT01QRVRJVElPTi5EQVRBLCB7XHJcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIFVVSUQsXHJcbiAgICAgICAgICAgIGZpbmdlcnByaW50LFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGRhdGE6IHN0YXRpc3RpY3NEYXRhXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCflj5HpgIHmr5TotZvmlbDmja7lpLHotKU6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCflj5HpgIHmr5TotZvmlbDmja7lh7rplJk6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyDov5Tlm57muIXnkIblh73mlbBcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGlmIChpbnRlcnZhbElkKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9LCBbc2VhdFVVSUQsIGZpbmdlcnByaW50LCBmYXVsdFNjZW5hcmlvcywgc2VhdE51bWJlciwgZ2V0Q3VycmVudFByb2plY3QsIGdldEN1cnJlbnRUZXN0Q29uZmlnXSk7XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZURpc3BsYXlTdG9yZSIsInVzZURldmljZVN0b3JlIiwiRmluZ2VycHJpbnRKUyIsIkFQSV9VUkxTIiwiQ29tcGV0aXRpb25TdGF0aXN0aWNzIiwiZmluZ2VycHJpbnQiLCJzZXRGaW5nZXJwcmludCIsImZhdWx0U2NlbmFyaW9zIiwic2VhdE51bWJlciIsInNlYXRVVUlEIiwicmVwb3J0cyIsImNsZWFuU3RhdHVzIiwiZ2V0Q3VycmVudFByb2plY3QiLCJnZXRDdXJyZW50T3BlcmF0b3IiLCJnZXRDdXJyZW50VGVzdENvbmZpZyIsIlVVSUQiLCJTZWF0TnVtYmVyIiwiZmV0Y2hIaXN0b3J5RGF0YSIsInV1aWQiLCJmcCIsInJlc3BvbnNlIiwiZmV0Y2giLCJDT01QRVRJVElPTiIsIkRBVEEiLCJvayIsImRhdGEiLCJqc29uIiwicHJvamVjdHMiLCJnZXRTdGF0ZSIsInVwZGF0ZVByb2plY3RzIiwic2VsZWN0ZWRJbmRleGVzIiwidXBkYXRlc2VsZWN0ZWRJbmRleGVzIiwiZXJyb3IiLCJjb25zb2xlIiwiaW5pdEZpbmdlcnByaW50IiwibG9hZCIsInZpc2l0b3JJZCIsImdldCIsImVuY29kZWRTZWF0TnVtYmVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWl4ZWRGaW5nZXJwcmludCIsImludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsInNlbmRTdGF0aXN0aWNzIiwiZ2V0UmVmU3RhdHVzIiwiY3VycmVudENvbmZpZyIsIm1vZHVsZVR5cGUiLCJyZWYiLCJjb3BwZXIiLCJzdGF0dXMiLCJjZnAiLCJvZnAiLCJnZXRUZXN0UmVzdWx0cyIsImN1cnJlbnRQcm9qZWN0IiwidGVzdFJlc3VsdHMiLCJwYXNzQ291bnQiLCJmYWlsQ291bnQiLCJmaWx0ZXIiLCJyZXN1bHQiLCJjb3BwZXJTdGF0dXMiLCJDb3BwZXJSZXN1bHRTdGF0dXMiLCJjZnBTdGF0dXMiLCJDRlBSZXN1bHRTdGF0dXMiLCJvZnBTdGF0dXMiLCJvZnBSZXN1bHRTdGF0dXMiLCJsZW5ndGgiLCJjdXJyZW50T3BlcmF0b3IiLCJyZWZTdGF0dXMiLCJjdXJyZW50UmVwb3J0cyIsInN0YXRpc3RpY3NEYXRhIiwidXNlcklkIiwic2NlbmFyaW8iLCJwcm9qZWN0IiwibmFtZSIsIm9wZXJhdG9yIiwidGVzdExpbWl0IiwicGFyYW1zIiwibGltaXRWYWx1ZSIsInRlc3RSZXN1bHRzQ291bnQiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aW1lc3RhbXAiLCJEYXRlIiwibm93IiwiY2xlYXJJbnRlcnZhbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/CompetitionStatistics.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/ConnectionAnalyzer.js":
/*!**********************************************!*\
!*** ./src/components/ConnectionAnalyzer.js ***!
\**********************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _config_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/config/api */ \"(pages-dir-node)/./src/config/api.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__, _store_displayStore__WEBPACK_IMPORTED_MODULE_2__]);\n([_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__, _store_displayStore__WEBPACK_IMPORTED_MODULE_2__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n// 构建连接图\nfunction buildConnectionGraph(connections) {\n const graph = {};\n connections.forEach((conn)=>{\n graph[conn.source] = graph[conn.source] || [];\n graph[conn.target] = graph[conn.target] || [];\n graph[conn.source].push(conn.target);\n graph[conn.target].push(conn.source);\n });\n return graph;\n}\n// 查找跳线/连接器的另一端\nfunction findCounterpart(nodeName) {\n const jumperTypes = [\n {\n pattern: /(pachcode-copper|pachcode-m12-d|pachcode-m12-x|sm-lc-lc|mm-lc-lc|smc-lc-lc|mmc-lc-lc|mm-mpo-mpo|sm-mpo-mpo)/,\n replace: (n)=>n.includes('-left') ? n.replace('-left', '-right') : n.replace('-right', '-left')\n },\n {\n pattern: /lc-connector-\\d+-(left|right)/,\n replace: (n)=>n.includes('-left') ? n.replace('-left', '-right') : n.replace('-right', '-left')\n },\n // MPO-LC连接器穿透逻辑 - 从LC端口到MPO端口\n {\n pattern: /(mm-mpo-lc-box-\\d+-lc-port)(\\d+)/,\n replace: (n)=>{\n const matches = n.match(/(mm-mpo-lc-box-\\d+)-lc-port(\\d+)/);\n if (matches) {\n return `${matches[1]}-mpo-port1`; // 从任意LC端口穿透到对应的MPO端口\n }\n return n;\n }\n }\n ];\n for (const { pattern, replace } of jumperTypes){\n if (nodeName.match(pattern)) return replace(nodeName);\n }\n return null;\n}\n// 完整路径追踪\nfunction traceFullPath(graph, startPoint) {\n const visited = new Set();\n const path = [];\n let current = startPoint;\n while(current && !visited.has(current)){\n visited.add(current);\n path.push(current);\n // 跳线穿透逻辑\n const counterpart = findCounterpart(current);\n if (counterpart && graph[counterpart] && !visited.has(counterpart)) {\n current = counterpart;\n continue;\n }\n // 常规连接\n const neighbors = (graph[current] || []).filter((n)=>!visited.has(n));\n current = neighbors[0];\n }\n // 检测路径中是否存在MPO-LC端口,并修改end值\n let endPoint = path[path.length - 1] || startPoint;\n // 检查路径中是否包含MPO-LC端口\n for (const item of path){\n const matches = item.match(/(mm-mpo-lc-box-\\d+-lc-port)(\\d+)/);\n if (matches) {\n // 在end值上添加端口号\n endPoint = `${endPoint}-port${matches[2]}`;\n break; // 只使用第一个匹配的端口号\n }\n }\n return {\n start: startPoint,\n end: endPoint,\n path: path,\n length: path.length - 1\n };\n}\n// 8000型分析\nfunction analyze8000(graph) {\n const result = {\n mainPaths: {},\n remotePaths: {}\n };\n // 动态识别端口\n const analyzePorts = (prefix, target)=>{\n Object.keys(graph).filter((k)=>k.startsWith(prefix)).forEach((port)=>{\n const trace = traceFullPath(graph, port);\n target[port] = {\n ...trace,\n portType: port.includes('channel') ? 'channel' : 'permanent'\n };\n });\n };\n analyzePorts('main-', result.mainPaths);\n analyzePorts('remote-', result.remotePaths);\n return result;\n}\n// CFP型分析\nfunction analyzeCFP(graph) {\n const result = {\n mainPaths: {},\n remotePaths: {}\n };\n // 端口配置\n const PORT_CONFIG = {\n main: {\n outputs: [\n 'main-cfp-sm-out',\n 'main-cfp-mm-out'\n ],\n input: 'main-cfp-in',\n vfl: 'main-vfl'\n },\n remote: {\n outputs: [\n 'remote-cfp-sm-out',\n 'remote-cfp-mm-out'\n ],\n input: 'remote-cfp-in'\n }\n };\n // 分析端口连接\n const analyzePort = (port, type)=>{\n if (!graph[port]) return;\n const trace = traceFullPath(graph, port);\n result[`${type}Paths`][port] = {\n ...trace\n };\n };\n // 分析所有端口\n Object.values(PORT_CONFIG.main).flat().forEach((p)=>analyzePort(p, 'main'));\n Object.values(PORT_CONFIG.remote).flat().forEach((p)=>analyzePort(p, 'remote'));\n return result;\n}\n// OFP型分析\nfunction analyzeOFP(graph) {\n const result = {\n mainPaths: {}\n };\n [\n 'main-ofp-sm-out',\n 'main-ofp-mm-out',\n 'main-vfl'\n ].forEach((port)=>{\n if (graph[port]) {\n const trace = traceFullPath(graph, port);\n result.mainPaths[port] = {\n ...trace\n };\n }\n });\n return result;\n}\n// 创建通用连接状态检查\nconst setConnectionStatus = async (result, moduleType, connections)=>{\n try {\n // 从API获取连接配置\n const deviceStore = _store_deviceStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState();\n const faultScenario = deviceStore.faultScenarios || '';\n const apiUrl = _config_api__WEBPACK_IMPORTED_MODULE_3__.API_URLS.CONNECTION.MAP_WITH_SCENE(faultScenario);\n const response = await fetch(apiUrl);\n if (!response.ok) {\n throw new Error('获取连接配置失败');\n }\n const data = await response.json();\n const connectionMap = data || {};\n const mainPaths = result.mainPaths;\n const mainEnd = mainPaths ? Object.values(mainPaths)[0]?.end || null : null;\n const mainStart = mainPaths ? Object.values(mainPaths)[0]?.start || null : null;\n // OFP模块特殊处理\n if (moduleType === 'ofp' && mainEnd && mainPaths) {\n // 直接查找mainEnd作为键的情况\n if (connectionMap[mainEnd]) {\n result.OFPStatus = connectionMap[mainEnd]?.fiberstatus || null;\n result.OFPConnectedTo = connectionMap[mainEnd]?.connectedTo || null;\n } else {\n // 如果mainEnd不是键,查找connectedTo等于mainEnd的项\n for(const key in connectionMap){\n if (connectionMap[key]?.connectedTo === mainEnd && connectionMap[key]?.type === 'fiber') {\n result.OFPStatus = connectionMap[key]?.fiberstatus || null;\n result.OFPConnectedTo = key;\n break;\n }\n }\n }\n // 查找OFPConnectedTo对应的source值\n if (result.OFPConnectedTo && connections) {\n const matchingConnection = connections.find((conn)=>conn.target === result.OFPConnectedTo);\n result.OFPConnectedToRefStatus = matchingConnection ? matchingConnection.source : null;\n }\n // 查找mainEnd对应的source值\n if (mainStart && connections) {\n const mainStartConnection = connections.find((conn)=>conn.target === mainStart);\n result.OFPoutRefStatus = mainStartConnection ? mainStartConnection.source : null;\n }\n return;\n }\n // 其他模块的处理逻辑\n const remotePaths = result.remotePaths || {};\n const remoteEnd = Object.values(remotePaths)[0]?.end;\n // 端口互通检查\n if (mainEnd && remoteEnd) {\n // CFP模块特殊处理\n if (moduleType === 'cfp') {\n // 获取四个端点\n const mainSmOutEnd = mainPaths['main-cfp-sm-out']?.end;\n const mainMmOutEnd = mainPaths['main-cfp-mm-out']?.end;\n const mainInEnd = mainPaths['main-cfp-in']?.end;\n const remoteSmOutEnd = remotePaths['remote-cfp-sm-out']?.end;\n const remoteMmOutEnd = remotePaths['remote-cfp-mm-out']?.end;\n const remoteInEnd = remotePaths['remote-cfp-in']?.end;\n // 检查两对连接\n const checkConnection = (end1, end2)=>{\n if (!end1 || !end2) return false;\n return Object.keys(connectionMap).some((key)=>{\n const connection = connectionMap[key];\n return connection.connectedTo === end1 && key === end2 || connection.connectedTo === end2 && key === end1;\n });\n };\n // 分别检查单模和多模的连接\n const isMainToRemoteSmConnected = checkConnection(mainSmOutEnd, remoteInEnd);\n const isMainToRemoteMmConnected = checkConnection(mainMmOutEnd, remoteInEnd);\n const isRemoteToMainSmConnected = checkConnection(remoteSmOutEnd, mainInEnd);\n const isRemoteToMainMmConnected = checkConnection(remoteMmOutEnd, mainInEnd);\n // 任一对连接成功即认为连接成功\n const isConnected = isMainToRemoteSmConnected && isRemoteToMainSmConnected || isMainToRemoteMmConnected && isRemoteToMainMmConnected;\n result.CFPConnectStatus = isConnected;\n // 如果连接存在,获取详细状态信息\n if (isConnected) {\n let connectionKey1, connectionKey2;\n if (isMainToRemoteSmConnected && isRemoteToMainSmConnected) {\n // 单模连接\n connectionKey1 = Object.keys(connectionMap).find((key)=>connectionMap[key].connectedTo === mainSmOutEnd && key === remoteInEnd || connectionMap[key].connectedTo === remoteInEnd && key === mainSmOutEnd);\n connectionKey2 = Object.keys(connectionMap).find((key)=>connectionMap[key].connectedTo === remoteSmOutEnd && key === mainInEnd || connectionMap[key].connectedTo === mainInEnd && key === remoteSmOutEnd);\n } else {\n // 多模连接\n connectionKey1 = Object.keys(connectionMap).find((key)=>connectionMap[key].connectedTo === mainMmOutEnd && key === remoteInEnd || connectionMap[key].connectedTo === remoteInEnd && key === mainMmOutEnd);\n connectionKey2 = Object.keys(connectionMap).find((key)=>connectionMap[key].connectedTo === remoteMmOutEnd && key === mainInEnd || connectionMap[key].connectedTo === mainInEnd && key === remoteMmOutEnd);\n }\n if (connectionKey1 && connectionKey2) {\n const connection1 = connectionMap[connectionKey1];\n const connection2 = connectionMap[connectionKey2];\n result.CFPMainIn = connection1.fiberstatus;\n result.CFPMainOut = connection2.fiberstatus;\n }\n } else {\n result.CFPMainIn = 'unknown';\n result.CFPMainOut = 'unknown';\n }\n } else {\n // 其他模块的处理逻辑\n const isConnected = Object.keys(connectionMap).some((key)=>{\n const connection = connectionMap[key];\n return connection.connectedTo === mainEnd && key === remoteEnd || connection.connectedTo === remoteEnd && key === mainEnd;\n });\n // 设置连接状态\n const statusPrefix = moduleType.toUpperCase();\n result[`${statusPrefix}ConnectStatus`] = isConnected;\n // 如果连接存在,获取详细状态信息\n if (isConnected) {\n const connectionKey = Object.keys(connectionMap).find((key)=>connectionMap[key].connectedTo === mainEnd && key === remoteEnd || connectionMap[key].connectedTo === remoteEnd && key === mainEnd);\n if (connectionKey) {\n const connection = connectionMap[connectionKey];\n switch(moduleType){\n case '8000':\n result.CopperWiremapStatus = connection.wiremapstatus;\n result.CopperPerformanceStatus = connection.performancestatus;\n break;\n }\n }\n } else {\n // 未连接时的默认状态\n switch(moduleType){\n case '8000':\n result.CopperWiremapStatus = 'unknown';\n result.CopperPerformanceStatus = 'unknown';\n break;\n case 'cfp':\n result.CFPMainIn = 'unknown';\n result.CFPMainOut = 'unknown';\n break;\n }\n }\n }\n } else {\n // 无效连接时的默认状态\n const statusPrefix = moduleType.toUpperCase();\n result[`${statusPrefix}ConnectStatus`] = false;\n switch(moduleType){\n case '8000':\n result.CopperWiremapStatus = 'unknown';\n result.CopperPerformanceStatus = 'unknown';\n break;\n case 'cfp':\n result.CFPMainIn = 'unknown';\n result.CFPMainOut = 'unknown';\n break;\n }\n }\n } catch (error) {\n console.error('获取连接配置错误:', error);\n // 错误时的默认状态\n const statusPrefix = moduleType.toUpperCase();\n result[`${statusPrefix}ConnectStatus`] = false;\n switch(moduleType){\n case '8000':\n result.CopperWiremapStatus = 'unknown';\n result.CopperPerformanceStatus = 'unknown';\n break;\n case 'cfp':\n result.CFPMainIn = 'unknown';\n result.CFPMainOut = 'unknown';\n break;\n case 'ofp':\n result.OFPStatus = 'unknown';\n break;\n }\n }\n};\n// 组装最终输出的分析结果\nasync function analyzeAllConnections(connections) {\n const deviceStore = _store_deviceStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getState();\n const mainModule = deviceStore.mainUnitModules[0]?.id;\n const remoteModule = deviceStore.remoteUnitModules[0]?.id;\n // 处理没有连接的情况\n if (!connections || connections.length === 0) {\n return {\n mainModule,\n remoteModule\n };\n }\n const graph = buildConnectionGraph(connections);\n const result = {\n mainModule,\n remoteModule\n };\n if (mainModule?.includes('8000')) {\n Object.assign(result, analyze8000(graph));\n } else if (mainModule?.includes('cfp')) {\n Object.assign(result, analyzeCFP(graph));\n } else if (mainModule?.includes('ofp')) {\n Object.assign(result, analyzeOFP(graph));\n } else {\n result.unknownPaths = {};\n Object.keys(graph).forEach((port)=>{\n result.unknownPaths[port] = traceFullPath(graph, port);\n });\n }\n // 检查端口互通状态并更新结果\n const moduleTypeMap = {\n '8000': '8000',\n 'cfp': 'cfp',\n 'ofp': 'ofp'\n };\n const currentModuleType = moduleTypeMap[mainModule?.split('-')[0]] || '8000';\n await setConnectionStatus(result, currentModuleType, connections);\n return result;\n}\n// 同步分析结果到deivceStore\nconst ConnectionAnalyzer = ()=>{\n const connectionPaths = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n \"ConnectionAnalyzer.useDeviceStore[connectionPaths]\": (state)=>state.connectionPaths\n }[\"ConnectionAnalyzer.useDeviceStore[connectionPaths]\"]);\n const updateConnectionStatus = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n \"ConnectionAnalyzer.useDeviceStore[updateConnectionStatus]\": (state)=>state.updateConnectionStatus\n }[\"ConnectionAnalyzer.useDeviceStore[updateConnectionStatus]\"]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"ConnectionAnalyzer.useEffect\": ()=>{\n // 创建一个异步函数来处理分析\n const analyzeConnections = {\n \"ConnectionAnalyzer.useEffect.analyzeConnections\": async ()=>{\n try {\n const result = await analyzeAllConnections(connectionPaths);\n updateConnectionStatus(result);\n //console.log('连接分析结果:', result);\n } catch (error) {\n console.error('连接分析错误:', error);\n // 发生错误时更新状态为未连接\n updateConnectionStatus({\n mainModule: null,\n remoteModule: null\n });\n }\n }\n }[\"ConnectionAnalyzer.useEffect.analyzeConnections\"];\n // 执行分析\n analyzeConnections();\n }\n }[\"ConnectionAnalyzer.useEffect\"], [\n connectionPaths,\n updateConnectionStatus\n ]);\n return null;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConnectionAnalyzer);\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0Nvbm5lY3Rpb25BbmFseXplci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBeUM7QUFDUTtBQUNFO0FBQ1g7QUFJeEMsUUFBUTtBQUNSLFNBQVNLLHFCQUFxQkMsV0FBVztJQUN2QyxNQUFNQyxRQUFRLENBQUM7SUFDZkQsWUFBWUUsT0FBTyxDQUFDQyxDQUFBQTtRQUNsQkYsS0FBSyxDQUFDRSxLQUFLQyxNQUFNLENBQUMsR0FBR0gsS0FBSyxDQUFDRSxLQUFLQyxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQzdDSCxLQUFLLENBQUNFLEtBQUtFLE1BQU0sQ0FBQyxHQUFHSixLQUFLLENBQUNFLEtBQUtFLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDN0NKLEtBQUssQ0FBQ0UsS0FBS0MsTUFBTSxDQUFDLENBQUNFLElBQUksQ0FBQ0gsS0FBS0UsTUFBTTtRQUNuQ0osS0FBSyxDQUFDRSxLQUFLRSxNQUFNLENBQUMsQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLQyxNQUFNO0lBQ3JDO0lBQ0EsT0FBT0g7QUFDVDtBQUVBLGVBQWU7QUFDZixTQUFTTSxnQkFBZ0JDLFFBQVE7SUFDL0IsTUFBTUMsY0FBYztRQUNsQjtZQUFFQyxTQUFTO1lBQ1RDLFNBQVMsQ0FBQ0MsSUFBTUEsRUFBRUMsUUFBUSxDQUFDLFdBQVdELEVBQUVELE9BQU8sQ0FBQyxTQUFTLFlBQVlDLEVBQUVELE9BQU8sQ0FBQyxVQUFVO1FBQVM7UUFDcEc7WUFBRUQsU0FBUztZQUNUQyxTQUFTLENBQUNDLElBQU1BLEVBQUVDLFFBQVEsQ0FBQyxXQUFXRCxFQUFFRCxPQUFPLENBQUMsU0FBUyxZQUFZQyxFQUFFRCxPQUFPLENBQUMsVUFBVTtRQUFTO1FBQ3BHLDhCQUE4QjtRQUM5QjtZQUFFRCxTQUFTO1lBQ1RDLFNBQVMsQ0FBQ0M7Z0JBQ1IsTUFBTUUsVUFBVUYsRUFBRUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJRCxTQUFTO29CQUNYLE9BQU8sR0FBR0EsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxxQkFBcUI7Z0JBQ3pEO2dCQUNBLE9BQU9GO1lBQ1Q7UUFDRjtLQUVEO0lBRUQsS0FBSyxNQUFNLEVBQUVGLE9BQU8sRUFBRUMsT0FBTyxFQUFFLElBQUlGLFlBQWE7UUFDOUMsSUFBSUQsU0FBU08sS0FBSyxDQUFDTCxVQUFVLE9BQU9DLFFBQVFIO0lBQzlDO0lBQ0EsT0FBTztBQUNUO0FBRUEsU0FBUztBQUNULFNBQVNRLGNBQWNmLEtBQUssRUFBRWdCLFVBQVU7SUFDdEMsTUFBTUMsVUFBVSxJQUFJQztJQUNwQixNQUFNQyxPQUFPLEVBQUU7SUFDZixJQUFJQyxVQUFVSjtJQUVkLE1BQU9JLFdBQVcsQ0FBQ0gsUUFBUUksR0FBRyxDQUFDRCxTQUFVO1FBQ3ZDSCxRQUFRSyxHQUFHLENBQUNGO1FBQ1pELEtBQUtkLElBQUksQ0FBQ2U7UUFFVixTQUFTO1FBQ1QsTUFBTUcsY0FBY2pCLGdCQUFnQmM7UUFDcEMsSUFBSUcsZUFBZXZCLEtBQUssQ0FBQ3VCLFlBQVksSUFBSSxDQUFDTixRQUFRSSxHQUFHLENBQUNFLGNBQWM7WUFDbEVILFVBQVVHO1lBQ1Y7UUFDRjtRQUVBLE9BQU87UUFDUCxNQUFNQyxZQUFZLENBQUN4QixLQUFLLENBQUNvQixRQUFRLElBQUksRUFBRSxFQUFFSyxNQUFNLENBQUNkLENBQUFBLElBQUssQ0FBQ00sUUFBUUksR0FBRyxDQUFDVjtRQUNsRVMsVUFBVUksU0FBUyxDQUFDLEVBQUU7SUFDeEI7SUFFQSw0QkFBNEI7SUFDNUIsSUFBSUUsV0FBV1AsSUFBSSxDQUFDQSxLQUFLUSxNQUFNLEdBQUcsRUFBRSxJQUFJWDtJQUV4QyxvQkFBb0I7SUFDcEIsS0FBSyxNQUFNWSxRQUFRVCxLQUFNO1FBQ3ZCLE1BQU1OLFVBQVVlLEtBQUtkLEtBQUssQ0FBQztRQUMzQixJQUFJRCxTQUFTO1lBQ1gsY0FBYztZQUNkYSxXQUFXLEdBQUdBLFNBQVMsS0FBSyxFQUFFYixPQUFPLENBQUMsRUFBRSxFQUFFO1lBQzFDLE9BQU8sZUFBZTtRQUN4QjtJQUNGO0lBRUEsT0FBTztRQUNMZ0IsT0FBT2I7UUFDUGMsS0FBS0o7UUFDTFAsTUFBTUE7UUFDTlEsUUFBUVIsS0FBS1EsTUFBTSxHQUFHO0lBQ3hCO0FBQ0Y7QUFFQSxVQUFVO0FBQ1YsU0FBU0ksWUFBWS9CLEtBQUs7SUFDeEIsTUFBTWdDLFNBQVM7UUFBRUMsV0FBVyxDQUFDO1FBQUdDLGFBQWEsQ0FBQztJQUFFO0lBRWhELFNBQVM7SUFDVCxNQUFNQyxlQUFlLENBQUNDLFFBQVFoQztRQUM1QmlDLE9BQU9DLElBQUksQ0FBQ3RDLE9BQ1R5QixNQUFNLENBQUNjLENBQUFBLElBQUtBLEVBQUVDLFVBQVUsQ0FBQ0osU0FDekJuQyxPQUFPLENBQUN3QyxDQUFBQTtZQUNQLE1BQU1DLFFBQVEzQixjQUFjZixPQUFPeUM7WUFDbkNyQyxNQUFNLENBQUNxQyxLQUFLLEdBQUc7Z0JBQ2IsR0FBR0MsS0FBSztnQkFDUkMsVUFBVUYsS0FBSzdCLFFBQVEsQ0FBQyxhQUFhLFlBQVk7WUFDbkQ7UUFDRjtJQUNKO0lBRUF1QixhQUFhLFNBQVNILE9BQU9DLFNBQVM7SUFDdENFLGFBQWEsV0FBV0gsT0FBT0UsV0FBVztJQUUxQyxPQUFPRjtBQUNUO0FBRUEsU0FBUztBQUNULFNBQVNZLFdBQVc1QyxLQUFLO0lBQ3ZCLE1BQU1nQyxTQUFTO1FBQUVDLFdBQVcsQ0FBQztRQUFHQyxhQUFhLENBQUM7SUFBRTtJQUVoRCxPQUFPO0lBQ1AsTUFBTVcsY0FBYztRQUNsQkMsTUFBTTtZQUNKQyxTQUFTO2dCQUFDO2dCQUFtQjthQUFrQjtZQUMvQ0MsT0FBTztZQUNQQyxLQUFJO1FBQ047UUFDQUMsUUFBUTtZQUNOSCxTQUFTO2dCQUFDO2dCQUFxQjthQUFvQjtZQUNuREMsT0FBTztRQUNUO0lBQ0Y7SUFFQSxTQUFTO0lBQ1QsTUFBTUcsY0FBYyxDQUFDVixNQUFNVztRQUN6QixJQUFJLENBQUNwRCxLQUFLLENBQUN5QyxLQUFLLEVBQUU7UUFDbEIsTUFBTUMsUUFBUTNCLGNBQWNmLE9BQU95QztRQUNuQ1QsTUFBTSxDQUFDLEdBQUdvQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUNYLEtBQUssR0FBRztZQUM3QixHQUFHQyxLQUFLO1FBQ1Y7SUFDRjtJQUVBLFNBQVM7SUFDVEwsT0FBT2dCLE1BQU0sQ0FBQ1IsWUFBWUMsSUFBSSxFQUFFUSxJQUFJLEdBQUdyRCxPQUFPLENBQUNzRCxDQUFBQSxJQUFLSixZQUFZSSxHQUFHO0lBQ25FbEIsT0FBT2dCLE1BQU0sQ0FBQ1IsWUFBWUssTUFBTSxFQUFFSSxJQUFJLEdBQUdyRCxPQUFPLENBQUNzRCxDQUFBQSxJQUFLSixZQUFZSSxHQUFHO0lBRXJFLE9BQU92QjtBQUNUO0FBSUEsU0FBUztBQUNULFNBQVN3QixXQUFXeEQsS0FBSztJQUN2QixNQUFNZ0MsU0FBUztRQUFFQyxXQUFXLENBQUM7SUFBRTtJQUUvQjtRQUFDO1FBQW1CO1FBQWtCO0tBQVcsQ0FBQ2hDLE9BQU8sQ0FBQ3dDLENBQUFBO1FBQ3hELElBQUl6QyxLQUFLLENBQUN5QyxLQUFLLEVBQUU7WUFDZixNQUFNQyxRQUFRM0IsY0FBY2YsT0FBT3lDO1lBQ25DVCxPQUFPQyxTQUFTLENBQUNRLEtBQUssR0FBRztnQkFDdkIsR0FBR0MsS0FBSztZQUNWO1FBQ0Y7SUFDRjtJQUVBLE9BQU9WO0FBQ1Q7QUFFQSxhQUFhO0FBQ2IsTUFBTXlCLHNCQUFzQixPQUFPekIsUUFBUTBCLFlBQVkzRDtJQUVyRCxJQUFJO1FBQ0YsYUFBYTtRQUNiLE1BQU00RCxjQUFjaEUsbUVBQXVCO1FBQzNDLE1BQU1rRSxnQkFBZ0JGLFlBQVlHLGNBQWMsSUFBSTtRQUNwRCxNQUFNQyxTQUFTbEUsaURBQVFBLENBQUNtRSxVQUFVLENBQUNDLGNBQWMsQ0FBQ0o7UUFDbEQsTUFBTUssV0FBVyxNQUFNQyxNQUFNSjtRQUM3QixJQUFJLENBQUNHLFNBQVNFLEVBQUUsRUFBRTtZQUNoQixNQUFNLElBQUlDLE1BQU07UUFDbEI7UUFDQSxNQUFNQyxPQUFPLE1BQU1KLFNBQVNLLElBQUk7UUFDaEMsTUFBTUMsZ0JBQWdCRixRQUFRLENBQUM7UUFDL0IsTUFBTXJDLFlBQVlELE9BQU9DLFNBQVM7UUFDbEMsTUFBTXdDLFVBQVV4QyxZQUFZSSxPQUFPZ0IsTUFBTSxDQUFDcEIsVUFBVSxDQUFDLEVBQUUsRUFBRUgsT0FBTyxPQUFPO1FBQ3ZFLE1BQU00QyxZQUFZekMsWUFBWUksT0FBT2dCLE1BQU0sQ0FBQ3BCLFVBQVUsQ0FBQyxFQUFFLEVBQUVKLFNBQVMsT0FBTztRQUUzRSxZQUFZO1FBQ1osSUFBSTZCLGVBQWUsU0FBU2UsV0FBV3hDLFdBQVc7WUFDaEQsb0JBQW9CO1lBQ3BCLElBQUl1QyxhQUFhLENBQUNDLFFBQVEsRUFBRTtnQkFDMUJ6QyxPQUFPMkMsU0FBUyxHQUFHSCxhQUFhLENBQUNDLFFBQVEsRUFBRUcsZUFBZTtnQkFDMUQ1QyxPQUFPNkMsY0FBYyxHQUFHTCxhQUFhLENBQUNDLFFBQVEsRUFBRUssZUFBZTtZQUNqRSxPQUFPO2dCQUNMLHdDQUF3QztnQkFDeEMsSUFBSyxNQUFNQyxPQUFPUCxjQUFlO29CQUMvQixJQUFJQSxhQUFhLENBQUNPLElBQUksRUFBRUQsZ0JBQWdCTCxXQUFXRCxhQUFhLENBQUNPLElBQUksRUFBRTNCLFNBQVMsU0FBUzt3QkFDdkZwQixPQUFPMkMsU0FBUyxHQUFHSCxhQUFhLENBQUNPLElBQUksRUFBRUgsZUFBZTt3QkFDdEQ1QyxPQUFPNkMsY0FBYyxHQUFHRTt3QkFDeEI7b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLDZCQUE2QjtZQUM3QixJQUFJL0MsT0FBTzZDLGNBQWMsSUFBSTlFLGFBQWE7Z0JBQ3hDLE1BQU1pRixxQkFBcUJqRixZQUFZa0YsSUFBSSxDQUFDL0UsQ0FBQUEsT0FBUUEsS0FBS0UsTUFBTSxLQUFLNEIsT0FBTzZDLGNBQWM7Z0JBQ3pGN0MsT0FBT2tELHVCQUF1QixHQUFHRixxQkFBcUJBLG1CQUFtQjdFLE1BQU0sR0FBRztZQUNwRjtZQUVBLHNCQUFzQjtZQUN0QixJQUFJdUUsYUFBYTNFLGFBQWE7Z0JBQzVCLE1BQU1vRixzQkFBc0JwRixZQUFZa0YsSUFBSSxDQUFDL0UsQ0FBQUEsT0FBUUEsS0FBS0UsTUFBTSxLQUFLc0U7Z0JBQ3JFMUMsT0FBT29ELGVBQWUsR0FBR0Qsc0JBQXNCQSxvQkFBb0JoRixNQUFNLEdBQUc7WUFDOUU7WUFDQTtRQUNGO1FBRUEsWUFBWTtRQUNaLE1BQU0rQixjQUFjRixPQUFPRSxXQUFXLElBQUksQ0FBQztRQUMzQyxNQUFNbUQsWUFBWWhELE9BQU9nQixNQUFNLENBQUNuQixZQUFZLENBQUMsRUFBRSxFQUFFSjtRQUVqRCxTQUFTO1FBQ1QsSUFBSTJDLFdBQVdZLFdBQVc7WUFDeEIsWUFBWTtZQUNaLElBQUkzQixlQUFlLE9BQU87Z0JBQ3hCLFNBQVM7Z0JBQ1QsTUFBTTRCLGVBQWVyRCxTQUFTLENBQUMsa0JBQWtCLEVBQUVIO2dCQUNuRCxNQUFNeUQsZUFBZXRELFNBQVMsQ0FBQyxrQkFBa0IsRUFBRUg7Z0JBQ25ELE1BQU0wRCxZQUFZdkQsU0FBUyxDQUFDLGNBQWMsRUFBRUg7Z0JBQzVDLE1BQU0yRCxpQkFBaUJ2RCxXQUFXLENBQUMsb0JBQW9CLEVBQUVKO2dCQUN6RCxNQUFNNEQsaUJBQWlCeEQsV0FBVyxDQUFDLG9CQUFvQixFQUFFSjtnQkFDekQsTUFBTTZELGNBQWN6RCxXQUFXLENBQUMsZ0JBQWdCLEVBQUVKO2dCQUVsRCxTQUFTO2dCQUNULE1BQU04RCxrQkFBa0IsQ0FBQ0MsTUFBTUM7b0JBQzdCLElBQUksQ0FBQ0QsUUFBUSxDQUFDQyxNQUFNLE9BQU87b0JBQzNCLE9BQU96RCxPQUFPQyxJQUFJLENBQUNrQyxlQUFldUIsSUFBSSxDQUFDaEIsQ0FBQUE7d0JBQ3JDLE1BQU1pQixhQUFheEIsYUFBYSxDQUFDTyxJQUFJO3dCQUNyQyxPQUFPLFdBQVlELFdBQVcsS0FBS2UsUUFBUWQsUUFBUWUsUUFDM0NFLFdBQVdsQixXQUFXLEtBQUtnQixRQUFRZixRQUFRYztvQkFDckQ7Z0JBQ0Y7Z0JBRUEsZUFBZTtnQkFDZixNQUFNSSw0QkFBNEJMLGdCQUFnQk4sY0FBY0s7Z0JBQ2hFLE1BQU1PLDRCQUE0Qk4sZ0JBQWdCTCxjQUFjSTtnQkFDaEUsTUFBTVEsNEJBQTRCUCxnQkFBZ0JILGdCQUFnQkQ7Z0JBQ2xFLE1BQU1ZLDRCQUE0QlIsZ0JBQWdCRixnQkFBZ0JGO2dCQUVsRSxpQkFBaUI7Z0JBQ2pCLE1BQU1hLGNBQWMsNkJBQThCRiw2QkFDL0JELDZCQUE2QkU7Z0JBRWhEcEUsT0FBT3NFLGdCQUFnQixHQUFHRDtnQkFFMUIsa0JBQWtCO2dCQUNqQixJQUFJQSxhQUFhO29CQUNoQixJQUFJRSxnQkFBZ0JDO29CQUVwQixJQUFJUCw2QkFBNkJFLDJCQUEyQjt3QkFDMUQsT0FBTzt3QkFDUEksaUJBQWlCbEUsT0FBT0MsSUFBSSxDQUFDa0MsZUFBZVMsSUFBSSxDQUFDRixDQUFBQSxNQUMvQyxhQUFjLENBQUNBLElBQUksQ0FBQ0QsV0FBVyxLQUFLUSxnQkFBZ0JQLFFBQVFZLGVBQzNEbkIsYUFBYSxDQUFDTyxJQUFJLENBQUNELFdBQVcsS0FBS2EsZUFBZVosUUFBUU87d0JBRTdEa0IsaUJBQWlCbkUsT0FBT0MsSUFBSSxDQUFDa0MsZUFBZVMsSUFBSSxDQUFDRixDQUFBQSxNQUMvQyxhQUFjLENBQUNBLElBQUksQ0FBQ0QsV0FBVyxLQUFLVyxrQkFBa0JWLFFBQVFTLGFBQzdEaEIsYUFBYSxDQUFDTyxJQUFJLENBQUNELFdBQVcsS0FBS1UsYUFBYVQsUUFBUVU7b0JBRTdELE9BQU87d0JBQ0wsT0FBTzt3QkFDUGMsaUJBQWlCbEUsT0FBT0MsSUFBSSxDQUFDa0MsZUFBZVMsSUFBSSxDQUFDRixDQUFBQSxNQUMvQyxhQUFjLENBQUNBLElBQUksQ0FBQ0QsV0FBVyxLQUFLUyxnQkFBZ0JSLFFBQVFZLGVBQzNEbkIsYUFBYSxDQUFDTyxJQUFJLENBQUNELFdBQVcsS0FBS2EsZUFBZVosUUFBUVE7d0JBRTdEaUIsaUJBQWlCbkUsT0FBT0MsSUFBSSxDQUFDa0MsZUFBZVMsSUFBSSxDQUFDRixDQUFBQSxNQUMvQyxhQUFjLENBQUNBLElBQUksQ0FBQ0QsV0FBVyxLQUFLWSxrQkFBa0JYLFFBQVFTLGFBQzdEaEIsYUFBYSxDQUFDTyxJQUFJLENBQUNELFdBQVcsS0FBS1UsYUFBYVQsUUFBUVc7b0JBRTdEO29CQUVBLElBQUlhLGtCQUFrQkMsZ0JBQWdCO3dCQUNwQyxNQUFNQyxjQUFjakMsYUFBYSxDQUFDK0IsZUFBZTt3QkFDakQsTUFBTUcsY0FBY2xDLGFBQWEsQ0FBQ2dDLGVBQWU7d0JBQ2pEeEUsT0FBTzJFLFNBQVMsR0FBR0YsWUFBWTdCLFdBQVc7d0JBQzFDNUMsT0FBTzRFLFVBQVUsR0FBR0YsWUFBWTlCLFdBQVc7b0JBQzdDO2dCQUNGLE9BQU87b0JBQ0w1QyxPQUFPMkUsU0FBUyxHQUFHO29CQUNuQjNFLE9BQU80RSxVQUFVLEdBQUc7Z0JBQ3RCO1lBQ0YsT0FBTztnQkFDTCxZQUFZO2dCQUNaLE1BQU1QLGNBQWNoRSxPQUFPQyxJQUFJLENBQUNrQyxlQUFldUIsSUFBSSxDQUFDaEIsQ0FBQUE7b0JBQ2xELE1BQU1pQixhQUFheEIsYUFBYSxDQUFDTyxJQUFJO29CQUNyQyxPQUFPLFdBQVlELFdBQVcsS0FBS0wsV0FBV00sUUFBUU0sYUFDOUNXLFdBQVdsQixXQUFXLEtBQUtPLGFBQWFOLFFBQVFOO2dCQUMxRDtnQkFFQSxTQUFTO2dCQUNULE1BQU1vQyxlQUFlbkQsV0FBV29ELFdBQVc7Z0JBQzNDOUUsTUFBTSxDQUFDLEdBQUc2RSxhQUFhLGFBQWEsQ0FBQyxDQUFDLEdBQUdSO2dCQUV6QyxrQkFBa0I7Z0JBQ2xCLElBQUlBLGFBQWE7b0JBQ2YsTUFBTVUsZ0JBQWdCMUUsT0FBT0MsSUFBSSxDQUFDa0MsZUFBZVMsSUFBSSxDQUFDRixDQUFBQSxNQUNwRCxhQUFjLENBQUNBLElBQUksQ0FBQ0QsV0FBVyxLQUFLTCxXQUFXTSxRQUFRTSxhQUN0RGIsYUFBYSxDQUFDTyxJQUFJLENBQUNELFdBQVcsS0FBS08sYUFBYU4sUUFBUU47b0JBRzNELElBQUlzQyxlQUFlO3dCQUNqQixNQUFNZixhQUFheEIsYUFBYSxDQUFDdUMsY0FBYzt3QkFDL0MsT0FBT3JEOzRCQUNMLEtBQUs7Z0NBQ0gxQixPQUFPZ0YsbUJBQW1CLEdBQUdoQixXQUFXaUIsYUFBYTtnQ0FDckRqRixPQUFPa0YsdUJBQXVCLEdBQUdsQixXQUFXbUIsaUJBQWlCO2dDQUM3RDt3QkFDSjtvQkFDRjtnQkFDRixPQUFPO29CQUNMLFlBQVk7b0JBQ1osT0FBT3pEO3dCQUNMLEtBQUs7NEJBQ0gxQixPQUFPZ0YsbUJBQW1CLEdBQUc7NEJBQzdCaEYsT0FBT2tGLHVCQUF1QixHQUFHOzRCQUNqQzt3QkFDRixLQUFLOzRCQUNIbEYsT0FBTzJFLFNBQVMsR0FBRzs0QkFDbkIzRSxPQUFPNEUsVUFBVSxHQUFHOzRCQUNwQjtvQkFDSjtnQkFDRjtZQUNGO1FBQ0YsT0FBTztZQUNMLGFBQWE7WUFDYixNQUFNQyxlQUFlbkQsV0FBV29ELFdBQVc7WUFDM0M5RSxNQUFNLENBQUMsR0FBRzZFLGFBQWEsYUFBYSxDQUFDLENBQUMsR0FBRztZQUN6QyxPQUFPbkQ7Z0JBQ0wsS0FBSztvQkFDSDFCLE9BQU9nRixtQkFBbUIsR0FBRztvQkFDN0JoRixPQUFPa0YsdUJBQXVCLEdBQUc7b0JBQ2pDO2dCQUNGLEtBQUs7b0JBQ0hsRixPQUFPMkUsU0FBUyxHQUFHO29CQUNuQjNFLE9BQU80RSxVQUFVLEdBQUc7b0JBQ3BCO1lBQ0o7UUFDRjtJQUNGLEVBQUUsT0FBT1EsT0FBTztRQUNkQyxRQUFRRCxLQUFLLENBQUMsYUFBYUE7UUFDM0IsV0FBVztRQUNYLE1BQU1QLGVBQWVuRCxXQUFXb0QsV0FBVztRQUMzQzlFLE1BQU0sQ0FBQyxHQUFHNkUsYUFBYSxhQUFhLENBQUMsQ0FBQyxHQUFHO1FBQ3pDLE9BQU9uRDtZQUNMLEtBQUs7Z0JBQ0gxQixPQUFPZ0YsbUJBQW1CLEdBQUc7Z0JBQzdCaEYsT0FBT2tGLHVCQUF1QixHQUFHO2dCQUNqQztZQUNGLEtBQUs7Z0JBQ0hsRixPQUFPMkUsU0FBUyxHQUFHO2dCQUNuQjNFLE9BQU80RSxVQUFVLEdBQUc7Z0JBQ3BCO1lBQ0YsS0FBSztnQkFDSDVFLE9BQU8yQyxTQUFTLEdBQUc7Z0JBQ25CO1FBQ0o7SUFDRjtBQUNGO0FBT0EsY0FBYztBQUNkLGVBQWUyQyxzQkFBc0J2SCxXQUFXO0lBRzlDLE1BQU00RCxjQUFjaEUsbUVBQXVCO0lBQzNDLE1BQU00SCxhQUFhNUQsWUFBWTZELGVBQWUsQ0FBQyxFQUFFLEVBQUVDO0lBQ25ELE1BQU1DLGVBQWUvRCxZQUFZZ0UsaUJBQWlCLENBQUMsRUFBRSxFQUFFRjtJQUV2RCxZQUFZO0lBQ1osSUFBSSxDQUFDMUgsZUFBZUEsWUFBWTRCLE1BQU0sS0FBSyxHQUFHO1FBQzVDLE9BQU87WUFBRTRGO1lBQVlHO1FBQWE7SUFDcEM7SUFFQSxNQUFNMUgsUUFBUUYscUJBQXFCQztJQUNuQyxNQUFNaUMsU0FBUztRQUFFdUY7UUFBWUc7SUFBYTtJQUUxQyxJQUFJSCxZQUFZM0csU0FBUyxTQUFTO1FBQ2hDeUIsT0FBT3VGLE1BQU0sQ0FBQzVGLFFBQVFELFlBQVkvQjtJQUNwQyxPQUFPLElBQUl1SCxZQUFZM0csU0FBUyxRQUFRO1FBQ3RDeUIsT0FBT3VGLE1BQU0sQ0FBQzVGLFFBQVFZLFdBQVc1QztJQUNuQyxPQUFPLElBQUl1SCxZQUFZM0csU0FBUyxRQUFRO1FBQ3RDeUIsT0FBT3VGLE1BQU0sQ0FBQzVGLFFBQVF3QixXQUFXeEQ7SUFDbkMsT0FBTztRQUNMZ0MsT0FBTzZGLFlBQVksR0FBRyxDQUFDO1FBQ3ZCeEYsT0FBT0MsSUFBSSxDQUFDdEMsT0FBT0MsT0FBTyxDQUFDd0MsQ0FBQUE7WUFDekJULE9BQU82RixZQUFZLENBQUNwRixLQUFLLEdBQUcxQixjQUFjZixPQUFPeUM7UUFDbkQ7SUFDRjtJQUVBLGdCQUFnQjtJQUNoQixNQUFNcUYsZ0JBQWdCO1FBQ3BCLFFBQVE7UUFDUixPQUFPO1FBQ1AsT0FBTztJQUNUO0lBQ0EsTUFBTUMsb0JBQW9CRCxhQUFhLENBQUNQLFlBQVlTLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJO0lBQ3RFLE1BQU12RSxvQkFBb0J6QixRQUFRK0YsbUJBQWtCaEk7SUFFcEQsT0FBT2lDO0FBQ1Q7QUFHQSxxQkFBcUI7QUFDckIsTUFBTWlHLHFCQUFxQjtJQUV6QixNQUFNQyxrQkFBa0J2SSw4REFBY0E7OERBQUN3SSxDQUFBQSxRQUFTQSxNQUFNRCxlQUFlOztJQUNyRSxNQUFNRSx5QkFBeUJ6SSw4REFBY0E7cUVBQUN3SSxDQUFBQSxRQUFTQSxNQUFNQyxzQkFBc0I7O0lBRW5GMUksZ0RBQVNBO3dDQUFDO1lBQ1IsZ0JBQWdCO1lBQ2hCLE1BQU0ySTttRUFBcUI7b0JBQ3pCLElBQUk7d0JBQ0YsTUFBTXJHLFNBQVMsTUFBTXNGLHNCQUFzQlk7d0JBQzNDRSx1QkFBdUJwRztvQkFDdkIsaUNBQWlDO29CQUNuQyxFQUFFLE9BQU9vRixPQUFPO3dCQUNkQyxRQUFRRCxLQUFLLENBQUMsV0FBV0E7d0JBQ3pCLGdCQUFnQjt3QkFDaEJnQix1QkFBdUI7NEJBQ3JCYixZQUFZOzRCQUNaRyxjQUFjO3dCQUNoQjtvQkFDRjtnQkFDRjs7WUFFQSxPQUFPO1lBQ1BXO1FBQ0Y7dUNBQUc7UUFBQ0g7UUFBaUJFO0tBQXVCO0lBRTVDLE9BQU87QUFDVDtBQUVBLGlFQUFlSCxrQkFBa0JBLEVBQUMiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvQ29ubmVjdGlvbkFuYWx5emVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEZXZpY2VTdG9yZSBmcm9tICdAL3N0b3JlL2RldmljZVN0b3JlJztcclxuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XHJcbmltcG9ydCB7IEFQSV9VUkxTIH0gZnJvbSAnQC9jb25maWcvYXBpJztcclxuXHJcblxyXG5cclxuLy8g5p6E5bu66L+e5o6l5Zu+XHJcbmZ1bmN0aW9uIGJ1aWxkQ29ubmVjdGlvbkdyYXBoKGNvbm5lY3Rpb25zKSB7XHJcbiAgY29uc3QgZ3JhcGggPSB7fTtcclxuICBjb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xyXG4gICAgZ3JhcGhbY29ubi5zb3VyY2VdID0gZ3JhcGhbY29ubi5zb3VyY2VdIHx8IFtdO1xyXG4gICAgZ3JhcGhbY29ubi50YXJnZXRdID0gZ3JhcGhbY29ubi50YXJnZXRdIHx8IFtdO1xyXG4gICAgZ3JhcGhbY29ubi5zb3VyY2VdLnB1c2goY29ubi50YXJnZXQpO1xyXG4gICAgZ3JhcGhbY29ubi50YXJnZXRdLnB1c2goY29ubi5zb3VyY2UpO1xyXG4gIH0pO1xyXG4gIHJldHVybiBncmFwaDtcclxufVxyXG5cclxuLy8g5p+l5om+6Lez57q/L+i/nuaOpeWZqOeahOWPpuS4gOerr1xyXG5mdW5jdGlvbiBmaW5kQ291bnRlcnBhcnQobm9kZU5hbWUpIHtcclxuICBjb25zdCBqdW1wZXJUeXBlcyA9IFtcclxuICAgIHsgcGF0dGVybjogLyhwYWNoY29kZS1jb3BwZXJ8cGFjaGNvZGUtbTEyLWR8cGFjaGNvZGUtbTEyLXh8c20tbGMtbGN8bW0tbGMtbGN8c21jLWxjLWxjfG1tYy1sYy1sY3xtbS1tcG8tbXBvfHNtLW1wby1tcG8pLywgXHJcbiAgICAgIHJlcGxhY2U6IChuKSA9PiBuLmluY2x1ZGVzKCctbGVmdCcpID8gbi5yZXBsYWNlKCctbGVmdCcsICctcmlnaHQnKSA6IG4ucmVwbGFjZSgnLXJpZ2h0JywgJy1sZWZ0JykgfSxcclxuICAgIHsgcGF0dGVybjogL2xjLWNvbm5lY3Rvci1cXGQrLShsZWZ0fHJpZ2h0KS8sXHJcbiAgICAgIHJlcGxhY2U6IChuKSA9PiBuLmluY2x1ZGVzKCctbGVmdCcpID8gbi5yZXBsYWNlKCctbGVmdCcsICctcmlnaHQnKSA6IG4ucmVwbGFjZSgnLXJpZ2h0JywgJy1sZWZ0JykgfSxcclxuICAgIC8vIE1QTy1MQ+i/nuaOpeWZqOepv+mAj+mAu+i+kSAtIOS7jkxD56uv5Y+j5YiwTVBP56uv5Y+jXHJcbiAgICB7IHBhdHRlcm46IC8obW0tbXBvLWxjLWJveC1cXGQrLWxjLXBvcnQpKFxcZCspLyxcclxuICAgICAgcmVwbGFjZTogKG4pID0+IHtcclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gbi5tYXRjaCgvKG1tLW1wby1sYy1ib3gtXFxkKyktbGMtcG9ydChcXGQrKS8pO1xyXG4gICAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgICByZXR1cm4gYCR7bWF0Y2hlc1sxXX0tbXBvLXBvcnQxYDsgLy8g5LuO5Lu75oSPTEPnq6/lj6Pnqb/pgI/liLDlr7nlupTnmoRNUE/nq6/lj6NcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcclxuICBdO1xyXG5cclxuICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgcmVwbGFjZSB9IG9mIGp1bXBlclR5cGVzKSB7XHJcbiAgICBpZiAobm9kZU5hbWUubWF0Y2gocGF0dGVybikpIHJldHVybiByZXBsYWNlKG5vZGVOYW1lKTtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8vIOWujOaVtOi3r+W+hOi/vei4qlxyXG5mdW5jdGlvbiB0cmFjZUZ1bGxQYXRoKGdyYXBoLCBzdGFydFBvaW50KSB7XHJcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQoKTtcclxuICBjb25zdCBwYXRoID0gW107XHJcbiAgbGV0IGN1cnJlbnQgPSBzdGFydFBvaW50O1xyXG5cclxuICB3aGlsZSAoY3VycmVudCAmJiAhdmlzaXRlZC5oYXMoY3VycmVudCkpIHtcclxuICAgIHZpc2l0ZWQuYWRkKGN1cnJlbnQpO1xyXG4gICAgcGF0aC5wdXNoKGN1cnJlbnQpO1xyXG5cclxuICAgIC8vIOi3s+e6v+epv+mAj+mAu+i+kVxyXG4gICAgY29uc3QgY291bnRlcnBhcnQgPSBmaW5kQ291bnRlcnBhcnQoY3VycmVudCk7XHJcbiAgICBpZiAoY291bnRlcnBhcnQgJiYgZ3JhcGhbY291bnRlcnBhcnRdICYmICF2aXNpdGVkLmhhcyhjb3VudGVycGFydCkpIHtcclxuICAgICAgY3VycmVudCA9IGNvdW50ZXJwYXJ0O1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDluLjop4Tov57mjqVcclxuICAgIGNvbnN0IG5laWdoYm9ycyA9IChncmFwaFtjdXJyZW50XSB8fCBbXSkuZmlsdGVyKG4gPT4gIXZpc2l0ZWQuaGFzKG4pKTtcclxuICAgIGN1cnJlbnQgPSBuZWlnaGJvcnNbMF07XHJcbiAgfVxyXG5cclxuICAvLyDmo4DmtYvot6/lvoTkuK3mmK/lkKblrZjlnKhNUE8tTEPnq6/lj6PvvIzlubbkv67mlLllbmTlgLxcclxuICBsZXQgZW5kUG9pbnQgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gfHwgc3RhcnRQb2ludDtcclxuICBcclxuICAvLyDmo4Dmn6Xot6/lvoTkuK3mmK/lkKbljIXlkKtNUE8tTEPnq6/lj6NcclxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGF0aCkge1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IGl0ZW0ubWF0Y2goLyhtbS1tcG8tbGMtYm94LVxcZCstbGMtcG9ydCkoXFxkKykvKTtcclxuICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgIC8vIOWcqGVuZOWAvOS4iua3u+WKoOerr+WPo+WPt1xyXG4gICAgICBlbmRQb2ludCA9IGAke2VuZFBvaW50fS1wb3J0JHttYXRjaGVzWzJdfWA7XHJcbiAgICAgIGJyZWFrOyAvLyDlj6rkvb/nlKjnrKzkuIDkuKrljLnphY3nmoTnq6/lj6Plj7dcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBzdGFydDogc3RhcnRQb2ludCxcclxuICAgIGVuZDogZW5kUG9pbnQsXHJcbiAgICBwYXRoOiBwYXRoLFxyXG4gICAgbGVuZ3RoOiBwYXRoLmxlbmd0aCAtIDFcclxuICB9O1xyXG59XHJcblxyXG4vLyA4MDAw5Z6L5YiG5p6QXHJcbmZ1bmN0aW9uIGFuYWx5emU4MDAwKGdyYXBoKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0geyBtYWluUGF0aHM6IHt9LCByZW1vdGVQYXRoczoge30gfTtcclxuXHJcbiAgLy8g5Yqo5oCB6K+G5Yir56uv5Y+jXHJcbiAgY29uc3QgYW5hbHl6ZVBvcnRzID0gKHByZWZpeCwgdGFyZ2V0KSA9PiB7XHJcbiAgICBPYmplY3Qua2V5cyhncmFwaClcclxuICAgICAgLmZpbHRlcihrID0+IGsuc3RhcnRzV2l0aChwcmVmaXgpKVxyXG4gICAgICAuZm9yRWFjaChwb3J0ID0+IHtcclxuICAgICAgICBjb25zdCB0cmFjZSA9IHRyYWNlRnVsbFBhdGgoZ3JhcGgsIHBvcnQpO1xyXG4gICAgICAgIHRhcmdldFtwb3J0XSA9IHtcclxuICAgICAgICAgIC4uLnRyYWNlLFxyXG4gICAgICAgICAgcG9ydFR5cGU6IHBvcnQuaW5jbHVkZXMoJ2NoYW5uZWwnKSA/ICdjaGFubmVsJyA6ICdwZXJtYW5lbnQnXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgYW5hbHl6ZVBvcnRzKCdtYWluLScsIHJlc3VsdC5tYWluUGF0aHMpO1xyXG4gIGFuYWx5emVQb3J0cygncmVtb3RlLScsIHJlc3VsdC5yZW1vdGVQYXRocyk7XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8vIENGUOWei+WIhuaekFxyXG5mdW5jdGlvbiBhbmFseXplQ0ZQKGdyYXBoKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0geyBtYWluUGF0aHM6IHt9LCByZW1vdGVQYXRoczoge30gfTtcclxuXHJcbiAgLy8g56uv5Y+j6YWN572uXHJcbiAgY29uc3QgUE9SVF9DT05GSUcgPSB7XHJcbiAgICBtYWluOiB7XHJcbiAgICAgIG91dHB1dHM6IFsnbWFpbi1jZnAtc20tb3V0JywgJ21haW4tY2ZwLW1tLW91dCddLFxyXG4gICAgICBpbnB1dDogJ21haW4tY2ZwLWluJyxcclxuICAgICAgdmZsOidtYWluLXZmbCdcclxuICAgIH0sXHJcbiAgICByZW1vdGU6IHtcclxuICAgICAgb3V0cHV0czogWydyZW1vdGUtY2ZwLXNtLW91dCcsICdyZW1vdGUtY2ZwLW1tLW91dCddLFxyXG4gICAgICBpbnB1dDogJ3JlbW90ZS1jZnAtaW4nXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8g5YiG5p6Q56uv5Y+j6L+e5o6lXHJcbiAgY29uc3QgYW5hbHl6ZVBvcnQgPSAocG9ydCwgdHlwZSkgPT4ge1xyXG4gICAgaWYgKCFncmFwaFtwb3J0XSkgcmV0dXJuO1xyXG4gICAgY29uc3QgdHJhY2UgPSB0cmFjZUZ1bGxQYXRoKGdyYXBoLCBwb3J0KTtcclxuICAgIHJlc3VsdFtgJHt0eXBlfVBhdGhzYF1bcG9ydF0gPSB7XHJcbiAgICAgIC4uLnRyYWNlLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvLyDliIbmnpDmiYDmnInnq6/lj6NcclxuICBPYmplY3QudmFsdWVzKFBPUlRfQ09ORklHLm1haW4pLmZsYXQoKS5mb3JFYWNoKHAgPT4gYW5hbHl6ZVBvcnQocCwgJ21haW4nKSk7XHJcbiAgT2JqZWN0LnZhbHVlcyhQT1JUX0NPTkZJRy5yZW1vdGUpLmZsYXQoKS5mb3JFYWNoKHAgPT4gYW5hbHl6ZVBvcnQocCwgJ3JlbW90ZScpKTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuXHJcblxyXG4vLyBPRlDlnovliIbmnpBcclxuZnVuY3Rpb24gYW5hbHl6ZU9GUChncmFwaCkge1xyXG4gIGNvbnN0IHJlc3VsdCA9IHsgbWFpblBhdGhzOiB7fSB9O1xyXG5cclxuICBbJ21haW4tb2ZwLXNtLW91dCcsICdtYWluLW9mcC1tbS1vdXQnLCdtYWluLXZmbCddLmZvckVhY2gocG9ydCA9PiB7XHJcbiAgICBpZiAoZ3JhcGhbcG9ydF0pIHtcclxuICAgICAgY29uc3QgdHJhY2UgPSB0cmFjZUZ1bGxQYXRoKGdyYXBoLCBwb3J0KTtcclxuICAgICAgcmVzdWx0Lm1haW5QYXRoc1twb3J0XSA9IHtcclxuICAgICAgICAuLi50cmFjZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLy8g5Yib5bu66YCa55So6L+e5o6l54q25oCB5qOA5p+lXHJcbmNvbnN0IHNldENvbm5lY3Rpb25TdGF0dXMgPSBhc3luYyAocmVzdWx0LCBtb2R1bGVUeXBlLCBjb25uZWN0aW9ucykgPT4ge1xyXG5cclxuICB0cnkge1xyXG4gICAgLy8g5LuOQVBJ6I635Y+W6L+e5o6l6YWN572uXHJcbiAgICBjb25zdCBkZXZpY2VTdG9yZSA9IHVzZURldmljZVN0b3JlLmdldFN0YXRlKCk7XHJcbiAgICBjb25zdCBmYXVsdFNjZW5hcmlvID0gZGV2aWNlU3RvcmUuZmF1bHRTY2VuYXJpb3MgfHwgJyc7XHJcbiAgICBjb25zdCBhcGlVcmwgPSBBUElfVVJMUy5DT05ORUNUSU9OLk1BUF9XSVRIX1NDRU5FKGZhdWx0U2NlbmFyaW8pO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGlVcmwpO1xyXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ+iOt+WPlui/nuaOpemFjee9ruWksei0pScpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgIGNvbnN0IGNvbm5lY3Rpb25NYXAgPSBkYXRhIHx8IHt9O1xyXG4gICAgY29uc3QgbWFpblBhdGhzID0gcmVzdWx0Lm1haW5QYXRocztcclxuICAgIGNvbnN0IG1haW5FbmQgPSBtYWluUGF0aHMgPyBPYmplY3QudmFsdWVzKG1haW5QYXRocylbMF0/LmVuZCB8fCBudWxsIDogbnVsbDtcclxuICAgIGNvbnN0IG1haW5TdGFydCA9IG1haW5QYXRocyA/IE9iamVjdC52YWx1ZXMobWFpblBhdGhzKVswXT8uc3RhcnQgfHwgbnVsbCA6IG51bGw7XHJcbiAgICBcclxuICAgIC8vIE9GUOaooeWdl+eJueauiuWkhOeQhlxyXG4gICAgaWYgKG1vZHVsZVR5cGUgPT09ICdvZnAnICYmIG1haW5FbmQgJiYgbWFpblBhdGhzKSB7XHJcbiAgICAgIC8vIOebtOaOpeafpeaJvm1haW5FbmTkvZzkuLrplK7nmoTmg4XlhrVcclxuICAgICAgaWYgKGNvbm5lY3Rpb25NYXBbbWFpbkVuZF0pIHtcclxuICAgICAgICByZXN1bHQuT0ZQU3RhdHVzID0gY29ubmVjdGlvbk1hcFttYWluRW5kXT8uZmliZXJzdGF0dXMgfHwgbnVsbDtcclxuICAgICAgICByZXN1bHQuT0ZQQ29ubmVjdGVkVG8gPSBjb25uZWN0aW9uTWFwW21haW5FbmRdPy5jb25uZWN0ZWRUbyB8fCBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWmguaenG1haW5FbmTkuI3mmK/plK7vvIzmn6Xmib5jb25uZWN0ZWRUb+etieS6jm1haW5FbmTnmoTpoblcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25uZWN0aW9uTWFwKSB7XHJcbiAgICAgICAgICBpZiAoY29ubmVjdGlvbk1hcFtrZXldPy5jb25uZWN0ZWRUbyA9PT0gbWFpbkVuZCAmJiBjb25uZWN0aW9uTWFwW2tleV0/LnR5cGUgPT09ICdmaWJlcicpIHtcclxuICAgICAgICAgICAgcmVzdWx0Lk9GUFN0YXR1cyA9IGNvbm5lY3Rpb25NYXBba2V5XT8uZmliZXJzdGF0dXMgfHwgbnVsbDtcclxuICAgICAgICAgICAgcmVzdWx0Lk9GUENvbm5lY3RlZFRvID0ga2V5O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIOafpeaJvk9GUENvbm5lY3RlZFRv5a+55bqU55qEc291cmNl5YC8XHJcbiAgICAgIGlmIChyZXN1bHQuT0ZQQ29ubmVjdGVkVG8gJiYgY29ubmVjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBtYXRjaGluZ0Nvbm5lY3Rpb24gPSBjb25uZWN0aW9ucy5maW5kKGNvbm4gPT4gY29ubi50YXJnZXQgPT09IHJlc3VsdC5PRlBDb25uZWN0ZWRUbyk7XHJcbiAgICAgICAgcmVzdWx0Lk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzID0gbWF0Y2hpbmdDb25uZWN0aW9uID8gbWF0Y2hpbmdDb25uZWN0aW9uLnNvdXJjZSA6IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOafpeaJvm1haW5FbmTlr7nlupTnmoRzb3VyY2XlgLxcclxuICAgICAgaWYgKG1haW5TdGFydCAmJiBjb25uZWN0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1haW5TdGFydENvbm5lY3Rpb24gPSBjb25uZWN0aW9ucy5maW5kKGNvbm4gPT4gY29ubi50YXJnZXQgPT09IG1haW5TdGFydCk7XHJcbiAgICAgICAgcmVzdWx0Lk9GUG91dFJlZlN0YXR1cyA9IG1haW5TdGFydENvbm5lY3Rpb24gPyBtYWluU3RhcnRDb25uZWN0aW9uLnNvdXJjZSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWFtuS7luaooeWdl+eahOWkhOeQhumAu+i+kVxyXG4gICAgY29uc3QgcmVtb3RlUGF0aHMgPSByZXN1bHQucmVtb3RlUGF0aHMgfHwge307XHJcbiAgICBjb25zdCByZW1vdGVFbmQgPSBPYmplY3QudmFsdWVzKHJlbW90ZVBhdGhzKVswXT8uZW5kO1xyXG5cclxuICAgIC8vIOerr+WPo+S6kumAmuajgOafpVxyXG4gICAgaWYgKG1haW5FbmQgJiYgcmVtb3RlRW5kKSB7XHJcbiAgICAgIC8vIENGUOaooeWdl+eJueauiuWkhOeQhlxyXG4gICAgICBpZiAobW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHtcclxuICAgICAgICAvLyDojrflj5blm5vkuKrnq6/ngrlcclxuICAgICAgICBjb25zdCBtYWluU21PdXRFbmQgPSBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddPy5lbmQ7XHJcbiAgICAgICAgY29uc3QgbWFpbk1tT3V0RW5kID0gbWFpblBhdGhzWydtYWluLWNmcC1tbS1vdXQnXT8uZW5kO1xyXG4gICAgICAgIGNvbnN0IG1haW5JbkVuZCA9IG1haW5QYXRoc1snbWFpbi1jZnAtaW4nXT8uZW5kO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZVNtT3V0RW5kID0gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J10/LmVuZDtcclxuICAgICAgICBjb25zdCByZW1vdGVNbU91dEVuZCA9IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLW1tLW91dCddPy5lbmQ7XHJcbiAgICAgICAgY29uc3QgcmVtb3RlSW5FbmQgPSByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1pbiddPy5lbmQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5qOA5p+l5Lik5a+56L+e5o6lXHJcbiAgICAgICAgY29uc3QgY2hlY2tDb25uZWN0aW9uID0gKGVuZDEsIGVuZDIpID0+IHtcclxuICAgICAgICAgIGlmICghZW5kMSB8fCAhZW5kMikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbm5lY3Rpb25NYXApLnNvbWUoa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25NYXBba2V5XTtcclxuICAgICAgICAgICAgcmV0dXJuIChjb25uZWN0aW9uLmNvbm5lY3RlZFRvID09PSBlbmQxICYmIGtleSA9PT0gZW5kMikgfHxcclxuICAgICAgICAgICAgICAgICAgIChjb25uZWN0aW9uLmNvbm5lY3RlZFRvID09PSBlbmQyICYmIGtleSA9PT0gZW5kMSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWIhuWIq+ajgOafpeWNleaooeWSjOWkmuaooeeahOi/nuaOpVxyXG4gICAgICAgIGNvbnN0IGlzTWFpblRvUmVtb3RlU21Db25uZWN0ZWQgPSBjaGVja0Nvbm5lY3Rpb24obWFpblNtT3V0RW5kLCByZW1vdGVJbkVuZCk7XHJcbiAgICAgICAgY29uc3QgaXNNYWluVG9SZW1vdGVNbUNvbm5lY3RlZCA9IGNoZWNrQ29ubmVjdGlvbihtYWluTW1PdXRFbmQsIHJlbW90ZUluRW5kKTtcclxuICAgICAgICBjb25zdCBpc1JlbW90ZVRvTWFpblNtQ29ubmVjdGVkID0gY2hlY2tDb25uZWN0aW9uKHJlbW90ZVNtT3V0RW5kLCBtYWluSW5FbmQpO1xyXG4gICAgICAgIGNvbnN0IGlzUmVtb3RlVG9NYWluTW1Db25uZWN0ZWQgPSBjaGVja0Nvbm5lY3Rpb24ocmVtb3RlTW1PdXRFbmQsIG1haW5JbkVuZCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5Lu75LiA5a+56L+e5o6l5oiQ5Yqf5Y2z6K6k5Li66L+e5o6l5oiQ5YqfXHJcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQgPSAoaXNNYWluVG9SZW1vdGVTbUNvbm5lY3RlZCAmJiBpc1JlbW90ZVRvTWFpblNtQ29ubmVjdGVkKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpc01haW5Ub1JlbW90ZU1tQ29ubmVjdGVkICYmIGlzUmVtb3RlVG9NYWluTW1Db25uZWN0ZWQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJlc3VsdC5DRlBDb25uZWN0U3RhdHVzID0gaXNDb25uZWN0ZWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5aaC5p6c6L+e5o6l5a2Y5Zyo77yM6I635Y+W6K+m57uG54q25oCB5L+h5oGvXHJcbiAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgbGV0IGNvbm5lY3Rpb25LZXkxLCBjb25uZWN0aW9uS2V5MjtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGlzTWFpblRvUmVtb3RlU21Db25uZWN0ZWQgJiYgaXNSZW1vdGVUb01haW5TbUNvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICAvLyDljZXmqKHov57mjqVcclxuICAgICAgICAgICAgY29ubmVjdGlvbktleTEgPSBPYmplY3Qua2V5cyhjb25uZWN0aW9uTWFwKS5maW5kKGtleSA9PiBcclxuICAgICAgICAgICAgICAoY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSBtYWluU21PdXRFbmQgJiYga2V5ID09PSByZW1vdGVJbkVuZCkgfHxcclxuICAgICAgICAgICAgICAoY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSByZW1vdGVJbkVuZCAmJiBrZXkgPT09IG1haW5TbU91dEVuZClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29ubmVjdGlvbktleTIgPSBPYmplY3Qua2V5cyhjb25uZWN0aW9uTWFwKS5maW5kKGtleSA9PiBcclxuICAgICAgICAgICAgICAoY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSByZW1vdGVTbU91dEVuZCAmJiBrZXkgPT09IG1haW5JbkVuZCkgfHxcclxuICAgICAgICAgICAgICAoY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSBtYWluSW5FbmQgJiYga2V5ID09PSByZW1vdGVTbU91dEVuZCkgIFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8g5aSa5qih6L+e5o6lXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25LZXkxID0gT2JqZWN0LmtleXMoY29ubmVjdGlvbk1hcCkuZmluZChrZXkgPT4gXHJcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb25NYXBba2V5XS5jb25uZWN0ZWRUbyA9PT0gbWFpbk1tT3V0RW5kICYmIGtleSA9PT0gcmVtb3RlSW5FbmQpIHx8XHJcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb25NYXBba2V5XS5jb25uZWN0ZWRUbyA9PT0gcmVtb3RlSW5FbmQgJiYga2V5ID09PSBtYWluTW1PdXRFbmQpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25LZXkyID0gT2JqZWN0LmtleXMoY29ubmVjdGlvbk1hcCkuZmluZChrZXkgPT4gXHJcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb25NYXBba2V5XS5jb25uZWN0ZWRUbyA9PT0gcmVtb3RlTW1PdXRFbmQgJiYga2V5ID09PSBtYWluSW5FbmQpIHx8XHJcbiAgICAgICAgICAgICAgKGNvbm5lY3Rpb25NYXBba2V5XS5jb25uZWN0ZWRUbyA9PT0gbWFpbkluRW5kICYmIGtleSA9PT0gcmVtb3RlTW1PdXRFbmQpICBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb25LZXkxICYmIGNvbm5lY3Rpb25LZXkyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24xID0gY29ubmVjdGlvbk1hcFtjb25uZWN0aW9uS2V5MV07XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24yID0gY29ubmVjdGlvbk1hcFtjb25uZWN0aW9uS2V5Ml07XHJcbiAgICAgICAgICAgIHJlc3VsdC5DRlBNYWluSW4gPSBjb25uZWN0aW9uMS5maWJlcnN0YXR1cztcclxuICAgICAgICAgICAgcmVzdWx0LkNGUE1haW5PdXQgPSBjb25uZWN0aW9uMi5maWJlcnN0YXR1cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0LkNGUE1haW5JbiA9ICd1bmtub3duJztcclxuICAgICAgICAgIHJlc3VsdC5DRlBNYWluT3V0ID0gJ3Vua25vd24nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDlhbbku5bmqKHlnZfnmoTlpITnkIbpgLvovpFcclxuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZCA9IE9iamVjdC5rZXlzKGNvbm5lY3Rpb25NYXApLnNvbWUoa2V5ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uTWFwW2tleV07XHJcbiAgICAgICAgICByZXR1cm4gKGNvbm5lY3Rpb24uY29ubmVjdGVkVG8gPT09IG1haW5FbmQgJiYga2V5ID09PSByZW1vdGVFbmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgKGNvbm5lY3Rpb24uY29ubmVjdGVkVG8gPT09IHJlbW90ZUVuZCAmJiBrZXkgPT09IG1haW5FbmQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOiuvue9rui/nuaOpeeKtuaAgVxyXG4gICAgICAgIGNvbnN0IHN0YXR1c1ByZWZpeCA9IG1vZHVsZVR5cGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICByZXN1bHRbYCR7c3RhdHVzUHJlZml4fUNvbm5lY3RTdGF0dXNgXSA9IGlzQ29ubmVjdGVkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWmguaenOi/nuaOpeWtmOWcqO+8jOiOt+WPluivpue7hueKtuaAgeS/oeaBr1xyXG4gICAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbktleSA9IE9iamVjdC5rZXlzKGNvbm5lY3Rpb25NYXApLmZpbmQoa2V5ID0+IFxyXG4gICAgICAgICAgICAoY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSBtYWluRW5kICYmIGtleSA9PT0gcmVtb3RlRW5kKSB8fFxyXG4gICAgICAgICAgICAoY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSByZW1vdGVFbmQgJiYga2V5ID09PSBtYWluRW5kKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb25LZXkpIHtcclxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25NYXBbY29ubmVjdGlvbktleV07XHJcbiAgICAgICAgICAgIHN3aXRjaChtb2R1bGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnODAwMCc6XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuQ29wcGVyV2lyZW1hcFN0YXR1cyA9IGNvbm5lY3Rpb24ud2lyZW1hcHN0YXR1cztcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5Db3BwZXJQZXJmb3JtYW5jZVN0YXR1cyA9IGNvbm5lY3Rpb24ucGVyZm9ybWFuY2VzdGF0dXM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyDmnKrov57mjqXml7bnmoTpu5jorqTnirbmgIFcclxuICAgICAgICAgIHN3aXRjaChtb2R1bGVUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJzgwMDAnOlxyXG4gICAgICAgICAgICAgIHJlc3VsdC5Db3BwZXJXaXJlbWFwU3RhdHVzID0gJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5Db3BwZXJQZXJmb3JtYW5jZVN0YXR1cyA9ICd1bmtub3duJztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICByZXN1bHQuQ0ZQTWFpbkluID0gJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5DRlBNYWluT3V0ID0gJ3Vua25vd24nO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5peg5pWI6L+e5o6l5pe255qE6buY6K6k54q25oCBXHJcbiAgICAgIGNvbnN0IHN0YXR1c1ByZWZpeCA9IG1vZHVsZVR5cGUudG9VcHBlckNhc2UoKTtcclxuICAgICAgcmVzdWx0W2Ake3N0YXR1c1ByZWZpeH1Db25uZWN0U3RhdHVzYF0gPSBmYWxzZTtcclxuICAgICAgc3dpdGNoKG1vZHVsZVR5cGUpIHtcclxuICAgICAgICBjYXNlICc4MDAwJzpcclxuICAgICAgICAgIHJlc3VsdC5Db3BwZXJXaXJlbWFwU3RhdHVzID0gJ3Vua25vd24nO1xyXG4gICAgICAgICAgcmVzdWx0LkNvcHBlclBlcmZvcm1hbmNlU3RhdHVzID0gJ3Vua25vd24nO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgIHJlc3VsdC5DRlBNYWluSW4gPSAndW5rbm93bic7XHJcbiAgICAgICAgICByZXN1bHQuQ0ZQTWFpbk91dCA9ICd1bmtub3duJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoJ+iOt+WPlui/nuaOpemFjee9rumUmeivrzonLCBlcnJvcik7XHJcbiAgICAvLyDplJnor6/ml7bnmoTpu5jorqTnirbmgIFcclxuICAgIGNvbnN0IHN0YXR1c1ByZWZpeCA9IG1vZHVsZVR5cGUudG9VcHBlckNhc2UoKTtcclxuICAgIHJlc3VsdFtgJHtzdGF0dXNQcmVmaXh9Q29ubmVjdFN0YXR1c2BdID0gZmFsc2U7XHJcbiAgICBzd2l0Y2gobW9kdWxlVHlwZSkge1xyXG4gICAgICBjYXNlICc4MDAwJzpcclxuICAgICAgICByZXN1bHQuQ29wcGVyV2lyZW1hcFN0YXR1cyA9ICd1bmtub3duJztcclxuICAgICAgICByZXN1bHQuQ29wcGVyUGVyZm9ybWFuY2VTdGF0dXMgPSAndW5rbm93bic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NmcCc6XHJcbiAgICAgICAgcmVzdWx0LkNGUE1haW5JbiA9ICd1bmtub3duJztcclxuICAgICAgICByZXN1bHQuQ0ZQTWFpbk91dCA9ICd1bmtub3duJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb2ZwJzpcclxuICAgICAgICByZXN1bHQuT0ZQU3RhdHVzID0gJ3Vua25vd24nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuLy8g57uE6KOF5pyA57uI6L6T5Ye655qE5YiG5p6Q57uT5p6cXHJcbmFzeW5jIGZ1bmN0aW9uIGFuYWx5emVBbGxDb25uZWN0aW9ucyhjb25uZWN0aW9ucykge1xyXG5cclxuXHJcbiAgY29uc3QgZGV2aWNlU3RvcmUgPSB1c2VEZXZpY2VTdG9yZS5nZXRTdGF0ZSgpO1xyXG4gIGNvbnN0IG1haW5Nb2R1bGUgPSBkZXZpY2VTdG9yZS5tYWluVW5pdE1vZHVsZXNbMF0/LmlkO1xyXG4gIGNvbnN0IHJlbW90ZU1vZHVsZSA9IGRldmljZVN0b3JlLnJlbW90ZVVuaXRNb2R1bGVzWzBdPy5pZDtcclxuXHJcbiAgLy8g5aSE55CG5rKh5pyJ6L+e5o6l55qE5oOF5Ya1XHJcbiAgaWYgKCFjb25uZWN0aW9ucyB8fCBjb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiB7IG1haW5Nb2R1bGUsIHJlbW90ZU1vZHVsZSB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZ3JhcGggPSBidWlsZENvbm5lY3Rpb25HcmFwaChjb25uZWN0aW9ucyk7XHJcbiAgY29uc3QgcmVzdWx0ID0geyBtYWluTW9kdWxlLCByZW1vdGVNb2R1bGUgfTtcclxuXHJcbiAgaWYgKG1haW5Nb2R1bGU/LmluY2x1ZGVzKCc4MDAwJykpIHtcclxuICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCBhbmFseXplODAwMChncmFwaCkpO1xyXG4gIH0gZWxzZSBpZiAobWFpbk1vZHVsZT8uaW5jbHVkZXMoJ2NmcCcpKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgYW5hbHl6ZUNGUChncmFwaCkpO1xyXG4gIH0gZWxzZSBpZiAobWFpbk1vZHVsZT8uaW5jbHVkZXMoJ29mcCcpKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgYW5hbHl6ZU9GUChncmFwaCkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXN1bHQudW5rbm93blBhdGhzID0ge307XHJcbiAgICBPYmplY3Qua2V5cyhncmFwaCkuZm9yRWFjaChwb3J0ID0+IHtcclxuICAgICAgcmVzdWx0LnVua25vd25QYXRoc1twb3J0XSA9IHRyYWNlRnVsbFBhdGgoZ3JhcGgsIHBvcnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDmo4Dmn6Xnq6/lj6PkupLpgJrnirbmgIHlubbmm7TmlrDnu5PmnpxcclxuICBjb25zdCBtb2R1bGVUeXBlTWFwID0ge1xyXG4gICAgJzgwMDAnOiAnODAwMCcsXHJcbiAgICAnY2ZwJzogJ2NmcCcsXHJcbiAgICAnb2ZwJzogJ29mcCdcclxuICB9O1xyXG4gIGNvbnN0IGN1cnJlbnRNb2R1bGVUeXBlID0gbW9kdWxlVHlwZU1hcFttYWluTW9kdWxlPy5zcGxpdCgnLScpWzBdXSB8fCAnODAwMCc7XHJcbiAgYXdhaXQgc2V0Q29ubmVjdGlvblN0YXR1cyhyZXN1bHQsIGN1cnJlbnRNb2R1bGVUeXBlLGNvbm5lY3Rpb25zKTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuXHJcbi8vIOWQjOatpeWIhuaekOe7k+aenOWIsGRlaXZjZVN0b3JlXHJcbmNvbnN0IENvbm5lY3Rpb25BbmFseXplciA9ICgpID0+IHtcclxuXHJcbiAgY29uc3QgY29ubmVjdGlvblBhdGhzID0gdXNlRGV2aWNlU3RvcmUoc3RhdGUgPT4gc3RhdGUuY29ubmVjdGlvblBhdGhzKTtcclxuICBjb25zdCB1cGRhdGVDb25uZWN0aW9uU3RhdHVzID0gdXNlRGV2aWNlU3RvcmUoc3RhdGUgPT4gc3RhdGUudXBkYXRlQ29ubmVjdGlvblN0YXR1cyk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyDliJvlu7rkuIDkuKrlvILmraXlh73mlbDmnaXlpITnkIbliIbmnpBcclxuICAgIGNvbnN0IGFuYWx5emVDb25uZWN0aW9ucyA9IGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhbmFseXplQWxsQ29ubmVjdGlvbnMoY29ubmVjdGlvblBhdGhzKTtcclxuICAgICAgICB1cGRhdGVDb25uZWN0aW9uU3RhdHVzKHJlc3VsdCk7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygn6L+e5o6l5YiG5p6Q57uT5p6cOicsIHJlc3VsdCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcign6L+e5o6l5YiG5p6Q6ZSZ6K+vOicsIGVycm9yKTtcclxuICAgICAgICAvLyDlj5HnlJ/plJnor6/ml7bmm7TmlrDnirbmgIHkuLrmnKrov57mjqVcclxuICAgICAgICB1cGRhdGVDb25uZWN0aW9uU3RhdHVzKHtcclxuICAgICAgICAgIG1haW5Nb2R1bGU6IG51bGwsXHJcbiAgICAgICAgICByZW1vdGVNb2R1bGU6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g5omn6KGM5YiG5p6QXHJcbiAgICBhbmFseXplQ29ubmVjdGlvbnMoKTtcclxuICB9LCBbY29ubmVjdGlvblBhdGhzLCB1cGRhdGVDb25uZWN0aW9uU3RhdHVzXSk7XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29ubmVjdGlvbkFuYWx5emVyO1xyXG5cclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlRGV2aWNlU3RvcmUiLCJ1c2VEaXNwbGF5U3RvcmUiLCJBUElfVVJMUyIsImJ1aWxkQ29ubmVjdGlvbkdyYXBoIiwiY29ubmVjdGlvbnMiLCJncmFwaCIsImZvckVhY2giLCJjb25uIiwic291cmNlIiwidGFyZ2V0IiwicHVzaCIsImZpbmRDb3VudGVycGFydCIsIm5vZGVOYW1lIiwianVtcGVyVHlwZXMiLCJwYXR0ZXJuIiwicmVwbGFjZSIsIm4iLCJpbmNsdWRlcyIsIm1hdGNoZXMiLCJtYXRjaCIsInRyYWNlRnVsbFBhdGgiLCJzdGFydFBvaW50IiwidmlzaXRlZCIsIlNldCIsInBhdGgiLCJjdXJyZW50IiwiaGFzIiwiYWRkIiwiY291bnRlcnBhcnQiLCJuZWlnaGJvcnMiLCJmaWx0ZXIiLCJlbmRQb2ludCIsImxlbmd0aCIsIml0ZW0iLCJzdGFydCIsImVuZCIsImFuYWx5emU4MDAwIiwicmVzdWx0IiwibWFpblBhdGhzIiwicmVtb3RlUGF0aHMiLCJhbmFseXplUG9ydHMiLCJwcmVmaXgiLCJPYmplY3QiLCJrZXlzIiwiayIsInN0YXJ0c1dpdGgiLCJwb3J0IiwidHJhY2UiLCJwb3J0VHlwZSIsImFuYWx5emVDRlAiLCJQT1JUX0NPTkZJRyIsIm1haW4iLCJvdXRwdXRzIiwiaW5wdXQiLCJ2ZmwiLCJyZW1vdGUiLCJhbmFseXplUG9ydCIsInR5cGUiLCJ2YWx1ZXMiLCJmbGF0IiwicCIsImFuYWx5emVPRlAiLCJzZXRDb25uZWN0aW9uU3RhdHVzIiwibW9kdWxlVHlwZSIsImRldmljZVN0b3JlIiwiZ2V0U3RhdGUiLCJmYXVsdFNjZW5hcmlvIiwiZmF1bHRTY2VuYXJpb3MiLCJhcGlVcmwiLCJDT05ORUNUSU9OIiwiTUFQX1dJVEhfU0NFTkUiLCJyZXNwb25zZSIsImZldGNoIiwib2siLCJFcnJvciIsImRhdGEiLCJqc29uIiwiY29ubmVjdGlvbk1hcCIsIm1haW5FbmQiLCJtYWluU3RhcnQiLCJPRlBTdGF0dXMiLCJmaWJlcnN0YXR1cyIsIk9GUENvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iLCJrZXkiLCJtYXRjaGluZ0Nvbm5lY3Rpb24iLCJmaW5kIiwiT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXMiLCJtYWluU3RhcnRDb25uZWN0aW9uIiwiT0ZQb3V0UmVmU3RhdHVzIiwicmVtb3RlRW5kIiwibWFpblNtT3V0RW5kIiwibWFpbk1tT3V0RW5kIiwibWFpbkluRW5kIiwicmVtb3RlU21PdXRFbmQiLCJyZW1vdGVNbU91dEVuZCIsInJlbW90ZUluRW5kIiwiY2hlY2tDb25uZWN0aW9uIiwiZW5kMSIsImVuZDIiLCJzb21lIiwiY29ubmVjdGlvbiIsImlzTWFpblRvUmVtb3RlU21Db25uZWN0ZWQiLCJpc01haW5Ub1JlbW90ZU1tQ29ubmVjdGVkIiwiaXNSZW1vdGVUb01haW5TbUNvbm5lY3RlZCIsImlzUmVtb3RlVG9NYWluTW1Db25uZWN0ZWQiLCJpc0Nvbm5lY3RlZCIsIkNGUENvbm5lY3RTdGF0dXMiLCJjb25uZWN0aW9uS2V5MSIsImNvbm5lY3Rpb25LZXkyIiwiY29ubmVjdGlvbjEiLCJjb25uZWN0aW9uMiIsIkNGUE1haW5JbiIsIkNGUE1haW5PdXQiLCJzdGF0dXNQcmVmaXgiLCJ0b1VwcGVyQ2FzZSIsImNvbm5lY3Rpb25LZXkiLCJDb3BwZXJXaXJlbWFwU3RhdHVzIiwid2lyZW1hcHN0YXR1cyIsIkNvcHBlclBlcmZvcm1hbmNlU3RhdHVzIiwicGVyZm9ybWFuY2VzdGF0dXMiLCJlcnJvciIsImNvbnNvbGUiLCJhbmFseXplQWxsQ29ubmVjdGlvbnMiLCJtYWluTW9kdWxlIiwibWFpblVuaXRNb2R1bGVzIiwiaWQiLCJyZW1vdGVNb2R1bGUiLCJyZW1vdGVVbml0TW9kdWxlcyIsImFzc2lnbiIsInVua25vd25QYXRocyIsIm1vZHVsZVR5cGVNYXAiLCJjdXJyZW50TW9kdWxlVHlwZSIsInNwbGl0IiwiQ29ubmVjdGlvbkFuYWx5emVyIiwiY29ubmVjdGlvblBhdGhzIiwic3RhdGUiLCJ1cGRhdGVDb25uZWN0aW9uU3RhdHVzIiwiYW5hbHl6ZUNvbm5lY3Rpb25zIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/ConnectionAnalyzer.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/ContextMenu.js":
/*!***************************************!*\
!*** ./src/components/ContextMenu.js ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ContextMenu)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction ContextMenu({ x, y, onClose, items }) {\n const menuRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ContextMenu.useEffect\": ()=>{\n const handleClickOutside = {\n \"ContextMenu.useEffect.handleClickOutside\": (event)=>{\n if (menuRef.current && !menuRef.current.contains(event.target)) {\n onClose();\n }\n }\n }[\"ContextMenu.useEffect.handleClickOutside\"];\n document.addEventListener('mousedown', handleClickOutside);\n return ({\n \"ContextMenu.useEffect\": ()=>document.removeEventListener('mousedown', handleClickOutside)\n })[\"ContextMenu.useEffect\"];\n }\n }[\"ContextMenu.useEffect\"], [\n onClose\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: menuRef,\n className: \"fixed bg-[#1E293B] border border-[#0ff]/20 rounded-lg shadow-lg py-1 z-1001\",\n style: {\n left: x,\n top: y\n },\n children: items.map((item, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full px-4 py-2 text-left text-sm text-[#0ff] hover:bg-[#0ff]/10 hover:text-[#00ff7f]\",\n onClick: ()=>{\n item.onClick();\n onClose();\n },\n children: item.label\n }, index, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ContextMenu.js\",\n lineNumber: 24,\n columnNumber: 9\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ContextMenu.js\",\n lineNumber: 18,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0NvbnRleHRNZW51LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUEwQztBQUUzQixTQUFTRSxZQUFZLEVBQUVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFQyxPQUFPLEVBQUVDLEtBQUssRUFBRTtJQUMxRCxNQUFNQyxVQUFVTiw2Q0FBTUEsQ0FBQztJQUV2QkQsZ0RBQVNBO2lDQUFDO1lBQ1IsTUFBTVE7NERBQXFCLENBQUNDO29CQUMxQixJQUFJRixRQUFRRyxPQUFPLElBQUksQ0FBQ0gsUUFBUUcsT0FBTyxDQUFDQyxRQUFRLENBQUNGLE1BQU1HLE1BQU0sR0FBRzt3QkFDOURQO29CQUNGO2dCQUNGOztZQUVBUSxTQUFTQyxnQkFBZ0IsQ0FBQyxhQUFhTjtZQUN2Qzt5Q0FBTyxJQUFNSyxTQUFTRSxtQkFBbUIsQ0FBQyxhQUFhUDs7UUFDekQ7Z0NBQUc7UUFBQ0g7S0FBUTtJQUVaLHFCQUNFLDhEQUFDVztRQUNDQyxLQUFLVjtRQUNMVyxXQUFVO1FBQ1ZDLE9BQU87WUFBRUMsTUFBTWpCO1lBQUdrQixLQUFLakI7UUFBRTtrQkFFeEJFLE1BQU1nQixHQUFHLENBQUMsQ0FBQ0MsTUFBTUMsc0JBQ2hCLDhEQUFDQztnQkFFQ1AsV0FBVTtnQkFDVlEsU0FBUztvQkFDUEgsS0FBS0csT0FBTztvQkFDWnJCO2dCQUNGOzBCQUVDa0IsS0FBS0ksS0FBSztlQVBOSDs7Ozs7Ozs7OztBQVlmIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL0NvbnRleHRNZW51LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29udGV4dE1lbnUoeyB4LCB5LCBvbkNsb3NlLCBpdGVtcyB9KSB7XHJcbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZihudWxsKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAobWVudVJlZi5jdXJyZW50ICYmICFtZW51UmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICAgIG9uQ2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xyXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XHJcbiAgfSwgW29uQ2xvc2VdKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXttZW51UmVmfVxyXG4gICAgICBjbGFzc05hbWU9XCJmaXhlZCBiZy1bIzFFMjkzQl0gYm9yZGVyIGJvcmRlci1bIzBmZl0vMjAgcm91bmRlZC1sZyBzaGFkb3ctbGcgcHktMSB6LTEwMDFcIlxyXG4gICAgICBzdHlsZT17eyBsZWZ0OiB4LCB0b3A6IHkgfX1cclxuICAgID5cclxuICAgICAge2l0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHB4LTQgcHktMiB0ZXh0LWxlZnQgdGV4dC1zbSB0ZXh0LVsjMGZmXSBob3ZlcjpiZy1bIzBmZl0vMTAgaG92ZXI6dGV4dC1bIzAwZmY3Zl1cIlxyXG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLm9uQ2xpY2soKTtcclxuICAgICAgICAgICAgb25DbG9zZSgpO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7aXRlbS5sYWJlbH1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgKSl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJDb250ZXh0TWVudSIsIngiLCJ5Iiwib25DbG9zZSIsIml0ZW1zIiwibWVudVJlZiIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwidGFyZ2V0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRpdiIsInJlZiIsImNsYXNzTmFtZSIsInN0eWxlIiwibGVmdCIsInRvcCIsIm1hcCIsIml0ZW0iLCJpbmRleCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJsYWJlbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/ContextMenu.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/Cursors.js":
/*!***********************************!*\
!*** ./src/components/Cursors.js ***!
\***********************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Cursors)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var zustand_shallow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! zustand/shallow */ \"zustand/shallow\");\n/* harmony import */ var _components_lib_StatusToast__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/StatusToast */ \"(pages-dir-node)/./src/components/lib/StatusToast.js\");\n/* harmony import */ var _config_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/config/api */ \"(pages-dir-node)/./src/config/api.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, _store_displayStore__WEBPACK_IMPORTED_MODULE_3__, zustand_shallow__WEBPACK_IMPORTED_MODULE_4__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__]);\n([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, _store_displayStore__WEBPACK_IMPORTED_MODULE_3__, zustand_shallow__WEBPACK_IMPORTED_MODULE_4__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\nconst ToneSound = typeof Audio !== 'undefined' ? new Audio((0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/sounds/tone.mp3')) : null;\nconst CleanSound = typeof Audio !== 'undefined' ? new Audio((0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/sounds/clean.mp3')) : null;\nfunction Cursors() {\n const { selectedTool, connectionStatus, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const [connectionMap, setConnectionMap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const navigation = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n \"Cursors.useDisplayStore[navigation]\": (state)=>state.navigation\n }[\"Cursors.useDisplayStore[navigation]\"], zustand_shallow__WEBPACK_IMPORTED_MODULE_4__.shallow);\n const connectionMapRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); // 添加ref用于缓存connectionMap\n const [showOverlay, setShowOverlay] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // 添加遮罩层状态\n const [cleanStatus, setCleanStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); // 添加清洁状态\n const [toneStatus, setToneStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); // 添加寻线音频状态\n const mainModule = _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState().mainUnitModules[0]?.id;\n const seatUUID = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n \"Cursors.useDeviceStore[seatUUID]\": (state)=>state.seatUUID\n }[\"Cursors.useDeviceStore[seatUUID]\"]);\n // 从localStorage加载清洁状态\n const loadCleanState = ()=>{\n if (!seatUUID) return;\n // 使用setTimeout确保DOM元素已加载\n setTimeout(()=>{\n const lccleanStates = JSON.parse(localStorage.getItem(`cleanState_${seatUUID}_lc`) || '{}');\n const mpoCleanStates = JSON.parse(localStorage.getItem(`cleanState_${seatUUID}_mpo`) || '{}');\n // 恢复LC端口状态\n const lcElements = document.querySelectorAll('[lcclean]');\n lcElements.forEach((el)=>{\n const elementId = el.id || el.getAttribute('data-id');\n if (elementId && lccleanStates[elementId] !== undefined) {\n el.setAttribute('lcclean', lccleanStates[elementId].toString());\n }\n });\n // 恢复MPO端口状态\n const mpoElements = document.querySelectorAll('[mpoClean]');\n mpoElements.forEach((el)=>{\n const elementId = el.id || el.getAttribute('data-id');\n if (elementId && mpoCleanStates[elementId] !== undefined) {\n el.setAttribute('mpoClean', mpoCleanStates[elementId].toString());\n }\n });\n }, 500);\n };\n // 保存清洁状态到localStorage\n const saveCleanState = ()=>{\n if (!seatUUID) return;\n // 保存LC端口状态\n const lcElements = document.querySelectorAll('[lcclean]');\n const lccleanStates = {};\n lcElements.forEach((el)=>{\n const elementId = el.id || el.getAttribute('data-id');\n if (elementId) {\n lccleanStates[elementId] = el.getAttribute('lcclean') === 'true';\n }\n });\n localStorage.setItem(`cleanState_${seatUUID}_lc`, JSON.stringify(lccleanStates));\n // 保存MPO端口状态\n const mpoElements = document.querySelectorAll('[mpoClean]');\n const mpoCleanStates = {};\n mpoElements.forEach((el)=>{\n const elementId = el.id || el.getAttribute('data-id');\n if (elementId) {\n mpoCleanStates[elementId] = el.getAttribute('mpoClean') === 'true';\n }\n });\n localStorage.setItem(`cleanState_${seatUUID}_mpo`, JSON.stringify(mpoCleanStates));\n };\n // 清理非本场seatUUID的清洁状态缓存\n const clearOtherCleanState = ()=>{\n if (!seatUUID) return;\n // 清理所有非本场seatUUID的cleanState_前缀的缓存项\n Object.keys(localStorage).forEach((key)=>{\n if (key.startsWith('cleanState_') && !key.startsWith(`cleanState_${seatUUID}`)) {\n localStorage.removeItem(key);\n }\n });\n };\n // 监听seatUUID变化\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Cursors.useEffect\": ()=>{\n if (seatUUID) {\n loadCleanState();\n // 加载完成后清理其他场次的缓存\n setTimeout({\n \"Cursors.useEffect\": ()=>{\n clearOtherCleanState();\n }\n }[\"Cursors.useEffect\"], 1000);\n }\n }\n }[\"Cursors.useEffect\"], [\n seatUUID\n ]);\n // 获取连接配置\n const fetchConnectionMap = async ()=>{\n try {\n // 如果已经有缓存的connectionMap,直接返回\n if (connectionMapRef.current) {\n setConnectionMap(connectionMapRef.current);\n return;\n }\n const deviceStore = _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState();\n const faultScenario = deviceStore.faultScenarios || '';\n const apiUrl = _config_api__WEBPACK_IMPORTED_MODULE_6__.API_URLS.CONNECTION.MAP_WITH_SCENE(faultScenario);\n const response = await fetch(apiUrl);\n if (!response.ok) {\n throw new Error('获取连接配置失败');\n }\n const data = await response.json();\n connectionMapRef.current = data || {}; // 缓存connectionMap\n setConnectionMap(data || {});\n } catch (error) {\n console.error('获取连接配置错误:', error);\n setConnectionMap({});\n }\n };\n // 处理鼠标按下事件(用于lc-clean工具)\n const handleMouseDown = ()=>{\n if (selectedTool?.id === 'lc-clean') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/custom-clean2.png')}), auto`;\n CleanSound?.play().catch(console.error);\n } else if (selectedTool?.id === 'mpo-clean') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/custom-clean-mpo2.png')}), auto`;\n CleanSound?.play().catch(console.error);\n }\n };\n // 处理鼠标释放事件(用于lc-clean工具)\n const handleMouseUp = (event)=>{\n if (selectedTool?.id === 'lc-clean') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/custom-clean.png')}), auto`;\n const x = event.clientX;\n const y = event.clientY;\n const elements = document.elementsFromPoint(x, y);\n let cleanableElement = null;\n elements.forEach((element)=>{\n if (element.hasAttribute('lcclean')) {\n cleanableElement = element;\n }\n });\n if (cleanableElement) {\n let hasConnectedEndpoint = false;\n elements.forEach((element)=>{\n if (element.classList.contains('jtk-connected')) {\n hasConnectedEndpoint = true;\n setTotalToastMessage('该端口已连接,请断开连接进行清洁');\n }\n });\n if (!hasConnectedEndpoint) {\n cleanableElement.setAttribute('lcclean', 'true');\n setCleanStatus('已清洁');\n saveCleanState(); // 保存状态\n } else {\n setCleanStatus(null);\n }\n } else {\n setCleanStatus(null);\n }\n } else if (selectedTool?.id === 'mpo-clean') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/custom-clean-mpo.png')}), auto`;\n const x = event.clientX;\n const y = event.clientY;\n const elements = document.elementsFromPoint(x, y);\n let foundCleanElement = false;\n elements.forEach((element)=>{\n if (element.hasAttribute('mpoClean')) {\n element.setAttribute('mpoClean', 'true');\n setCleanStatus('已清洁');\n foundCleanElement = true;\n saveCleanState(); // 保存状态\n }\n });\n if (!foundCleanElement) {\n setCleanStatus(null);\n }\n }\n };\n // 这些函数已合并到 handleMouseDown 和 handleMouseUp 中\n // 处理鼠标移动事件(用于lc-clean工具)\n const handleCleanMouseMove = (event)=>{\n if (selectedTool?.id === 'lc-clean') {\n const x = event.clientX;\n const y = event.clientY;\n const elements = document.elementsFromPoint(x, y);\n let foundCleanElement = false;\n let currentStatus = null;\n elements.forEach((element)=>{\n if (element.hasAttribute('lcclean')) {\n foundCleanElement = true;\n const isClean = element.getAttribute('lcclean') === 'true';\n currentStatus = isClean ? '已清洁' : '未清洁';\n }\n });\n if (foundCleanElement) {\n setCleanStatus(currentStatus);\n } else {\n setCleanStatus(null);\n }\n }\n };\n // 处理鼠标移动事件(用于MPO-clean工具)\n const handleMPOCleanMouseMove = (event)=>{\n if (selectedTool?.id === 'mpo-clean') {\n const x = event.clientX;\n const y = event.clientY;\n const elements = document.elementsFromPoint(x, y);\n let foundCleanElement = false;\n let currentStatus = null;\n elements.forEach((element)=>{\n if (element.hasAttribute('mpoClean')) {\n foundCleanElement = true;\n const isClean = element.getAttribute('mpoClean') === 'true';\n currentStatus = isClean ? '已清洁' : '未清洁';\n }\n });\n if (foundCleanElement) {\n setCleanStatus(currentStatus);\n } else {\n setCleanStatus(null);\n }\n }\n };\n // 根据selectedTool更新鼠标样式和事件监听\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Cursors.useEffect\": ()=>{\n // 移除现有的事件监听器\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('mousemove', handleCleanMouseMove);\n // 根据工具类型设置鼠标样式\n if (!selectedTool) {\n document.body.style.cursor = 'default';\n fetchConnectionMap();\n setShowOverlay(false);\n setCleanStatus(null);\n } else if (selectedTool.id === 'ILT200') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/cursor-ILT.png')}), auto`;\n setShowOverlay(true);\n setCleanStatus(null);\n // 只在tone视图下获取连接配置和添加事件监听\n if (mainModule === '8000' && navigation.current.view === 'tone') {\n document.addEventListener('mousemove', handleMouseMove);\n }\n } else if (selectedTool.id === 'lc-clean') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/custom-clean.png')}), auto`;\n setShowOverlay(true);\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('mousemove', handleCleanMouseMove);\n } else if (selectedTool.id === 'mpo-clean') {\n document.body.style.cursor = `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/custom-clean-mpo.png')}), auto`;\n setShowOverlay(true);\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('mouseup', handleMouseUp);\n document.addEventListener('mousemove', handleMPOCleanMouseMove);\n }\n return ({\n \"Cursors.useEffect\": ()=>{\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('mouseup', handleMouseUp);\n document.removeEventListener('mousemove', handleCleanMouseMove);\n document.removeEventListener('mousemove', handleMPOCleanMouseMove);\n }\n })[\"Cursors.useEffect\"];\n }\n }[\"Cursors.useEffect\"], [\n selectedTool,\n navigation.current.view\n ]);\n // 检查端口互通\n const checkPortConnection = (elementId)=>{\n if (!connectionStatus?.mainPaths) return false;\n // 获取最新的mainPathKey\n const mainPathKey = Object.keys(connectionStatus.mainPaths)[0];\n if (!mainPathKey) return false;\n const mainEnd = connectionStatus.mainPaths[mainPathKey].end;\n if (!mainEnd) return false;\n // 使用最新的connectionMap进行判断\n return Object.keys(connectionMap).some((key)=>{\n const connection = connectionMap[key];\n const isConnected = connection.connectedTo === mainEnd && key === elementId || connection.connectedTo === elementId && key === mainEnd;\n return isConnected;\n });\n };\n // 监听faultScenario变化并重新获取connectionMap\n const faultScenario = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n \"Cursors.useDeviceStore[faultScenario]\": (state)=>state.faultScenarios\n }[\"Cursors.useDeviceStore[faultScenario]\"]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Cursors.useEffect\": ()=>{\n connectionMapRef.current = null; // 清除缓存\n fetchConnectionMap();\n }\n }[\"Cursors.useEffect\"], [\n faultScenario\n ]); // 添加对faultScenario的依赖\n // 处理鼠标移动事件\n const handleMouseMove = (event)=>{\n const x = event.clientX;\n const y = event.clientY;\n const elements = document.elementsFromPoint(x, y);\n elements.forEach((element)=>{\n if (element.getAttribute('jstype') && element.id) {\n const isConnected = checkPortConnection(element.id);\n if (isConnected) {\n ToneSound?.play().catch(console.error);\n setToneStatus('🔊');\n // 1200ms 后清除状态\n setTimeout(()=>{\n setToneStatus(null);\n }, 1200);\n console.log(isConnected);\n }\n }\n });\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n showOverlay && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n style: {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'transparent',\n zIndex: 2000,\n pointerEvents: 'auto'\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/Cursors.js\",\n lineNumber: 351,\n columnNumber: 17\n }, this),\n (selectedTool?.id === 'lc-clean' || selectedTool?.id === 'mpo-clean') && cleanStatus && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusToast__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n status: cleanStatus\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/Cursors.js\",\n lineNumber: 366,\n columnNumber: 17\n }, this),\n selectedTool?.id === 'ILT200' && toneStatus && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusToast__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n status: toneStatus\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/Cursors.js\",\n lineNumber: 369,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0N1cnNvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW9EO0FBQ0g7QUFDRTtBQUNUO0FBQ2E7QUFDZjtBQUNJO0FBRTVDLE1BQU1TLFlBQVksT0FBT0MsVUFBVSxjQUFjLElBQUlBLE1BQU1GLHlEQUFXQSxDQUFDLHVCQUF1QjtBQUM5RixNQUFNRyxhQUFhLE9BQU9ELFVBQVUsY0FBYyxJQUFJQSxNQUFNRix5REFBV0EsQ0FBQyx3QkFBd0I7QUFFakYsU0FBU0k7SUFDcEIsTUFBTSxFQUFFQyxZQUFZLEVBQUVDLGdCQUFnQixFQUFFQyxvQkFBb0IsRUFBRSxHQUFHWiw4REFBY0E7SUFDL0UsTUFBTSxDQUFDYSxlQUFlQyxpQkFBaUIsR0FBR2pCLCtDQUFRQSxDQUFDLENBQUM7SUFDcEQsTUFBTWtCLGFBQWFkLCtEQUFlQTsrQ0FBQ2UsQ0FBQUEsUUFBU0EsTUFBTUQsVUFBVTs4Q0FBRWIsb0RBQU9BO0lBQ3JFLE1BQU1lLG1CQUFtQmxCLDZDQUFNQSxDQUFDLE9BQVEseUJBQXlCO0lBQ2pFLE1BQU0sQ0FBQ21CLGFBQWFDLGVBQWUsR0FBR3RCLCtDQUFRQSxDQUFDLFFBQVMsVUFBVTtJQUNsRSxNQUFNLENBQUN1QixhQUFhQyxlQUFlLEdBQUd4QiwrQ0FBUUEsQ0FBQyxPQUFRLFNBQVM7SUFDaEUsTUFBTSxDQUFDeUIsWUFBWUMsY0FBYyxHQUFHMUIsK0NBQVFBLENBQUMsT0FBUSxXQUFXO0lBQ2hFLE1BQU0yQixhQUFheEIsbUVBQXVCLEdBQUcwQixlQUFlLENBQUMsRUFBRSxFQUFFQztJQUNqRSxNQUFNQyxXQUFXNUIsOERBQWNBOzRDQUFDZ0IsQ0FBQUEsUUFBU0EsTUFBTVksUUFBUTs7SUFFdkQsc0JBQXNCO0lBQ3RCLE1BQU1DLGlCQUFpQjtRQUNuQixJQUFJLENBQUNELFVBQVU7UUFFZix5QkFBeUI7UUFDekJFLFdBQVc7WUFDUCxNQUFNQyxnQkFBZ0JDLEtBQUtDLEtBQUssQ0FBQ0MsYUFBYUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFUCxTQUFTLEdBQUcsQ0FBQyxLQUFLO1lBQ3RGLE1BQU1RLGlCQUFpQkosS0FBS0MsS0FBSyxDQUFDQyxhQUFhQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUVQLFNBQVMsSUFBSSxDQUFDLEtBQUs7WUFFeEYsV0FBVztZQUNYLE1BQU1TLGFBQWFDLFNBQVNDLGdCQUFnQixDQUFDO1lBQzdDRixXQUFXRyxPQUFPLENBQUNDLENBQUFBO2dCQUNmLE1BQU1DLFlBQVlELEdBQUdkLEVBQUUsSUFBSWMsR0FBR0UsWUFBWSxDQUFDO2dCQUMzQyxJQUFJRCxhQUFhWCxhQUFhLENBQUNXLFVBQVUsS0FBS0UsV0FBVztvQkFDckRILEdBQUdJLFlBQVksQ0FBQyxXQUFXZCxhQUFhLENBQUNXLFVBQVUsQ0FBQ0ksUUFBUTtnQkFDaEU7WUFDSjtZQUVBLFlBQVk7WUFDWixNQUFNQyxjQUFjVCxTQUFTQyxnQkFBZ0IsQ0FBQztZQUM5Q1EsWUFBWVAsT0FBTyxDQUFDQyxDQUFBQTtnQkFDaEIsTUFBTUMsWUFBWUQsR0FBR2QsRUFBRSxJQUFJYyxHQUFHRSxZQUFZLENBQUM7Z0JBQzNDLElBQUlELGFBQWFOLGNBQWMsQ0FBQ00sVUFBVSxLQUFLRSxXQUFXO29CQUN0REgsR0FBR0ksWUFBWSxDQUFDLFlBQVlULGNBQWMsQ0FBQ00sVUFBVSxDQUFDSSxRQUFRO2dCQUNsRTtZQUNKO1FBQ0osR0FBRztJQUNQO0lBRUEsc0JBQXNCO0lBQ3RCLE1BQU1FLGlCQUFpQjtRQUNuQixJQUFJLENBQUNwQixVQUFVO1FBRWYsV0FBVztRQUNYLE1BQU1TLGFBQWFDLFNBQVNDLGdCQUFnQixDQUFDO1FBQzdDLE1BQU1SLGdCQUFnQixDQUFDO1FBQ3ZCTSxXQUFXRyxPQUFPLENBQUNDLENBQUFBO1lBQ2YsTUFBTUMsWUFBWUQsR0FBR2QsRUFBRSxJQUFJYyxHQUFHRSxZQUFZLENBQUM7WUFDM0MsSUFBSUQsV0FBVztnQkFDWFgsYUFBYSxDQUFDVyxVQUFVLEdBQUdELEdBQUdFLFlBQVksQ0FBQyxlQUFlO1lBQzlEO1FBQ0o7UUFDQVQsYUFBYWUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFckIsU0FBUyxHQUFHLENBQUMsRUFBRUksS0FBS2tCLFNBQVMsQ0FBQ25CO1FBRWpFLFlBQVk7UUFDWixNQUFNZ0IsY0FBY1QsU0FBU0MsZ0JBQWdCLENBQUM7UUFDOUMsTUFBTUgsaUJBQWlCLENBQUM7UUFDeEJXLFlBQVlQLE9BQU8sQ0FBQ0MsQ0FBQUE7WUFDaEIsTUFBTUMsWUFBWUQsR0FBR2QsRUFBRSxJQUFJYyxHQUFHRSxZQUFZLENBQUM7WUFDM0MsSUFBSUQsV0FBVztnQkFDWE4sY0FBYyxDQUFDTSxVQUFVLEdBQUdELEdBQUdFLFlBQVksQ0FBQyxnQkFBZ0I7WUFDaEU7UUFDSjtRQUNBVCxhQUFhZSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUVyQixTQUFTLElBQUksQ0FBQyxFQUFFSSxLQUFLa0IsU0FBUyxDQUFDZDtJQUN0RTtJQUVBLHVCQUF1QjtJQUN2QixNQUFNZSx1QkFBdUI7UUFDekIsSUFBSSxDQUFDdkIsVUFBVTtRQUVmLG9DQUFvQztRQUNwQ3dCLE9BQU9DLElBQUksQ0FBQ25CLGNBQWNNLE9BQU8sQ0FBQ2MsQ0FBQUE7WUFDOUIsSUFBSUEsSUFBSUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDRCxJQUFJQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUzQixVQUFVLEdBQUc7Z0JBQzVFTSxhQUFhc0IsVUFBVSxDQUFDRjtZQUM1QjtRQUNKO0lBQ0o7SUFFQSxlQUFlO0lBQ2Z4RCxnREFBU0E7NkJBQUM7WUFDTixJQUFJOEIsVUFBVTtnQkFDVkM7Z0JBQ0EsaUJBQWlCO2dCQUNqQkM7eUNBQVc7d0JBQ1BxQjtvQkFDSjt3Q0FBRztZQUNQO1FBQ0o7NEJBQUc7UUFBQ3ZCO0tBQVM7SUFFYixTQUFTO0lBQ1QsTUFBTTZCLHFCQUFxQjtRQUN2QixJQUFJO1lBQ0EsNkJBQTZCO1lBQzdCLElBQUl4QyxpQkFBaUJ5QyxPQUFPLEVBQUU7Z0JBQzFCNUMsaUJBQWlCRyxpQkFBaUJ5QyxPQUFPO2dCQUN6QztZQUNKO1lBRUEsTUFBTUMsY0FBYzNELG1FQUF1QjtZQUMzQyxNQUFNNEQsZ0JBQWdCRCxZQUFZRSxjQUFjLElBQUk7WUFDcEQsTUFBTUMsU0FBUzFELGlEQUFRQSxDQUFDMkQsVUFBVSxDQUFDQyxjQUFjLENBQUNKO1lBQ2xELE1BQU1LLFdBQVcsTUFBTUMsTUFBTUo7WUFDN0IsSUFBSSxDQUFDRyxTQUFTRSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJQyxNQUFNO1lBQ3BCO1lBQ0EsTUFBTUMsT0FBTyxNQUFNSixTQUFTSyxJQUFJO1lBQ2hDckQsaUJBQWlCeUMsT0FBTyxHQUFHVyxRQUFRLENBQUMsR0FBSSxrQkFBa0I7WUFDMUR2RCxpQkFBaUJ1RCxRQUFRLENBQUM7UUFDOUIsRUFBRSxPQUFPRSxPQUFPO1lBQ1pDLFFBQVFELEtBQUssQ0FBQyxhQUFhQTtZQUMzQnpELGlCQUFpQixDQUFDO1FBQ3RCO0lBQ0o7SUFFQSx5QkFBeUI7SUFDekIsTUFBTTJELGtCQUFrQjtRQUNwQixJQUFJL0QsY0FBY2lCLE9BQU8sWUFBWTtZQUNqQ1csU0FBU29DLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUV2RSx5REFBV0EsQ0FBQyxzQkFBc0IsT0FBTyxDQUFDO1lBQzlFRyxZQUFZcUUsT0FBT0MsTUFBTU4sUUFBUUQsS0FBSztRQUMxQyxPQUFPLElBQUk3RCxjQUFjaUIsT0FBTyxhQUFhO1lBQ3pDVyxTQUFTb0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRXZFLHlEQUFXQSxDQUFDLDBCQUEwQixPQUFPLENBQUM7WUFDbEZHLFlBQVlxRSxPQUFPQyxNQUFNTixRQUFRRCxLQUFLO1FBQzFDO0lBQ0o7SUFFQSx5QkFBeUI7SUFDekIsTUFBTVEsZ0JBQWdCLENBQUNDO1FBQ25CLElBQUl0RSxjQUFjaUIsT0FBTyxZQUFZO1lBQ2pDVyxTQUFTb0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRXZFLHlEQUFXQSxDQUFDLHFCQUFxQixPQUFPLENBQUM7WUFFN0UsTUFBTTRFLElBQUlELE1BQU1FLE9BQU87WUFDdkIsTUFBTUMsSUFBSUgsTUFBTUksT0FBTztZQUN2QixNQUFNQyxXQUFXL0MsU0FBU2dELGlCQUFpQixDQUFDTCxHQUFHRTtZQUUvQyxJQUFJSSxtQkFBbUI7WUFDdkJGLFNBQVM3QyxPQUFPLENBQUNnRCxDQUFBQTtnQkFDYixJQUFJQSxRQUFRQyxZQUFZLENBQUMsWUFBWTtvQkFDakNGLG1CQUFtQkM7Z0JBQ3ZCO1lBQ0o7WUFFQSxJQUFJRCxrQkFBa0I7Z0JBQ2xCLElBQUlHLHVCQUF1QjtnQkFDM0JMLFNBQVM3QyxPQUFPLENBQUNnRCxDQUFBQTtvQkFDYixJQUFJQSxRQUFRRyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxrQkFBa0I7d0JBQzdDRix1QkFBdUI7d0JBQ3ZCOUUscUJBQXFCO29CQUN6QjtnQkFDSjtnQkFFQSxJQUFJLENBQUM4RSxzQkFBc0I7b0JBQ3ZCSCxpQkFBaUIxQyxZQUFZLENBQUMsV0FBVztvQkFDekN4QixlQUFlO29CQUNmMkIsa0JBQWtCLE9BQU87Z0JBQzdCLE9BQU87b0JBQ0gzQixlQUFlO2dCQUNuQjtZQUNKLE9BQU87Z0JBQ0hBLGVBQWU7WUFDbkI7UUFDSixPQUFPLElBQUlYLGNBQWNpQixPQUFPLGFBQWE7WUFDekNXLFNBQVNvQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFdkUseURBQVdBLENBQUMseUJBQXlCLE9BQU8sQ0FBQztZQUVqRixNQUFNNEUsSUFBSUQsTUFBTUUsT0FBTztZQUN2QixNQUFNQyxJQUFJSCxNQUFNSSxPQUFPO1lBQ3ZCLE1BQU1DLFdBQVcvQyxTQUFTZ0QsaUJBQWlCLENBQUNMLEdBQUdFO1lBRS9DLElBQUlVLG9CQUFvQjtZQUN4QlIsU0FBUzdDLE9BQU8sQ0FBQ2dELENBQUFBO2dCQUNiLElBQUlBLFFBQVFDLFlBQVksQ0FBQyxhQUFhO29CQUNsQ0QsUUFBUTNDLFlBQVksQ0FBQyxZQUFZO29CQUNqQ3hCLGVBQWU7b0JBQ2Z3RSxvQkFBb0I7b0JBQ3BCN0Msa0JBQWtCLE9BQU87Z0JBQzdCO1lBQ0o7WUFFQSxJQUFJLENBQUM2QyxtQkFBbUI7Z0JBQ3BCeEUsZUFBZTtZQUNuQjtRQUNKO0lBQ0o7SUFFQSw2Q0FBNkM7SUFDN0MseUJBQXlCO0lBQ3pCLE1BQU15RSx1QkFBdUIsQ0FBQ2Q7UUFDMUIsSUFBSXRFLGNBQWNpQixPQUFPLFlBQVk7WUFDakMsTUFBTXNELElBQUlELE1BQU1FLE9BQU87WUFDdkIsTUFBTUMsSUFBSUgsTUFBTUksT0FBTztZQUN2QixNQUFNQyxXQUFXL0MsU0FBU2dELGlCQUFpQixDQUFDTCxHQUFHRTtZQUUvQyxJQUFJVSxvQkFBb0I7WUFDeEIsSUFBSUUsZ0JBQWdCO1lBRXBCVixTQUFTN0MsT0FBTyxDQUFDZ0QsQ0FBQUE7Z0JBQ2IsSUFBSUEsUUFBUUMsWUFBWSxDQUFDLFlBQVk7b0JBQ2pDSSxvQkFBb0I7b0JBQ3BCLE1BQU1HLFVBQVVSLFFBQVE3QyxZQUFZLENBQUMsZUFBZTtvQkFDcERvRCxnQkFBZ0JDLFVBQVUsUUFBUTtnQkFDdEM7WUFDSjtZQUVBLElBQUlILG1CQUFtQjtnQkFDbkJ4RSxlQUFlMEU7WUFDbkIsT0FBTztnQkFDSDFFLGVBQWU7WUFDbkI7UUFDSjtJQUNKO0lBQ0EsMEJBQTBCO0lBQzFCLE1BQU00RSwwQkFBMEIsQ0FBQ2pCO1FBQzdCLElBQUl0RSxjQUFjaUIsT0FBTyxhQUFhO1lBQ2xDLE1BQU1zRCxJQUFJRCxNQUFNRSxPQUFPO1lBQ3ZCLE1BQU1DLElBQUlILE1BQU1JLE9BQU87WUFDdkIsTUFBTUMsV0FBVy9DLFNBQVNnRCxpQkFBaUIsQ0FBQ0wsR0FBR0U7WUFFL0MsSUFBSVUsb0JBQW9CO1lBQ3hCLElBQUlFLGdCQUFnQjtZQUVwQlYsU0FBUzdDLE9BQU8sQ0FBQ2dELENBQUFBO2dCQUNiLElBQUlBLFFBQVFDLFlBQVksQ0FBQyxhQUFhO29CQUNsQ0ksb0JBQW9CO29CQUNwQixNQUFNRyxVQUFVUixRQUFRN0MsWUFBWSxDQUFDLGdCQUFnQjtvQkFDckRvRCxnQkFBZ0JDLFVBQVUsUUFBUTtnQkFDdEM7WUFDSjtZQUVBLElBQUlILG1CQUFtQjtnQkFDbkJ4RSxlQUFlMEU7WUFDbkIsT0FBTztnQkFDSDFFLGVBQWU7WUFDbkI7UUFDSjtJQUNKO0lBRUEsNEJBQTRCO0lBQzVCdkIsZ0RBQVNBOzZCQUFDO1lBQ04sYUFBYTtZQUNid0MsU0FBUzRELG1CQUFtQixDQUFDLGFBQWFDO1lBQzFDN0QsU0FBUzRELG1CQUFtQixDQUFDLGFBQWF6QjtZQUMxQ25DLFNBQVM0RCxtQkFBbUIsQ0FBQyxXQUFXbkI7WUFDeEN6QyxTQUFTNEQsbUJBQW1CLENBQUMsYUFBYUo7WUFFMUMsZUFBZTtZQUNmLElBQUksQ0FBQ3BGLGNBQWM7Z0JBQ2Y0QixTQUFTb0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sR0FBRztnQkFDN0JuQjtnQkFDQXRDLGVBQWU7Z0JBQ2ZFLGVBQWU7WUFDbkIsT0FBTyxJQUFJWCxhQUFhaUIsRUFBRSxLQUFLLFVBQVU7Z0JBQ3JDVyxTQUFTb0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRXZFLHlEQUFXQSxDQUFDLG1CQUFtQixPQUFPLENBQUM7Z0JBQzNFYyxlQUFlO2dCQUNmRSxlQUFlO2dCQUNmLHlCQUF5QjtnQkFDekIsSUFBSUcsZUFBYSxVQUFVVCxXQUFXMkMsT0FBTyxDQUFDMEMsSUFBSSxLQUFLLFFBQVE7b0JBQzNEOUQsU0FBUytELGdCQUFnQixDQUFDLGFBQWFGO2dCQUMzQztZQUNKLE9BQU8sSUFBSXpGLGFBQWFpQixFQUFFLEtBQUssWUFBWTtnQkFDdkNXLFNBQVNvQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFdkUseURBQVdBLENBQUMscUJBQXFCLE9BQU8sQ0FBQztnQkFDN0VjLGVBQWU7Z0JBQ2ZtQixTQUFTK0QsZ0JBQWdCLENBQUMsYUFBYTVCO2dCQUN2Q25DLFNBQVMrRCxnQkFBZ0IsQ0FBQyxXQUFXdEI7Z0JBQ3JDekMsU0FBUytELGdCQUFnQixDQUFDLGFBQWFQO1lBQzNDLE9BQU8sSUFBSXBGLGFBQWFpQixFQUFFLEtBQUssYUFBYTtnQkFDeENXLFNBQVNvQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFdkUseURBQVdBLENBQUMseUJBQXlCLE9BQU8sQ0FBQztnQkFDakZjLGVBQWU7Z0JBQ2ZtQixTQUFTK0QsZ0JBQWdCLENBQUMsYUFBYTVCO2dCQUN2Q25DLFNBQVMrRCxnQkFBZ0IsQ0FBQyxXQUFXdEI7Z0JBQ3JDekMsU0FBUytELGdCQUFnQixDQUFDLGFBQWFKO1lBQzNDO1lBRUE7cUNBQU87b0JBQ0gzRCxTQUFTNEQsbUJBQW1CLENBQUMsYUFBYUM7b0JBQzFDN0QsU0FBUzRELG1CQUFtQixDQUFDLGFBQWF6QjtvQkFDMUNuQyxTQUFTNEQsbUJBQW1CLENBQUMsV0FBV25CO29CQUN4Q3pDLFNBQVM0RCxtQkFBbUIsQ0FBQyxhQUFhSjtvQkFDMUN4RCxTQUFTNEQsbUJBQW1CLENBQUMsYUFBYUQ7Z0JBQzlDOztRQUNKOzRCQUFHO1FBQUN2RjtRQUFjSyxXQUFXMkMsT0FBTyxDQUFDMEMsSUFBSTtLQUFDO0lBRzFDLFNBQVM7SUFDVCxNQUFNRSxzQkFBc0IsQ0FBQzVEO1FBQ3pCLElBQUksQ0FBQy9CLGtCQUFrQjRGLFdBQVcsT0FBTztRQUV6QyxtQkFBbUI7UUFDbkIsTUFBTUMsY0FBY3BELE9BQU9DLElBQUksQ0FBQzFDLGlCQUFpQjRGLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDOUQsSUFBSSxDQUFDQyxhQUFhLE9BQU87UUFFekIsTUFBTUMsVUFBVTlGLGlCQUFpQjRGLFNBQVMsQ0FBQ0MsWUFBWSxDQUFDRSxHQUFHO1FBQzNELElBQUksQ0FBQ0QsU0FBUyxPQUFPO1FBRXJCLHlCQUF5QjtRQUN6QixPQUFPckQsT0FBT0MsSUFBSSxDQUFDeEMsZUFBZThGLElBQUksQ0FBQ3JELENBQUFBO1lBQ25DLE1BQU1zRCxhQUFhL0YsYUFBYSxDQUFDeUMsSUFBSTtZQUNyQyxNQUFNdUQsY0FBYyxXQUFZQyxXQUFXLEtBQUtMLFdBQVduRCxRQUFRWixhQUNoRGtFLFdBQVdFLFdBQVcsS0FBS3BFLGFBQWFZLFFBQVFtRDtZQUduRSxPQUFPSTtRQUNYO0lBQ0o7SUFFQSxzQ0FBc0M7SUFDdEMsTUFBTWpELGdCQUFnQjVELDhEQUFjQTtpREFBQ2dCLENBQUFBLFFBQVNBLE1BQU02QyxjQUFjOztJQUNsRS9ELGdEQUFTQTs2QkFBQztZQUNObUIsaUJBQWlCeUMsT0FBTyxHQUFHLE1BQU0sT0FBTztZQUN4Q0Q7UUFDSjs0QkFBRztRQUFDRztLQUFjLEdBQUksc0JBQXNCO0lBRTVDLFdBQVc7SUFDWCxNQUFNdUMsa0JBQWtCLENBQUNuQjtRQUVyQixNQUFNQyxJQUFJRCxNQUFNRSxPQUFPO1FBQ3ZCLE1BQU1DLElBQUlILE1BQU1JLE9BQU87UUFFdkIsTUFBTUMsV0FBVy9DLFNBQVNnRCxpQkFBaUIsQ0FBQ0wsR0FBR0U7UUFFL0NFLFNBQVM3QyxPQUFPLENBQUNnRCxDQUFBQTtZQUNiLElBQUlBLFFBQVE3QyxZQUFZLENBQUMsYUFBYTZDLFFBQVE3RCxFQUFFLEVBQUU7Z0JBQzlDLE1BQU1rRixjQUFjUCxvQkFBb0JkLFFBQVE3RCxFQUFFO2dCQUNsRCxJQUFJa0YsYUFBYTtvQkFDYnZHLFdBQVd1RSxPQUFPQyxNQUFNTixRQUFRRCxLQUFLO29CQUNyQ2hELGNBQWM7b0JBQ2QsZUFBZTtvQkFDZk8sV0FBVzt3QkFDUFAsY0FBYztvQkFDbEIsR0FBRztvQkFDSGlELFFBQVF1QyxHQUFHLENBQUNGO2dCQUNoQjtZQUNKO1FBQ0o7SUFDSjtJQUdBLHFCQUNJOztZQUNLM0YsNkJBQ0csOERBQUM4RjtnQkFDR3JDLE9BQU87b0JBQ0hzQyxVQUFVO29CQUNWQyxLQUFLO29CQUNMQyxNQUFNO29CQUNOQyxPQUFPO29CQUNQQyxRQUFRO29CQUNSQyxZQUFZO29CQUNaQyxRQUFRO29CQUNSQyxlQUFlO2dCQUNuQjs7Ozs7O1lBSU45RyxDQUFBQSxjQUFjaUIsT0FBTyxjQUFjakIsY0FBY2lCLE9BQU8sV0FBVSxLQUFNUCw2QkFDdEUsOERBQUNqQixtRUFBV0E7Z0JBQUNzSCxRQUFRckc7Ozs7OztZQUV4QlYsY0FBY2lCLE9BQU8sWUFBWUwsNEJBQzlCLDhEQUFDbkIsbUVBQVdBO2dCQUFDc0gsUUFBUW5HOzs7Ozs7OztBQUlyQyIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9DdXJzb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHVzZURldmljZVN0b3JlIGZyb20gJ0Avc3RvcmUvZGV2aWNlU3RvcmUnO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ3p1c3RhbmQvc2hhbGxvdyc7XHJcbmltcG9ydCBTdGF0dXNUb2FzdCBmcm9tICdAL2NvbXBvbmVudHMvbGliL1N0YXR1c1RvYXN0JztcclxuaW1wb3J0IHsgQVBJX1VSTFMgfSBmcm9tICdAL2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJ0AvdXRpbHMvYXNzZXQnO1xyXG5cclxuY29uc3QgVG9uZVNvdW5kID0gdHlwZW9mIEF1ZGlvICE9PSAndW5kZWZpbmVkJyA/IG5ldyBBdWRpbyhnZXRBc3NldFVybCgnL3NvdW5kcy90b25lLm1wMycpKSA6IG51bGw7XHJcbmNvbnN0IENsZWFuU291bmQgPSB0eXBlb2YgQXVkaW8gIT09ICd1bmRlZmluZWQnID8gbmV3IEF1ZGlvKGdldEFzc2V0VXJsKCcvc291bmRzL2NsZWFuLm1wMycpKSA6IG51bGw7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDdXJzb3JzKCkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFRvb2wsIGNvbm5lY3Rpb25TdGF0dXMsIHNldFRvdGFsVG9hc3RNZXNzYWdlIH0gPSB1c2VEZXZpY2VTdG9yZSgpO1xyXG4gICAgY29uc3QgW2Nvbm5lY3Rpb25NYXAsIHNldENvbm5lY3Rpb25NYXBdID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHVzZURpc3BsYXlTdG9yZShzdGF0ZSA9PiBzdGF0ZS5uYXZpZ2F0aW9uLCBzaGFsbG93KTtcclxuICAgIGNvbnN0IGNvbm5lY3Rpb25NYXBSZWYgPSB1c2VSZWYobnVsbCk7ICAvLyDmt7vliqByZWbnlKjkuo7nvJPlrZhjb25uZWN0aW9uTWFwXHJcbiAgICBjb25zdCBbc2hvd092ZXJsYXksIHNldFNob3dPdmVybGF5XSA9IHVzZVN0YXRlKGZhbHNlKTsgIC8vIOa3u+WKoOmBrue9qeWxgueKtuaAgVxyXG4gICAgY29uc3QgW2NsZWFuU3RhdHVzLCBzZXRDbGVhblN0YXR1c10gPSB1c2VTdGF0ZShudWxsKTsgIC8vIOa3u+WKoOa4hea0geeKtuaAgVxyXG4gICAgY29uc3QgW3RvbmVTdGF0dXMsIHNldFRvbmVTdGF0dXNdID0gdXNlU3RhdGUobnVsbCk7ICAvLyDmt7vliqDlr7vnur/pn7PpopHnirbmgIFcclxuICAgIGNvbnN0IG1haW5Nb2R1bGUgPSB1c2VEZXZpY2VTdG9yZS5nZXRTdGF0ZSgpLm1haW5Vbml0TW9kdWxlc1swXT8uaWQ7XHJcbiAgICBjb25zdCBzZWF0VVVJRCA9IHVzZURldmljZVN0b3JlKHN0YXRlID0+IHN0YXRlLnNlYXRVVUlEKTtcclxuXHJcbiAgICAvLyDku45sb2NhbFN0b3JhZ2XliqDovb3muIXmtIHnirbmgIFcclxuICAgIGNvbnN0IGxvYWRDbGVhblN0YXRlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2VhdFVVSUQpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICAvLyDkvb/nlKhzZXRUaW1lb3V056Gu5L+dRE9N5YWD57Sg5bey5Yqg6L29XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxjY2xlYW5TdGF0ZXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBjbGVhblN0YXRlXyR7c2VhdFVVSUR9X2xjYCkgfHwgJ3t9Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1wb0NsZWFuU3RhdGVzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgY2xlYW5TdGF0ZV8ke3NlYXRVVUlEfV9tcG9gKSB8fCAne30nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOaBouWkjUxD56uv5Y+j54q25oCBXHJcbiAgICAgICAgICAgIGNvbnN0IGxjRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbbGNjbGVhbl0nKTtcclxuICAgICAgICAgICAgbGNFbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGVsLmlkIHx8IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRJZCAmJiBsY2NsZWFuU3RhdGVzW2VsZW1lbnRJZF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnbGNjbGVhbicsIGxjY2xlYW5TdGF0ZXNbZWxlbWVudElkXS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyDmgaLlpI1NUE/nq6/lj6PnirbmgIFcclxuICAgICAgICAgICAgY29uc3QgbXBvRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbbXBvQ2xlYW5dJyk7XHJcbiAgICAgICAgICAgIG1wb0VsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudElkID0gZWwuaWQgfHwgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudElkICYmIG1wb0NsZWFuU3RhdGVzW2VsZW1lbnRJZF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnbXBvQ2xlYW4nLCBtcG9DbGVhblN0YXRlc1tlbGVtZW50SWRdLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDkv53lrZjmuIXmtIHnirbmgIHliLBsb2NhbFN0b3JhZ2VcclxuICAgIGNvbnN0IHNhdmVDbGVhblN0YXRlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghc2VhdFVVSUQpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g5L+d5a2YTEPnq6/lj6PnirbmgIFcclxuICAgICAgICBjb25zdCBsY0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2xjY2xlYW5dJyk7XHJcbiAgICAgICAgY29uc3QgbGNjbGVhblN0YXRlcyA9IHt9O1xyXG4gICAgICAgIGxjRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGVsLmlkIHx8IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBsY2NsZWFuU3RhdGVzW2VsZW1lbnRJZF0gPSBlbC5nZXRBdHRyaWJ1dGUoJ2xjY2xlYW4nKSA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYGNsZWFuU3RhdGVfJHtzZWF0VVVJRH1fbGNgLCBKU09OLnN0cmluZ2lmeShsY2NsZWFuU3RhdGVzKSk7XHJcblxyXG4gICAgICAgIC8vIOS/neWtmE1QT+err+WPo+eKtuaAgVxyXG4gICAgICAgIGNvbnN0IG1wb0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW21wb0NsZWFuXScpO1xyXG4gICAgICAgIGNvbnN0IG1wb0NsZWFuU3RhdGVzID0ge307XHJcbiAgICAgICAgbXBvRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IGVsLmlkIHx8IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBtcG9DbGVhblN0YXRlc1tlbGVtZW50SWRdID0gZWwuZ2V0QXR0cmlidXRlKCdtcG9DbGVhbicpID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgY2xlYW5TdGF0ZV8ke3NlYXRVVUlEfV9tcG9gLCBKU09OLnN0cmluZ2lmeShtcG9DbGVhblN0YXRlcykpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDmuIXnkIbpnZ7mnKzlnLpzZWF0VVVJROeahOa4hea0geeKtuaAgee8k+WtmFxyXG4gICAgY29uc3QgY2xlYXJPdGhlckNsZWFuU3RhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzZWF0VVVJRCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOa4heeQhuaJgOaciemdnuacrOWcunNlYXRVVUlE55qEY2xlYW5TdGF0ZV/liY3nvIDnmoTnvJPlrZjpoblcclxuICAgICAgICBPYmplY3Qua2V5cyhsb2NhbFN0b3JhZ2UpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdjbGVhblN0YXRlXycpICYmICFrZXkuc3RhcnRzV2l0aChgY2xlYW5TdGF0ZV8ke3NlYXRVVUlEfWApKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOebkeWQrHNlYXRVVUlE5Y+Y5YyWXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChzZWF0VVVJRCkge1xyXG4gICAgICAgICAgICBsb2FkQ2xlYW5TdGF0ZSgpO1xyXG4gICAgICAgICAgICAvLyDliqDovb3lrozmiJDlkI7muIXnkIblhbbku5blnLrmrKHnmoTnvJPlrZhcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjbGVhck90aGVyQ2xlYW5TdGF0ZSgpO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbc2VhdFVVSURdKTtcclxuXHJcbiAgICAvLyDojrflj5bov57mjqXphY3nva5cclxuICAgIGNvbnN0IGZldGNoQ29ubmVjdGlvbk1hcCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyDlpoLmnpzlt7Lnu4/mnInnvJPlrZjnmoRjb25uZWN0aW9uTWFw77yM55u05o6l6L+U5ZueXHJcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uTWFwUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHNldENvbm5lY3Rpb25NYXAoY29ubmVjdGlvbk1hcFJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZGV2aWNlU3RvcmUgPSB1c2VEZXZpY2VTdG9yZS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBmYXVsdFNjZW5hcmlvID0gZGV2aWNlU3RvcmUuZmF1bHRTY2VuYXJpb3MgfHwgJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGFwaVVybCA9IEFQSV9VUkxTLkNPTk5FQ1RJT04uTUFQX1dJVEhfU0NFTkUoZmF1bHRTY2VuYXJpbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpVXJsKTtcclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfojrflj5bov57mjqXphY3nva7lpLHotKUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICBjb25uZWN0aW9uTWFwUmVmLmN1cnJlbnQgPSBkYXRhIHx8IHt9OyAgLy8g57yT5a2YY29ubmVjdGlvbk1hcFxyXG4gICAgICAgICAgICBzZXRDb25uZWN0aW9uTWFwKGRhdGEgfHwge30pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iOt+WPlui/nuaOpemFjee9rumUmeivrzonLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHNldENvbm5lY3Rpb25NYXAoe30pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g5aSE55CG6byg5qCH5oyJ5LiL5LqL5Lu277yI55So5LqObGMtY2xlYW7lt6XlhbfvvIlcclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9ICgpID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRUb29sPy5pZCA9PT0gJ2xjLWNsZWFuJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGB1cmwoJHtnZXRBc3NldFVybCgnL2N1c3RvbS1jbGVhbjIucG5nJyl9KSwgYXV0b2A7XHJcbiAgICAgICAgICAgIENsZWFuU291bmQ/LnBsYXkoKS5jYXRjaChjb25zb2xlLmVycm9yKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVG9vbD8uaWQgPT09ICdtcG8tY2xlYW4nKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gYHVybCgke2dldEFzc2V0VXJsKCcvY3VzdG9tLWNsZWFuLW1wbzIucG5nJyl9KSwgYXV0b2A7XHJcbiAgICAgICAgICAgIENsZWFuU291bmQ/LnBsYXkoKS5jYXRjaChjb25zb2xlLmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOWkhOeQhum8oOagh+mHiuaUvuS6i+S7tu+8iOeUqOS6jmxjLWNsZWFu5bel5YW377yJXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZVVwID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVG9vbD8uaWQgPT09ICdsYy1jbGVhbicpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBgdXJsKCR7Z2V0QXNzZXRVcmwoJy9jdXN0b20tY2xlYW4ucG5nJyl9KSwgYXV0b2A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgY2xlYW5hYmxlRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2xjY2xlYW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuYWJsZUVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChjbGVhbmFibGVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzQ29ubmVjdGVkRW5kcG9pbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdqdGstY29ubmVjdGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29ubmVjdGVkRW5kcG9pbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZSgn6K+l56uv5Y+j5bey6L+e5o6l77yM6K+35pat5byA6L+e5o6l6L+b6KGM5riF5rSBJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICghaGFzQ29ubmVjdGVkRW5kcG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbmFibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbGNjbGVhbicsICd0cnVlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2xlYW5TdGF0dXMoJ+W3sua4hea0gScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVDbGVhblN0YXRlKCk7IC8vIOS/neWtmOeKtuaAgVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRDbGVhblN0YXR1cyhudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldENsZWFuU3RhdHVzKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFRvb2w/LmlkID09PSAnbXBvLWNsZWFuJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGB1cmwoJHtnZXRBc3NldFVybCgnL2N1c3RvbS1jbGVhbi1tcG8ucG5nJyl9KSwgYXV0b2A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgZm91bmRDbGVhbkVsZW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbXBvQ2xlYW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdtcG9DbGVhbicsICd0cnVlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2xlYW5TdGF0dXMoJ+W3sua4hea0gScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kQ2xlYW5FbGVtZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBzYXZlQ2xlYW5TdGF0ZSgpOyAvLyDkv53lrZjnirbmgIFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kQ2xlYW5FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDbGVhblN0YXR1cyhudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g6L+Z5Lqb5Ye95pWw5bey5ZCI5bm25YiwIGhhbmRsZU1vdXNlRG93biDlkowgaGFuZGxlTW91c2VVcCDkuK1cclxuICAgIC8vIOWkhOeQhum8oOagh+enu+WKqOS6i+S7tu+8iOeUqOS6jmxjLWNsZWFu5bel5YW377yJXHJcbiAgICBjb25zdCBoYW5kbGVDbGVhbk1vdXNlTW92ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFRvb2w/LmlkID09PSAnbGMtY2xlYW4nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCh4LCB5KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBmb3VuZENsZWFuRWxlbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFN0YXR1cyA9IG51bGw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdsY2NsZWFuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZENsZWFuRWxlbWVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDbGVhbiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsY2NsZWFuJykgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdHVzID0gaXNDbGVhbiA/ICflt7LmuIXmtIEnIDogJ+acqua4hea0gSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGZvdW5kQ2xlYW5FbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDbGVhblN0YXR1cyhjdXJyZW50U3RhdHVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldENsZWFuU3RhdHVzKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIOWkhOeQhum8oOagh+enu+WKqOS6i+S7tu+8iOeUqOS6jk1QTy1jbGVhbuW3peWFt++8iVxyXG4gICAgY29uc3QgaGFuZGxlTVBPQ2xlYW5Nb3VzZU1vdmUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRUb29sPy5pZCA9PT0gJ21wby1jbGVhbicpIHtcclxuICAgICAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50KHgsIHkpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGZvdW5kQ2xlYW5FbGVtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ21wb0NsZWFuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZENsZWFuRWxlbWVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDbGVhbiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdtcG9DbGVhbicpID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXR1cyA9IGlzQ2xlYW4gPyAn5bey5riF5rSBJyA6ICfmnKrmuIXmtIEnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChmb3VuZENsZWFuRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q2xlYW5TdGF0dXMoY3VycmVudFN0YXR1cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDbGVhblN0YXR1cyhudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIOagueaNrnNlbGVjdGVkVG9vbOabtOaWsOm8oOagh+agt+W8j+WSjOS6i+S7tuebkeWQrFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAvLyDnp7vpmaTnjrDmnInnmoTkuovku7bnm5HlkKzlmahcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZU1vdXNlRG93bik7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZUNsZWFuTW91c2VNb3ZlKTtcclxuXHJcbiAgICAgICAgLy8g5qC55o2u5bel5YW357G75Z6L6K6+572u6byg5qCH5qC35byPXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZFRvb2wpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgIGZldGNoQ29ubmVjdGlvbk1hcCgpO1xyXG4gICAgICAgICAgICBzZXRTaG93T3ZlcmxheShmYWxzZSk7XHJcbiAgICAgICAgICAgIHNldENsZWFuU3RhdHVzKG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRUb29sLmlkID09PSAnSUxUMjAwJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGB1cmwoJHtnZXRBc3NldFVybCgnL2N1cnNvci1JTFQucG5nJyl9KSwgYXV0b2A7XHJcbiAgICAgICAgICAgIHNldFNob3dPdmVybGF5KHRydWUpO1xyXG4gICAgICAgICAgICBzZXRDbGVhblN0YXR1cyhudWxsKTtcclxuICAgICAgICAgICAgLy8g5Y+q5ZyodG9uZeinhuWbvuS4i+iOt+WPlui/nuaOpemFjee9ruWSjOa3u+WKoOS6i+S7tuebkeWQrFxyXG4gICAgICAgICAgICBpZiAobWFpbk1vZHVsZT09PSc4MDAwJyAmJiBuYXZpZ2F0aW9uLmN1cnJlbnQudmlldyA9PT0gJ3RvbmUnKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFRvb2wuaWQgPT09ICdsYy1jbGVhbicpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBgdXJsKCR7Z2V0QXNzZXRVcmwoJy9jdXN0b20tY2xlYW4ucG5nJyl9KSwgYXV0b2A7XHJcbiAgICAgICAgICAgIHNldFNob3dPdmVybGF5KHRydWUpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVNb3VzZURvd24pO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZUNsZWFuTW91c2VNb3ZlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVG9vbC5pZCA9PT0gJ21wby1jbGVhbicpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBgdXJsKCR7Z2V0QXNzZXRVcmwoJy9jdXN0b20tY2xlYW4tbXBvLnBuZycpfSksIGF1dG9gO1xyXG4gICAgICAgICAgICBzZXRTaG93T3ZlcmxheSh0cnVlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlTW91c2VEb3duKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNUE9DbGVhbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVNb3VzZURvd24pO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZUNsZWFuTW91c2VNb3ZlKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTVBPQ2xlYW5Nb3VzZU1vdmUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbc2VsZWN0ZWRUb29sLCBuYXZpZ2F0aW9uLmN1cnJlbnQudmlld10pO1xyXG5cclxuXHJcbiAgICAvLyDmo4Dmn6Xnq6/lj6PkupLpgJpcclxuICAgIGNvbnN0IGNoZWNrUG9ydENvbm5lY3Rpb24gPSAoZWxlbWVudElkKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDojrflj5bmnIDmlrDnmoRtYWluUGF0aEtleVxyXG4gICAgICAgIGNvbnN0IG1haW5QYXRoS2V5ID0gT2JqZWN0LmtleXMoY29ubmVjdGlvblN0YXR1cy5tYWluUGF0aHMpWzBdO1xyXG4gICAgICAgIGlmICghbWFpblBhdGhLZXkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkVuZCA9IGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzW21haW5QYXRoS2V5XS5lbmQ7XHJcbiAgICAgICAgaWYgKCFtYWluRW5kKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIOS9v+eUqOacgOaWsOeahGNvbm5lY3Rpb25NYXDov5vooYzliKTmlq1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoY29ubmVjdGlvbk1hcCkuc29tZShrZXkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdGlvbk1hcFtrZXldO1xyXG4gICAgICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZCA9IChjb25uZWN0aW9uLmNvbm5lY3RlZFRvID09PSBtYWluRW5kICYmIGtleSA9PT0gZWxlbWVudElkKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ubmVjdGlvbi5jb25uZWN0ZWRUbyA9PT0gZWxlbWVudElkICYmIGtleSA9PT0gbWFpbkVuZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGlzQ29ubmVjdGVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDnm5HlkKxmYXVsdFNjZW5hcmlv5Y+Y5YyW5bm26YeN5paw6I635Y+WY29ubmVjdGlvbk1hcFxyXG4gICAgY29uc3QgZmF1bHRTY2VuYXJpbyA9IHVzZURldmljZVN0b3JlKHN0YXRlID0+IHN0YXRlLmZhdWx0U2NlbmFyaW9zKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29ubmVjdGlvbk1hcFJlZi5jdXJyZW50ID0gbnVsbDsgLy8g5riF6Zmk57yT5a2YXHJcbiAgICAgICAgZmV0Y2hDb25uZWN0aW9uTWFwKCk7XHJcbiAgICB9LCBbZmF1bHRTY2VuYXJpb10pOyAgLy8g5re75Yqg5a+5ZmF1bHRTY2VuYXJpb+eahOS+nei1llxyXG5cclxuICAgIC8vIOWkhOeQhum8oOagh+enu+WKqOS6i+S7tlxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCh4LCB5KTtcclxuICAgICAgICBcclxuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2pzdHlwZScpICYmIGVsZW1lbnQuaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkID0gY2hlY2tQb3J0Q29ubmVjdGlvbihlbGVtZW50LmlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIFRvbmVTb3VuZD8ucGxheSgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRvbmVTdGF0dXMoJ/CflIonKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAxMjAwbXMg5ZCO5riF6Zmk54q25oCBXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVTdGF0dXMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTIwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaXNDb25uZWN0ZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICAgIHtzaG93T3ZlcmxheSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMjAwMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgeyhzZWxlY3RlZFRvb2w/LmlkID09PSAnbGMtY2xlYW4nIHx8IHNlbGVjdGVkVG9vbD8uaWQgPT09ICdtcG8tY2xlYW4nKSAmJiBjbGVhblN0YXR1cyAmJiAoXHJcbiAgICAgICAgICAgICAgICA8U3RhdHVzVG9hc3Qgc3RhdHVzPXtjbGVhblN0YXR1c30gLz5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAge3NlbGVjdGVkVG9vbD8uaWQgPT09ICdJTFQyMDAnICYmIHRvbmVTdGF0dXMgJiYgKFxyXG4gICAgICAgICAgICAgICAgPFN0YXR1c1RvYXN0IHN0YXR1cz17dG9uZVN0YXR1c30gLz5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn0iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VEZXZpY2VTdG9yZSIsInVzZURpc3BsYXlTdG9yZSIsInNoYWxsb3ciLCJTdGF0dXNUb2FzdCIsIkFQSV9VUkxTIiwiZ2V0QXNzZXRVcmwiLCJUb25lU291bmQiLCJBdWRpbyIsIkNsZWFuU291bmQiLCJDdXJzb3JzIiwic2VsZWN0ZWRUb29sIiwiY29ubmVjdGlvblN0YXR1cyIsInNldFRvdGFsVG9hc3RNZXNzYWdlIiwiY29ubmVjdGlvbk1hcCIsInNldENvbm5lY3Rpb25NYXAiLCJuYXZpZ2F0aW9uIiwic3RhdGUiLCJjb25uZWN0aW9uTWFwUmVmIiwic2hvd092ZXJsYXkiLCJzZXRTaG93T3ZlcmxheSIsImNsZWFuU3RhdHVzIiwic2V0Q2xlYW5TdGF0dXMiLCJ0b25lU3RhdHVzIiwic2V0VG9uZVN0YXR1cyIsIm1haW5Nb2R1bGUiLCJnZXRTdGF0ZSIsIm1haW5Vbml0TW9kdWxlcyIsImlkIiwic2VhdFVVSUQiLCJsb2FkQ2xlYW5TdGF0ZSIsInNldFRpbWVvdXQiLCJsY2NsZWFuU3RhdGVzIiwiSlNPTiIsInBhcnNlIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIm1wb0NsZWFuU3RhdGVzIiwibGNFbGVtZW50cyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbCIsImVsZW1lbnRJZCIsImdldEF0dHJpYnV0ZSIsInVuZGVmaW5lZCIsInNldEF0dHJpYnV0ZSIsInRvU3RyaW5nIiwibXBvRWxlbWVudHMiLCJzYXZlQ2xlYW5TdGF0ZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJjbGVhck90aGVyQ2xlYW5TdGF0ZSIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJzdGFydHNXaXRoIiwicmVtb3ZlSXRlbSIsImZldGNoQ29ubmVjdGlvbk1hcCIsImN1cnJlbnQiLCJkZXZpY2VTdG9yZSIsImZhdWx0U2NlbmFyaW8iLCJmYXVsdFNjZW5hcmlvcyIsImFwaVVybCIsIkNPTk5FQ1RJT04iLCJNQVBfV0lUSF9TQ0VORSIsInJlc3BvbnNlIiwiZmV0Y2giLCJvayIsIkVycm9yIiwiZGF0YSIsImpzb24iLCJlcnJvciIsImNvbnNvbGUiLCJoYW5kbGVNb3VzZURvd24iLCJib2R5Iiwic3R5bGUiLCJjdXJzb3IiLCJwbGF5IiwiY2F0Y2giLCJoYW5kbGVNb3VzZVVwIiwiZXZlbnQiLCJ4IiwiY2xpZW50WCIsInkiLCJjbGllbnRZIiwiZWxlbWVudHMiLCJlbGVtZW50c0Zyb21Qb2ludCIsImNsZWFuYWJsZUVsZW1lbnQiLCJlbGVtZW50IiwiaGFzQXR0cmlidXRlIiwiaGFzQ29ubmVjdGVkRW5kcG9pbnQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImZvdW5kQ2xlYW5FbGVtZW50IiwiaGFuZGxlQ2xlYW5Nb3VzZU1vdmUiLCJjdXJyZW50U3RhdHVzIiwiaXNDbGVhbiIsImhhbmRsZU1QT0NsZWFuTW91c2VNb3ZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZU1vdXNlTW92ZSIsInZpZXciLCJhZGRFdmVudExpc3RlbmVyIiwiY2hlY2tQb3J0Q29ubmVjdGlvbiIsIm1haW5QYXRocyIsIm1haW5QYXRoS2V5IiwibWFpbkVuZCIsImVuZCIsInNvbWUiLCJjb25uZWN0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uZWN0ZWRUbyIsImxvZyIsImRpdiIsInBvc2l0aW9uIiwidG9wIiwibGVmdCIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsInpJbmRleCIsInBvaW50ZXJFdmVudHMiLCJzdGF0dXMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/Cursors.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/DisPlay.js":
/*!***********************************!*\
!*** ./src/components/DisPlay.js ***!
\***********************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DisPlay)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\n/* harmony import */ var _components_dsxpage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/dsxpage */ \"(pages-dir-node)/./src/components/dsxpage/index.js\");\n/* harmony import */ var _lib_Toast__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/Toast */ \"(pages-dir-node)/./src/components/lib/Toast.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _components_AudioProvider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/AudioProvider */ \"(pages-dir-node)/./src/components/AudioProvider.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_utils_asset__WEBPACK_IMPORTED_MODULE_2__, _components_dsxpage__WEBPACK_IMPORTED_MODULE_3__, _lib_Toast__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_6__]);\n([_utils_asset__WEBPACK_IMPORTED_MODULE_2__, _components_dsxpage__WEBPACK_IMPORTED_MODULE_3__, _lib_Toast__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\nfunction DisPlay() {\n const { navigation, navigateTo, toastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const { play } = (0,_components_AudioProvider__WEBPACK_IMPORTED_MODULE_6__.useAudio)();\n const renderPage = ()=>{\n const pageName = navigation?.current?.name || 'home';\n switch(pageName){\n case 'home':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.HomePage, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 20,\n columnNumber: 24\n }, this);\n case 'project':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.Project, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 22,\n columnNumber: 24\n }, this);\n case 'operators':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.Operators, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 24,\n columnNumber: 24\n }, this);\n case 'cableId':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.CableId, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 26,\n columnNumber: 24\n }, this);\n case 'result':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.Result, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 28,\n columnNumber: 24\n }, this);\n case 'tools':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.Tools, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 30,\n columnNumber: 24\n }, this);\n case 'testConfig':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.TestConfig, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 32,\n columnNumber: 24\n }, this);\n case 'menulist':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.MenuList, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 34,\n columnNumber: 24\n }, this);\n case 'testing':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.Testing, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 36,\n columnNumber: 24\n }, this);\n case 'resultinfo':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.ResultInfo, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 38,\n columnNumber: 24\n }, this);\n case 'copperperformance':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.CopperPerformance, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 40,\n columnNumber: 24\n }, this);\n // 可以添加更多页面\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_dsxpage__WEBPACK_IMPORTED_MODULE_3__.HomePage, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 44,\n columnNumber: 24\n }, this);\n }\n };\n const handleClick = ()=>{\n if (touchSound) {\n touchSound.currentTime = 0;\n touchSound.play();\n play('keyClick');\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#fff] flex flex-col overflow-hidden\",\n onClick: handleClick,\n children: [\n toastMessage && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_lib_Toast__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 61,\n columnNumber: 30\n }, this),\n renderPage()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/DisPlay.js\",\n lineNumber: 57,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0Rpc1BsYXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBeUM7QUFDRztBQUM4RztBQUMxSDtBQUNtQjtBQUNHO0FBRXZDLFNBQVNpQjtJQUVwQixNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxZQUFZLEVBQUMsR0FBR0wsK0RBQWVBO0lBQy9ELE1BQU0sRUFBRU0sSUFBSSxFQUFFLEdBQUdMLG1FQUFRQTtJQUl6QixNQUFNTSxhQUFhO1FBQ2YsTUFBTUMsV0FBV0wsWUFBWU0sU0FBU0MsUUFBUTtRQUU5QyxPQUFRRjtZQUNKLEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNwQix5REFBUUE7Ozs7O1lBQ3BCLEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNDLHdEQUFPQTs7Ozs7WUFDbkIsS0FBSztnQkFDRCxxQkFBTyw4REFBQ0MsMERBQVNBOzs7OztZQUNyQixLQUFLO2dCQUNELHFCQUFPLDhEQUFDQyx3REFBT0E7Ozs7O1lBQ25CLEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNFLHVEQUFNQTs7Ozs7WUFDbEIsS0FBSztnQkFDRCxxQkFBTyw4REFBQ0Qsc0RBQUtBOzs7OztZQUNqQixLQUFLO2dCQUNELHFCQUFPLDhEQUFDRSwyREFBVUE7Ozs7O1lBQ3RCLEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNDLHlEQUFRQTs7Ozs7WUFDcEIsS0FBSztnQkFDRCxxQkFBTyw4REFBQ0Msd0RBQU9BOzs7OztZQUNuQixLQUFLO2dCQUNELHFCQUFPLDhEQUFDQywyREFBVUE7Ozs7O1lBQ3RCLEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNDLGtFQUFpQkE7Ozs7O1lBRTdCLFdBQVc7WUFDWDtnQkFDSSxxQkFBTyw4REFBQ1YseURBQVFBOzs7OztRQUN4QjtJQUNKO0lBRUEsTUFBTXVCLGNBQWM7UUFDaEIsSUFBSUMsWUFBWTtZQUNaQSxXQUFXQyxXQUFXLEdBQUc7WUFDekJELFdBQVdOLElBQUk7WUFDZkEsS0FBSztRQUNUO0lBQ0o7SUFFQSxxQkFDSSw4REFBQ1E7UUFDR0MsV0FBVTtRQUNWQyxTQUFTTDs7WUFFUk4sOEJBQWdCLDhEQUFDTixrREFBS0E7Ozs7O1lBQ3RCUTs7Ozs7OztBQUdiIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL0Rpc1BsYXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgZ2V0QXNzZXRVcmwgfSBmcm9tICdAL3V0aWxzL2Fzc2V0JztcclxuaW1wb3J0IHsgSG9tZVBhZ2UsIFByb2plY3QsIE9wZXJhdG9ycywgQ2FibGVJZCwgVG9vbHMsIFJlc3VsdCwgVGVzdENvbmZpZywgTWVudUxpc3QsIFRlc3RpbmcsIFJlc3VsdEluZm8sIENvcHBlclBlcmZvcm1hbmNlIH0gZnJvbSAnQC9jb21wb25lbnRzL2RzeHBhZ2UnO1xyXG5pbXBvcnQgVG9hc3QgZnJvbSAnLi9saWIvVG9hc3QnO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuaW1wb3J0IHsgdXNlQXVkaW8gfSBmcm9tICdAL2NvbXBvbmVudHMvQXVkaW9Qcm92aWRlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaXNQbGF5KCkge1xyXG4gICAgXHJcbiAgICBjb25zdCB7IG5hdmlnYXRpb24sIG5hdmlnYXRlVG8sIHRvYXN0TWVzc2FnZX0gPSB1c2VEaXNwbGF5U3RvcmUoKTtcclxuICAgIGNvbnN0IHsgcGxheSB9ID0gdXNlQXVkaW8oKTtcclxuXHJcbiAgICBcclxuXHJcbiAgICBjb25zdCByZW5kZXJQYWdlID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhZ2VOYW1lID0gbmF2aWdhdGlvbj8uY3VycmVudD8ubmFtZSB8fCAnaG9tZSc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoIChwYWdlTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdob21lJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8SG9tZVBhZ2UgLz47XHJcbiAgICAgICAgICAgIGNhc2UgJ3Byb2plY3QnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxQcm9qZWN0IC8+O1xyXG4gICAgICAgICAgICBjYXNlICdvcGVyYXRvcnMnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxPcGVyYXRvcnMgLz47XHJcbiAgICAgICAgICAgIGNhc2UgJ2NhYmxlSWQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxDYWJsZUlkIC8+O1xyXG4gICAgICAgICAgICBjYXNlICdyZXN1bHQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxSZXN1bHQgLz47XHJcbiAgICAgICAgICAgIGNhc2UgJ3Rvb2xzJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8VG9vbHMgLz47XHJcbiAgICAgICAgICAgIGNhc2UgJ3Rlc3RDb25maWcnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUZXN0Q29uZmlnIC8+O1xyXG4gICAgICAgICAgICBjYXNlICdtZW51bGlzdCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPE1lbnVMaXN0Lz5cclxuICAgICAgICAgICAgY2FzZSAndGVzdGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRlc3RpbmcvPlxyXG4gICAgICAgICAgICBjYXNlICdyZXN1bHRpbmZvJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8UmVzdWx0SW5mby8+ICAgXHJcbiAgICAgICAgICAgIGNhc2UgJ2NvcHBlcnBlcmZvcm1hbmNlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8Q29wcGVyUGVyZm9ybWFuY2UvPiAgIFxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDlj6/ku6Xmt7vliqDmm7TlpJrpobXpnaJcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8SG9tZVBhZ2UgLz47XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVDbGljayA9ICgpID0+IHtcclxuICAgICAgICBpZiAodG91Y2hTb3VuZCkge1xyXG4gICAgICAgICAgICB0b3VjaFNvdW5kLmN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgICAgICAgdG91Y2hTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgIHBsYXkoJ2tleUNsaWNrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzQ4MHB4XSBoLVs2NDBweF0gYmctWyNmZmZdIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCJcclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICB7dG9hc3RNZXNzYWdlICYmIDxUb2FzdCAvPn1cclxuICAgICAgICAgICAge3JlbmRlclBhZ2UoKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwiZ2V0QXNzZXRVcmwiLCJIb21lUGFnZSIsIlByb2plY3QiLCJPcGVyYXRvcnMiLCJDYWJsZUlkIiwiVG9vbHMiLCJSZXN1bHQiLCJUZXN0Q29uZmlnIiwiTWVudUxpc3QiLCJUZXN0aW5nIiwiUmVzdWx0SW5mbyIsIkNvcHBlclBlcmZvcm1hbmNlIiwiVG9hc3QiLCJ1c2VEaXNwbGF5U3RvcmUiLCJ1c2VBdWRpbyIsIkRpc1BsYXkiLCJuYXZpZ2F0aW9uIiwibmF2aWdhdGVUbyIsInRvYXN0TWVzc2FnZSIsInBsYXkiLCJyZW5kZXJQYWdlIiwicGFnZU5hbWUiLCJjdXJyZW50IiwibmFtZSIsImhhbmRsZUNsaWNrIiwidG91Y2hTb3VuZCIsImN1cnJlbnRUaW1lIiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/DisPlay.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/JsPlumbInit.js":
/*!***************************************!*\
!*** ./src/components/JsPlumbInit.js ***!
\***************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ JsPlumbInit)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__]);\n_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\n\nfunction JsPlumbInit() {\n const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const jsPlumbInstanceRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const { connectionItems, mainUnitModules, remoteUnitModules, mainUnitAdapter, remoteUnitAdapter, addConnectionPath, removeConnectionPath, clearConnectionPaths, faultScenarios, WorldSkillScenarios } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"JsPlumbInit.useEffect\": ()=>{\n // 确保在客户端环境中运行\n if (true) return;\n // 动态导入jsplumb\n const initJsPlumb = {\n \"JsPlumbInit.useEffect.initJsPlumb\": async ()=>{\n try {\n const { jsPlumb } = await Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! jsplumb */ \"jsplumb\", 23));\n if (!containerRef.current) return;\n // 初始化jsPlumb实例\n if (!jsPlumbInstanceRef.current) {\n jsPlumbInstanceRef.current = jsPlumb.getInstance({\n Container: containerRef.current,\n // 连接线默认配置\n Connector: [\n 'Bezier',\n {\n curviness: 50\n }\n ],\n // 端点默认配置\n Endpoint: [\n 'Dot',\n {\n radius: 10\n }\n ],\n // 连接线样式\n PaintStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n // 端点样式\n EndpointStyle: {\n fill: '#0ff',\n radius: 15\n },\n // 鼠标悬停样式\n HoverPaintStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n EndpointHoverStyle: {\n fill: '#00ff7f'\n }\n });\n // 添加连接建立事件处理\n jsPlumbInstanceRef.current.bind('connection', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n const targetElement = document.getElementById(info.targetId);\n if (targetElement && targetElement.getAttribute('jstype') === 'modelport-fiber') {\n // 如果当前状态是 false,说明是新建立的连接\n if (targetElement.getAttribute('fibersource') === 'false') {\n targetElement.setAttribute('fibersource', 'true');\n }\n }\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 添加连接断开事件处理\n jsPlumbInstanceRef.current.bind('connectionDetached', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n const targetElement = document.getElementById(info.targetId);\n if (targetElement && targetElement.getAttribute('jstype') === 'modelport-fiber') {\n targetElement.setAttribute('fibersource', 'false');\n }\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 添加连接拖动开始事件处理\n jsPlumbInstanceRef.current.bind('connectionDrag', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n const targetElement = document.getElementById(info.targetId);\n if (targetElement && targetElement.getAttribute('jstype') === 'modelport-fiber') {\n // 在拖动开始时就将状态设置为 abnormal\n targetElement.setAttribute('fibersource', 'abnormal');\n }\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 添加beforeDrop事件处理\n jsPlumbInstanceRef.current.bind('beforeDrop', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n // 获取源和目标元素\n const sourceId = info.sourceId;\n const targetId = info.targetId;\n // 如果源和目标是同一个元素,返回false阻止连接\n if (sourceId === targetId) {\n //console.log('不允许自连接');\n return false;\n }\n // 获取源和目标元素的id和jstype属性\n const sourceElement = document.querySelector(`[id=\"${sourceId}\"]`);\n const targetElement = document.querySelector(`[id=\"${targetId}\"]`);\n if (sourceElement && targetElement) {\n const sourceType = sourceElement.getAttribute('jstype');\n const targetType = targetElement.getAttribute('jstype');\n // 检查是否是permanent端口\n const isPermanentSource = sourceId.includes('permanent');\n const isPermanentTarget = targetId.includes('permanent');\n // permanent端口只能作为源,不能作为目标\n if (isPermanentTarget) {\n //console.log('permanent端口不能作为连接目标');\n return false;\n }\n // permanent端口只能连接到testport-copper\n if (isPermanentSource && targetType !== 'modelport-copper' && targetType !== 'testport-copper') {\n return false;\n }\n // connector类型只能作为目标\n if (sourceType === 'connector') {\n //console.log('连接器只能作为连接目标');\n return false;\n }\n // cable类型不能连接同类\n if (sourceType.startsWith('cable-') && targetType.startsWith('cable-')) {\n //console.log('跳线不能连接跳线');\n return false;\n }\n // 铜缆跳线只能连接铜缆端口\n if (sourceType === 'cable-copper-left' && targetType !== 'modelport-copper' && targetType !== 'testport-copper') {\n //console.log('铜缆跳线只能连接铜缆端口');\n return false;\n }\n if (sourceType === 'cable-copper-right' && targetType !== 'modelport-copper' && targetType !== 'testport-copper') {\n //console.log('铜缆跳线只能连接铜缆端口');\n return false;\n }\n // CAM跳线只能连接Channel/PachCode端口\n if (sourceType === 'testport-cam' && targetType !== 'modelport-copper') {\n //console.log('铜缆跳线只能连接铜缆端口');\n return false;\n }\n // ARM跳线只能连接M12 D端口\n if (sourceType === 'testport-arm' && targetType !== 'modelport-m12-d') {\n return false;\n }\n // M12X跳线只能连接M12X\n if (sourceType === 'cable-copper-m12-x-left' && targetType !== 'modelport-m12-x' && targetType !== 'testport-m12-x') {\n //console.log('M12 X-Code跳线只能连接M12 X-Code端口');\n return false;\n }\n if (sourceType === 'cable-copper-m12-x-right' && targetType !== 'modelport-m12-x' && targetType !== 'testport-m12-x') {\n //console.log('M12 X-Code跳线只能连接M12 X-Code端口');\n return false;\n }\n // M12D跳线只能连接M12D\n if (sourceType === 'cable-copper-m12-d-left' && targetType !== 'modelport-m12-d' && targetType !== 'testport-m12-d') {\n //console.log('M12 D-Code跳线只能连接M12 D-Code端口');\n return false;\n }\n if (sourceType === 'cable-copper-m12-d-right' && targetType !== 'modelport-m12-d' && targetType !== 'testport-m12-d') {\n //console.log('M12 D-Code跳线只能连接M12 D-Code端口');\n return false;\n }\n // 铜缆端口不能连接光纤测试端口\n if (sourceType === 'modelport-copper' && targetType === 'testport-fiber') {\n //console.log('铜缆端口不能连接光纤测试端口');\n return false;\n }\n // 光纤跳线只能连接光纤端口或连接器\n if (sourceType === 'cable-fiber-left' && targetType !== 'modelport-fiber' && targetType !== 'connector-left' && targetType !== 'connector-right' && targetType !== 'testport-fiber' && targetType !== 'mpo-fiberbox-lc') {\n //console.log('光纤跳线只能连接光纤端口或连接器');\n return false;\n }\n if (sourceType === 'cable-fiber-right' && targetType !== 'modelport-fiber' && targetType !== 'connector-left' && targetType !== 'connector-right' && targetType !== 'testport-fiber' && targetType !== 'mpo-fiberbox-lc') {\n //console.log('光纤跳线只能连接光纤端口或连接器');\n return false;\n }\n // MPO跳线只能连接MPO端口或连接器\n if (sourceType === 'cable-fiber-mpo-left' && targetType !== 'testport-mpo' && targetType !== 'mpo-fiberbox-mpo') {\n //console.log('光纤跳线只能连接光纤端口或连接器');\n return false;\n }\n if (sourceType === 'cable-fiber-mpo-right' && targetType !== 'testport-mpo' && targetType !== 'mpo-fiberbox-mpo') {\n //console.log('光纤跳线只能连接光纤端口或连接器');\n return false;\n }\n }\n return true;\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n }\n const instance = jsPlumbInstanceRef.current;\n // 移除所有现有端点\n instance.deleteEveryEndpoint();\n // 获取所有需要添加连接点的元素\n const connectorLeftElements = document.querySelectorAll('[jstype=\"connector-left\"]');\n const connectorRightElements = document.querySelectorAll('[jstype=\"connector-right\"]');\n const cableCopperLeftElements = document.querySelectorAll('[jstype=\"cable-copper-left\"]');\n const cableCopperRightElements = document.querySelectorAll('[jstype=\"cable-copper-right\"]');\n const cableM12XLeftElements = document.querySelectorAll('[jstype=\"cable-copper-m12-x-left\"]');\n const cableM12XRightElements = document.querySelectorAll('[jstype=\"cable-copper-m12-x-right\"]');\n const cableM12DLeftElements = document.querySelectorAll('[jstype=\"cable-copper-m12-d-left\"]');\n const cableM12DRightElements = document.querySelectorAll('[jstype=\"cable-copper-m12-d-right\"]');\n const cableFiberLeftElements = document.querySelectorAll('[jstype=\"cable-fiber-left\"]');\n const cableFiberRightElements = document.querySelectorAll('[jstype=\"cable-fiber-right\"]');\n const modelPortCopperElements = document.querySelectorAll('[jstype=\"modelport-copper\"]');\n const modelPortM12DElements = document.querySelectorAll('[jstype=\"modelport-m12-d\"]');\n const modelPortM12XElements = document.querySelectorAll('[jstype=\"modelport-m12-x\"]');\n const modelPortFiberElements = document.querySelectorAll('[jstype=\"modelport-fiber\"]');\n const testCopperPortElements = document.querySelectorAll('[jstype=\"testport-copper\"]');\n const testM12DPortElements = document.querySelectorAll('[jstype=\"testport-m12-d\"]');\n const testM12XPortElements = document.querySelectorAll('[jstype=\"testport-m12-x\"]');\n const testCamPortElements = document.querySelectorAll('[jstype=\"testport-cam\"]');\n const testArmPortElements = document.querySelectorAll('[jstype=\"testport-arm\"]');\n const testFiberPortElements = document.querySelectorAll('[jstype=\"testport-fiber\"]');\n const testTestMPOPortElements = document.querySelectorAll('[jstype=\"testport-mpo\"]');\n const testMPOPortLeftElements = document.querySelectorAll('[jstype=\"cable-fiber-mpo-left\"]');\n const testMPOPortRightElements = document.querySelectorAll('[jstype=\"cable-fiber-mpo-right\"]');\n const testMPOBOXPortElements = document.querySelectorAll('[jstype=\"mpo-fiberbox-mpo\"]');\n const testMPOLCBOXPortElements = document.querySelectorAll('[jstype=\"mpo-fiberbox-lc\"]');\n // 为connector类型元素添加端点(只能作为目标)\n connectorLeftElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化连接器: ${id}`);\n // 添加左侧端点\n instance.addEndpoint(element, {\n anchor: 'Left',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n connectorRightElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化连接器: ${id}`);\n // 添加右侧端点\n instance.addEndpoint(element, {\n anchor: 'Right',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为铜缆跳线添加端点\n cableCopperLeftElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化铜缆跳线: ${id}`);\n // 添加左侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n cableCopperRightElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化铜缆跳线: ${id}`);\n // 添加右侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为M12跳线添加端点\n cableM12XLeftElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化铜缆跳线: ${id}`);\n // 添加左侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n cableM12XRightElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化铜缆跳线: ${id}`);\n // 添加右侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n cableM12DLeftElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化铜缆跳线: ${id}`);\n // 添加左侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n cableM12DRightElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化铜缆跳线: ${id}`);\n // 添加右侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为光纤跳线添加端点\n cableFiberLeftElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化光纤跳线: ${id}`);\n // 添加左侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n cableFiberRightElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化光纤跳线: ${id}`);\n // 添加右侧端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为铜缆端口添加端点\n modelPortCopperElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n const isPermanent = id.includes('permanent');\n //console.log(`初始化铜缆端口: ${id} (${isPermanent ? '永久链路' : '普通端口'})`);\n instance.addEndpoint(element, {\n anchor: 'Top',\n isSource: isPermanent,\n isTarget: !isPermanent,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为铜缆端口添加端点\n modelPortM12DElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n const isPermanent = id.includes('permanent');\n //console.log(`初始化铜缆端口: ${id} (${isPermanent ? '永久链路' : '普通端口'})`);\n instance.addEndpoint(element, {\n anchor: 'Top',\n isSource: isPermanent,\n isTarget: !isPermanent,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为铜缆端口添加端点\n modelPortM12XElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n const isPermanent = id.includes('permanent');\n //console.log(`初始化铜缆端口: ${id} (${isPermanent ? '永久链路' : '普通端口'})`);\n instance.addEndpoint(element, {\n anchor: 'Top',\n isSource: isPermanent,\n isTarget: !isPermanent,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为光纤端口添加端点\n modelPortFiberElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n // 初始化时设置 fibersource 属性为 false\n element.setAttribute('fibersource', 'false');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为测试铜端口添加端点\n testCopperPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为测试M12D端口添加端点\n testM12DPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为测试M12X端口添加端点\n testM12XPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为Cam铜端口添加端点\n testCamPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为测试ARM端口添加端点\n testArmPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为测试光端口添加端点\n testFiberPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#80BEBEBE'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为MPO测试端口添加端点\n testTestMPOPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#80BEBEBE'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为MPO 跳线添加端口\n testMPOPortLeftElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化光纤跳线: ${id}`);\n // 添加左侧端点\n instance.addEndpoint(element, {\n anchor: 'BottomLeft',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n testMPOPortRightElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化光纤跳线: ${id}`);\n // 添加右侧端点\n instance.addEndpoint(element, {\n anchor: 'TopRight',\n isSource: true,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#0ff'\n },\n hoverPaintStyle: {\n fill: '#00ff7f'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 为MPO BOX端口添加端点\n testMPOBOXPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n //console.log(`初始化光纤跳线: ${id}`);\n // 添加顶部居中端点\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#80BEBEBE'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n testMPOLCBOXPortElements.forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (element)=>{\n const id = element.getAttribute('id');\n instance.addEndpoint(element, {\n anchor: 'Center',\n isSource: false,\n isTarget: true,\n maxConnections: 1,\n connectorStyle: {\n stroke: '#0ff',\n strokeWidth: 2\n },\n connectorHoverStyle: {\n stroke: '#00ff7f',\n strokeWidth: 3\n },\n paintStyle: {\n fill: '#00000000'\n },\n hoverPaintStyle: {\n fill: '#80BEBEBE'\n }\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 添加连接事件监听\n instance.bind('connection', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n const sourceId = info.sourceId;\n const targetId = info.targetId;\n // 先移除源端点的所有历史连接\n instance.getAllConnections().forEach({\n \"JsPlumbInit.useEffect.initJsPlumb\": (conn)=>{\n if (conn.sourceId === sourceId) {\n removeConnectionPath(conn.sourceId, conn.targetId);\n }\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 添加新的连接路径\n addConnectionPath({\n source: sourceId,\n target: targetId,\n connection: info.connection\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 清理端口连接状态的函数\n const cleanupPortStatus = {\n \"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus\": (elementId, retryCount = 3)=>{\n const cleanupAttempt = {\n \"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus.cleanupAttempt\": (attemptCount)=>{\n const element = document.getElementById(elementId);\n if (element && element.classList.contains('jtk-connected')) {\n element.classList.remove('jtk-connected');\n // 再次检查以确保状态被清理\n if (element.classList.contains('jtk-connected') && attemptCount > 0) {\n setTimeout({\n \"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus.cleanupAttempt\": ()=>cleanupAttempt(attemptCount - 1)\n }[\"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus.cleanupAttempt\"], 50);\n }\n }\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus.cleanupAttempt\"];\n // 立即执行第一次清理\n cleanupAttempt(retryCount);\n // 延迟100ms后再次检查,以处理快速操作的情况\n setTimeout({\n \"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus\": ()=>cleanupAttempt(retryCount)\n }[\"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus\"], 100);\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb.cleanupPortStatus\"];\n // 添加断开连接事件监听\n instance.bind('connectionDetached', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n const sourceId = info.sourceId;\n const targetId = info.targetId;\n // 移除连接路径\n removeConnectionPath(sourceId, targetId);\n // 清理源端口和目标端口的状态\n cleanupPortStatus(sourceId);\n cleanupPortStatus(targetId);\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 添加连接移动事件监听\n instance.bind('connectionMoved', {\n \"JsPlumbInit.useEffect.initJsPlumb\": (info)=>{\n // 移除原始连接\n removeConnectionPath(info.originalSourceId, info.originalTargetId);\n // 清理原始源端口和目标端口的状态\n cleanupPortStatus(info.originalSourceId);\n cleanupPortStatus(info.originalTargetId);\n // 添加新连接\n addConnectionPath({\n source: info.newSourceId,\n target: info.newTargetId,\n connection: info.connection\n });\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"]);\n // 重绘所有连接\n instance.repaintEverything();\n } catch (error) {\n console.error('Failed to initialize jsPlumb:', error);\n }\n }\n }[\"JsPlumbInit.useEffect.initJsPlumb\"];\n initJsPlumb();\n // 清理函数\n return ({\n \"JsPlumbInit.useEffect\": ()=>{\n if (jsPlumbInstanceRef.current) {\n // 清空连接路径\n clearConnectionPaths();\n jsPlumbInstanceRef.current.reset();\n jsPlumbInstanceRef.current = null;\n }\n }\n })[\"JsPlumbInit.useEffect\"];\n }\n }[\"JsPlumbInit.useEffect\"], [\n connectionItems,\n mainUnitModules,\n remoteUnitModules,\n mainUnitAdapter,\n remoteUnitAdapter,\n addConnectionPath,\n removeConnectionPath,\n clearConnectionPaths,\n faultScenarios,\n WorldSkillScenarios\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: containerRef,\n className: \"fixed inset-0 z-[1000] pointer-events-none\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/JsPlumbInit.js\",\n lineNumber: 741,\n columnNumber: 5\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL0pzUGx1bWJJbml0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBMEM7QUFDTztBQUVsQyxTQUFTRztJQUN0QixNQUFNQyxlQUFlSCw2Q0FBTUEsQ0FBQztJQUM1QixNQUFNSSxxQkFBcUJKLDZDQUFNQSxDQUFDO0lBQ2xDLE1BQU0sRUFDSkssZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMsb0JBQW9CLEVBQ3BCQyxvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEMsbUJBQW1CLEVBQ3BCLEdBQUdiLDhEQUFjQTtJQUVsQkYsZ0RBQVNBO2lDQUFDO1lBQ1IsY0FBYztZQUNkLElBQUksSUFBNkIsRUFBRTtZQUVuQyxjQUFjO1lBQ2QsTUFBTWdCO3FEQUFjO29CQUNsQixJQUFJO3dCQUNGLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxvSEFBaUI7d0JBRTNDLElBQUksQ0FBQ2IsYUFBYWMsT0FBTyxFQUFFO3dCQUUzQixlQUFlO3dCQUNmLElBQUksQ0FBQ2IsbUJBQW1CYSxPQUFPLEVBQUU7NEJBQy9CYixtQkFBbUJhLE9BQU8sR0FBR0QsUUFBUUUsV0FBVyxDQUFDO2dDQUMvQ0MsV0FBV2hCLGFBQWFjLE9BQU87Z0NBQy9CLFVBQVU7Z0NBQ1ZHLFdBQVc7b0NBQUM7b0NBQVU7d0NBQUVDLFdBQVc7b0NBQUc7aUNBQUU7Z0NBQ3hDLFNBQVM7Z0NBQ1RDLFVBQVU7b0NBQUM7b0NBQU87d0NBQUVDLFFBQVE7b0NBQUc7aUNBQUU7Z0NBQ2pDLFFBQVE7Z0NBQ1JDLFlBQVk7b0NBQ1ZDLFFBQVE7b0NBQ1JDLGFBQWE7Z0NBQ2Y7Z0NBQ0EsT0FBTztnQ0FDUEMsZUFBZTtvQ0FDYkMsTUFBTTtvQ0FDTkwsUUFBUTtnQ0FDVjtnQ0FDQSxTQUFTO2dDQUNUTSxpQkFBaUI7b0NBQ2ZKLFFBQVE7b0NBQ1JDLGFBQWE7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O1FBQWlCQztRQUFtQkM7UUFBbUJDO1FBQXNCQztRQUFzQkM7UUFBZ0JDO0tBQW9CO0lBR2hNLHFCQUNFLDhEQUFDaUc7UUFDQ0MsS0FBSzdHO1FBQ0w4RyxXQUFVOzs7Ozs7QUFHaEIiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvSnNQbHVtYkluaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpzUGx1bWJJbml0KCkge1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGpzUGx1bWJJbnN0YW5jZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qge1xuICAgIGNvbm5lY3Rpb25JdGVtcyxcbiAgICBtYWluVW5pdE1vZHVsZXMsXG4gICAgcmVtb3RlVW5pdE1vZHVsZXMsXG4gICAgbWFpblVuaXRBZGFwdGVyLFxuICAgIHJlbW90ZVVuaXRBZGFwdGVyLFxuICAgIGFkZENvbm5lY3Rpb25QYXRoLFxuICAgIHJlbW92ZUNvbm5lY3Rpb25QYXRoLFxuICAgIGNsZWFyQ29ubmVjdGlvblBhdGhzLFxuICAgIGZhdWx0U2NlbmFyaW9zLFxuICAgIFdvcmxkU2tpbGxTY2VuYXJpb3NcbiAgfSA9IHVzZURldmljZVN0b3JlKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyDnoa7kv53lnKjlrqLmiLfnq6/njq/looPkuK3ov5DooYxcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIC8vIOWKqOaAgeWvvOWFpWpzcGx1bWJcbiAgICBjb25zdCBpbml0SnNQbHVtYiA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsganNQbHVtYiB9ID0gYXdhaXQgaW1wb3J0KCdqc3BsdW1iJyk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50KSByZXR1cm47XG5cbiAgICAgICAgLy8g5Yid5aeL5YyWanNQbHVtYuWunuS+i1xuICAgICAgICBpZiAoIWpzUGx1bWJJbnN0YW5jZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAganNQbHVtYkluc3RhbmNlUmVmLmN1cnJlbnQgPSBqc1BsdW1iLmdldEluc3RhbmNlKHtcbiAgICAgICAgICAgIENvbnRhaW5lcjogY29udGFpbmVyUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAvLyDov57mjqXnur/pu5jorqTphY3nva5cbiAgICAgICAgICAgIENvbm5lY3RvcjogWydCZXppZXInLCB7IGN1cnZpbmVzczogNTAgfV0sXG4gICAgICAgICAgICAvLyDnq6/ngrnpu5jorqTphY3nva5cbiAgICAgICAgICAgIEVuZHBvaW50OiBbJ0RvdCcsIHsgcmFkaXVzOiAxMCB9XSxcbiAgICAgICAgICAgIC8vIOi/nuaOpee6v+agt+W8j1xuICAgICAgICAgICAgUGFpbnRTdHlsZToge1xuICAgICAgICAgICAgICBzdHJva2U6ICcjMGZmJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDnq6/ngrnmoLflvI9cbiAgICAgICAgICAgIEVuZHBvaW50U3R5bGU6IHsgXG4gICAgICAgICAgICAgIGZpbGw6ICcjMGZmJyxcbiAgICAgICAgICAgICAgcmFkaXVzOiAxNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIOm8oOagh+aCrOWBnOagt+W8j1xuICAgICAgICAgICAgSG92ZXJQYWludFN0eWxlOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJyMwMGZmN2YnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEVuZHBvaW50SG92ZXJTdHlsZToge1xuICAgICAgICAgICAgICBmaWxsOiAnIzAwZmY3ZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIOa3u+WKoOi/nuaOpeW7uueri+S6i+S7tuWkhOeQhlxuICAgICAgICAgIGpzUGx1bWJJbnN0YW5jZVJlZi5jdXJyZW50LmJpbmQoJ2Nvbm5lY3Rpb24nLCAoaW5mbykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZm8udGFyZ2V0SWQpO1xuICAgICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2pzdHlwZScpID09PSAnbW9kZWxwb3J0LWZpYmVyJykge1xuICAgICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3nirbmgIHmmK8gZmFsc2XvvIzor7TmmI7mmK/mlrDlu7rnq4vnmoTov57mjqVcbiAgICAgICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdmaWJlcnNvdXJjZScpID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZpYmVyc291cmNlJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8g5re75Yqg6L+e5o6l5pat5byA5LqL5Lu25aSE55CGXG4gICAgICAgICAganNQbHVtYkluc3RhbmNlUmVmLmN1cnJlbnQuYmluZCgnY29ubmVjdGlvbkRldGFjaGVkJywgKGluZm8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbmZvLnRhcmdldElkKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50ICYmIHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdqc3R5cGUnKSA9PT0gJ21vZGVscG9ydC1maWJlcicpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZpYmVyc291cmNlJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDmt7vliqDov57mjqXmi5bliqjlvIDlp4vkuovku7blpITnkIZcbiAgICAgICAgICBqc1BsdW1iSW5zdGFuY2VSZWYuY3VycmVudC5iaW5kKCdjb25uZWN0aW9uRHJhZycsIChpbmZvKSA9PiB7XG5cbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZm8udGFyZ2V0SWQpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2pzdHlwZScpID09PSAnbW9kZWxwb3J0LWZpYmVyJykge1xuICAgICAgICAgICAgICAgIC8vIOWcqOaLluWKqOW8gOWni+aXtuWwseWwhueKtuaAgeiuvue9ruS4uiBhYm5vcm1hbFxuICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmaWJlcnNvdXJjZScsICdhYm5vcm1hbCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDmt7vliqBiZWZvcmVEcm9w5LqL5Lu25aSE55CGXG4gICAgICAgICAganNQbHVtYkluc3RhbmNlUmVmLmN1cnJlbnQuYmluZCgnYmVmb3JlRHJvcCcsIChpbmZvKSA9PiB7XG4gICAgICAgICAgICAvLyDojrflj5bmupDlkoznm67moIflhYPntKBcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUlkID0gaW5mby5zb3VyY2VJZDtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldElkID0gaW5mby50YXJnZXRJZDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8g5aaC5p6c5rqQ5ZKM55uu5qCH5piv5ZCM5LiA5Liq5YWD57Sg77yM6L+U5ZueZmFsc2XpmLvmraLov57mjqVcbiAgICAgICAgICAgIGlmIChzb3VyY2VJZCA9PT0gdGFyZ2V0SWQpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn5LiN5YWB6K646Ieq6L+e5o6lJyk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g6I635Y+W5rqQ5ZKM55uu5qCH5YWD57Sg55qEaWTlkoxqc3R5cGXlsZ7mgKdcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke3NvdXJjZUlkfVwiXWApO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7dGFyZ2V0SWR9XCJdYCk7XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2VFbGVtZW50ICYmIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdqc3R5cGUnKTtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdqc3R5cGUnKTtcblxuICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmmK9wZXJtYW5lbnTnq6/lj6NcbiAgICAgICAgICAgICAgY29uc3QgaXNQZXJtYW5lbnRTb3VyY2UgPSBzb3VyY2VJZC5pbmNsdWRlcygncGVybWFuZW50Jyk7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUGVybWFuZW50VGFyZ2V0ID0gdGFyZ2V0SWQuaW5jbHVkZXMoJ3Blcm1hbmVudCcpO1xuXG4gICAgICAgICAgICAgIC8vIHBlcm1hbmVudOerr+WPo+WPquiDveS9nOS4uua6kO+8jOS4jeiDveS9nOS4uuebruagh1xuICAgICAgICAgICAgICBpZiAoaXNQZXJtYW5lbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdwZXJtYW5lbnTnq6/lj6PkuI3og73kvZzkuLrov57mjqXnm67moIcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gcGVybWFuZW5056uv5Y+j5Y+q6IO96L+e5o6l5YiwdGVzdHBvcnQtY29wcGVyXG4gICAgICAgICAgICAgIGlmIChpc1Blcm1hbmVudFNvdXJjZSAmJiB0YXJnZXRUeXBlICE9PSAnbW9kZWxwb3J0LWNvcHBlcicgJiYgdGFyZ2V0VHlwZSAhPT0gJ3Rlc3Rwb3J0LWNvcHBlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIGNvbm5lY3Rvcuexu+Wei+WPquiDveS9nOS4uuebruagh1xuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2Nvbm5lY3RvcicpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfov57mjqXlmajlj6rog73kvZzkuLrov57mjqXnm67moIcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBjYWJsZeexu+Wei+S4jeiDvei/nuaOpeWQjOexu1xuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZS5zdGFydHNXaXRoKCdjYWJsZS0nKSAmJiB0YXJnZXRUeXBlLnN0YXJ0c1dpdGgoJ2NhYmxlLScpKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6Lez57q/5LiN6IO96L+e5o6l6Lez57q/Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8g6ZOc57yG6Lez57q/5Y+q6IO96L+e5o6l6ZOc57yG56uv5Y+jXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnY2FibGUtY29wcGVyLWxlZnQnICYmIHRhcmdldFR5cGUgIT09ICdtb2RlbHBvcnQtY29wcGVyJyAmJiB0YXJnZXRUeXBlICE9PSAndGVzdHBvcnQtY29wcGVyJykge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+mTnOe8hui3s+e6v+WPquiDvei/nuaOpemTnOe8huerr+WPoycpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2NhYmxlLWNvcHBlci1yaWdodCcgJiYgdGFyZ2V0VHlwZSAhPT0gJ21vZGVscG9ydC1jb3BwZXInICYmIHRhcmdldFR5cGUgIT09ICd0ZXN0cG9ydC1jb3BwZXInKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6ZOc57yG6Lez57q/5Y+q6IO96L+e5o6l6ZOc57yG56uv5Y+jJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gQ0FN6Lez57q/5Y+q6IO96L+e5o6lQ2hhbm5lbC9QYWNoQ29kZeerr+WPo1xuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ3Rlc3Rwb3J0LWNhbScgJiYgdGFyZ2V0VHlwZSAhPT0gJ21vZGVscG9ydC1jb3BwZXInKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6ZOc57yG6Lez57q/5Y+q6IO96L+e5o6l6ZOc57yG56uv5Y+jJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIEFSTei3s+e6v+WPquiDvei/nuaOpU0xMiBE56uv5Y+jXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndGVzdHBvcnQtYXJtJyAmJiB0YXJnZXRUeXBlICE9PSAnbW9kZWxwb3J0LW0xMi1kJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBNMTJY6Lez57q/5Y+q6IO96L+e5o6lTTEyWFxuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2NhYmxlLWNvcHBlci1tMTIteC1sZWZ0JyAmJiB0YXJnZXRUeXBlICE9PSAnbW9kZWxwb3J0LW0xMi14JyAmJiB0YXJnZXRUeXBlICE9PSAndGVzdHBvcnQtbTEyLXgnKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTTEyIFgtQ29kZei3s+e6v+WPquiDvei/nuaOpU0xMiBYLUNvZGXnq6/lj6MnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdjYWJsZS1jb3BwZXItbTEyLXgtcmlnaHQnICYmIHRhcmdldFR5cGUgIT09ICdtb2RlbHBvcnQtbTEyLXgnICYmIHRhcmdldFR5cGUgIT09ICd0ZXN0cG9ydC1tMTIteCcpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNMTIgWC1Db2Rl6Lez57q/5Y+q6IO96L+e5o6lTTEyIFgtQ29kZeerr+WPoycpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBNMTJE6Lez57q/5Y+q6IO96L+e5o6lTTEyRFxuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2NhYmxlLWNvcHBlci1tMTItZC1sZWZ0JyAmJiB0YXJnZXRUeXBlICE9PSAnbW9kZWxwb3J0LW0xMi1kJyAmJiB0YXJnZXRUeXBlICE9PSAndGVzdHBvcnQtbTEyLWQnKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTTEyIEQtQ29kZei3s+e6v+WPquiDvei/nuaOpU0xMiBELUNvZGXnq6/lj6MnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdjYWJsZS1jb3BwZXItbTEyLWQtcmlnaHQnICYmIHRhcmdldFR5cGUgIT09ICdtb2RlbHBvcnQtbTEyLWQnICYmIHRhcmdldFR5cGUgIT09ICd0ZXN0cG9ydC1tMTItZCcpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNMTIgRC1Db2Rl6Lez57q/5Y+q6IO96L+e5o6lTTEyIEQtQ29kZeerr+WPoycpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyDpk5znvIbnq6/lj6PkuI3og73ov57mjqXlhYnnuqTmtYvor5Xnq6/lj6NcbiAgICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdtb2RlbHBvcnQtY29wcGVyJyAmJiB0YXJnZXRUeXBlID09PSAndGVzdHBvcnQtZmliZXInKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6ZOc57yG56uv5Y+j5LiN6IO96L+e5o6l5YWJ57qk5rWL6K+V56uv5Y+jJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8g5YWJ57qk6Lez57q/5Y+q6IO96L+e5o6l5YWJ57qk56uv5Y+j5oiW6L+e5o6l5ZmoXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnY2FibGUtZmliZXItbGVmdCcgJiYgdGFyZ2V0VHlwZSAhPT0gJ21vZGVscG9ydC1maWJlcicgJiYgdGFyZ2V0VHlwZSAhPT0gJ2Nvbm5lY3Rvci1sZWZ0JyAmJiB0YXJnZXRUeXBlICE9PSAnY29ubmVjdG9yLXJpZ2h0JyAmJiB0YXJnZXRUeXBlICE9PSAndGVzdHBvcnQtZmliZXInICYmIHRhcmdldFR5cGUgIT09ICdtcG8tZmliZXJib3gtbGMnKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn5YWJ57qk6Lez57q/5Y+q6IO96L+e5o6l5YWJ57qk56uv5Y+j5oiW6L+e5o6l5ZmoJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnY2FibGUtZmliZXItcmlnaHQnICYmIHRhcmdldFR5cGUgIT09ICdtb2RlbHBvcnQtZmliZXInICYmIHRhcmdldFR5cGUgIT09ICdjb25uZWN0b3ItbGVmdCcgJiYgdGFyZ2V0VHlwZSAhPT0gJ2Nvbm5lY3Rvci1yaWdodCcgJiYgdGFyZ2V0VHlwZSAhPT0gJ3Rlc3Rwb3J0LWZpYmVyJyAmJiB0YXJnZXRUeXBlICE9PSAnbXBvLWZpYmVyYm94LWxjJykge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+WFiee6pOi3s+e6v+WPquiDvei/nuaOpeWFiee6pOerr+WPo+aIlui/nuaOpeWZqCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIE1QT+i3s+e6v+WPquiDvei/nuaOpU1QT+err+WPo+aIlui/nuaOpeWZqFxuICAgICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2NhYmxlLWZpYmVyLW1wby1sZWZ0JyAmJiB0YXJnZXRUeXBlICE9PSAndGVzdHBvcnQtbXBvJyAmJiB0YXJnZXRUeXBlICE9PSAnbXBvLWZpYmVyYm94LW1wbycpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCflhYnnuqTot7Pnur/lj6rog73ov57mjqXlhYnnuqTnq6/lj6PmiJbov57mjqXlmagnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdjYWJsZS1maWJlci1tcG8tcmlnaHQnICYmIHRhcmdldFR5cGUgIT09ICd0ZXN0cG9ydC1tcG8nJiYgdGFyZ2V0VHlwZSAhPT0gJ21wby1maWJlcmJveC1tcG8nKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn5YWJ57qk6Lez57q/5Y+q6IO96L+e5o6l5YWJ57qk56uv5Y+j5oiW6L+e5o6l5ZmoJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBqc1BsdW1iSW5zdGFuY2VSZWYuY3VycmVudDtcblxuICAgICAgICAvLyDnp7vpmaTmiYDmnInnjrDmnInnq6/ngrlcbiAgICAgICAgaW5zdGFuY2UuZGVsZXRlRXZlcnlFbmRwb2ludCgpO1xuXG4gICAgICAgIC8vIOiOt+WPluaJgOaciemcgOimgea3u+WKoOi/nuaOpeeCueeahOWFg+e0oFxuICAgICAgICBjb25zdCBjb25uZWN0b3JMZWZ0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwiY29ubmVjdG9yLWxlZnRcIl0nKTtcbiAgICAgICAgY29uc3QgY29ubmVjdG9yUmlnaHRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJjb25uZWN0b3ItcmlnaHRcIl0nKTtcblxuXG4gICAgICAgIGNvbnN0IGNhYmxlQ29wcGVyTGVmdEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzdHlwZT1cImNhYmxlLWNvcHBlci1sZWZ0XCJdJyk7XG4gICAgICAgIGNvbnN0IGNhYmxlQ29wcGVyUmlnaHRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJjYWJsZS1jb3BwZXItcmlnaHRcIl0nKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGNhYmxlTTEyWExlZnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJjYWJsZS1jb3BwZXItbTEyLXgtbGVmdFwiXScpO1xuICAgICAgICBjb25zdCBjYWJsZU0xMlhSaWdodEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzdHlwZT1cImNhYmxlLWNvcHBlci1tMTIteC1yaWdodFwiXScpO1xuICAgICAgICBjb25zdCBjYWJsZU0xMkRMZWZ0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwiY2FibGUtY29wcGVyLW0xMi1kLWxlZnRcIl0nKTtcbiAgICAgICAgY29uc3QgY2FibGVNMTJEUmlnaHRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJjYWJsZS1jb3BwZXItbTEyLWQtcmlnaHRcIl0nKTtcblxuICAgICAgICBjb25zdCBjYWJsZUZpYmVyTGVmdEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzdHlwZT1cImNhYmxlLWZpYmVyLWxlZnRcIl0nKTtcbiAgICAgICAgY29uc3QgY2FibGVGaWJlclJpZ2h0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwiY2FibGUtZmliZXItcmlnaHRcIl0nKTtcblxuICAgICAgICBjb25zdCBtb2RlbFBvcnRDb3BwZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJtb2RlbHBvcnQtY29wcGVyXCJdJyk7XG4gICAgICAgIGNvbnN0IG1vZGVsUG9ydE0xMkRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJtb2RlbHBvcnQtbTEyLWRcIl0nKTtcbiAgICAgICAgY29uc3QgbW9kZWxQb3J0TTEyWEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzdHlwZT1cIm1vZGVscG9ydC1tMTIteFwiXScpO1xuICAgICAgICBjb25zdCBtb2RlbFBvcnRGaWJlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzdHlwZT1cIm1vZGVscG9ydC1maWJlclwiXScpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGVzdENvcHBlclBvcnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJ0ZXN0cG9ydC1jb3BwZXJcIl0nKTtcbiAgICAgICAgY29uc3QgdGVzdE0xMkRQb3J0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwidGVzdHBvcnQtbTEyLWRcIl0nKTtcbiAgICAgICAgY29uc3QgdGVzdE0xMlhQb3J0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwidGVzdHBvcnQtbTEyLXhcIl0nKTtcbiAgICAgICAgY29uc3QgdGVzdENhbVBvcnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJ0ZXN0cG9ydC1jYW1cIl0nKTtcbiAgICAgICAgY29uc3QgdGVzdEFybVBvcnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJ0ZXN0cG9ydC1hcm1cIl0nKTtcbiAgICAgICAgY29uc3QgdGVzdEZpYmVyUG9ydEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzdHlwZT1cInRlc3Rwb3J0LWZpYmVyXCJdJyk7XG5cbiAgICAgICAgY29uc3QgdGVzdFRlc3RNUE9Qb3J0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwidGVzdHBvcnQtbXBvXCJdJyk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0ZXN0TVBPUG9ydExlZnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJjYWJsZS1maWJlci1tcG8tbGVmdFwiXScpO1xuICAgICAgICBjb25zdCB0ZXN0TVBPUG9ydFJpZ2h0RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbanN0eXBlPVwiY2FibGUtZmliZXItbXBvLXJpZ2h0XCJdJyk7XG5cbiAgICAgICAgY29uc3QgdGVzdE1QT0JPWFBvcnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJtcG8tZmliZXJib3gtbXBvXCJdJyk7XG4gICAgICAgIGNvbnN0IHRlc3RNUE9MQ0JPWFBvcnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqc3R5cGU9XCJtcG8tZmliZXJib3gtbGNcIl0nKTtcblxuXG4gICAgICAgIC8vIOS4umNvbm5lY3Rvcuexu+Wei+WFg+e0oOa3u+WKoOerr+eCue+8iOWPquiDveS9nOS4uuebruagh++8iVxuICAgICAgICBjb25uZWN0b3JMZWZ0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhg5Yid5aeL5YyW6L+e5o6l5ZmoOiAke2lkfWApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIOa3u+WKoOW3puS+p+err+eCuVxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0xlZnQnLFxuICAgICAgICAgICAgaXNTb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgaXNUYXJnZXQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMSxcbiAgICAgICAgICAgIGNvbm5lY3RvclN0eWxlOiB7IHN0cm9rZTogJyMwZmYnLCBzdHJva2VXaWR0aDogMiB9LFxuICAgICAgICAgICAgY29ubmVjdG9ySG92ZXJTdHlsZTogeyBzdHJva2U6ICcjMDBmZjdmJywgc3Ryb2tlV2lkdGg6IDMgfSxcbiAgICAgICAgICAgIHBhaW50U3R5bGU6IHsgZmlsbDogJyMwZmYnLCB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25uZWN0b3JSaWdodEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYOWIneWni+WMlui/nuaOpeWZqDogJHtpZH1gKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyDmt7vliqDlj7Pkvqfnq6/ngrlcbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdSaWdodCcsXG4gICAgICAgICAgICBpc1NvdXJjZTogZmFsc2UsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzBmZicsIH0sXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuXG4gICAgICAgIC8vIOS4uumTnOe8hui3s+e6v+a3u+WKoOerr+eCuVxuICAgICAgICBjYWJsZUNvcHBlckxlZnRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGDliJ3lp4vljJbpk5znvIbot7Pnur86ICR7aWR9YCk7XG4gICAgICAgICAgLy8g5re75Yqg5bem5L6n56uv54K5XG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQ2VudGVyJyxcbiAgICAgICAgICAgIGlzU291cmNlOiB0cnVlLFxuICAgICAgICAgICAgaXNUYXJnZXQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMSxcbiAgICAgICAgICAgIGNvbm5lY3RvclN0eWxlOiB7IHN0cm9rZTogJyMwZmYnLCBzdHJva2VXaWR0aDogMiB9LFxuICAgICAgICAgICAgY29ubmVjdG9ySG92ZXJTdHlsZTogeyBzdHJva2U6ICcjMDBmZjdmJywgc3Ryb2tlV2lkdGg6IDMgfSxcbiAgICAgICAgICAgIHBhaW50U3R5bGU6IHsgZmlsbDogJyMwZmYnLCAgfSxcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwZmY3ZicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY2FibGVDb3BwZXJSaWdodEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYOWIneWni+WMlumTnOe8hui3s+e6vzogJHtpZH1gKTtcbiAgICAgICAgICAvLyDmt7vliqDlj7Pkvqfnq6/ngrlcbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdDZW50ZXInLFxuICAgICAgICAgICAgaXNTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzBmZicsICB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyDkuLpNMTLot7Pnur/mt7vliqDnq6/ngrlcbiAgICAgICAgY2FibGVNMTJYTGVmdEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYOWIneWni+WMlumTnOe8hui3s+e6vzogJHtpZH1gKTtcbiAgICAgICAgICAvLyDmt7vliqDlt6bkvqfnq6/ngrlcbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdDZW50ZXInLFxuICAgICAgICAgICAgaXNTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzBmZicsICB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWJsZU0xMlhSaWdodEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYOWIneWni+WMlumTnOe8hui3s+e6vzogJHtpZH1gKTtcbiAgICAgICAgICAvLyDmt7vliqDlj7Pkvqfnq6/ngrlcbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdDZW50ZXInLFxuICAgICAgICAgICAgaXNTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzBmZicsICB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjYWJsZU0xMkRMZWZ0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhg5Yid5aeL5YyW6ZOc57yG6Lez57q/OiAke2lkfWApO1xuICAgICAgICAgIC8vIOa3u+WKoOW3puS+p+err+eCuVxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0NlbnRlcicsXG4gICAgICAgICAgICBpc1NvdXJjZTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgIH0sXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNhYmxlTTEyRFJpZ2h0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhg5Yid5aeL5YyW6ZOc57yG6Lez57q/OiAke2lkfWApO1xuICAgICAgICAgIC8vIOa3u+WKoOWPs+S+p+err+eCuVxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0NlbnRlcicsXG4gICAgICAgICAgICBpc1NvdXJjZTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgIH0sXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g5Li65YWJ57qk6Lez57q/5re75Yqg56uv54K5XG4gICAgICAgIGNhYmxlRmliZXJMZWZ0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhg5Yid5aeL5YyW5YWJ57qk6Lez57q/OiAke2lkfWApO1xuICAgICAgICAgIC8vIOa3u+WKoOW3puS+p+err+eCuVxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0NlbnRlcicsXG4gICAgICAgICAgICBpc1NvdXJjZTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgIH0sXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2FibGVGaWJlclJpZ2h0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhg5Yid5aeL5YyW5YWJ57qk6Lez57q/OiAke2lkfWApO1xuICAgICAgICAgIC8vIOa3u+WKoOWPs+S+p+err+eCuVxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0NlbnRlcicsXG4gICAgICAgICAgICBpc1NvdXJjZTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgfSxcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwZmY3ZicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG5cbiAgICAgICAgLy8g5Li66ZOc57yG56uv5Y+j5re75Yqg56uv54K5XG4gICAgICAgIG1vZGVsUG9ydENvcHBlckVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIGNvbnN0IGlzUGVybWFuZW50ID0gaWQuaW5jbHVkZXMoJ3Blcm1hbmVudCcpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYOWIneWni+WMlumTnOe8huerr+WPozogJHtpZH0gKCR7aXNQZXJtYW5lbnQgPyAn5rC45LmF6ZO+6LevJyA6ICfmma7pgJrnq6/lj6MnfSlgKTtcblxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ1RvcCcsXG4gICAgICAgICAgICBpc1NvdXJjZTogaXNQZXJtYW5lbnQsXG4gICAgICAgICAgICBpc1RhcmdldDogIWlzUGVybWFuZW50LFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgfSxcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwZmY3ZicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIOS4uumTnOe8huerr+WPo+a3u+WKoOerr+eCuVxuICAgICAgICBtb2RlbFBvcnRNMTJERWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgY29uc3QgaXNQZXJtYW5lbnQgPSBpZC5pbmNsdWRlcygncGVybWFuZW50Jyk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhg5Yid5aeL5YyW6ZOc57yG56uv5Y+jOiAke2lkfSAoJHtpc1Blcm1hbmVudCA/ICfmsLjkuYXpk77ot68nIDogJ+aZrumAmuerr+WPoyd9KWApO1xuXG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnVG9wJyxcbiAgICAgICAgICAgIGlzU291cmNlOiBpc1Blcm1hbmVudCxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiAhaXNQZXJtYW5lbnQsXG4gICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMSxcbiAgICAgICAgICAgIGNvbm5lY3RvclN0eWxlOiB7IHN0cm9rZTogJyMwZmYnLCBzdHJva2VXaWR0aDogMiB9LFxuICAgICAgICAgICAgY29ubmVjdG9ySG92ZXJTdHlsZTogeyBzdHJva2U6ICcjMDBmZjdmJywgc3Ryb2tlV2lkdGg6IDMgfSxcbiAgICAgICAgICAgIHBhaW50U3R5bGU6IHsgZmlsbDogJyMwZmYnLCB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyDkuLrpk5znvIbnq6/lj6Pmt7vliqDnq6/ngrlcbiAgICAgICAgbW9kZWxQb3J0TTEyWEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIGNvbnN0IGlzUGVybWFuZW50ID0gaWQuaW5jbHVkZXMoJ3Blcm1hbmVudCcpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYOWIneWni+WMlumTnOe8huerr+WPozogJHtpZH0gKCR7aXNQZXJtYW5lbnQgPyAn5rC45LmF6ZO+6LevJyA6ICfmma7pgJrnq6/lj6MnfSlgKTtcblxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ1RvcCcsXG4gICAgICAgICAgICBpc1NvdXJjZTogaXNQZXJtYW5lbnQsXG4gICAgICAgICAgICBpc1RhcmdldDogIWlzUGVybWFuZW50LFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgfSxcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwZmY3ZicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyDkuLrlhYnnuqTnq6/lj6Pmt7vliqDnq6/ngrlcbiAgICAgICAgbW9kZWxQb3J0RmliZXJFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyDliJ3lp4vljJbml7borr7nva4gZmliZXJzb3VyY2Ug5bGe5oCn5Li6IGZhbHNlXG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZpYmVyc291cmNlJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdDZW50ZXInLFxuICAgICAgICAgICAgaXNTb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgaXNUYXJnZXQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMSxcbiAgICAgICAgICAgIGNvbm5lY3RvclN0eWxlOiB7IHN0cm9rZTogJyMwZmYnLCBzdHJva2VXaWR0aDogMiB9LFxuICAgICAgICAgICAgY29ubmVjdG9ySG92ZXJTdHlsZTogeyBzdHJva2U6ICcjMDBmZjdmJywgc3Ryb2tlV2lkdGg6IDMgfSxcbiAgICAgICAgICAgIHBhaW50U3R5bGU6IHsgZmlsbDogJyMwZmYnLCB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOS4uua1i+ivlemTnOerr+WPo+a3u+WKoOerr+eCuVxuICAgICAgICB0ZXN0Q29wcGVyUG9ydEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIFxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0NlbnRlcicsXG4gICAgICAgICAgICBpc1NvdXJjZTogZmFsc2UsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwMDAwMDAwJywgfSwgICAgICAgICAgICBcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwZmY3ZicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8g5Li65rWL6K+VTTEyROerr+WPo+a3u+WKoOerr+eCuVxuICAgICAgICB0ZXN0TTEyRFBvcnRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdDZW50ZXInLFxuICAgICAgICAgICAgaXNTb3VyY2U6IGZhbHNlLFxuICAgICAgICAgICAgaXNUYXJnZXQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMSxcbiAgICAgICAgICAgIGNvbm5lY3RvclN0eWxlOiB7IHN0cm9rZTogJyMwZmYnLCBzdHJva2VXaWR0aDogMiB9LFxuICAgICAgICAgICAgY29ubmVjdG9ySG92ZXJTdHlsZTogeyBzdHJva2U6ICcjMDBmZjdmJywgc3Ryb2tlV2lkdGg6IDMgfSxcbiAgICAgICAgICAgIHBhaW50U3R5bGU6IHsgZmlsbDogJyMwMDAwMDAwMCcsIH0sICAgICAgICAgICAgXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOS4uua1i+ivlU0xMljnq6/lj6Pmt7vliqDnq6/ngrlcbiAgICAgICAgdGVzdE0xMlhQb3J0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQ2VudGVyJyxcbiAgICAgICAgICAgIGlzU291cmNlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMDAwMDAwMDAnLCB9LCAgICAgICAgICAgIFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjMDBmZjdmJyB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyDkuLpDYW3pk5znq6/lj6Pmt7vliqDnq6/ngrlcbiAgICAgICAgdGVzdENhbVBvcnRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpbnN0YW5jZS5hZGRFbmRwb2ludChlbGVtZW50LCB7XG4gICAgICAgICAgICBhbmNob3I6ICdDZW50ZXInLFxuICAgICAgICAgICAgaXNTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwMDAwMDAwJywgfSwgICAgICAgICAgICBcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwZmY3ZicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8g5Li65rWL6K+VQVJN56uv5Y+j5re75Yqg56uv54K5XG4gICAgICAgIHRlc3RBcm1Qb3J0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQ2VudGVyJyxcbiAgICAgICAgICAgIGlzU291cmNlOiB0cnVlLFxuICAgICAgICAgICAgaXNUYXJnZXQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMSxcbiAgICAgICAgICAgIGNvbm5lY3RvclN0eWxlOiB7IHN0cm9rZTogJyMwZmYnLCBzdHJva2VXaWR0aDogMiB9LFxuICAgICAgICAgICAgY29ubmVjdG9ySG92ZXJTdHlsZTogeyBzdHJva2U6ICcjMDBmZjdmJywgc3Ryb2tlV2lkdGg6IDMgfSxcbiAgICAgICAgICAgIHBhaW50U3R5bGU6IHsgZmlsbDogJyMwMDAwMDAwMCcsIH0sICAgICAgICAgICAgXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOS4uua1i+ivleWFieerr+WPo+a3u+WKoOerr+eCuVxuICAgICAgICB0ZXN0RmliZXJQb3J0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQ2VudGVyJyxcbiAgICAgICAgICAgIGlzU291cmNlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMDAwMDAwMDAnLCB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjODBCRUJFQkUnIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8g5Li6TVBP5rWL6K+V56uv5Y+j5re75Yqg56uv54K5XG4gICAgICAgIHRlc3RUZXN0TVBPUG9ydEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgIFxuICAgICAgICAgIGluc3RhbmNlLmFkZEVuZHBvaW50KGVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFuY2hvcjogJ0NlbnRlcicsXG4gICAgICAgICAgICBpc1NvdXJjZTogZmFsc2UsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzAwMDAwMDAwJywgfSxcbiAgICAgICAgICAgIGhvdmVyUGFpbnRTdHlsZTogeyBmaWxsOiAnIzgwQkVCRUJFJyB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8g5Li6TVBPIOi3s+e6v+a3u+WKoOerr+WPo1xuICAgICAgICB0ZXN0TVBPUG9ydExlZnRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGDliJ3lp4vljJblhYnnuqTot7Pnur86ICR7aWR9YCk7XG4gICAgICAgICAgLy8g5re75Yqg5bem5L6n56uv54K5XG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQm90dG9tTGVmdCcsXG4gICAgICAgICAgICBpc1NvdXJjZTogdHJ1ZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMGZmJywgIH0sXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3RNUE9Qb3J0UmlnaHRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGDliJ3lp4vljJblhYnnuqTot7Pnur86ICR7aWR9YCk7XG4gICAgICAgICAgLy8g5re75Yqg5Y+z5L6n56uv54K5XG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnVG9wUmlnaHQnLFxuICAgICAgICAgICAgaXNTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpc1RhcmdldDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiAxLFxuICAgICAgICAgICAgY29ubmVjdG9yU3R5bGU6IHsgc3Ryb2tlOiAnIzBmZicsIHN0cm9rZVdpZHRoOiAyIH0sXG4gICAgICAgICAgICBjb25uZWN0b3JIb3ZlclN0eWxlOiB7IHN0cm9rZTogJyMwMGZmN2YnLCBzdHJva2VXaWR0aDogMyB9LFxuICAgICAgICAgICAgcGFpbnRTdHlsZTogeyBmaWxsOiAnIzBmZicsIH0sXG4gICAgICAgICAgICBob3ZlclBhaW50U3R5bGU6IHsgZmlsbDogJyMwMGZmN2YnIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOS4uk1QTyBCT1jnq6/lj6Pmt7vliqDnq6/ngrlcbiAgICAgICAgdGVzdE1QT0JPWFBvcnRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGDliJ3lp4vljJblhYnnuqTot7Pnur86ICR7aWR9YCk7XG4gICAgICAgICAgLy8g5re75Yqg6aG26YOo5bGF5Lit56uv54K5XG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQ2VudGVyJyxcbiAgICAgICAgICAgIGlzU291cmNlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMDAwMDAwMDAnLCB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjODBCRUJFQkUnIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0TVBPTENCT1hQb3J0RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgaW5zdGFuY2UuYWRkRW5kcG9pbnQoZWxlbWVudCwge1xuICAgICAgICAgICAgYW5jaG9yOiAnQ2VudGVyJyxcbiAgICAgICAgICAgIGlzU291cmNlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzVGFyZ2V0OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IDEsXG4gICAgICAgICAgICBjb25uZWN0b3JTdHlsZTogeyBzdHJva2U6ICcjMGZmJywgc3Ryb2tlV2lkdGg6IDIgfSxcbiAgICAgICAgICAgIGNvbm5lY3RvckhvdmVyU3R5bGU6IHsgc3Ryb2tlOiAnIzAwZmY3ZicsIHN0cm9rZVdpZHRoOiAzIH0sXG4gICAgICAgICAgICBwYWludFN0eWxlOiB7IGZpbGw6ICcjMDAwMDAwMDAnLCB9LFxuICAgICAgICAgICAgaG92ZXJQYWludFN0eWxlOiB7IGZpbGw6ICcjODBCRUJFQkUnIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8g5re75Yqg6L+e5o6l5LqL5Lu255uR5ZCsXG4gICAgICAgIGluc3RhbmNlLmJpbmQoJ2Nvbm5lY3Rpb24nLCAoaW5mbykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUlkID0gaW5mby5zb3VyY2VJZDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRJZCA9IGluZm8udGFyZ2V0SWQ7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8g5YWI56e76Zmk5rqQ56uv54K555qE5omA5pyJ5Y6G5Y+y6L+e5o6lXG4gICAgICAgICAgaW5zdGFuY2UuZ2V0QWxsQ29ubmVjdGlvbnMoKS5mb3JFYWNoKGNvbm4gPT4ge1xuICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlSWQgPT09IHNvdXJjZUlkKSB7XG4gICAgICAgICAgICAgIHJlbW92ZUNvbm5lY3Rpb25QYXRoKGNvbm4uc291cmNlSWQsIGNvbm4udGFyZ2V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIOa3u+WKoOaWsOeahOi/nuaOpei3r+W+hFxuICAgICAgICAgIGFkZENvbm5lY3Rpb25QYXRoKHtcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlSWQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldElkLFxuICAgICAgICAgICAgY29ubmVjdGlvbjogaW5mby5jb25uZWN0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgLy8g5riF55CG56uv5Y+j6L+e5o6l54q25oCB55qE5Ye95pWwXG4gICAgICAgIGNvbnN0IGNsZWFudXBQb3J0U3RhdHVzID0gKGVsZW1lbnRJZCwgcmV0cnlDb3VudCA9IDMpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGVhbnVwQXR0ZW1wdCA9IChhdHRlbXB0Q291bnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2p0ay1jb25uZWN0ZWQnKSkge1xuICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2p0ay1jb25uZWN0ZWQnKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIOWGjeasoeajgOafpeS7peehruS/neeKtuaAgeiiq+a4heeQhlxuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2p0ay1jb25uZWN0ZWQnKSAmJiBhdHRlbXB0Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBjbGVhbnVwQXR0ZW1wdChhdHRlbXB0Q291bnQgLSAxKSwgNTApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyDnq4vljbPmiafooYznrKzkuIDmrKHmuIXnkIZcbiAgICAgICAgICBjbGVhbnVwQXR0ZW1wdChyZXRyeUNvdW50KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyDlu7bov58xMDBtc+WQjuWGjeasoeajgOafpSzku6XlpITnkIblv6vpgJ/mk43kvZznmoTmg4XlhrVcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGNsZWFudXBBdHRlbXB0KHJldHJ5Q291bnQpLCAxMDApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIOa3u+WKoOaWreW8gOi/nuaOpeS6i+S7tuebkeWQrFxuICAgICAgICBpbnN0YW5jZS5iaW5kKCdjb25uZWN0aW9uRGV0YWNoZWQnLCAoaW5mbykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZUlkID0gaW5mby5zb3VyY2VJZDtcbiAgICAgICAgICBjb25zdCB0YXJnZXRJZCA9IGluZm8udGFyZ2V0SWQ7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8g56e76Zmk6L+e5o6l6Lev5b6EXG4gICAgICAgICAgcmVtb3ZlQ29ubmVjdGlvblBhdGgoc291cmNlSWQsIHRhcmdldElkKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyDmuIXnkIbmupDnq6/lj6Plkoznm67moIfnq6/lj6PnmoTnirbmgIFcbiAgICAgICAgICBjbGVhbnVwUG9ydFN0YXR1cyhzb3VyY2VJZCk7XG4gICAgICAgICAgY2xlYW51cFBvcnRTdGF0dXModGFyZ2V0SWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyDmt7vliqDov57mjqXnp7vliqjkuovku7bnm5HlkKxcbiAgICAgICAgaW5zdGFuY2UuYmluZCgnY29ubmVjdGlvbk1vdmVkJywgKGluZm8pID0+IHtcbiAgICAgICAgICAvLyDnp7vpmaTljp/lp4vov57mjqVcbiAgICAgICAgICByZW1vdmVDb25uZWN0aW9uUGF0aChpbmZvLm9yaWdpbmFsU291cmNlSWQsIGluZm8ub3JpZ2luYWxUYXJnZXRJZCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8g5riF55CG5Y6f5aeL5rqQ56uv5Y+j5ZKM55uu5qCH56uv5Y+j55qE54q25oCBXG4gICAgICAgICAgY2xlYW51cFBvcnRTdGF0dXMoaW5mby5vcmlnaW5hbFNvdXJjZUlkKTtcbiAgICAgICAgICBjbGVhbnVwUG9ydFN0YXR1cyhpbmZvLm9yaWdpbmFsVGFyZ2V0SWQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIOa3u+WKoOaWsOi/nuaOpVxuICAgICAgICAgIGFkZENvbm5lY3Rpb25QYXRoKHtcbiAgICAgICAgICAgIHNvdXJjZTogaW5mby5uZXdTb3VyY2VJZCxcbiAgICAgICAgICAgIHRhcmdldDogaW5mby5uZXdUYXJnZXRJZCxcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IGluZm8uY29ubmVjdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyDph43nu5jmiYDmnInov57mjqVcbiAgICAgICAgaW5zdGFuY2UucmVwYWludEV2ZXJ5dGhpbmcoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGpzUGx1bWI6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpbml0SnNQbHVtYigpO1xuXG4gICAgLy8g5riF55CG5Ye95pWwXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChqc1BsdW1iSW5zdGFuY2VSZWYuY3VycmVudCkge1xuICAgICAgICAvLyDmuIXnqbrov57mjqXot6/lvoRcbiAgICAgICAgY2xlYXJDb25uZWN0aW9uUGF0aHMoKTtcbiAgICAgICAganNQbHVtYkluc3RhbmNlUmVmLmN1cnJlbnQucmVzZXQoKTtcbiAgICAgICAganNQbHVtYkluc3RhbmNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtjb25uZWN0aW9uSXRlbXMsIG1haW5Vbml0TW9kdWxlcywgcmVtb3RlVW5pdE1vZHVsZXMsIG1haW5Vbml0QWRhcHRlciwgcmVtb3RlVW5pdEFkYXB0ZXIsIGFkZENvbm5lY3Rpb25QYXRoLCByZW1vdmVDb25uZWN0aW9uUGF0aCwgY2xlYXJDb25uZWN0aW9uUGF0aHMsIGZhdWx0U2NlbmFyaW9zLCBXb3JsZFNraWxsU2NlbmFyaW9zXSk7XG5cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei1bMTAwMF0gcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgLz5cbiAgKTtcbn0iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlRGV2aWNlU3RvcmUiLCJKc1BsdW1iSW5pdCIsImNvbnRhaW5lclJlZiIsImpzUGx1bWJJbnN0YW5jZVJlZiIsImNvbm5lY3Rpb25JdGVtcyIsIm1haW5Vbml0TW9kdWxlcyIsInJlbW90ZVVuaXRNb2R1bGVzIiwibWFpblVuaXRBZGFwdGVyIiwicmVtb3RlVW5pdEFkYXB0ZXIiLCJhZGRDb25uZWN0aW9uUGF0aCIsInJlbW92ZUNvbm5lY3Rpb25QYXRoIiwiY2xlYXJDb25uZWN0aW9uUGF0aHMiLCJmYXVsdFNjZW5hcmlvcyIsIldvcmxkU2tpbGxTY2VuYXJpb3MiLCJpbml0SnNQbHVtYiIsImpzUGx1bWIiLCJjdXJyZW50IiwiZ2V0SW5zdGFuY2UiLCJDb250YWluZXIiLCJDb25uZWN0b3IiLCJjdXJ2aW5lc3MiLCJFbmRwb2ludCIsInJhZGl1cyIsIlBhaW50U3R5bGUiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsIkVuZHBvaW50U3R5bGUiLCJmaWxsIiwiSG92ZXJQYWludFN0eWxlIiwiRW5kcG9pbnRIb3ZlclN0eWxlIiwiYmluZCIsImluZm8iLCJ0YXJnZXRFbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInRhcmdldElkIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwic291cmNlSWQiLCJzb3VyY2VFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInNvdXJjZVR5cGUiLCJ0YXJnZXRUeXBlIiwiaXNQZXJtYW5lbnRTb3VyY2UiLCJpbmNsdWRlcyIsImlzUGVybWFuZW50VGFyZ2V0Iiwic3RhcnRzV2l0aCIsImluc3RhbmNlIiwiZGVsZXRlRXZlcnlFbmRwb2ludCIsImNvbm5lY3RvckxlZnRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjb25uZWN0b3JSaWdodEVsZW1lbnRzIiwiY2FibGVDb3BwZXJMZWZ0RWxlbWVudHMiLCJjYWJsZUNvcHBlclJpZ2h0RWxlbWVudHMiLCJjYWJsZU0xMlhMZWZ0RWxlbWVudHMiLCJjYWJsZU0xMlhSaWdodEVsZW1lbnRzIiwiY2FibGVNMTJETGVmdEVsZW1lbnRzIiwiY2FibGVNMTJEUmlnaHRFbGVtZW50cyIsImNhYmxlRmliZXJMZWZ0RWxlbWVudHMiLCJjYWJsZUZpYmVyUmlnaHRFbGVtZW50cyIsIm1vZGVsUG9ydENvcHBlckVsZW1lbnRzIiwibW9kZWxQb3J0TTEyREVsZW1lbnRzIiwibW9kZWxQb3J0TTEyWEVsZW1lbnRzIiwibW9kZWxQb3J0RmliZXJFbGVtZW50cyIsInRlc3RDb3BwZXJQb3J0RWxlbWVudHMiLCJ0ZXN0TTEyRFBvcnRFbGVtZW50cyIsInRlc3RNMTJYUG9ydEVsZW1lbnRzIiwidGVzdENhbVBvcnRFbGVtZW50cyIsInRlc3RBcm1Qb3J0RWxlbWVudHMiLCJ0ZXN0RmliZXJQb3J0RWxlbWVudHMiLCJ0ZXN0VGVzdE1QT1BvcnRFbGVtZW50cyIsInRlc3RNUE9Qb3J0TGVmdEVsZW1lbnRzIiwidGVzdE1QT1BvcnRSaWdodEVsZW1lbnRzIiwidGVzdE1QT0JPWFBvcnRFbGVtZW50cyIsInRlc3RNUE9MQ0JPWFBvcnRFbGVtZW50cyIsImZvckVhY2giLCJlbGVtZW50IiwiaWQiLCJhZGRFbmRwb2ludCIsImFuY2hvciIsImlzU291cmNlIiwiaXNUYXJnZXQiLCJtYXhDb25uZWN0aW9ucyIsImNvbm5lY3RvclN0eWxlIiwiY29ubmVjdG9ySG92ZXJTdHlsZSIsInBhaW50U3R5bGUiLCJob3ZlclBhaW50U3R5bGUiLCJpc1Blcm1hbmVudCIsImdldEFsbENvbm5lY3Rpb25zIiwiY29ubiIsInNvdXJjZSIsInRhcmdldCIsImNvbm5lY3Rpb24iLCJjbGVhbnVwUG9ydFN0YXR1cyIsImVsZW1lbnRJZCIsInJldHJ5Q291bnQiLCJjbGVhbnVwQXR0ZW1wdCIsImF0dGVtcHRDb3VudCIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwic2V0VGltZW91dCIsIm9yaWdpbmFsU291cmNlSWQiLCJvcmlnaW5hbFRhcmdldElkIiwibmV3U291cmNlSWQiLCJuZXdUYXJnZXRJZCIsInJlcGFpbnRFdmVyeXRoaW5nIiwiZXJyb3IiLCJjb25zb2xlIiwicmVzZXQiLCJkaXYiLCJyZWYiLCJjbGFzc05hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/JsPlumbInit.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/ResultTable.js":
/*!***************************************!*\
!*** ./src/components/ResultTable.js ***!
\***************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__]);\n_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\n\nconst ResultTable = ()=>{\n const [records, setRecords] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([\n {\n id: 1,\n linkName: '',\n testResult: 'pass',\n faults: [\n {\n id: 1,\n type: '',\n location: '',\n reason: ''\n }\n ]\n }\n ]);\n // 添加新记录\n const addRecord = ()=>{\n const newRecord = {\n id: Date.now(),\n linkName: '',\n testResult: 'pass',\n faults: [\n {\n id: Date.now(),\n type: '',\n location: '',\n reason: ''\n }\n ]\n };\n setRecords([\n ...records,\n newRecord\n ]);\n };\n // 删除记录\n const deleteRecord = (recordId)=>{\n setRecords(records.filter((record)=>record.id !== recordId));\n };\n // 更新记录基本信息\n const updateRecord = (recordId, field, value)=>{\n setRecords(records.map((record)=>record.id === recordId ? {\n ...record,\n [field]: value\n } : record));\n };\n // 添加故障类型\n const addFault = (recordId)=>{\n setRecords(records.map((record)=>record.id === recordId ? {\n ...record,\n faults: [\n ...record.faults,\n {\n id: Date.now(),\n type: '',\n location: '',\n reason: ''\n }\n ]\n } : record));\n };\n // 删除故障类型\n const deleteFault = (recordId, faultId)=>{\n setRecords(records.map((record)=>record.id === recordId ? {\n ...record,\n faults: record.faults.filter((fault)=>fault.id !== faultId)\n } : record));\n };\n // 更新故障信息\n const updateFault = (recordId, faultId, field, value)=>{\n setRecords(records.map((record)=>record.id === recordId ? {\n ...record,\n faults: record.faults.map((fault)=>fault.id === faultId ? {\n ...fault,\n [field]: value\n } : fault)\n } : record));\n };\n // 提交表单\n const handleSubmit = ()=>{\n // 验证表单\n const isValid = records.every((record)=>{\n if (!record.linkName.trim()) return false;\n return record.faults.every((fault)=>{\n if (record.testResult === 'fail') {\n return fault.type.trim() && fault.location.trim() && fault.reason.trim();\n }\n return true;\n });\n });\n if (!isValid) {\n alert('请填写完整的记录');\n return;\n }\n // 直接使用当前的 records 更新 store\n _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState().updateReports(records);\n alert('记录提交成功!');\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#1E293B] rounded-lg p-6 text-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-bold text-[#0ff]\",\n children: \"故障检测分析表\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 121,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: addRecord,\n className: \"bg-[#0ff] text-black px-4 py-2 rounded hover:bg-[#0ff]/80 transition-colors\",\n children: \"添加记录\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 122,\n columnNumber: 9\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 120,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-6 max-h-[70vh] overflow-y-auto custom-scrollbar\",\n children: records.map((record, recordIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#0F172A] rounded-lg p-4 border border-[#0ff]/20\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold text-[#0ff]\",\n children: [\n \"记录 \",\n recordIndex + 1\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 134,\n columnNumber: 15\n }, undefined),\n records.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteRecord(record.id),\n className: \"text-red-400 hover:text-red-300 transition-colors\",\n children: \"删除记录\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 136,\n columnNumber: 17\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 133,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2\",\n children: \"链路名称 *\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 147,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: record.linkName,\n onChange: (e)=>updateRecord(record.id, 'linkName', e.target.value),\n className: \"w-full bg-[#1E293B] border border-[#0ff]/30 rounded px-3 py-2 text-white focus:border-[#0ff] focus:outline-none\",\n placeholder: \"请输入链路名称\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 148,\n columnNumber: 17\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 146,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-2\",\n children: \"检测结果 *\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 157,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n value: record.testResult,\n onChange: (e)=>updateRecord(record.id, 'testResult', e.target.value),\n className: \"w-full bg-[#1E293B] border border-[#0ff]/30 rounded px-3 py-2 text-white focus:border-[#0ff] focus:outline-none\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"pass\",\n children: \"通过\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 163,\n columnNumber: 19\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"fail\",\n children: \"失败\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 164,\n columnNumber: 19\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 158,\n columnNumber: 17\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 156,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 145,\n columnNumber: 13\n }, undefined),\n record.testResult === 'fail' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-t border-[#0ff]/20 pt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"text-md font-medium text-[#0ff]\",\n children: \"故障信息\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 172,\n columnNumber: 19\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>addFault(record.id),\n className: \"bg-[#0ff]/20 text-[#0ff] px-3 py-1 rounded text-sm hover:bg-[#0ff]/30 transition-colors\",\n children: \"添加故障\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 173,\n columnNumber: 19\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 171,\n columnNumber: 17\n }, undefined),\n record.faults.map((fault, faultIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#1E293B]/50 rounded p-3 mb-3 border border-[#0ff]/10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-300\",\n children: [\n \"故障 \",\n faultIndex + 1\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 184,\n columnNumber: 23\n }, undefined),\n record.faults.length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteFault(record.id, fault.id),\n className: \"text-red-400 hover:text-red-300 text-sm transition-colors\",\n children: \"删除\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 186,\n columnNumber: 25\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 183,\n columnNumber: 21\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-1\",\n children: \"故障类型 *\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 197,\n columnNumber: 25\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fault.type,\n onChange: (e)=>updateFault(record.id, fault.id, 'type', e.target.value),\n className: \"w-full bg-[#0F172A] border border-[#0ff]/20 rounded px-3 py-2 text-white text-sm focus:border-[#0ff] focus:outline-none\",\n placeholder: \"请输入故障类型\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 198,\n columnNumber: 25\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 196,\n columnNumber: 23\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-1\",\n children: \"故障位置 *\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 207,\n columnNumber: 25\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: fault.location,\n onChange: (e)=>updateFault(record.id, fault.id, 'location', e.target.value),\n className: \"w-full bg-[#0F172A] border border-[#0ff]/20 rounded px-3 py-2 text-white text-sm focus:border-[#0ff] focus:outline-none\",\n placeholder: \"请输入故障位置\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 208,\n columnNumber: 25\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 206,\n columnNumber: 23\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium mb-1\",\n children: \"故障原因 *\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 217,\n columnNumber: 25\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n value: fault.reason,\n onChange: (e)=>updateFault(record.id, fault.id, 'reason', e.target.value),\n className: \"w-full bg-[#0F172A] border border-[#0ff]/20 rounded px-3 py-2 text-white text-sm focus:border-[#0ff] focus:outline-none resize-none\",\n placeholder: \"请输入故障原因\",\n rows: 2\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 218,\n columnNumber: 25\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 216,\n columnNumber: 23\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 195,\n columnNumber: 21\n }, undefined)\n ]\n }, fault.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 182,\n columnNumber: 19\n }, undefined))\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 170,\n columnNumber: 15\n }, undefined)\n ]\n }, record.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 132,\n columnNumber: 11\n }, undefined))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 130,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleSubmit,\n className: \"bg-[#0ff] text-black px-8 py-3 rounded-lg font-semibold hover:bg-[#0ff]/80 transition-colors\",\n children: \"保存记录\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 236,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 235,\n columnNumber: 7\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/ResultTable.js\",\n lineNumber: 119,\n columnNumber: 5\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ResultTable);\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL1Jlc3VsdFRhYmxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBd0M7QUFDUztBQUVqRCxNQUFNRyxjQUFjO0lBQ2xCLE1BQU0sQ0FBQ0MsU0FBU0MsV0FBVyxHQUFHSiwrQ0FBUUEsQ0FBQztRQUNyQztZQUNFSyxJQUFJO1lBQ0pDLFVBQVU7WUFDVkMsWUFBWTtZQUNaQyxRQUFRO2dCQUFDO29CQUNQSCxJQUFJO29CQUNKSSxNQUFNO29CQUNOQyxVQUFVO29CQUNWQyxRQUFRO2dCQUNWO2FBQUU7UUFDSjtLQUNEO0lBRUQsUUFBUTtJQUNSLE1BQU1DLFlBQVk7UUFDaEIsTUFBTUMsWUFBWTtZQUNoQlIsSUFBSVMsS0FBS0MsR0FBRztZQUNaVCxVQUFVO1lBQ1ZDLFlBQVk7WUFDWkMsUUFBUTtnQkFBQztvQkFDUEgsSUFBSVMsS0FBS0MsR0FBRztvQkFDWk4sTUFBTTtvQkFDTkMsVUFBVTtvQkFDVkMsUUFBUTtnQkFDVjthQUFFO1FBQ0o7UUFDQVAsV0FBVztlQUFJRDtZQUFTVTtTQUFVO0lBQ3BDO0lBRUEsT0FBTztJQUNQLE1BQU1HLGVBQWUsQ0FBQ0M7UUFDcEJiLFdBQVdELFFBQVFlLE1BQU0sQ0FBQ0MsQ0FBQUEsU0FBVUEsT0FBT2QsRUFBRSxLQUFLWTtJQUNwRDtJQUVBLFdBQVc7SUFDWCxNQUFNRyxlQUFlLENBQUNILFVBQVVJLE9BQU9DO1FBQ3JDbEIsV0FBV0QsUUFBUW9CLEdBQUcsQ0FBQ0osQ0FBQUEsU0FDckJBLE9BQU9kLEVBQUUsS0FBS1ksV0FDVjtnQkFBRSxHQUFHRSxNQUFNO2dCQUFFLENBQUNFLE1BQU0sRUFBRUM7WUFBTSxJQUM1Qkg7SUFFUjtJQUVBLFNBQVM7SUFDVCxNQUFNSyxXQUFXLENBQUNQO1FBQ2hCYixXQUFXRCxRQUFRb0IsR0FBRyxDQUFDSixDQUFBQSxTQUNyQkEsT0FBT2QsRUFBRSxLQUFLWSxXQUNWO2dCQUNFLEdBQUdFLE1BQU07Z0JBQ1RYLFFB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QU0sQ0FBQzFCLEtBQUs7b0VBQ3hFZSxXQUFVO29FQUNWWSxhQUFZOzs7Ozs7Ozs7Ozs7c0VBR2hCLDhEQUFDYjs7OEVBQ0MsOERBQUNRO29FQUFNUCxXQUFVOzhFQUFpQzs7Ozs7OzhFQUNsRCw4REFBQ1E7b0VBQ0NwQyxNQUFLO29FQUNMYSxPQUFPSyxNQUFNakIsUUFBUTtvRUFDckJvQyxVQUFVLENBQUNDLElBQU1uQixZQUFZVCxPQUFPZCxFQUFFLEVBQUVzQixNQUFNdEIsRUFBRSxFQUFFLFlBQVkwQyxFQUFFQyxNQUFNLENBQUMxQixLQUFLO29FQUM1RWUsV0FBVTtvRUFDVlksYUFBWTs7Ozs7Ozs7Ozs7O3NFQUdoQiw4REFBQ2I7OzhFQUNDLDhEQUFDUTtvRUFBTVAsV0FBVTs4RUFBaUM7Ozs7Ozs4RUFDbEQsOERBQUNrQjtvRUFDQ2pDLE9BQU9LLE1BQU1oQixNQUFNO29FQUNuQm1DLFVBQVUsQ0FBQ0MsSUFBTW5CLFlBQVlULE9BQU9kLEVBQUUsRUFBRXNCLE1BQU10QixFQUFFLEVBQUUsVUFBVTBDLEVBQUVDLE1BQU0sQ0FBQzFCLEtBQUs7b0VBQzFFZSxXQUFVO29FQUNWWSxhQUFZO29FQUNaTyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJDQXpDSjdCLE1BQU10QixFQUFFOzs7Ozs7Ozs7Ozs7dUJBbERoQmMsT0FBT2QsRUFBRTs7Ozs7Ozs7OzswQkF1R3ZCLDhEQUFDK0I7Z0JBQUlDLFdBQVU7MEJBQ2IsNEVBQUNFO29CQUNDQyxTQUFTWDtvQkFDVFEsV0FBVTs4QkFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNVDtBQUVBLGlFQUFlbkMsV0FBV0EsRUFBQyIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9SZXN1bHRUYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEZXZpY2VTdG9yZSBmcm9tICdAL3N0b3JlL2RldmljZVN0b3JlJztcclxuXHJcbmNvbnN0IFJlc3VsdFRhYmxlID0gKCkgPT4ge1xyXG4gIGNvbnN0IFtyZWNvcmRzLCBzZXRSZWNvcmRzXSA9IHVzZVN0YXRlKFtcclxuICAgIHtcclxuICAgICAgaWQ6IDEsXHJcbiAgICAgIGxpbmtOYW1lOiAnJyxcclxuICAgICAgdGVzdFJlc3VsdDogJ3Bhc3MnLFxyXG4gICAgICBmYXVsdHM6IFt7XHJcbiAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgdHlwZTogJycsXHJcbiAgICAgICAgbG9jYXRpb246ICcnLFxyXG4gICAgICAgIHJlYXNvbjogJydcclxuICAgICAgfV1cclxuICAgIH1cclxuICBdKTtcclxuXHJcbiAgLy8g5re75Yqg5paw6K6w5b2VXHJcbiAgY29uc3QgYWRkUmVjb3JkID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbmV3UmVjb3JkID0ge1xyXG4gICAgICBpZDogRGF0ZS5ub3coKSxcclxuICAgICAgbGlua05hbWU6ICcnLFxyXG4gICAgICB0ZXN0UmVzdWx0OiAncGFzcycsXHJcbiAgICAgIGZhdWx0czogW3tcclxuICAgICAgICBpZDogRGF0ZS5ub3coKSxcclxuICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICBsb2NhdGlvbjogJycsXHJcbiAgICAgICAgcmVhc29uOiAnJ1xyXG4gICAgICB9XVxyXG4gICAgfTtcclxuICAgIHNldFJlY29yZHMoWy4uLnJlY29yZHMsIG5ld1JlY29yZF0pO1xyXG4gIH07XHJcblxyXG4gIC8vIOWIoOmZpOiusOW9lVxyXG4gIGNvbnN0IGRlbGV0ZVJlY29yZCA9IChyZWNvcmRJZCkgPT4ge1xyXG4gICAgc2V0UmVjb3JkcyhyZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkLmlkICE9PSByZWNvcmRJZCkpO1xyXG4gIH07XHJcblxyXG4gIC8vIOabtOaWsOiusOW9leWfuuacrOS/oeaBr1xyXG4gIGNvbnN0IHVwZGF0ZVJlY29yZCA9IChyZWNvcmRJZCwgZmllbGQsIHZhbHVlKSA9PiB7XHJcbiAgICBzZXRSZWNvcmRzKHJlY29yZHMubWFwKHJlY29yZCA9PiBcclxuICAgICAgcmVjb3JkLmlkID09PSByZWNvcmRJZCBcclxuICAgICAgICA/IHsgLi4ucmVjb3JkLCBbZmllbGRdOiB2YWx1ZSB9XHJcbiAgICAgICAgOiByZWNvcmRcclxuICAgICkpO1xyXG4gIH07XHJcblxyXG4gIC8vIOa3u+WKoOaVhemanOexu+Wei1xyXG4gIGNvbnN0IGFkZEZhdWx0ID0gKHJlY29yZElkKSA9PiB7XHJcbiAgICBzZXRSZWNvcmRzKHJlY29yZHMubWFwKHJlY29yZCA9PiBcclxuICAgICAgcmVjb3JkLmlkID09PSByZWNvcmRJZCBcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgLi4ucmVjb3JkLFxyXG4gICAgICAgICAgICBmYXVsdHM6IFsuLi5yZWNvcmQuZmF1bHRzLCB7XHJcbiAgICAgICAgICAgICAgaWQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgdHlwZTogJycsXHJcbiAgICAgICAgICAgICAgbG9jYXRpb246ICcnLFxyXG4gICAgICAgICAgICAgIHJlYXNvbjogJydcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHJlY29yZFxyXG4gICAgKSk7XHJcbiAgfTtcclxuXHJcbiAgLy8g5Yig6Zmk5pWF6Zqc57G75Z6LXHJcbiAgY29uc3QgZGVsZXRlRmF1bHQgPSAocmVjb3JkSWQsIGZhdWx0SWQpID0+IHtcclxuICAgIHNldFJlY29yZHMocmVjb3Jkcy5tYXAocmVjb3JkID0+IFxyXG4gICAgICByZWNvcmQuaWQgPT09IHJlY29yZElkIFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICAuLi5yZWNvcmQsXHJcbiAgICAgICAgICAgIGZhdWx0czogcmVjb3JkLmZhdWx0cy5maWx0ZXIoZmF1bHQgPT4gZmF1bHQuaWQgIT09IGZhdWx0SWQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiByZWNvcmRcclxuICAgICkpO1xyXG4gIH07XHJcblxyXG4gIC8vIOabtOaWsOaVhemanOS/oeaBr1xyXG4gIGNvbnN0IHVwZGF0ZUZhdWx0ID0gKHJlY29yZElkLCBmYXVsdElkLCBmaWVsZCwgdmFsdWUpID0+IHtcclxuICAgIHNldFJlY29yZHMocmVjb3Jkcy5tYXAocmVjb3JkID0+IFxyXG4gICAgICByZWNvcmQuaWQgPT09IHJlY29yZElkIFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICAuLi5yZWNvcmQsXHJcbiAgICAgICAgICAgIGZhdWx0czogcmVjb3JkLmZhdWx0cy5tYXAoZmF1bHQgPT4gXHJcbiAgICAgICAgICAgICAgZmF1bHQuaWQgPT09IGZhdWx0SWQgXHJcbiAgICAgICAgICAgICAgICA/IHsgLi4uZmF1bHQsIFtmaWVsZF06IHZhbHVlIH1cclxuICAgICAgICAgICAgICAgIDogZmF1bHRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogcmVjb3JkXHJcbiAgICApKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLy8g5o+Q5Lqk6KGo5Y2VXHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xyXG4gICAgLy8g6aqM6K+B6KGo5Y2VXHJcbiAgICBjb25zdCBpc1ZhbGlkID0gcmVjb3Jkcy5ldmVyeShyZWNvcmQgPT4ge1xyXG4gICAgICBpZiAoIXJlY29yZC5saW5rTmFtZS50cmltKCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIHJlY29yZC5mYXVsdHMuZXZlcnkoZmF1bHQgPT4ge1xyXG4gICAgICAgIGlmIChyZWNvcmQudGVzdFJlc3VsdCA9PT0gJ2ZhaWwnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmF1bHQudHlwZS50cmltKCkgJiYgZmF1bHQubG9jYXRpb24udHJpbSgpICYmIGZhdWx0LnJlYXNvbi50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICBhbGVydCgn6K+35aGr5YaZ5a6M5pW055qE6K6w5b2VJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm7TmjqXkvb/nlKjlvZPliY3nmoQgcmVjb3JkcyDmm7TmlrAgc3RvcmVcclxuICAgIHVzZURldmljZVN0b3JlLmdldFN0YXRlKCkudXBkYXRlUmVwb3J0cyhyZWNvcmRzKTsgXHJcbiAgICBhbGVydCgn6K6w5b2V5o+Q5Lqk5oiQ5Yqf77yBJyk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctWyMxRTI5M0JdIHJvdW5kZWQtbGcgcC02IHRleHQtd2hpdGVcIj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNlwiPlxyXG4gICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LVsjMGZmXVwiPuaVhemanOajgOa1i+WIhuaekOihqDwvaDI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgb25DbGljaz17YWRkUmVjb3JkfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwiYmctWyMwZmZdIHRleHQtYmxhY2sgcHgtNCBweS0yIHJvdW5kZWQgaG92ZXI6YmctWyMwZmZdLzgwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICDmt7vliqDorrDlvZVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNiBtYXgtaC1bNzB2aF0gb3ZlcmZsb3cteS1hdXRvIGN1c3RvbS1zY3JvbGxiYXJcIj5cclxuICAgICAgICB7cmVjb3Jkcy5tYXAoKHJlY29yZCwgcmVjb3JkSW5kZXgpID0+IChcclxuICAgICAgICAgIDxkaXYga2V5PXtyZWNvcmQuaWR9IGNsYXNzTmFtZT1cImJnLVsjMEYxNzJBXSByb3VuZGVkLWxnIHAtNCBib3JkZXIgYm9yZGVyLVsjMGZmXS8yMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00XCI+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LVsjMGZmXVwiPuiusOW9lSB7cmVjb3JkSW5kZXggKyAxfTwvaDM+XHJcbiAgICAgICAgICAgICAge3JlY29yZHMubGVuZ3RoID4gMSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRlbGV0ZVJlY29yZChyZWNvcmQuaWQpfVxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC00MDAgaG92ZXI6dGV4dC1yZWQtMzAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAg5Yig6Zmk6K6w5b2VXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTJcIj7pk77ot6/lkI3np7AgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17cmVjb3JkLmxpbmtOYW1lfVxyXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHVwZGF0ZVJlY29yZChyZWNvcmQuaWQsICdsaW5rTmFtZScsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLVsjMUUyOTNCXSBib3JkZXIgYm9yZGVyLVsjMGZmXS8zMCByb3VuZGVkIHB4LTMgcHktMiB0ZXh0LXdoaXRlIGZvY3VzOmJvcmRlci1bIzBmZl0gZm9jdXM6b3V0bGluZS1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXpk77ot6/lkI3np7BcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMlwiPuajgOa1i+e7k+aenCAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3JlY29yZC50ZXN0UmVzdWx0fVxyXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHVwZGF0ZVJlY29yZChyZWNvcmQuaWQsICd0ZXN0UmVzdWx0JywgZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctWyMxRTI5M0JdIGJvcmRlciBib3JkZXItWyMwZmZdLzMwIHJvdW5kZWQgcHgtMyBweS0yIHRleHQtd2hpdGUgZm9jdXM6Ym9yZGVyLVsjMGZmXSBmb2N1czpvdXRsaW5lLW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGFzc1wiPumAmui/hzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZmFpbFwiPuWksei0pTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAge3JlY29yZC50ZXN0UmVzdWx0ID09PSAnZmFpbCcgJiYgKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLXQgYm9yZGVyLVsjMGZmXS8yMCBwdC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJ0ZXh0LW1kIGZvbnQtbWVkaXVtIHRleHQtWyMwZmZdXCI+5pWF6Zqc5L+h5oGvPC9oND5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFkZEZhdWx0KHJlY29yZC5pZCl9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctWyMwZmZdLzIwIHRleHQtWyMwZmZdIHB4LTMgcHktMSByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctWyMwZmZdLzMwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOa3u+WKoOaVhemanFxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIHtyZWNvcmQuZmF1bHRzLm1hcCgoZmF1bHQsIGZhdWx0SW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2ZhdWx0LmlkfSBjbGFzc05hbWU9XCJiZy1bIzFFMjkzQl0vNTAgcm91bmRlZCBwLTMgbWItMyBib3JkZXIgYm9yZGVyLVsjMGZmXS8xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTMwMFwiPuaVhemanCB7ZmF1bHRJbmRleCArIDF9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3JlY29yZC5mYXVsdHMubGVuZ3RoID4gMSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBkZWxldGVGYXVsdChyZWNvcmQuaWQsIGZhdWx0LmlkKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC00MDAgaG92ZXI6dGV4dC1yZWQtMzAwIHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAg5Yig6ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj7mlYXpmpznsbvlnosgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZmF1bHQudHlwZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHVwZGF0ZUZhdWx0KHJlY29yZC5pZCwgZmF1bHQuaWQsICd0eXBlJywgZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1bIzBGMTcyQV0gYm9yZGVyIGJvcmRlci1bIzBmZl0vMjAgcm91bmRlZCBweC0zIHB5LTIgdGV4dC13aGl0ZSB0ZXh0LXNtIGZvY3VzOmJvcmRlci1bIzBmZl0gZm9jdXM6b3V0bGluZS1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeaVhemanOexu+Wei1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj7mlYXpmpzkvY3nva4gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZmF1bHQubG9jYXRpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB1cGRhdGVGYXVsdChyZWNvcmQuaWQsIGZhdWx0LmlkLCAnbG9jYXRpb24nLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLVsjMEYxNzJBXSBib3JkZXIgYm9yZGVyLVsjMGZmXS8yMCByb3VuZGVkIHB4LTMgcHktMiB0ZXh0LXdoaXRlIHRleHQtc20gZm9jdXM6Ym9yZGVyLVsjMGZmXSBmb2N1czpvdXRsaW5lLW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5pWF6Zqc5L2N572uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gbWItMVwiPuaVhemanOWOn+WboCAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2ZhdWx0LnJlYXNvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHVwZGF0ZUZhdWx0KHJlY29yZC5pZCwgZmF1bHQuaWQsICdyZWFzb24nLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLVsjMEYxNzJBXSBib3JkZXIgYm9yZGVyLVsjMGZmXS8yMCByb3VuZGVkIHB4LTMgcHktMiB0ZXh0LXdoaXRlIHRleHQtc20gZm9jdXM6Ym9yZGVyLVsjMGZmXSBmb2N1czpvdXRsaW5lLW5vbmUgcmVzaXplLW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5pWF6Zqc5Y6f5ZugXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPXsyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApKX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTYgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cclxuICAgICAgICAgIGNsYXNzTmFtZT1cImJnLVsjMGZmXSB0ZXh0LWJsYWNrIHB4LTggcHktMyByb3VuZGVkLWxnIGZvbnQtc2VtaWJvbGQgaG92ZXI6YmctWyMwZmZdLzgwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICA+XHJcbiAgICAgICAg5L+d5a2Y6K6w5b2VXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlc3VsdFRhYmxlOyJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRGV2aWNlU3RvcmUiLCJSZXN1bHRUYWJsZSIsInJlY29yZHMiLCJzZXRSZWNvcmRzIiwiaWQiLCJsaW5rTmFtZSIsInRlc3RSZXN1bHQiLCJmYXVsdHMiLCJ0eXBlIiwibG9jYXRpb24iLCJyZWFzb24iLCJhZGRSZWNvcmQiLCJuZXdSZWNvcmQiLCJEYXRlIiwibm93IiwiZGVsZXRlUmVjb3JkIiwicmVjb3JkSWQiLCJmaWx0ZXIiLCJyZWNvcmQiLCJ1cGRhdGVSZWNvcmQiLCJmaWVsZCIsInZhbHVlIiwibWFwIiwiYWRkRmF1bHQiLCJkZWxldGVGYXVsdCIsImZhdWx0SWQiLCJmYXVsdCIsInVwZGF0ZUZhdWx0IiwiaGFuZGxlU3VibWl0IiwiaXNWYWxpZCIsImV2ZXJ5IiwidHJpbSIsImFsZXJ0IiwiZ2V0U3RhdGUiLCJ1cGRhdGVSZXBvcnRzIiwiZGl2IiwiY2xhc3NOYW1lIiwiaDIiLCJidXR0b24iLCJvbkNsaWNrIiwicmVjb3JkSW5kZXgiLCJoMyIsImxlbmd0aCIsImxhYmVsIiwiaW5wdXQiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJwbGFjZWhvbGRlciIsInNlbGVjdCIsIm9wdGlvbiIsImg0IiwiZmF1bHRJbmRleCIsInNwYW4iLCJ0ZXh0YXJlYSIsInJvd3MiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/ResultTable.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/SourceCheck.js":
/*!***************************************!*\
!*** ./src/components/SourceCheck.js ***!
\***************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ SourceCheck)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__, _store_displayStore__WEBPACK_IMPORTED_MODULE_2__]);\n([_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__, _store_displayStore__WEBPACK_IMPORTED_MODULE_2__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\nfunction SourceCheck() {\n const { updataRef, getCurrentTestConfig } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const { mainUnitModules, remoteUnitModules, connectionStatus } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)({\n \"SourceCheck.useEffect\": ()=>{\n const mainModule = mainUnitModules[0]?.id;\n if (!mainModule) return;\n const currentConfig = getCurrentTestConfig();\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n let moduleType, mainSelector, remoteSelector;\n // 根据主机模块类型决定检测逻辑\n if (mainModule === 'cfp') {\n const remoteCFP = remoteUnitModules[0]?.id;\n if (!remoteCFP || remoteCFP !== 'cfp') return;\n moduleType = 'cfp';\n mainSelector = `#main-cfp-${isMultiMode ? 'mm' : 'sm'}-out`;\n remoteSelector = `#remote-cfp-${isMultiMode ? 'mm' : 'sm'}-out`;\n } else if (mainModule === 'ofp') {\n moduleType = 'ofp';\n mainSelector = `#main-ofp-${isMultiMode ? 'mm' : 'sm'}-out`;\n remoteSelector = null; // OFP 模式不需要检查远端\n } else {\n return; // 其他模块类型不需要检测\n }\n // 检查元素是否存在\n const checkElements = {\n \"SourceCheck.useEffect.checkElements\": ()=>{\n const mainElement = document.querySelector(mainSelector);\n const remoteElement = remoteSelector ? document.querySelector(remoteSelector) : null;\n return {\n mainElement,\n remoteElement\n };\n }\n }[\"SourceCheck.useEffect.checkElements\"];\n const observer = new MutationObserver({\n \"SourceCheck.useEffect\": (mutations)=>{\n mutations.forEach({\n \"SourceCheck.useEffect\": (mutation)=>{\n if (mutation.type === 'attributes' && mutation.attributeName === 'fibersource') {\n const oldValue = mutation.oldValue;\n const newValue = mutation.target.getAttribute('fibersource');\n // 只在 fibersource 从 true 变为其他状态时触发\n if (oldValue === 'true' && newValue !== 'true') {\n updataRef(moduleType, {\n connectStatus: false\n });\n }\n }\n }\n }[\"SourceCheck.useEffect\"]);\n }\n }[\"SourceCheck.useEffect\"]);\n // 配置观察选项\n const config = {\n attributes: true,\n attributeFilter: [\n 'fibersource'\n ],\n attributeOldValue: true // 记录属性的旧值\n };\n // 开始观察元素\n const startObserving = {\n \"SourceCheck.useEffect.startObserving\": ()=>{\n const { mainElement, remoteElement } = checkElements();\n if (mainElement && (moduleType === 'ofp' || remoteElement)) {\n observer.observe(mainElement, config);\n if (moduleType === 'cfp' && remoteElement) {\n observer.observe(remoteElement, config);\n }\n // 立即检查初始连接状态\n const isMainConnected = mainElement.getAttribute('fibersource') === 'true';\n const isRemoteConnected = moduleType === 'cfp' ? remoteElement.getAttribute('fibersource') === 'true' : true;\n if (!isMainConnected || !isRemoteConnected) {\n updataRef(moduleType, {\n connectStatus: false\n });\n }\n } else {\n setTimeout(startObserving, 1000);\n }\n }\n }[\"SourceCheck.useEffect.startObserving\"];\n // 根据对应模块的状态决定是否开始观察\n const { ref } = _store_displayStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState();\n if (moduleType === 'cfp' && ref?.cfp?.status || moduleType === 'ofp' && ref?.ofp?.status) {\n startObserving();\n }\n // 清理函数\n return ({\n \"SourceCheck.useEffect\": ()=>{\n observer.disconnect();\n }\n })[\"SourceCheck.useEffect\"];\n }\n }[\"SourceCheck.useEffect\"], [\n mainUnitModules,\n remoteUnitModules,\n updataRef,\n getCurrentTestConfig,\n connectionStatus\n ]);\n return null;\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL1NvdXJjZUNoZWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQW9EO0FBQ0g7QUFDRTtBQUVwQyxTQUFTSztJQUN0QixNQUFNLEVBQUVDLFNBQVMsRUFBRUMsb0JBQW9CLEVBQUUsR0FBR0gsK0RBQWVBO0lBQzNELE1BQU0sRUFBRUksZUFBZSxFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLEVBQUUsR0FBR1AsOERBQWNBO0lBRS9FRixnREFBU0E7aUNBQUM7WUFDUixNQUFNVSxhQUFhSCxlQUFlLENBQUMsRUFBRSxFQUFFSTtZQUN2QyxJQUFJLENBQUNELFlBQVk7WUFFakIsTUFBTUUsZ0JBQWdCTjtZQUN0QixNQUFNTyxZQUFZRCxjQUFjRSxNQUFNLENBQUNELFNBQVM7WUFDaEQsTUFBTUUsY0FBY0YsVUFBVUcsUUFBUSxDQUFDO1lBRXZDLElBQUlDLFlBQVlDLGNBQWNDO1lBRTlCLGlCQUFpQjtZQUNqQixJQUFJVCxlQUFlLE9BQU87Z0JBQ3hCLE1BQU1VLFlBQVlaLGlCQUFpQixDQUFDLEVBQUUsRUFBRUc7Z0JBQ3hDLElBQUksQ0FBQ1MsYUFBYUEsY0FBYyxPQUFPO2dCQUV2Q0gsYUFBYTtnQkFDYkMsZUFBZSxDQUFDLFVBQVUsRUFBRUgsY0FBYyxPQUFPLEtBQUssSUFBSSxDQUFDO2dCQUMzREksaUJBQWlCLENBQUMsWUFBWSxFQUFFSixjQUFjLE9BQU8sS0FBSyxJQUFJLENBQUM7WUFDakUsT0FBTyxJQUFJTCxlQUFlLE9BQU87Z0JBQy9CTyxhQUFhO2dCQUNiQyxlQUFlLENBQUMsVUFBVSxFQUFFSCxjQUFjLE9BQU8sS0FBSyxJQUFJLENBQUM7Z0JBQzNESSxpQkFBaUIsTUFBTSxnQkFBZ0I7WUFDekMsT0FBTztnQkFDTCxRQUFRLGNBQWM7WUFDeEI7WUFFQSxXQUFXO1lBQ1gsTUFBTUU7dURBQWdCO29CQUNwQixNQUFNQyxjQUFjQyxTQUFTQyxhQUFhLENBQUNOO29CQUMzQyxNQUFNTyxnQkFBZ0JOLGlCQUFpQkksU0FBU0MsYUFBYSxDQUFDTCxrQkFBa0I7b0JBQ2hGLE9BQU87d0JBQUVHO3dCQUFhRztvQkFBYztnQkFDdEM7O1lBRUEsTUFBTUMsV0FBVyxJQUFJQzt5Q0FBaUIsQ0FBQ0M7b0JBQ3JDQSxVQUFVQyxPQUFPO2lEQUFDLENBQUNDOzRCQUNqQixJQUFJQSxTQUFTQyxJQUFJLEtBQUssZ0JBQWdCRCxTQUFTRSxhQUFhLEtBQUssZUFBZTtnQ0FDOUUsTUFBTUMsV0FBV0gsU0FBU0csUUFBUTtnQ0FDbEMsTUFBTUMsV0FBV0osU0FBU0ssTUFBTSxDQUFDQyxZQUFZLENBQUM7Z0NBRTlDLGtDQUFrQztnQ0FDbEMsSUFBSUgsYUFBYSxVQUFVQyxhQUFhLFFBQVE7b0NBQzlDN0IsVUFBVVksWUFBWTt3Q0FBRW9CLGVBQWU7b0NBQU07Z0NBQy9DOzRCQUNGO3dCQUNGOztnQkFDRjs7WUFFQSxTQUFTO1lBQ1QsTUFBTUMsU0FBUztnQkFDYkMsWUFBWTtnQkFDWkMsaUJBQWlCO29CQUFDO2lCQUFjO2dCQUNoQ0MsbUJBQW1CLEtBQU0sVUFBVTtZQUNyQztZQUVBLFNBQVM7WUFDVCxNQUFNQzt3REFBaUI7b0JBQ3JCLE1BQU0sRUFBRXBCLFdBQVcsRUFBRUcsYUFBYSxFQUFFLEdBQUdKO29CQUV2QyxJQUFJQyxlQUFnQkwsQ0FBQUEsZUFBZSxTQUFTUSxhQUFZLEdBQUk7d0JBQzFEQyxTQUFTaUIsT0FBTyxDQUFDckIsYUFBYWdCO3dCQUM5QixJQUFJckIsZUFBZSxTQUFTUSxlQUFlOzRCQUN6Q0MsU0FBU2lCLE9BQU8sQ0FBQ2xCLGVBQWVhO3dCQUNsQzt3QkFFQSxhQUFhO3dCQUNiLE1BQU1NLGtCQUFrQnRCLFlBQVljLFlBQVksQ0FBQyxtQkFBbUI7d0JBQ3BFLE1BQU1TLG9CQUFvQjVCLGVBQWUsUUFDdkNRLGNBQWNXLFlBQVksQ0FBQyxtQkFBbUIsU0FDOUM7d0JBRUYsSUFBSSxDQUFDUSxtQkFBbUIsQ0FBQ0MsbUJBQW1COzRCQUMxQ3hDLFVBQVVZLFlBQVk7Z0NBQUVvQixlQUFlOzRCQUFNO3dCQUMvQztvQkFDRixPQUFPO3dCQUNMUyxXQUFXSixnQkFBZ0I7b0JBQzdCO2dCQUNGOztZQUVBLG9CQUFvQjtZQUNwQixNQUFNLEVBQUVLLEdBQUcsRUFBRSxHQUFHNUMsb0VBQXdCO1lBQ3hDLElBQUksZUFBZ0IsU0FBUzRDLEtBQUtFLEtBQUtDLFVBQ2xDakMsZUFBZSxTQUFTOEIsS0FBS0ksS0FBS0QsUUFBUztnQkFDOUNSO1lBQ0Y7WUFFQSxPQUFPO1lBQ1A7eUNBQU87b0JBQ0xoQixTQUFTMEIsVUFBVTtnQkFDckI7O1FBQ0Y7Z0NBQUc7UUFBQzdDO1FBQWlCQztRQUFtQkg7UUFBV0M7UUFBc0JHO0tBQWlCO0lBRTFGLE9BQU87QUFDVCIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9Tb3VyY2VDaGVjay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEZXZpY2VTdG9yZSBmcm9tICdAL3N0b3JlL2RldmljZVN0b3JlJztcclxuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTb3VyY2VDaGVjaygpIHtcclxuICBjb25zdCB7IHVwZGF0YVJlZiwgZ2V0Q3VycmVudFRlc3RDb25maWcgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG4gIGNvbnN0IHsgbWFpblVuaXRNb2R1bGVzLCByZW1vdGVVbml0TW9kdWxlcywgY29ubmVjdGlvblN0YXR1cyB9ID0gdXNlRGV2aWNlU3RvcmUoKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IG1haW5Nb2R1bGUgPSBtYWluVW5pdE1vZHVsZXNbMF0/LmlkO1xyXG4gICAgaWYgKCFtYWluTW9kdWxlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IGdldEN1cnJlbnRUZXN0Q29uZmlnKCk7XHJcbiAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGU7XHJcbiAgICBjb25zdCBpc011bHRpTW9kZSA9IGNhYmxlVHlwZS5pbmNsdWRlcygnT00nKTtcclxuICAgIFxyXG4gICAgbGV0IG1vZHVsZVR5cGUsIG1haW5TZWxlY3RvciwgcmVtb3RlU2VsZWN0b3I7XHJcblxyXG4gICAgLy8g5qC55o2u5Li75py65qih5Z2X57G75Z6L5Yaz5a6a5qOA5rWL6YC76L6RXHJcbiAgICBpZiAobWFpbk1vZHVsZSA9PT0gJ2NmcCcpIHtcclxuICAgICAgY29uc3QgcmVtb3RlQ0ZQID0gcmVtb3RlVW5pdE1vZHVsZXNbMF0/LmlkO1xyXG4gICAgICBpZiAoIXJlbW90ZUNGUCB8fCByZW1vdGVDRlAgIT09ICdjZnAnKSByZXR1cm47XHJcblxyXG4gICAgICBtb2R1bGVUeXBlID0gJ2NmcCc7XHJcbiAgICAgIG1haW5TZWxlY3RvciA9IGAjbWFpbi1jZnAtJHtpc011bHRpTW9kZSA/ICdtbScgOiAnc20nfS1vdXRgO1xyXG4gICAgICByZW1vdGVTZWxlY3RvciA9IGAjcmVtb3RlLWNmcC0ke2lzTXVsdGlNb2RlID8gJ21tJyA6ICdzbSd9LW91dGA7XHJcbiAgICB9IGVsc2UgaWYgKG1haW5Nb2R1bGUgPT09ICdvZnAnKSB7XHJcbiAgICAgIG1vZHVsZVR5cGUgPSAnb2ZwJztcclxuICAgICAgbWFpblNlbGVjdG9yID0gYCNtYWluLW9mcC0ke2lzTXVsdGlNb2RlID8gJ21tJyA6ICdzbSd9LW91dGA7XHJcbiAgICAgIHJlbW90ZVNlbGVjdG9yID0gbnVsbDsgLy8gT0ZQIOaooeW8j+S4jemcgOimgeajgOafpei/nOerr1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuOyAvLyDlhbbku5bmqKHlnZfnsbvlnovkuI3pnIDopoHmo4DmtYtcclxuICAgIH1cclxuXHJcbiAgICAvLyDmo4Dmn6XlhYPntKDmmK/lkKblrZjlnKhcclxuICAgIGNvbnN0IGNoZWNrRWxlbWVudHMgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1haW5FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihtYWluU2VsZWN0b3IpO1xyXG4gICAgICBjb25zdCByZW1vdGVFbGVtZW50ID0gcmVtb3RlU2VsZWN0b3IgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHJlbW90ZVNlbGVjdG9yKSA6IG51bGw7XHJcbiAgICAgIHJldHVybiB7IG1haW5FbGVtZW50LCByZW1vdGVFbGVtZW50IH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdmaWJlcnNvdXJjZScpIHtcclxuICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gbXV0YXRpb24ub2xkVmFsdWU7XHJcbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG11dGF0aW9uLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2ZpYmVyc291cmNlJyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOWPquWcqCBmaWJlcnNvdXJjZSDku44gdHJ1ZSDlj5jkuLrlhbbku5bnirbmgIHml7bop6blj5FcclxuICAgICAgICAgIGlmIChvbGRWYWx1ZSA9PT0gJ3RydWUnICYmIG5ld1ZhbHVlICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgdXBkYXRhUmVmKG1vZHVsZVR5cGUsIHsgY29ubmVjdFN0YXR1czogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOmFjee9ruinguWvn+mAiemhuVxyXG4gICAgY29uc3QgY29uZmlnID0geyBcclxuICAgICAgYXR0cmlidXRlczogdHJ1ZSwgXHJcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydmaWJlcnNvdXJjZSddLFxyXG4gICAgICBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSAgLy8g6K6w5b2V5bGe5oCn55qE5pen5YC8XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOW8gOWni+inguWvn+WFg+e0oFxyXG4gICAgY29uc3Qgc3RhcnRPYnNlcnZpbmcgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgbWFpbkVsZW1lbnQsIHJlbW90ZUVsZW1lbnQgfSA9IGNoZWNrRWxlbWVudHMoKTtcclxuXHJcbiAgICAgIGlmIChtYWluRWxlbWVudCAmJiAobW9kdWxlVHlwZSA9PT0gJ29mcCcgfHwgcmVtb3RlRWxlbWVudCkpIHtcclxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG1haW5FbGVtZW50LCBjb25maWcpO1xyXG4gICAgICAgIGlmIChtb2R1bGVUeXBlID09PSAnY2ZwJyAmJiByZW1vdGVFbGVtZW50KSB7XHJcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHJlbW90ZUVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDnq4vljbPmo4Dmn6XliJ3lp4vov57mjqXnirbmgIFcclxuICAgICAgICBjb25zdCBpc01haW5Db25uZWN0ZWQgPSBtYWluRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2ZpYmVyc291cmNlJykgPT09ICd0cnVlJztcclxuICAgICAgICBjb25zdCBpc1JlbW90ZUNvbm5lY3RlZCA9IG1vZHVsZVR5cGUgPT09ICdjZnAnID8gXHJcbiAgICAgICAgICByZW1vdGVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZmliZXJzb3VyY2UnKSA9PT0gJ3RydWUnIDogXHJcbiAgICAgICAgICB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoIWlzTWFpbkNvbm5lY3RlZCB8fCAhaXNSZW1vdGVDb25uZWN0ZWQpIHtcclxuICAgICAgICAgIHVwZGF0YVJlZihtb2R1bGVUeXBlLCB7IGNvbm5lY3RTdGF0dXM6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXRUaW1lb3V0KHN0YXJ0T2JzZXJ2aW5nLCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyDmoLnmja7lr7nlupTmqKHlnZfnmoTnirbmgIHlhrPlrprmmK/lkKblvIDlp4vop4Llr59cclxuICAgIGNvbnN0IHsgcmVmIH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKTtcclxuICAgIGlmICgobW9kdWxlVHlwZSA9PT0gJ2NmcCcgJiYgcmVmPy5jZnA/LnN0YXR1cykgfHwgXHJcbiAgICAgICAgKG1vZHVsZVR5cGUgPT09ICdvZnAnICYmIHJlZj8ub2ZwPy5zdGF0dXMpKSB7XHJcbiAgICAgIHN0YXJ0T2JzZXJ2aW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5riF55CG5Ye95pWwXHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9O1xyXG4gIH0sIFttYWluVW5pdE1vZHVsZXMsIHJlbW90ZVVuaXRNb2R1bGVzLCB1cGRhdGFSZWYsIGdldEN1cnJlbnRUZXN0Q29uZmlnLCBjb25uZWN0aW9uU3RhdHVzXSk7XHJcblxyXG4gIHJldHVybiBudWxsO1xyXG59Il0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlRGV2aWNlU3RvcmUiLCJ1c2VEaXNwbGF5U3RvcmUiLCJTb3VyY2VDaGVjayIsInVwZGF0YVJlZiIsImdldEN1cnJlbnRUZXN0Q29uZmlnIiwibWFpblVuaXRNb2R1bGVzIiwicmVtb3RlVW5pdE1vZHVsZXMiLCJjb25uZWN0aW9uU3RhdHVzIiwibWFpbk1vZHVsZSIsImlkIiwiY3VycmVudENvbmZpZyIsImNhYmxlVHlwZSIsInBhcmFtcyIsImlzTXVsdGlNb2RlIiwiaW5jbHVkZXMiLCJtb2R1bGVUeXBlIiwibWFpblNlbGVjdG9yIiwicmVtb3RlU2VsZWN0b3IiLCJyZW1vdGVDRlAiLCJjaGVja0VsZW1lbnRzIiwibWFpbkVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJyZW1vdGVFbGVtZW50Iiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiZm9yRWFjaCIsIm11dGF0aW9uIiwidHlwZSIsImF0dHJpYnV0ZU5hbWUiLCJvbGRWYWx1ZSIsIm5ld1ZhbHVlIiwidGFyZ2V0IiwiZ2V0QXR0cmlidXRlIiwiY29ubmVjdFN0YXR1cyIsImNvbmZpZyIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJhdHRyaWJ1dGVPbGRWYWx1ZSIsInN0YXJ0T2JzZXJ2aW5nIiwib2JzZXJ2ZSIsImlzTWFpbkNvbm5lY3RlZCIsImlzUmVtb3RlQ29ubmVjdGVkIiwic2V0VGltZW91dCIsInJlZiIsImdldFN0YXRlIiwiY2ZwIiwic3RhdHVzIiwib2ZwIiwiZGlzY29ubmVjdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/SourceCheck.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/CableId.js":
/*!*************************************************!*\
!*** ./src/components/dsxpage/fluke/CableId.js ***!
\*************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CableId)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\nfunction CableId() {\n const [showKeyboard, setShowKeyboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [inputValue2, setInputValue2] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [activeInput, setActiveInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1); // 1 表示第一个输入框,2 表示第二个输入框\n const { getCurrentProject, getCurrentCableId, getCurrentCableId2, updateProject, goBack } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const currentProject = getCurrentProject();\n // 获取当前选中的电缆ID\n const currentCableId = getCurrentCableId().name;\n // 获取当前选中的电缆ID2\n const currentCableId2 = getCurrentCableId2().name;\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.current;\n // 只在cfp视图下初始化第二个输入框\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CableId.useEffect\": ()=>{\n setInputValue(currentCableId);\n if (view === 'cfp') {\n setInputValue2(currentCableId2);\n }\n }\n }[\"CableId.useEffect\"], [\n currentCableId,\n currentCableId2,\n view\n ]);\n // 计算下一个序号的ID\n const getNextId = (currentId)=>{\n if (!currentId) return '';\n // 检查是否以数字结尾\n const numMatch = currentId.match(/^(.*?)(\\d+)$/);\n if (numMatch) {\n const [, prefix, num] = numMatch;\n const nextNum = String(Number(num) + 1).padStart(num.length, '0');\n return prefix + nextNum;\n }\n // 检查是否以字母结尾\n const letterMatch = currentId.match(/^(.*?)([a-zA-Z]+)$/);\n if (letterMatch) {\n const [, prefix, letters] = letterMatch;\n // 将字母转换为数组以便处理\n const letterArray = letters.split('');\n let carry = true;\n // 从右向左处理每个字母\n for(let i = letterArray.length - 1; i >= 0 && carry; i--){\n if (letterArray[i] === 'z') {\n letterArray[i] = 'a';\n carry = true;\n } else if (letterArray[i] === 'Z') {\n letterArray[i] = 'A';\n carry = true;\n } else {\n letterArray[i] = String.fromCharCode(letterArray[i].charCodeAt(0) + 1);\n carry = false;\n }\n }\n // 如果还有进位,说明需要在前面添加一个字母\n if (carry) {\n if (letters[0] >= 'a' && letters[0] <= 'z') {\n letterArray.unshift('a');\n } else {\n letterArray.unshift('A');\n }\n }\n return prefix + letterArray.join('');\n }\n // 如果既不是数字也不是字母结尾,直接返回原值\n return currentId;\n };\n // 只在cfp视图下自动更新第二个输入框\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CableId.useEffect\": ()=>{\n if (view === 'cfp' && inputValue) {\n setInputValue2(getNextId(inputValue));\n }\n }\n }[\"CableId.useEffect\"], [\n inputValue,\n view\n ]);\n const handleComplete = ()=>{\n if (view === 'main' && !inputValue.trim()) return;\n if (view === 'cfp' && (!inputValue.trim() || !inputValue2.trim())) return;\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.projectIndex;\n const currentCableIds = currentProject?.cableIds || [];\n let cableIds;\n if (view === 'main') {\n // 在main视图下,只更新选中的ID,保留其他ID\n const selectedId = getCurrentCableId().id;\n cableIds = currentCableIds.map((cable)=>cable.id === selectedId ? {\n ...cable,\n name: inputValue.trim()\n } : cable);\n } else {\n cableIds = [\n {\n id: '1',\n name: inputValue.trim()\n },\n {\n id: '2',\n name: inputValue2.trim()\n }\n ];\n }\n updateProject(currentIndex, {\n cableIds\n });\n goBack();\n };\n const renderContent = ()=>{\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mb-4 cursor-pointer\",\n onClick: ()=>setShowKeyboard(true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入线缆ID\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n // 保存光标位置\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 131,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 127,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 152,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 126,\n columnNumber: 21\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输出光纤ID1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 171,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue,\n placeholder: \"请输入线缆ID1\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(1);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 173,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 172,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 170,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输入光纤ID2\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 195,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue2,\n placeholder: \"请输入线缆ID2\",\n onChange: (e)=>{\n setInputValue2(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(2);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 197,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 196,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 194,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: activeInput === 1 ? inputValue : inputValue2,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n if (activeInput === 1) {\n setInputValue(newValue);\n } else {\n setInputValue2(newValue);\n }\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 219,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 169,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \"更改ID\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 246,\n columnNumber: 13\n }, this),\n renderContent(),\n view === 'main' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\",\n children: !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleComplete,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"完成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 254,\n columnNumber: 40\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 253,\n columnNumber: 17\n }, this),\n view === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\",\n children: !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleComplete,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"完成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 264,\n columnNumber: 40\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 263,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CableId.js\",\n lineNumber: 244,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvQ2FibGVJZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0E7QUFDRjtBQUNBO0FBQ0U7QUFFcEMsU0FBU087SUFDcEIsTUFBTSxDQUFDQyxjQUFjQyxnQkFBZ0IsR0FBR1IsK0NBQVFBLENBQUM7SUFDakQsTUFBTSxDQUFDUyxnQkFBZ0JDLGtCQUFrQixHQUFHViwrQ0FBUUEsQ0FBQztJQUNyRCxNQUFNLENBQUNXLFlBQVlDLGNBQWMsR0FBR1osK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDYSxhQUFhQyxlQUFlLEdBQUdkLCtDQUFRQSxDQUFDO0lBQy9DLE1BQU0sQ0FBQ2UsYUFBYUMsZUFBZSxHQUFHaEIsK0NBQVFBLENBQUMsSUFBSSx3QkFBd0I7SUFDM0UsTUFBTSxFQUNGaUIsaUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsYUFBYSxFQUNiQyxNQUFNLEVBQ1QsR0FBR2hCLCtEQUFlQTtJQUVuQixNQUFNaUIsaUJBQWlCTDtJQUN2QixjQUFjO0lBQ2QsTUFBTU0saUJBQWlCTCxvQkFBb0JNLElBQUk7SUFDL0MsZUFBZTtJQUNmLE1BQU1DLGtCQUFrQk4scUJBQXFCSyxJQUFJO0lBRWpELE1BQU0sRUFBRUUsSUFBSSxFQUFFLEdBQUdyQixvRUFBd0IsR0FBR3VCLFVBQVUsQ0FBQ0MsT0FBTztJQUkvRCxvQkFBb0I7SUFDbkI1QixnREFBU0E7NkJBQUM7WUFDTlcsY0FBY1c7WUFDZCxJQUFJRyxTQUFTLE9BQU87Z0JBQ2hCWixlQUFlVztZQUNuQjtRQUNKOzRCQUFHO1FBQUNGO1FBQWdCRTtRQUFpQkM7S0FBSztJQUUxQyxhQUFhO0lBQ2IsTUFBTUksWUFBWSxDQUFDQztRQUNmLElBQUksQ0FBQ0EsV0FBVyxPQUFPO1FBRXZCLFlBQVk7UUFDWixNQUFNQyxXQUFXRCxVQUFVRSxLQUFLLENBQUM7UUFDakMsSUFBSUQs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MEJBQ1YsOERBQUNDLGdFQUFRQTtnQkFDTDRFLE9BQU07Z0JBQ05DLFFBQVEzRSxvRUFBd0IsR0FBR3VCLFVBQVUsQ0FBQ3FELFFBQVEsRUFBRXpELFFBQVE7Z0JBQ2hFRSxNQUFNckIsb0VBQXdCLEdBQUd1QixVQUFVLENBQUNxRCxRQUFRLEVBQUV2RCxRQUFROzs7Ozs7WUFFakVvQztZQUNBcEMsU0FBUyx3QkFDTiw4REFBQ3FDO2dCQUFJQyxXQUFVOzBCQUNWLENBQUN6RCw4QkFBaUIsOERBQUMyRTtvQkFDaEJqQixTQUFTZDtvQkFDVGEsV0FBVTs4QkFDYjs7Ozs7Ozs7Ozs7WUFLUnRDLFNBQVMsdUJBQ04sOERBQUNxQztnQkFBSUMsV0FBVTswQkFDVixDQUFDekQsOEJBQWlCLDhEQUFDMkU7b0JBQ2hCakIsU0FBU2Q7b0JBQ1RhLFdBQVU7OEJBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3JCIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvQ2FibGVJZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1N0YXR1c0Jhcic7XHJcbmltcG9ydCBUaXRsZUJhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1RpdGxlQmFyJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvS2V5Ym9hcmQnO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENhYmxlSWQoKSB7XHJcbiAgICBjb25zdCBbc2hvd0tleWJvYXJkLCBzZXRTaG93S2V5Ym9hcmRdID0gdXNlU3RhdGUodHJ1ZSk7XHJcbiAgICBjb25zdCBbY3Vyc29yUG9zaXRpb24sIHNldEN1cnNvclBvc2l0aW9uXSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW2lucHV0VmFsdWUyLCBzZXRJbnB1dFZhbHVlMl0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbYWN0aXZlSW5wdXQsIHNldEFjdGl2ZUlucHV0XSA9IHVzZVN0YXRlKDEpOyAvLyAxIOihqOekuuesrOS4gOS4qui+k+WFpeahhu+8jDIg6KGo56S656ys5LqM5Liq6L6T5YWl5qGGXHJcbiAgICBjb25zdCB7XHJcbiAgICAgICAgZ2V0Q3VycmVudFByb2plY3QsXHJcbiAgICAgICAgZ2V0Q3VycmVudENhYmxlSWQsXHJcbiAgICAgICAgZ2V0Q3VycmVudENhYmxlSWQyLFxyXG4gICAgICAgIHVwZGF0ZVByb2plY3QsXHJcbiAgICAgICAgZ29CYWNrXHJcbiAgICB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcblxyXG4gICAgY29uc3QgY3VycmVudFByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdCgpO1xyXG4gICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE55S157yGSURcclxuICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkID0gZ2V0Q3VycmVudENhYmxlSWQoKS5uYW1lO1xyXG4gICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE55S157yGSUQyXHJcbiAgICBjb25zdCBjdXJyZW50Q2FibGVJZDIgPSBnZXRDdXJyZW50Q2FibGVJZDIoKS5uYW1lO1xyXG5cclxuICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG5cclxuXHJcblxyXG4gICAvLyDlj6rlnKhjZnDop4blm77kuIvliJ3lp4vljJbnrKzkuozkuKrovpPlhaXmoYZcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShjdXJyZW50Q2FibGVJZCk7XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdjZnAnKSB7XHJcbiAgICAgICAgICAgIHNldElucHV0VmFsdWUyKGN1cnJlbnRDYWJsZUlkMik7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRDYWJsZUlkLCBjdXJyZW50Q2FibGVJZDIsIHZpZXddKTtcclxuXHJcbiAgICAvLyDorqHnrpfkuIvkuIDkuKrluo/lj7fnmoRJRFxyXG4gICAgY29uc3QgZ2V0TmV4dElkID0gKGN1cnJlbnRJZCkgPT4ge1xyXG4gICAgICAgIGlmICghY3VycmVudElkKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIC8vIOajgOafpeaYr+WQpuS7peaVsOWtl+e7k+WwvlxyXG4gICAgICAgIGNvbnN0IG51bU1hdGNoID0gY3VycmVudElkLm1hdGNoKC9eKC4qPykoXFxkKykkLyk7XHJcbiAgICAgICAgaWYgKG51bU1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFssIHByZWZpeCwgbnVtXSA9IG51bU1hdGNoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0TnVtID0gU3RyaW5nKE51bWJlcihudW0pICsgMSkucGFkU3RhcnQobnVtLmxlbmd0aCwgJzAnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIG5leHROdW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbku6XlrZfmr43nu5PlsL5cclxuICAgICAgICBjb25zdCBsZXR0ZXJNYXRjaCA9IGN1cnJlbnRJZC5tYXRjaCgvXiguKj8pKFthLXpBLVpdKykkLyk7XHJcbiAgICAgICAgaWYgKGxldHRlck1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFssIHByZWZpeCwgbGV0dGVyc10gPSBsZXR0ZXJNYXRjaDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOWwhuWtl+avjei9rOaNouS4uuaVsOe7hOS7peS+v+WkhOeQhlxyXG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJBcnJheSA9IGxldHRlcnMuc3BsaXQoJycpO1xyXG4gICAgICAgICAgICBsZXQgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5LuO5Y+z5ZCR5bem5aSE55CG5q+P5Liq5a2X5q+NXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZXR0ZXJBcnJheS5sZW5ndGggLSAxOyBpID49IDAgJiYgY2Fycnk7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxldHRlckFycmF5W2ldID09PSAneicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXR0ZXJBcnJheVtpXSA9ICdhJztcclxuICAgICAgICAgICAgICAgICAgICBjYXJyeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxldHRlckFycmF5W2ldID09PSAnWicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXR0ZXJBcnJheVtpXSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICBjYXJyeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldHRlckFycmF5W2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXR0ZXJBcnJheVtpXS5jaGFyQ29kZUF0KDApICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5aaC5p6c6L+Y5pyJ6L+b5L2N77yM6K+05piO6ZyA6KaB5Zyo5YmN6Z2i5re75Yqg5LiA5Liq5a2X5q+NXHJcbiAgICAgICAgICAgIGlmIChjYXJyeSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxldHRlcnNbMF0gPj0gJ2EnICYmIGxldHRlcnNbMF0gPD0gJ3onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXkudW5zaGlmdCgnYScpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXR0ZXJBcnJheS51bnNoaWZ0KCdBJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBsZXR0ZXJBcnJheS5qb2luKCcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWmguaenOaXouS4jeaYr+aVsOWtl+S5n+S4jeaYr+Wtl+avjee7k+Wwvu+8jOebtOaOpei/lOWbnuWOn+WAvFxyXG4gICAgICAgIHJldHVybiBjdXJyZW50SWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOWPquWcqGNmcOinhuWbvuS4i+iHquWKqOabtOaWsOesrOS6jOS4qui+k+WFpeahhlxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodmlldyA9PT0gJ2NmcCcgJiYgaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlMihnZXROZXh0SWQoaW5wdXRWYWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtpbnB1dFZhbHVlLCB2aWV3XSk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdtYWluJyAmJiAhaW5wdXRWYWx1ZS50cmltKCkpIHJldHVybjtcclxuICAgICAgICBpZiAodmlldyA9PT0gJ2NmcCcgJiYgKCFpbnB1dFZhbHVlLnRyaW0oKSB8fCAhaW5wdXRWYWx1ZTIudHJpbSgpKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkcyA9IGN1cnJlbnRQcm9qZWN0Py5jYWJsZUlkcyB8fCBbXTtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgY2FibGVJZHM7XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdtYWluJykge1xyXG4gICAgICAgICAgICAvLyDlnKhtYWlu6KeG5Zu+5LiL77yM5Y+q5pu05paw6YCJ5Lit55qESUTvvIzkv53nlZnlhbbku5ZJRFxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gZ2V0Q3VycmVudENhYmxlSWQoKS5pZDtcclxuICAgICAgICAgICAgY2FibGVJZHMgPSBjdXJyZW50Q2FibGVJZHMubWFwKGNhYmxlID0+IFxyXG4gICAgICAgICAgICAgICAgY2FibGUuaWQgPT09IHNlbGVjdGVkSWQgPyB7IC4uLmNhYmxlLCBuYW1lOiBpbnB1dFZhbHVlLnRyaW0oKSB9IDogY2FibGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYWJsZUlkcyA9IFtcclxuICAgICAgICAgICAgICAgIHsgaWQ6ICcxJywgbmFtZTogaW5wdXRWYWx1ZS50cmltKCkgfSxcclxuICAgICAgICAgICAgICAgIHsgaWQ6ICcyJywgbmFtZTogaW5wdXRWYWx1ZTIudHJpbSgpIH1cclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7IGNhYmxlSWRzIH0pO1xyXG4gICAgICAgIGdvQmFjaygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdtYWluJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtYi00IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dLZXlib2FyZCh0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcC00IHRleHQtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl57q/57yGSURcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0tleWJvYXJkKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjlhYnmoIfkvY3nva5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93S2V5Ym9hcmQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEtleWJvYXJkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbj17Y3Vyc29yUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG5ld1ZhbHVlLCBuZXdQb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKG5ld1Bvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0tleWJvYXJkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0xIHRleHQtd2hpdGUgdGV4dC1zbVwiPui+k+WHuuWFiee6pElEMTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcHgtNCB0ZXh0LWJsYWNrIG92ZXJmbG93LXgtYXV0byB3aGl0ZXNwYWNlLW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJbnB1dCgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTEgdGV4dC13aGl0ZSB0ZXh0LXNtXCI+6L6T5YWl5YWJ57qkSUQyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1bI2ZmZmZlMV0gcm91bmRlZC1zbSBweC00IHRleHQtYmxhY2sgb3ZlcmZsb3cteC1hdXRvIHdoaXRlc3BhY2Utbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWUyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZTIoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5wdXQoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvd0tleWJvYXJkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWN0aXZlSW5wdXQgPT09IDEgPyBpbnB1dFZhbHVlIDogaW5wdXRWYWx1ZTJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmFsdWUsIG5ld1Bvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJbnB1dCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlMihuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24obmV3UG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLmm7TmlLlJRFwiIFxyXG4gICAgICAgICAgICAgICAgYmFja1RvPXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy5uYW1lIHx8ICdob21lJ30gXHJcbiAgICAgICAgICAgICAgICB2aWV3PXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy52aWV3IHx8ICdtYWluJ30gXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XHJcbiAgICAgICAgICAgIHt2aWV3ID09PSAnbWFpbicgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHshc2hvd0tleWJvYXJkICYmICg8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb21wbGV0ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIOWujOaIkFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPil9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAge3ZpZXcgPT09ICdjZnAnICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LThcIj5cclxuICAgICAgICAgICAgICAgICAgICB7IXNob3dLZXlib2FyZCAmJiAoPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29tcGxldGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDlrozmiJBcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4pfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiU3RhdHVzQmFyIiwiVGl0bGVCYXIiLCJLZXlib2FyZCIsInVzZURpc3BsYXlTdG9yZSIsIkNhYmxlSWQiLCJzaG93S2V5Ym9hcmQiLCJzZXRTaG93S2V5Ym9hcmQiLCJjdXJzb3JQb3NpdGlvbiIsInNldEN1cnNvclBvc2l0aW9uIiwiaW5wdXRWYWx1ZSIsInNldElucHV0VmFsdWUiLCJpbnB1dFZhbHVlMiIsInNldElucHV0VmFsdWUyIiwiYWN0aXZlSW5wdXQiLCJzZXRBY3RpdmVJbnB1dCIsImdldEN1cnJlbnRQcm9qZWN0IiwiZ2V0Q3VycmVudENhYmxlSWQiLCJnZXRDdXJyZW50Q2FibGVJZDIiLCJ1cGRhdGVQcm9qZWN0IiwiZ29CYWNrIiwiY3VycmVudFByb2plY3QiLCJjdXJyZW50Q2FibGVJZCIsIm5hbWUiLCJjdXJyZW50Q2FibGVJZDIiLCJ2aWV3IiwiZ2V0U3RhdGUiLCJuYXZpZ2F0aW9uIiwiY3VycmVudCIsImdldE5leHRJZCIsImN1cnJlbnRJZCIsIm51bU1hdGNoIiwibWF0Y2giLCJwcmVmaXgiLCJudW0iLCJuZXh0TnVtIiwiU3RyaW5nIiwiTnVtYmVyIiwicGFkU3RhcnQiLCJsZW5ndGgiLCJsZXR0ZXJNYXRjaCIsImxldHRlcnMiLCJsZXR0ZXJBcnJheSIsInNwbGl0IiwiY2FycnkiLCJpIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsInVuc2hpZnQiLCJqb2luIiwiaGFuZGxlQ29tcGxldGUiLCJ0cmltIiwiY3VycmVudEluZGV4Iiwic2VsZWN0ZWRJbmRleGVzIiwicHJvamVjdEluZGV4IiwiY3VycmVudENhYmxlSWRzIiwiY2FibGVJZHMiLCJzZWxlY3RlZElkIiwiaWQiLCJtYXAiLCJjYWJsZSIsInJlbmRlckNvbnRlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiaW5wdXQiLCJ0eXBlIiwidmFsdWUiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInNlbGVjdGlvblN0YXJ0Iiwib25Gb2N1cyIsInNldFNlbGVjdGlvblJhbmdlIiwibmV3VmFsdWUiLCJuZXdQb3NpdGlvbiIsIm9uQ29tcGxldGUiLCJ0aXRsZSIsImJhY2tUbyIsInByZXZpb3VzIiwiYnV0dG9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/CableId.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/CopperPerformance.js":
/*!***********************************************************!*\
!*** ./src/components/dsxpage/fluke/CopperPerformance.js ***!
\***********************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CopperPerformance)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/ResultTitleBar */ \"(pages-dir-node)/./src/components/lib/ResultTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/FrequencyChart */ \"(pages-dir-node)/./src/components/lib/FrequencyChart.js\");\n/* harmony import */ var _components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/lib/HDTDChart */ \"(pages-dir-node)/./src/components/lib/HDTDChart.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__, _components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__, _components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\nfunction CopperPerformance() {\n const { navigation, navigateTo, goBack } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n const { view } = navigation.current;\n const curtitle = navigation.current.params.curtitle;\n const testResult = navigation.current.params.testResult;\n const limitValue = testResult.testconfig.params.limitValue;\n const [limitdata, setLimitdata] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const wireOrder = testResult?.testconfig?.params?.wireOrder;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CopperPerformance.useEffect\": ()=>{\n // 异步加载限制数据\n const loadLimitData = {\n \"CopperPerformance.useEffect.loadLimitData\": async ()=>{\n if (limitValue) {\n try {\n // 从limitValue中提取基础名称(移除+PoE和+ALL后缀)\n const baseName = limitValue.split(' (+')[0];\n // 使用基础名称加载带有(+ALL)后缀的文件\n const data = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.* \\\\(\\\\+ALL\\\\)\\\\.json$\")(`./${baseName} (+ALL).json`);\n setLimitdata(data);\n } catch (error) {\n console.error('Error loading limit data:', error);\n }\n }\n }\n }[\"CopperPerformance.useEffect.loadLimitData\"];\n loadLimitData();\n }\n }[\"CopperPerformance.useEffect\"], [\n limitValue\n ]);\n const [poeTab, setPoeTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('回路');\n const renderResultTitleBar = ()=>{\n const handleBack = ()=>{\n goBack();\n };\n let title = '';\n switch(view){\n case 'LENGTH':\n title = '长度';\n break;\n case 'OHM':\n title = '电阻';\n break;\n case 'PoE':\n title = 'PoE';\n break;\n case 'DRAW':\n title = '图表';\n break;\n }\n ;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: curtitle,\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 59,\n columnNumber: 16\n }, this);\n };\n const renderContent = ()=>{\n switch(view){\n case 'LENGTH':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-4 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-4 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 71,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 70,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\",\n children: \"传输延迟\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 74,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: \"(ns)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 75,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 73,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\",\n children: \"延迟时差\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 78,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: \"(ns)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 79,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 77,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\",\n children: \"长度\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 82,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: \"(m)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 83,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 81,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 69,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR12,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR12,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR36,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR36,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR45,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR45,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR78,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR78,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR78\n }\n ] : []\n ].map(({ pair, color, delay, delaySkew, length })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `grid grid-cols-4 text-center border-gray-300 pt-2 ${color}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 97,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: limitdata && delay > limitdata.DELAY ? 'bg-red-100 rounded-md' : '',\n children: delay\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 98,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: limitdata && delaySkew > limitdata.DELAYSKEW ? 'bg-red-100 rounded-md' : '',\n children: delaySkew\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 99,\n columnNumber: 46\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `text-center ${limitdata && length > limitdata.LENGTH && !(limitValue?.includes('ISO') || limitValue?.includes('Profinet')) ? 'bg-red-200 rounded-md' : ''}`,\n children: length\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 100,\n columnNumber: 46\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 96,\n columnNumber: 41\n }, this)),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-4 text-center border-t border-gray-300 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \"极限\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 105,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.DELAY\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 107,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.DELAYSKEW\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 108,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.LENGTH\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 109,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 104,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 86,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 68,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 67,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 66,\n columnNumber: 21\n }, this);\n case 'OHM':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-0 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex mb-4\",\n children: [\n '回路'\n ].map((tab)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setPoeTab(tab),\n className: `flex-1 py-2 text-center text-xl font-bold ${poeTab === tab ? 'bg-gradient-to-b from-[#b0b0b0] via-[#e0e4e0] to-[#fff] text-black' : 'bg-[#303030] text-[#fffe92]'}`,\n children: tab\n }, tab, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 125,\n columnNumber: 41\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 123,\n columnNumber: 33\n }, this),\n poeTab === '回路' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 139,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 141,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 140,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 138,\n columnNumber: 41\n }, this),\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR78\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 154,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 155,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 153,\n columnNumber: 45\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-t border-gray-300 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \"极限\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 160,\n columnNumber: 41\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.LOOP\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 162,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 159,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 137,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 121,\n columnNumber: 30\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 120,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 119,\n columnNumber: 21\n }, this);\n case 'PoE':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] bg-[#6b6d6b] \",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-0 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex mb-4\",\n children: [\n '回路',\n '线对UBL',\n 'P2P UBL'\n ].map((tab)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setPoeTab(tab),\n className: `flex-1 py-1 text-center text-lg font-bold ${poeTab === tab ? 'bg-gradient-to-b from-[#b0b0b0] via-[#e0e4e0] to-[#fff] text-black' : 'bg-[#303030] text-[#fffe92]'}`,\n children: tab\n }, tab, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 180,\n columnNumber: 41\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 178,\n columnNumber: 33\n }, this),\n poeTab === '回路' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 194,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 196,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 195,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 193,\n columnNumber: 41\n }, this),\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR78\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 210,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${value > limitdata?.LOOP ? 'bg-red-100' : ''}`,\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 211,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 209,\n columnNumber: 45\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-t border-gray-300 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \"极限\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 218,\n columnNumber: 41\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.LOOP\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 220,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 217,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 192,\n columnNumber: 37\n }, this),\n poeTab === '线对UBL' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 229,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 231,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 230,\n columnNumber: 46\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"极限(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 234,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 233,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 228,\n columnNumber: 41\n }, this),\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR78\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 248,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${value > limitdata?.PAIRUBL ? 'bg-red-100' : ''}`,\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 249,\n columnNumber: 49\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.PAIRUBL\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 253,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 247,\n columnNumber: 45\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 227,\n columnNumber: 37\n }, this),\n poeTab === 'P2P UBL' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 264,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 266,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 265,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"极限(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 269,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 268,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 263,\n columnNumber: 41\n }, this),\n [\n {\n pair: '12-36',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR1236\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '12-45',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR1245\n },\n {\n pair: '12-78',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR1278\n },\n {\n pair: '36-45',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR3645\n },\n {\n pair: '36-78',\n color: 'text-purple-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR3678\n },\n {\n pair: '45-78',\n color: 'text-pink-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR4578\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 284,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${value > limitdata?.P2PUBL ? 'bg-red-100' : ''}`,\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 285,\n columnNumber: 49\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.P2PUBL\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 289,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 283,\n columnNumber: 45\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 262,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 176,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 175,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 174,\n columnNumber: 21\n }, this);\n case 'DRAW':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[full] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-4 rounded-md\",\n children: limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n curtitle: curtitle,\n limitValue: limitValue,\n limitdata: limitdata,\n wireOrder: wireOrder,\n data: testResult?.resultdata?.performance?.data\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 304,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 302,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 301,\n columnNumber: 21\n }, this);\n case 'HDTD':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[full] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-4 rounded-md\",\n children: limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n curtitle: curtitle,\n HDTD: testResult?.resultdata?.HDTD\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 320,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 318,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 317,\n columnNumber: 25\n }, this);\n default:\n return null;\n }\n };\n const renderFooter = ()=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 335,\n columnNumber: 13\n }, this);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 343,\n columnNumber: 13\n }, this),\n renderResultTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/CopperPerformance.js\",\n lineNumber: 342,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvQ29wcGVyUGVyZm9ybWFuY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDQTtBQUNVO0FBQ1Y7QUFDVTtBQUNWO0FBRXBDLFNBQVNRO0lBQ3BCLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUNDLE1BQU0sRUFBRSxHQUFHTiwrREFBZUE7SUFDekQsTUFBTSxFQUFFTyxJQUFJLEVBQUUsR0FBR0gsV0FBV0ksT0FBTztJQUNuQyxNQUFNQyxXQUFXTCxXQUFXSSxPQUFPLENBQUNFLE1BQU0sQ0FBQ0QsUUFBUTtJQUNuRCxNQUFNRSxhQUFhUCxXQUFXSSxPQUFPLENBQUNFLE1BQU0sQ0FBQ0MsVUFBVTtJQUN2RCxNQUFNQyxhQUFhRCxXQUFXRSxVQUFVLENBQUNILE1BQU0sQ0FBQ0UsVUFBVTtJQUMxRCxNQUFNLENBQUNFLFdBQVdDLGFBQWEsR0FBR25CLCtDQUFRQSxDQUFDO0lBQzNDLE1BQU1vQixZQUFZTCxZQUFZRSxZQUFZSCxRQUFRTTtJQUVsRG5CLGdEQUFTQTt1Q0FBQztZQUNOLFdBQVc7WUFDWCxNQUFNb0I7NkRBQWdCO29CQUNsQixJQUFJTCxZQUFZO3dCQUNaLElBQUk7NEJBQ0Esb0NBQW9DOzRCQUNwQyxNQUFNTSxXQUFXTixXQUFXTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7NEJBQzNDLHdCQUF3Qjs0QkFDeEIsTUFBTUMsT0FBTyxNQUFNLHlHQUFPLEdBQWdCLEVBQUVGLFNBQVMsYUFBYSxDQUFDOzRCQUNuRUgsYUFBYUs7d0JBQ2pCLEVBQUUsT0FBT0MsT0FBTzs0QkFDWkMsUUFBUUQsS0FBSyxDQUFDLDZCQUE2QkE7d0JBQy9DO29CQUNKO2dCQUNKOztZQUNBSjtRQUNKO3NDQUFHO1FBQUNMO0tBQVc7SUFLZixNQUFNLENBQUNXLFFBQVFDLFVBQVUsR0FBRzVCLCtDQUFRQSxDQUFDO0lBRXJDLE1BQU02Qix1QkFBdUI7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WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvQ29wcGVyUGVyZm9ybWFuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdGF0dXNCYXInO1xyXG5pbXBvcnQgUmVzdWx0VGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9SZXN1bHRUaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgRnJlcXVlbmN5Q2hhcnQgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9GcmVxdWVuY3lDaGFydCc7XHJcbmltcG9ydCBIRFREQ2hhcnQgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9IRFREQ2hhcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29wcGVyUGVyZm9ybWFuY2UoICkge1xyXG4gICAgY29uc3QgeyBuYXZpZ2F0aW9uLCBuYXZpZ2F0ZVRvLGdvQmFjayB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcbiAgICBjb25zdCB7IHZpZXcgfSA9IG5hdmlnYXRpb24uY3VycmVudDtcclxuICAgIGNvbnN0IGN1cnRpdGxlID0gbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtcy5jdXJ0aXRsZTtcclxuICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuYXZpZ2F0aW9uLmN1cnJlbnQucGFyYW1zLnRlc3RSZXN1bHQ7XHJcbiAgICBjb25zdCBsaW1pdFZhbHVlID0gdGVzdFJlc3VsdC50ZXN0Y29uZmlnLnBhcmFtcy5saW1pdFZhbHVlO1xyXG4gICAgY29uc3QgW2xpbWl0ZGF0YSwgc2V0TGltaXRkYXRhXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgd2lyZU9yZGVyID0gdGVzdFJlc3VsdD8udGVzdGNvbmZpZz8ucGFyYW1zPy53aXJlT3JkZXI7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAvLyDlvILmraXliqDovb3pmZDliLbmlbDmja5cclxuICAgICAgICBjb25zdCBsb2FkTGltaXREYXRhID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobGltaXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDku45saW1pdFZhbHVl5Lit5o+Q5Y+W5Z+656GA5ZCN56ewKOenu+mZpCtQb0XlkowrQUxM5ZCO57yAKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gbGltaXRWYWx1ZS5zcGxpdCgnICgrJylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5L2/55So5Z+656GA5ZCN56ew5Yqg6L295bim5pyJKCtBTEwp5ZCO57yA55qE5paH5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGltcG9ydChgQC9zdG9yZS9DT1BQRVIvJHtiYXNlTmFtZX0gKCtBTEwpLmpzb25gKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRMaW1pdGRhdGEoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbGltaXQgZGF0YTonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxvYWRMaW1pdERhdGEoKTtcclxuICAgIH0sIFtsaW1pdFZhbHVlXSk7IFxyXG5cclxuXHJcblxyXG5cclxuICAgIGNvbnN0IFtwb2VUYWIsIHNldFBvZVRhYl0gPSB1c2VTdGF0ZSgn5Zue6LevJyk7XHJcblxyXG4gICAgY29uc3QgcmVuZGVyUmVzdWx0VGl0bGVCYXIgPSAoKSA9PiB7ICAgICAgXHJcbiAgICAgICAgY29uc3QgaGFuZGxlQmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGdvQmFjaygpO1xyXG4gICAgICAgICAgfTsgIFxyXG4gICAgICAgIGxldCB0aXRsZSA9ICcnO1xyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdMRU5HVEgnOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSAn6ZW/5bqmJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdPSE0nOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSAn55S16Zi7JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdQb0UnOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSAnUG9FJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdEUkFXJzpcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gJ+WbvuihqCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiA8UmVzdWx0VGl0bGVCYXIgdGl0bGU9e2N1cnRpdGxlfSBvbkJhY2s9e2hhbmRsZUJhY2t9IC8+O1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHsgICAgICAgIFxyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdMRU5HVEgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF0gYmctWyM2YjZkNmJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBiZy13aGl0ZSBwLTQgcm91bmRlZC1tZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTQgdGV4dC1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktMzAwIHBiLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ibHVlLTYwMCB0ZXh0LWxnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ibHVlLTYwMCB0ZXh0LWxnXCI+5Lyg6L6T5bu26L+fPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMFwiPihucyk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJsdWUtNjAwIHRleHQtbGdcIj7lu7bov5/ml7blt648L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+KG5zKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYmx1ZS02MDAgdGV4dC1sZ1wiPumVv+W6pjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj4obSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzEsMicsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgZGVsYXk6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5ERUxBWT8uUEFJUjEyLCBkZWxheVNrZXc6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5ERUxBWVNLRVc/LlBBSVIxMiwgbGVuZ3RoOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uTEVOR1RIPy5QQUlSMTIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzMsNicsIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLCBkZWxheTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkRFTEFZPy5QQUlSMzYsIGRlbGF5U2tldzogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkRFTEFZU0tFVz8uUEFJUjM2LCBsZW5ndGg6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5MRU5HVEg/LlBBSVIzNiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHdpcmVPcmRlciAhPT0gJ0V0aGVybmV0IFR3by1QYWlyJyAmJiB3aXJlT3JkZXIgIT09ICdNMTItRCBUd28tUGFpcicgPyBbXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzQsNScsIGNvbG9yOiAndGV4dC1ibHVlLTUwMCcsIGRlbGF5OiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uREVMQVk/LlBBSVI0NSwgZGVsYXlTa2V3OiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uREVMQVlTS0VXPy5QQUlSNDUsIGxlbmd0aDogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkxFTkdUSD8uUEFJUjQ1IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnNyw4JywgY29sb3I6ICd0ZXh0LXllbGxvdy01MDAnLCBkZWxheTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkRFTEFZPy5QQUlSNzgsIGRlbGF5U2tldzogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkRFTEFZU0tFVz8uUEFJUjc4LCBsZW5ndGg6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5MRU5HVEg/LlBBSVI3OCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDogW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0ubWFwKCh7IHBhaXIsIGNvbG9yLCBkZWxheSwgZGVsYXlTa2V3LCBsZW5ndGggfSkgPT4gKCAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cGFpcn0gY2xhc3NOYW1lPXtgZ3JpZCBncmlkLWNvbHMtNCB0ZXh0LWNlbnRlciBib3JkZXItZ3JheS0zMDAgcHQtMiAke2NvbG9yfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+e3BhaXJ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2xpbWl0ZGF0YSAmJiBkZWxheSA+IGxpbWl0ZGF0YS5ERUxBWSA/ICdiZy1yZWQtMTAwIHJvdW5kZWQtbWQnIDogJyd9PntkZWxheX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2xpbWl0ZGF0YSAmJiBkZWxheVNrZXcgPiBsaW1pdGRhdGEuREVMQVlTS0VXID8gJ2JnLXJlZC0xMDAgcm91bmRlZC1tZCcgOiAnJ30+e2RlbGF5U2tld308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2B0ZXh0LWNlbnRlciAkeyhsaW1pdGRhdGEgJiYgbGVuZ3RoID4gbGltaXRkYXRhLkxFTkdUSCkgJiYgIShsaW1pdFZhbHVlPy5pbmNsdWRlcygnSVNPJykgfHwgbGltaXRWYWx1ZT8uaW5jbHVkZXMoJ1Byb2ZpbmV0JykpID8gJ2JnLXJlZC0yMDAgcm91bmRlZC1tZCcgOiAnJ31gfT57bGVuZ3RofTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGltaXRkYXRhICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy00IHRleHQtY2VudGVyIGJvcmRlci10IGJvcmRlci1ncmF5LTMwMCBwdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPuaegemZkDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuREVMQVl9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuREVMQVlTS0VXfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57bGltaXRkYXRhLkxFTkdUSH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdPSE0nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF0gYmctWyM2YjZkNmJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBiZy13aGl0ZSBwLTAgcm91bmRlZC1tZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIOmAiemhueWNoSAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Wyflm57ot68nXS5tYXAoKHRhYikgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dGFifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFBvZVRhYih0YWIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXgtMSBweS0yIHRleHQtY2VudGVyIHRleHQteGwgZm9udC1ib2xkICR7cG9lVGFiID09PSB0YWIgPyAnYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjBiMGIwXSB2aWEtWyNlMGU0ZTBdIHRvLVsjZmZmXSB0ZXh0LWJsYWNrJyA6ICdiZy1bIzMwMzAzMF0gdGV4dC1bI2ZmZmU5Ml0nfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RhYn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIOaVsOaNruWxleekuuWMuuWfnyAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cG9lVGFiID09PSAn5Zue6LevJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiB0ZXh0LWNlbnRlciBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgcGItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPiAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtbGdcIj7lgLwozqkpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICcxLDInLCBjb2xvcjogJ3RleHQtb3JhbmdlLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5MT09QPy5QQUlSMTIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICczLDYnLCBjb2xvcjogJ3RleHQtZ3JlZW4tNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVIzNiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih3aXJlT3JkZXIgIT09ICdFdGhlcm5ldCBUd28tUGFpcicgJiYgd2lyZU9yZGVyICE9PSAnTTEyLUQgVHdvLVBhaXInID8gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc0LDUnLCBjb2xvcjogJ3RleHQtYmx1ZS01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uTE9PUD8uUEFJUjQ1IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzcsOCcsIGNvbG9yOiAndGV4dC15ZWxsb3ctNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVI3OCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA6IFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tYXAoKHsgcGFpciwgY29sb3IsIHZhbHVlIH0pID0+IChcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3BhaXJ9IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgdGV4dC1jZW50ZXIgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGZvbnQtYm9sZCAke2NvbG9yfWB9PntwYWlyfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt2YWx1ZSB8fCAnTi9BJ308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiB0ZXh0LWNlbnRlciBib3JkZXItdCBib3JkZXItZ3JheS0zMDAgcHQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LWJvbGRcIj7mnoHpmZA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGltaXRkYXRhICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57bGltaXRkYXRhLkxPT1B9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdQb0UnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF0gYmctWyM2YjZkNmJdIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcC0wIHJvdW5kZWQtbWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIOmAiemhueWNoSAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Wyflm57ot68nLCAn57q/5a+5VUJMJywgJ1AyUCBVQkwnXS5tYXAoKHRhYikgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dGFifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFBvZVRhYih0YWIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGZsZXgtMSBweS0xIHRleHQtY2VudGVyIHRleHQtbGcgZm9udC1ib2xkICR7cG9lVGFiID09PSB0YWIgPyAnYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjBiMGIwXSB2aWEtWyNlMGU0ZTBdIHRvLVsjZmZmXSB0ZXh0LWJsYWNrJyA6ICdiZy1bIzMwMzAzMF0gdGV4dC1bI2ZmZmU5Ml0nfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RhYn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIOaVsOaNruWxleekuuWMuuWfnyAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cG9lVGFiID09PSAn5Zue6LevJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiB0ZXh0LWNlbnRlciBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgcGItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPiAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtbGdcIj7lgLwozqkpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICcxLDInLCBjb2xvcjogJ3RleHQtb3JhbmdlLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5MT09QPy5QQUlSMTIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICczLDYnLCBjb2xvcjogJ3RleHQtZ3JlZW4tNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVIzNiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih3aXJlT3JkZXIgIT09ICdFdGhlcm5ldCBUd28tUGFpcicgJiYgd2lyZU9yZGVyICE9PSAnTTEyLUQgVHdvLVBhaXInID8gW1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnNCw1JywgY29sb3I6ICd0ZXh0LWJsdWUtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVI0NSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc3LDgnLCBjb2xvcjogJ3RleHQteWVsbG93LTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5MT09QPy5QQUlSNzggfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gOiBbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0ubWFwKCh7IHBhaXIsIGNvbG9yLCB2YWx1ZSB9KSA9PiAoXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwYWlyfSBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIHRleHQtY2VudGVyIHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Bmb250LWJvbGQgJHtjb2xvcn1gfT57cGFpcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ZhbHVlID4gbGltaXRkYXRhPy5MT09QID8gJ2JnLXJlZC0xMDAnIDogJyd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUgfHwgJ04vQSd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIHRleHQtY2VudGVyIGJvcmRlci10IGJvcmRlci1ncmF5LTMwMCBwdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPuaegemZkDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW1pdGRhdGEgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuTE9PUH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cG9lVGFiID09PSAn57q/5a+5VUJMJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMyB0ZXh0LWNlbnRlciBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgcGItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+ICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtbGdcIj7lgLwozqkpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCB0ZXh0LWxnXCI+5p6B6ZmQKM6pKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICcxLDInLCBjb2xvcjogJ3RleHQtb3JhbmdlLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QQUlSVUJMPy5QQUlSMTIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICczLDYnLCBjb2xvcjogJ3RleHQtZ3JlZW4tNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlBBSVJVQkw/LlBBSVIzNiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih3aXJlT3JkZXIgIT09ICdFdGhlcm5ldCBUd28tUGFpcicgJiYgd2lyZU9yZGVyICE9PSAnTTEyLUQgVHdvLVBhaXInID8gW1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnNCw1JywgY29sb3I6ICd0ZXh0LWJsdWUtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlBBSVJVQkw/LlBBSVI0NSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc3LDgnLCBjb2xvcjogJ3RleHQteWVsbG93LTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QQUlSVUJMPy5QQUlSNzggfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gOiBbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0ubWFwKCh7IHBhaXIsIGNvbG9yLCB2YWx1ZSB9KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3BhaXJ9IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTMgdGV4dC1jZW50ZXIgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGZvbnQtYm9sZCAke2NvbG9yfWB9PntwYWlyfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7dmFsdWUgPiBsaW1pdGRhdGE/LlBBSVJVQkwgPyAnYmctcmVkLTEwMCcgOiAnJ31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZSB8fCAnTi9BJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW1pdGRhdGEgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuUEFJUlVCTH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BvZVRhYiA9PT0gJ1AyUCBVQkwnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0zIHRleHQtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBwYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LWJvbGRcIj4gIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCB0ZXh0LWxnXCI+5YC8KM6pKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1sZ1wiPuaegemZkCjOqSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnMTItMzYnLCBjb2xvcjogJ3RleHQtb3JhbmdlLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QMlBVQkw/LlBBSVIxMjM2IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHdpcmVPcmRlciAhPT0gJ0V0aGVybmV0IFR3by1QYWlyJyAmJiB3aXJlT3JkZXIgIT09ICdNMTItRCBUd28tUGFpcicgPyBbXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICcxMi00NScsIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uUDJQVUJMPy5QQUlSMTI0NSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICcxMi03OCcsIGNvbG9yOiAndGV4dC1ibHVlLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QMlBVQkw/LlBBSVIxMjc4IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzM2LTQ1JywgY29sb3I6ICd0ZXh0LXllbGxvdy01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uUDJQVUJMPy5QQUlSMzY0NSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICczNi03OCcsIGNvbG9yOiAndGV4dC1wdXJwbGUtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlAyUFVCTD8uUEFJUjM2NzggfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnNDUtNzgnLCBjb2xvcjogJ3RleHQtcGluay01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uUDJQVUJMPy5QQUlSNDU3OCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA6IFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tYXAoKHsgcGFpciwgY29sb3IsIHZhbHVlIH0pID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cGFpcn0gY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMyB0ZXh0LWNlbnRlciBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgZm9udC1ib2xkICR7Y29sb3J9YH0+e3BhaXJ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2YWx1ZSA+IGxpbWl0ZGF0YT8uUDJQVUJMID8gJ2JnLXJlZC0xMDAnIDogJyd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUgfHwgJ04vQSd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGltaXRkYXRhICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57bGltaXRkYXRhLlAyUFVCTH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnRFJBVyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtW2Z1bGxdIGJnLVsjNmI2ZDZiXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcC00IHJvdW5kZWQtbWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW1pdGRhdGEgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGcmVxdWVuY3lDaGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ0aXRsZT17Y3VydGl0bGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0VmFsdWU9e2xpbWl0VmFsdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0ZGF0YT17bGltaXRkYXRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXI9e3dpcmVPcmRlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17dGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LmRhdGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0hEVEQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtW2Z1bGxdIGJnLVsjNmI2ZDZiXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGJnLXdoaXRlIHAtNCByb3VuZGVkLW1kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbWl0ZGF0YSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIRFREQ2hhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnRpdGxlPXtjdXJ0aXRsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhEVEQ9e3Rlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LkhEVER9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtOFwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XHJcbiAgICAgICAgICAgIHtyZW5kZXJSZXN1bHRUaXRsZUJhcigpfVxyXG4gICAgICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxyXG4gICAgICAgICAgICB7cmVuZGVyRm9vdGVyKCl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJTdGF0dXNCYXIiLCJSZXN1bHRUaXRsZUJhciIsInVzZURpc3BsYXlTdG9yZSIsIkZyZXF1ZW5jeUNoYXJ0IiwiSERURENoYXJ0IiwiQ29wcGVyUGVyZm9ybWFuY2UiLCJuYXZpZ2F0aW9uIiwibmF2aWdhdGVUbyIsImdvQmFjayIsInZpZXciLCJjdXJyZW50IiwiY3VydGl0bGUiLCJwYXJhbXMiLCJ0ZXN0UmVzdWx0IiwibGltaXRWYWx1ZSIsInRlc3Rjb25maWciLCJsaW1pdGRhdGEiLCJzZXRMaW1pdGRhdGEiLCJ3aXJlT3JkZXIiLCJsb2FkTGltaXREYXRhIiwiYmFzZU5hbWUiLCJzcGxpdCIsImRhdGEiLCJlcnJvciIsImNvbnNvbGUiLCJwb2VUYWIiLCJzZXRQb2VUYWIiLCJyZW5kZXJSZXN1bHRUaXRsZUJhciIsImhhbmRsZUJhY2siLCJ0aXRsZSIsIm9uQmFjayIsInJlbmRlckNvbnRlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJzcGFuIiwicGFpciIsImNvbG9yIiwiZGVsYXkiLCJyZXN1bHRkYXRhIiwicGVyZm9ybWFuY2UiLCJERUxBWSIsIlBBSVIxMiIsImRlbGF5U2tldyIsIkRFTEFZU0tFVyIsImxlbmd0aCIsIkxFTkdUSCIsIlBBSVIzNiIsIlBBSVI0NSIsIlBBSVI3OCIsIm1hcCIsImluY2x1ZGVzIiwidGFiIiwiYnV0dG9uIiwib25DbGljayIsInZhbHVlIiwiT0hNIiwiTE9PUCIsIlBBSVJVQkwiLCJQMlBVQkwiLCJQQUlSMTIzNiIsIlBBSVIxMjQ1IiwiUEFJUjEyNzgiLCJQQUlSMzY0NSIsIlBBSVIzNjc4IiwiUEFJUjQ1NzgiLCJIRFREIiwicmVuZGVyRm9vdGVyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/CopperPerformance.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/HomePage.js":
/*!**************************************************!*\
!*** ./src/components/dsxpage/fluke/HomePage.js ***!
\**************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HomePage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\nfunction HomePage() {\n const { getCurrentProject, getCurrentTestConfig, getCurrentOperator, getCurrentCableId, getCurrentCableId2, navigateTo, hasPlayedSound, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const { ref } = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HomePage.useEffect\": ()=>{\n if (hasPlayedSound) {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].setState({\n hasPlayedSound: false\n });\n }\n }\n }[\"HomePage.useEffect\"], [\n hasPlayedSound\n ]);\n const { connectionStatus, mainUnitAdapter, remoteUnitAdapter, mainUnitModules, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n // 获取当前项目数据\n const currentProject = getCurrentProject();\n // 获取当前选中的测试配置\n const currentConfig = getCurrentTestConfig();\n // 获取当前选中的操作员\n const currentOperator = getCurrentOperator();\n // 获取当前选中的电缆ID\n const currentCableId = getCurrentCableId();\n // 获取当前选中的电缆ID2\n const currentCableId2 = getCurrentCableId2();\n const passCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }).length;\n const failCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }).length;\n const ConnectStatus = connectionStatus?.CFPConnectStatus ?? connectionStatus?.['8000ConnectStatus'];\n // 计算下一个线缆ID\n const getNextCableId = (currentId)=>{\n const match = currentId.match(/^(.*?)(\\d+)$/);\n if (match) {\n const prefix = match[1];\n const number = parseInt(match[2]) + 1;\n return `${prefix}${number.toString().padStart(match[2].length, '0')}`;\n }\n return currentId;\n };\n const handleProjectClick = ()=>{\n navigateTo('project', 'main');\n };\n const handleOperatorsClick = ()=>{\n navigateTo('operators', 'main');\n };\n // 渲染测试配置区域的内容\n const renderTestConfigContent = ()=>{\n if (!currentConfig) return null;\n switch(currentConfig.moduleType){\n case '8000':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 109,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 110,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.wireOrder\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 111,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 108,\n columnNumber: 21\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 117,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 118,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 119,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n currentConfig.params.refJumper,\n \" 跳线参照\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 120,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 116,\n columnNumber: 21\n }, this);\n case 'ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 126,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 127,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 128,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 125,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 140,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"HOME\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 141,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[490px] bg-[#303040] p-2 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[315px] bg-[#c5c2c5] rounded-sm p-3 shadow-lg flex flex-col gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-start cursor-pointer\",\n onClick: handleProjectClick,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-bold mb-2\",\n children: [\n \"项目:\",\n currentProject?.name\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 149,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-green-500\",\n children: passCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 152,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/pass.png'),\n alt: \"通过\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 154,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 153,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 151,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-500\",\n children: failCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 164,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/fail.png'),\n alt: \"失败\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 166,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 165,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 163,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 150,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 148,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 178,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 177,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 147,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('testConfig', 'main'),\n children: [\n renderTestConfigContent(),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-sm\",\n children: currentConfig?.modulelable\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 195,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 197,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 196,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 194,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 189,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('cableId', currentConfig?.moduleType === 'cfp' ? 'cfp' : 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: currentConfig?.moduleType === 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black\",\n children: [\n \"下一个输入ID: \",\n currentCableId?.name\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 216,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black\",\n children: [\n \"下一个输出ID: \",\n currentCableId2?.name\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 217,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black\",\n children: [\n \"下一个ID:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n children: currentCableId?.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 221,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 220,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 213,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 226,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 225,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 209,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[40px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: handleOperatorsClick,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n \"操作员: \",\n currentOperator?.name\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 241,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 243,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 242,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 237,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 145,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center gap-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center gap-2\",\n onClick: ()=>navigateTo('tools', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-20 h-20 rounded-sm shadow-lg flex items-center justify-center cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/tools.png'),\n alt: \"工具\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 260,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 259,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 258,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-white text-sm\",\n children: \"工具\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 269,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 256,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center gap-2 cursor-pointer\",\n onClick: ()=>navigateTo('result', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-20 h-20 rounded-sm shadow-lg flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/result.png'),\n alt: \"结果\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 277,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 276,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 275,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-white text-sm\",\n children: \"结果\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 286,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 271,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 255,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 143,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 294,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex justify-center\",\n children: (currentConfig?.moduleType === 'cfp' || currentConfig?.moduleType === 'ofp') && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[120px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n // 根据模块类型设置不同的参照逻辑\n if (currentConfig?.moduleType === 'cfp') {\n navigateTo('tools', 'ref-cfp');\n } else if (currentConfig?.moduleType === 'ofp') {\n navigateTo('tools', 'ref-ofp');\n }\n },\n children: currentConfig?.moduleType === 'ofp' ? '设置基准' : '设置参照'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 297,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 295,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n onClick: ()=>{\n if (currentConfig?.moduleType === '8000' || currentConfig?.moduleType === 'cfp') {\n if (!ConnectStatus) {\n setToastMessage('未连接,请检查连接状态');\n return;\n }\n }\n if (currentConfig?.moduleType === '8000') {\n if (mainUnitModules?.[0]?.id !== '8000') {\n setToastMessage('当前模块与所选标准不兼容');\n return;\n }\n const limitValue = currentConfig.params.limitValue;\n if (limitValue.includes('Channel') || limitValue.includes('Ch')) {\n if (!mainUnitAdapter.id.includes('channel') || !remoteUnitAdapter.id.includes('channel')) {\n setToastMessage('当前适配器与所选标准不兼容');\n return;\n }\n } else if (limitValue.includes('Perm') || limitValue.includes('PL')) {\n if (!mainUnitAdapter.id.includes('permanent') || !remoteUnitAdapter.id.includes('permanent')) {\n setToastMessage('当前适配器与所选标准不兼容');\n return;\n }\n } else if (limitValue.includes('MPTL')) {\n const hasPermanent = mainUnitAdapter.id.includes('permanent') || remoteUnitAdapter.id.includes('permanent');\n const hasPatchcode = mainUnitAdapter.id.includes('patchcode') || remoteUnitAdapter.id.includes('patchcode');\n if (!(hasPermanent && hasPatchcode)) {\n setToastMessage('当前适配器与所选标准不兼容');\n return;\n }\n }\n }\n if (currentConfig?.moduleType === 'cfp') {\n if (mainUnitModules?.[0]?.id !== 'cfp') {\n setToastMessage('当前模块与所选标准不兼容');\n return;\n }\n // 检查光纤类型\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n // 根据单/多模获取对应的路径\n let mainOutPath, mainInPath, remoteOutPath, remoteInPath;\n if (isMultiMode) {\n // 多模光纤路径\n mainOutPath = connectionStatus?.mainPaths?.['main-cfp-mm-out']?.path || [];\n mainInPath = connectionStatus?.mainPaths?.['main-cfp-in']?.path || [];\n remoteOutPath = connectionStatus?.remotePaths?.['remote-cfp-mm-out']?.path || [];\n remoteInPath = connectionStatus?.remotePaths?.['remote-cfp-in']?.path || [];\n // 检查是否所有端口都已连接\n if (!mainOutPath.length || !mainInPath.length || !remoteOutPath.length || !remoteInPath.length) {\n setTotalToastMessage('请确保所有光纤端口都已正确连接');\n return;\n }\n // 检查是否存在单模跳线\n const hasInvalidConnector = [\n ...mainOutPath,\n ...mainInPath,\n ...remoteOutPath,\n ...remoteInPath\n ].some((item)=>{\n return item.includes('sm');\n });\n if (hasInvalidConnector) {\n setTotalToastMessage('多模光纤链路中存在单模跳线,请检查连接');\n return;\n }\n } else {\n // 单模光纤路径\n mainOutPath = connectionStatus?.mainPaths?.['main-cfp-sm-out']?.path || [];\n mainInPath = connectionStatus?.mainPaths?.['main-cfp-in']?.path || [];\n remoteOutPath = connectionStatus?.remotePaths?.['remote-cfp-sm-out']?.path || [];\n remoteInPath = connectionStatus?.remotePaths?.['remote-cfp-in']?.path || [];\n // 检查是否所有端口都已连接\n if (!mainOutPath.length || !mainInPath.length || !remoteOutPath.length || !remoteInPath.length) {\n setTotalToastMessage('请确保所有光纤端口都已正确连接');\n return;\n }\n // 检查是否存在多模跳线\n const hasInvalidConnector = [\n ...mainOutPath,\n ...mainInPath,\n ...remoteOutPath,\n ...remoteInPath\n ].some((item)=>{\n return item.includes('mm');\n });\n if (hasInvalidConnector) {\n setTotalToastMessage('单模光纤链路中存在多模跳线,请检查连接');\n return;\n }\n }\n }\n if (currentConfig?.moduleType === 'ofp') {\n if (mainUnitModules?.[0]?.id !== 'ofp') {\n setToastMessage('当前模块与所选标准不兼容');\n return;\n }\n // 检查光纤类型是否匹配\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n const portType = Object.values(connectionStatus?.mainPaths || {})[0]?.start;\n if (isMultiMode && portType !== 'main-ofp-mm-out') {\n setTotalToastMessage('当前光纤类型必须使用多模端口测试');\n return;\n }\n if (!isMultiMode && portType !== 'main-ofp-sm-out') {\n setTotalToastMessage('当前光纤类型必须使用单模端口测试');\n return;\n }\n // 检查光纤连接器类型是否匹配\n const path = Object.values(connectionStatus?.mainPaths || {})[0]?.path || [];\n const hasInvalidConnector = path.some((item)=>{\n if (isMultiMode) {\n return item.includes('sm-') || item.includes('smc-');\n } else {\n return item.includes('mm-') || item.includes('mmc-');\n }\n });\n if (hasInvalidConnector) {\n setTotalToastMessage(isMultiMode ? '未检测到多模光纤,请检查光纤连接' : '未检测到单模光纤,请检查光纤连接');\n return;\n }\n if (!connectionStatus?.OFPStatus) {\n setTotalToastMessage('请接入实际被测链路,进行测试');\n return;\n }\n // 检查光纤连接数量\n const fiberConnectorCount = path.filter((item)=>{\n return item.includes('sm-') || item.includes('mm-') || item.includes('smc-') || item.includes('mmc-');\n }).length;\n if (fiberConnectorCount > 3) {\n setTotalToastMessage('该场景仅支持使用一段光纤连接测试仪与链路');\n return;\n }\n }\n navigateTo('testing', 'nosave');\n },\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 314,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 313,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 292,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/HomePage.js\",\n lineNumber: 139,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvSG9tZVBhZ2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF5QztBQUNWO0FBQ29CO0FBQ0Y7QUFDRTtBQUNGO0FBQ0w7QUFFN0IsU0FBU1E7SUFDcEIsTUFBTSxFQUNGQyxpQkFBaUIsRUFDakJDLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsVUFBVSxFQUNWQyxjQUFjLEVBQ2RDLGVBQWUsRUFDbEIsR0FBR1gsK0RBQWVBO0lBRW5CLE1BQU0sRUFBRVksR0FBRyxFQUFFLEdBQUdaLG9FQUF3QjtJQUV4Q0osZ0RBQVNBOzhCQUFDO1lBQ04sSUFBSWMsZ0JBQWdCO2dCQUNoQlYsb0VBQXdCLENBQUM7b0JBQUVVLGdCQUFnQjtnQkFBTTtZQUNyRDtRQUNKOzZCQUFHO1FBQUNBO0tBQWU7SUFFbkIsTUFBTSxFQUFFSyxnQkFBZ0IsRUFBRUMsZUFBZSxFQUFFQyxpQkFBaUIsRUFBQ0MsZUFBZSxFQUFDQyxvQkFBb0IsRUFBRSxHQUFHbEIsOERBQWNBO0lBR3BILFdBQVc7SUFDWCxNQUFNbUIsaUJBQWlCaEI7SUFFdkIsY0FBYztJQUNkLE1BQU1pQixnQkFBZ0JoQjtJQUV0QixhQUFhO0lBQ2IsTUFBTWlCLGtCQUFrQmhCO0lBRXhCLGNBQWM7SUFDZCxNQUFNaUIsaUJBQWlCaEI7SUFDdkIsZUFBZTtJQUNmLE1BQU1pQixrQkFBa0JoQjtJQUV4QixNQUFNaUIsWUFBWUwsZ0JBQWdCTSxZQUFZQyxPQUFPQyxDQUFBQTtRQUNqRCxNQUFNQyxlQUFlRCxPQUFPRSxrQkFBa0I7UUFDOUMsTUFBTUMsWUFBWUgsT0FBT0ksZUFBZTtRQUN4QyxNQUFNQyxZQUFZTCxPQUFPTSxlQUFlO1FBRXhDLElBQUlMLGNBQWM7WUFDZCxPQUFPQSxpQkFBaUI7UUFDNUIsT0FBTyxJQUFJRSxXQUFXO1lBQ2xCLE9BQU9BLGNBQWM7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QUFrQitELGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFQyxRQUFRLEVBQUU7b0NBQzVFLE1BQU1FLHNCQUFzQkYsS0FBS0csSUFBSSxDQUFDQyxDQUFBQTt3Q0FDbEMsSUFBSVYsYUFBYTs0Q0FDYixPQUFPVSxLQUFLYixRQUFRLENBQUMsVUFBVWEsS0FBS2IsUUFBUSxDQUFDO3dDQUNqRCxPQUFPOzRDQUNILE9BQU9hLEtBQUtiLFFBQVEsQ0FBQyxVQUFVYSxLQUFLYixRQUFRLENBQUM7d0NBQ2pEO29DQUNKO29DQUVBLElBQUlXLHFCQUFxQjt3Q0FDckI5RCxxQkFBcUJzRCxjQUFjLHFCQUFxQjt3Q0FDeEQ7b0NBQ0o7b0NBRUEsSUFBSSxDQUFDMUQsa0JBQWtCeUUsV0FBVzt3Q0FDOUJyRSxxQkFBcUI7d0NBQ3JCO29DQUNKO29DQUVBLFdBQVc7b0NBQ1gsTUFBTXNFLHNCQUFzQlYsS0FBS3BELE1BQU0sQ0FBQ3dELENBQUFBO3dDQUNwQyxPQUFPQSxLQUFLYixRQUFRLENBQUMsVUFBVWEsS0FBS2IsUUFBUSxDQUFDLFVBQ3RDYSxLQUFLYixRQUFRLENBQUMsV0FBV2EsS0FBS2IsUUFBUSxDQUFDO29DQUNsRCxHQUFHbkMsTUFBTTtvQ0FFVCxJQUFJc0Qsc0JBQXNCLEdBQUc7d0NBQ3pCdEUscUJBQXFCO3dDQUNyQjtvQ0FDSjtnQ0FDSjtnQ0FFQVYsV0FBVyxXQUFVOzRCQUN6QjtzQ0FDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRN0IiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9mbHVrZS9Ib21lUGFnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgSW1hZ2UgZnJvbSAnbmV4dC9pbWFnZSc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdGF0dXNCYXInO1xyXG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9UaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcbmltcG9ydCB7IGdldEFzc2V0VXJsIH0gZnJvbSAnQC91dGlscy9hc3NldCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb21lUGFnZSgpIHtcclxuICAgIGNvbnN0IHsgXHJcbiAgICAgICAgZ2V0Q3VycmVudFByb2plY3QsXHJcbiAgICAgICAgZ2V0Q3VycmVudFRlc3RDb25maWcsXHJcbiAgICAgICAgZ2V0Q3VycmVudE9wZXJhdG9yLFxyXG4gICAgICAgIGdldEN1cnJlbnRDYWJsZUlkLFxyXG4gICAgICAgIGdldEN1cnJlbnRDYWJsZUlkMixcclxuICAgICAgICBuYXZpZ2F0ZVRvLFxyXG4gICAgICAgIGhhc1BsYXllZFNvdW5kLFxyXG4gICAgICAgIHNldFRvYXN0TWVzc2FnZVxyXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG4gICAgXHJcbiAgICBjb25zdCB7IHJlZiB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaGFzUGxheWVkU291bmQpIHtcclxuICAgICAgICAgICAgdXNlRGlzcGxheVN0b3JlLnNldFN0YXRlKHsgaGFzUGxheWVkU291bmQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtoYXNQbGF5ZWRTb3VuZF0pO1xyXG5cclxuICAgIGNvbnN0IHsgY29ubmVjdGlvblN0YXR1cywgbWFpblVuaXRBZGFwdGVyLCByZW1vdGVVbml0QWRhcHRlcixtYWluVW5pdE1vZHVsZXMsc2V0VG90YWxUb2FzdE1lc3NhZ2UgfSA9IHVzZURldmljZVN0b3JlKCk7XHJcbiAgICBcclxuXHJcbiAgICAvLyDojrflj5blvZPliY3pobnnm67mlbDmja5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIFxyXG4gICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE5rWL6K+V6YWN572uXHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFRlc3RDb25maWcoKTtcclxuXHJcbiAgICAvLyDojrflj5blvZPliY3pgInkuK3nmoTmk43kvZzlkZhcclxuICAgIGNvbnN0IGN1cnJlbnRPcGVyYXRvciA9IGdldEN1cnJlbnRPcGVyYXRvcigpO1xyXG5cclxuICAgIC8vIOiOt+WPluW9k+WJjemAieS4reeahOeUtee8hklEXHJcbiAgICBjb25zdCBjdXJyZW50Q2FibGVJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCk7XHJcbiAgICAvLyDojrflj5blvZPliY3pgInkuK3nmoTnlLXnvIZJRDJcclxuICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkMiA9IGdldEN1cnJlbnRDYWJsZUlkMigpO1xyXG5cclxuICAgIGNvbnN0IHBhc3NDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBjb25zdCBjb3BwZXJTdGF0dXMgPSByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdwYXNzJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNmcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAncGFzcyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mcFN0YXR1cyA9PT0gJ3Bhc3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5sZW5ndGg7XHJcbiAgICBcclxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBjb25zdCBjb3BwZXJTdGF0dXMgPSByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdmYWlsJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNmcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAnZmFpbCc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mcFN0YXR1cyA9PT0gJ2ZhaWwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5sZW5ndGg7XHJcblxyXG5cclxuICAgIGNvbnN0IENvbm5lY3RTdGF0dXMgPSBjb25uZWN0aW9uU3RhdHVzPy5DRlBDb25uZWN0U3RhdHVzID8/IGNvbm5lY3Rpb25TdGF0dXM/LlsnODAwMENvbm5lY3RTdGF0dXMnXTtcclxuICAgIFxyXG5cclxuXHJcblxyXG4gICAgLy8g6K6h566X5LiL5LiA5Liq57q/57yGSURcclxuICAgIGNvbnN0IGdldE5leHRDYWJsZUlkID0gKGN1cnJlbnRJZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gY3VycmVudElkLm1hdGNoKC9eKC4qPykoXFxkKykkLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChtYXRjaFsyXSkgKyAxO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bnVtYmVyLnRvU3RyaW5nKCkucGFkU3RhcnQobWF0Y2hbMl0ubGVuZ3RoLCAnMCcpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50SWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVByb2plY3RDbGljayA9ICgpID0+IHtcclxuICAgICAgICBuYXZpZ2F0ZVRvKCdwcm9qZWN0JywgJ21haW4nKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlT3BlcmF0b3JzQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgbmF2aWdhdGVUbygnb3BlcmF0b3JzJywgJ21haW4nKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5rWL6K+V6YWN572u5Yy65Z+f55qE5YaF5a65XHJcbiAgICBjb25zdCByZW5kZXJUZXN0Q29uZmlnQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRDb25maWcubW9kdWxlVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICc4MDAwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGgtZnVsbCBzcGFjZS15LTAuMiB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y3VycmVudENvbmZpZy5wYXJhbXMud2lyZU9yZGVyfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGgtZnVsbCBzcGFjZS15LTAuMiB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+5pm66IO96L+c56uvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y3VycmVudENvbmZpZy5wYXJhbXMucmVmSnVtcGVyfSDot7Pnur/lj4Lnhac8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ29mcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBoLWZ1bGwgc3BhY2UteS0wLjIgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPuiHquWKqE9URFI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y3VycmVudENvbmZpZy5wYXJhbXMubGltaXRWYWx1ZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG5cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XHJcbiAgICAgICAgICAgIDxUaXRsZUJhciB0aXRsZT1cIkhPTUVcIiAvPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs0OTBweF0gYmctWyMzMDMwNDBdIHAtMiBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICB7Lyog5LiK5pa55L+h5oGv5Yy65Z+fICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVszMTVweF0gYmctWyNjNWMyYzVdIHJvdW5kZWQtc20gcC0zIHNoYWRvdy1sZyBmbGV4IGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgey8qIOmhueebrumFjee9rumDqOWIhiAqL31cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IGN1cnNvci1wb2ludGVyXCIgb25DbGljaz17aGFuZGxlUHJvamVjdENsaWNrfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LWJvbGQgbWItMlwiPumhueebru+8mntjdXJyZW50UHJvamVjdD8ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JlZW4tNTAwXCI+e3Bhc3NDb3VudHx8IDB9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9wYXNzLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumAmui/h1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMFwiPntmYWlsQ291bnR8fCAwfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvZmFpbC5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLlpLHotKVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy02IGgtNiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgey8qIOa1i+ivlemFjee9ruWMuuWfnyAqL31cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVsxMDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ3Rlc3RDb25maWcnLCAnbWFpbicpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclRlc3RDb25maWdDb250ZW50KCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1zbVwiPntjdXJyZW50Q29uZmlnPy5tb2R1bGVsYWJsZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz17XCJhdXRvXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHsvKiDnur/nvIZJROWMuuWfnyAqL31cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnY2FibGVJZCcsIGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnID8gJ2NmcCcgOiAnbWFpbicpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGgtZnVsbCBzcGFjZS15LTAuMiB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJ2NmcCcgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrXCI+5LiL5LiA5Liq6L6T5YWlSUQ6IHtjdXJyZW50Q2FibGVJZD8ubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrXCI+5LiL5LiA5Liq6L6T5Ye6SUQ6IHtjdXJyZW50Q2FibGVJZDI/Lm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFja1wiPuS4i+S4gOS4qklEOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Y3VycmVudENhYmxlSWQ/Lm5hbWV9PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgey8qIOaTjeS9nOWRmOWMuuWfnyAqL31cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZXJhdG9yc0NsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7mk43kvZzlkZg6IHtjdXJyZW50T3BlcmF0b3I/Lm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIHsvKiDlupXpg6jmjInpkq7ljLrln58gKi99XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0yXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygndG9vbHMnLCAnbWFpbicpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTIwIGgtMjAgcm91bmRlZC1zbSBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdG9vbHMucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuW3peWFt1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXNtXCI+5bel5YW3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0yIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygncmVzdWx0JywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0yMCBoLTIwIHJvdW5kZWQtc20gc2hhZG93LWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL3Jlc3VsdC5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi57uT5p6cXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtc21cIj7nu5Pmnpw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB7Lyog5bqV6YOo5qCPICovfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Lyog6K6+572u5Y+C54Wn5oyJ6ZKuICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnIHx8IGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdvZnAnKSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTIwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qC55o2u5qih5Z2X57G75Z6L6K6+572u5LiN5ZCM55qE5Y+C54Wn6YC76L6RXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZVRvKCd0b29scycsICdyZWYtY2ZwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdvZnAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygndG9vbHMnLCAncmVmLW9mcCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdvZnAnID8gJ+iuvue9ruWfuuWHhicgOiAn6K6+572u5Y+C54WnJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Lyog5rWL6K+V5oyJ6ZKuICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZkNzczXSB0by1bI2U3YWEyOV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnODAwMCcgfHwgY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQ29ubmVjdFN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn5pyq6L+e5o6l77yM6K+35qOA5p+l6L+e5o6l54q25oCBJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJzgwMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFpblVuaXRNb2R1bGVzPy5bMF0/LmlkICE9PSAnODAwMCcpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCflvZPliY3mqKHlnZfkuI7miYDpgInmoIflh4bkuI3lhbzlrrknKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0VmFsdWUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5saW1pdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdFZhbHVlLmluY2x1ZGVzKCdDaGFubmVsJykgfHwgbGltaXRWYWx1ZS5pbmNsdWRlcygnQ2gnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFpblVuaXRBZGFwdGVyLmlkLmluY2x1ZGVzKCdjaGFubmVsJykgfHwgIXJlbW90ZVVuaXRBZGFwdGVyLmlkLmluY2x1ZGVzKCdjaGFubmVsJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCflvZPliY3pgILphY3lmajkuI7miYDpgInmoIflh4bkuI3lhbzlrrknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGltaXRWYWx1ZS5pbmNsdWRlcygnUGVybScpIHx8IGxpbWl0VmFsdWUuaW5jbHVkZXMoJ1BMJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1haW5Vbml0QWRhcHRlci5pZC5pbmNsdWRlcygncGVybWFuZW50JykgfHwgIXJlbW90ZVVuaXRBZGFwdGVyLmlkLmluY2x1ZGVzKCdwZXJtYW5lbnQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+W9k+WJjemAgumFjeWZqOS4juaJgOmAieagh+WHhuS4jeWFvOWuuScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW1pdFZhbHVlLmluY2x1ZGVzKCdNUFRMJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQZXJtYW5lbnQgPSBtYWluVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ3Blcm1hbmVudCcpIHx8IHJlbW90ZVVuaXRBZGFwdGVyLmlkLmluY2x1ZGVzKCdwZXJtYW5lbnQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNQYXRjaGNvZGUgPSBtYWluVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ3BhdGNoY29kZScpIHx8IHJlbW90ZVVuaXRBZGFwdGVyLmlkLmluY2x1ZGVzKCdwYXRjaGNvZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShoYXNQZXJtYW5lbnQgJiYgaGFzUGF0Y2hjb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+W9k+WJjemAgumFjeWZqOS4juaJgOmAieagh+WHhuS4jeWFvOWuuScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1haW5Vbml0TW9kdWxlcz8uWzBdPy5pZCAhPT0gJ2NmcCcpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCflvZPliY3mqKHlnZfkuI7miYDpgInmoIflh4bkuI3lhbzlrrknKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XlhYnnuqTnsbvlnotcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhYmxlVHlwZSA9IGN1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlNb2RlID0gY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmoLnmja7ljZUv5aSa5qih6I635Y+W5a+55bqU55qE6Lev5b6EXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWFpbk91dFBhdGgsIG1haW5JblBhdGgsIHJlbW90ZU91dFBhdGgsIHJlbW90ZUluUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aSa5qih5YWJ57qk6Lev5b6EXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbk91dFBhdGggPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LlsnbWFpbi1jZnAtbW0tb3V0J10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkluUGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uWydtYWluLWNmcC1pbiddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZU91dFBhdGggPSBjb25uZWN0aW9uU3RhdHVzPy5yZW1vdGVQYXRocz8uWydyZW1vdGUtY2ZwLW1tLW91dCddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUluUGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/LnJlbW90ZVBhdGhzPy5bJ3JlbW90ZS1jZnAtaW4nXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmiYDmnInnq6/lj6Ppg73lt7Lov57mjqVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1haW5PdXRQYXRoLmxlbmd0aCB8fCAhbWFpbkluUGF0aC5sZW5ndGggfHwgIXJlbW90ZU91dFBhdGgubGVuZ3RoIHx8ICFyZW1vdGVJblBhdGgubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCfor7fnoa7kv53miYDmnInlhYnnuqTnq6/lj6Ppg73lt7LmraPnoa7ov57mjqUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5a2Y5Zyo5Y2V5qih6Lez57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzSW52YWxpZENvbm5lY3RvciA9IFsuLi5tYWluT3V0UGF0aCwgLi4ubWFpbkluUGF0aCwgLi4ucmVtb3RlT3V0UGF0aCwgLi4ucmVtb3RlSW5QYXRoXS5zb21lKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbmNsdWRlcygnc20nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW52YWxpZENvbm5lY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZSgn5aSa5qih5YWJ57qk6ZO+6Lev5Lit5a2Y5Zyo5Y2V5qih6Lez57q/77yM6K+35qOA5p+l6L+e5o6lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWNleaooeWFiee6pOi3r+W+hFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5PdXRQYXRoID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bJ21haW4tY2ZwLXNtLW91dCddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5JblBhdGggPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LlsnbWFpbi1jZnAtaW4nXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVPdXRQYXRoID0gY29ubmVjdGlvblN0YXR1cz8ucmVtb3RlUGF0aHM/LlsncmVtb3RlLWNmcC1zbS1vdXQnXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVJblBhdGggPSBjb25uZWN0aW9uU3RhdHVzPy5yZW1vdGVQYXRocz8uWydyZW1vdGUtY2ZwLWluJ10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5omA5pyJ56uv5Y+j6YO95bey6L+e5o6lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWluT3V0UGF0aC5sZW5ndGggfHwgIW1haW5JblBhdGgubGVuZ3RoIHx8ICFyZW1vdGVPdXRQYXRoLmxlbmd0aCB8fCAhcmVtb3RlSW5QYXRoLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZSgn6K+356Gu5L+d5omA5pyJ5YWJ57qk56uv5Y+j6YO95bey5q2j56Gu6L+e5o6lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeaYr+WQpuWtmOWcqOWkmuaooei3s+e6v1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0ludmFsaWRDb25uZWN0b3IgPSBbLi4ubWFpbk91dFBhdGgsIC4uLm1haW5JblBhdGgsIC4uLnJlbW90ZU91dFBhdGgsIC4uLnJlbW90ZUluUGF0aF0uc29tZShpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaW5jbHVkZXMoJ21tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludmFsaWRDb25uZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+WNleaooeWFiee6pOmTvui3r+S4reWtmOWcqOWkmuaooei3s+e6v++8jOivt+ajgOafpei/nuaOpScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJ29mcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWluVW5pdE1vZHVsZXM/LlswXT8uaWQgIT09ICdvZnAnKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn5b2T5YmN5qih5Z2X5LiO5omA6YCJ5qCH5YeG5LiN5YW85a65Jyk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5YWJ57qk57G75Z6L5piv5ZCm5Yy56YWNXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc011bHRpTW9kZSA9IGNhYmxlVHlwZS5pbmNsdWRlcygnT00nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcnRUeXBlID0gT2JqZWN0LnZhbHVlcyhjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHMgfHwge30pWzBdPy5zdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNdWx0aU1vZGUgJiYgcG9ydFR5cGUgIT09ICdtYWluLW9mcC1tbS1vdXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+W9k+WJjeWFiee6pOexu+Wei+W/hemhu+S9v+eUqOWkmuaooeerr+WPo+a1i+ivlScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlNb2RlICYmIHBvcnRUeXBlICE9PSAnbWFpbi1vZnAtc20tb3V0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCflvZPliY3lhYnnuqTnsbvlnovlv4Xpobvkvb/nlKjljZXmqKHnq6/lj6PmtYvor5UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5YWJ57qk6L+e5o6l5Zmo57G75Z6L5piv5ZCm5Yy56YWNXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gT2JqZWN0LnZhbHVlcyhjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHMgfHwge30pWzBdPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzSW52YWxpZENvbm5lY3RvciA9IHBhdGguc29tZShpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNdWx0aU1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaW5jbHVkZXMoJ3NtLScpIHx8IGl0ZW0uaW5jbHVkZXMoJ3NtYy0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbmNsdWRlcygnbW0tJykgfHwgaXRlbS5pbmNsdWRlcygnbW1jLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnZhbGlkQ29ubmVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoaXNNdWx0aU1vZGUgPyAn5pyq5qOA5rWL5Yiw5aSa5qih5YWJ57qk77yM6K+35qOA5p+l5YWJ57qk6L+e5o6lJyA6ICfmnKrmo4DmtYvliLDljZXmqKHlhYnnuqTvvIzor7fmo4Dmn6XlhYnnuqTov57mjqUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvblN0YXR1cz8uT0ZQU3RhdHVzKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCfor7fmjqXlhaXlrp7pmYXooqvmtYvpk77ot6/vvIzov5vooYzmtYvor5UnKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XlhYnnuqTov57mjqXmlbDph49cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpYmVyQ29ubmVjdG9yQ291bnQgPSBwYXRoLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbmNsdWRlcygnc20tJykgfHwgaXRlbS5pbmNsdWRlcygnbW0tJykgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaW5jbHVkZXMoJ3NtYy0nKSB8fCBpdGVtLmluY2x1ZGVzKCdtbWMtJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpYmVyQ29ubmVjdG9yQ291bnQgPiAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+ivpeWcuuaZr+S7heaUr+aMgeS9v+eUqOS4gOauteWFiee6pOi/nuaOpea1i+ivleS7quS4jumTvui3rycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygndGVzdGluZycsJ25vc2F2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VFZmZlY3QiLCJJbWFnZSIsIlN0YXR1c0JhciIsIlRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwidXNlRGV2aWNlU3RvcmUiLCJnZXRBc3NldFVybCIsIkhvbWVQYWdlIiwiZ2V0Q3VycmVudFByb2plY3QiLCJnZXRDdXJyZW50VGVzdENvbmZpZyIsImdldEN1cnJlbnRPcGVyYXRvciIsImdldEN1cnJlbnRDYWJsZUlkIiwiZ2V0Q3VycmVudENhYmxlSWQyIiwibmF2aWdhdGVUbyIsImhhc1BsYXllZFNvdW5kIiwic2V0VG9hc3RNZXNzYWdlIiwicmVmIiwiZ2V0U3RhdGUiLCJzZXRTdGF0ZSIsImNvbm5lY3Rpb25TdGF0dXMiLCJtYWluVW5pdEFkYXB0ZXIiLCJyZW1vdGVVbml0QWRhcHRlciIsIm1haW5Vbml0TW9kdWxlcyIsInNldFRvdGFsVG9hc3RNZXNzYWdlIiwiY3VycmVudFByb2plY3QiLCJjdXJyZW50Q29uZmlnIiwiY3VycmVudE9wZXJhdG9yIiwiY3VycmVudENhYmxlSWQiLCJjdXJyZW50Q2FibGVJZDIiLCJwYXNzQ291bnQiLCJ0ZXN0UmVzdWx0cyIsImZpbHRlciIsInJlc3VsdCIsImNvcHBlclN0YXR1cyIsIkNvcHBlclJlc3VsdFN0YXR1cyIsImNmcFN0YXR1cyIsIkNGUFJlc3VsdFN0YXR1cyIsIm9mcFN0YXR1cyIsIm9mcFJlc3VsdFN0YXR1cyIsImxlbmd0aCIsImZhaWxDb3VudCIsIkNvbm5lY3RTdGF0dXMiLCJDRlBDb25uZWN0U3RhdHVzIiwiZ2V0TmV4dENhYmxlSWQiLCJjdXJyZW50SWQiLCJtYXRjaCIsInByZWZpeCIsIm51bWJlciIsInBhcnNlSW50IiwidG9TdHJpbmciLCJwYWRTdGFydCIsImhhbmRsZVByb2plY3RDbGljayIsImhhbmRsZU9wZXJhdG9yc0NsaWNrIiwicmVuZGVyVGVzdENvbmZpZ0NvbnRlbnQiLCJtb2R1bGVUeXBlIiwiZGl2IiwiY2xhc3NOYW1lIiwicGFyYW1zIiwibGltaXRWYWx1ZSIsImNhYmxlVHlwZSIsIndpcmVPcmRlciIsInJlZkp1bXBlciIsInRpdGxlIiwib25DbGljayIsIm5hbWUiLCJzcGFuIiwic3JjIiwiYWx0Iiwic2l6ZXMiLCJmaWxsIiwibW9kdWxlbGFibGUiLCJwIiwiYnV0dG9uIiwiaWQiLCJpbmNsdWRlcyIsImhhc1Blcm1hbmVudCIsImhhc1BhdGNoY29kZSIsImlzTXVsdGlNb2RlIiwibWFpbk91dFBhdGgiLCJtYWluSW5QYXRoIiwicmVtb3RlT3V0UGF0aCIsInJlbW90ZUluUGF0aCIsIm1haW5QYXRocyIsInBhdGgiLCJyZW1vdGVQYXRocyIsImhhc0ludmFsaWRDb25uZWN0b3IiLCJzb21lIiwiaXRlbSIsInBvcnRUeXBlIiwiT2JqZWN0IiwidmFsdWVzIiwic3RhcnQiLCJPRlBTdGF0dXMiLCJmaWJlckNvbm5lY3RvckNvdW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/HomePage.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/MenuList.js":
/*!**************************************************!*\
!*** ./src/components/dsxpage/fluke/MenuList.js ***!
\**************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MenuList)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n// 菜单数据定义\nconst menuData = {\n MODULE: {\n title: '模块',\n items: [\n {\n value: '8000',\n label: 'DSX-8000'\n },\n {\n value: 'cfp',\n label: 'CertiFiber Pro-Quad'\n },\n {\n value: 'ofp',\n label: 'OptiFiber Pro-Quad'\n }\n ]\n },\n CABLE_TYPE: {\n title: '电缆类型',\n subTitle: '电缆类型',\n items: [\n {\n value: 'custom',\n label: '定制',\n disabled: true\n },\n {\n value: 'general',\n label: '通用',\n children: [\n // { value: 'Cat8 S/FTP', label: 'Cat8 S/FTP' },\n // { value: 'Cat7A S/FTP', label: 'Cat7A S/FTP' },\n // { value: 'Cat7 S/FTP', label: 'Cat7 S/FTP' },\n // { value: 'Cat6A S/FTP', label: 'Cat6A S/FTP' },\n {\n value: 'Cat6A U/UTP',\n label: 'Cat6A U/UTP'\n },\n {\n value: 'Cat6A F/UTP',\n label: 'Cat6A F/UTP'\n },\n {\n value: 'Cat6 U/UTP',\n label: 'Cat6 U/UTP'\n },\n {\n value: 'Cat6 F/UTP',\n label: 'Cat6 F/UTP'\n },\n // { value: 'Cat6 U/FTP', label: 'Cat6 U/FTP' },\n {\n value: 'Cat5e U/UTP',\n label: 'Cat5e U/UTP'\n },\n {\n value: 'Cat5e F/UTP',\n label: 'Cat5e F/UTP'\n }\n ]\n },\n {\n value: 'coaxial',\n label: '通用同轴电缆',\n disabled: true\n },\n {\n value: 'manufacturer',\n label: '制造商',\n disabled: true\n }\n ]\n },\n LIMIT_VALUE: {\n title: '测试极限值',\n subTitle: '极限值组',\n items: [\n {\n value: 'TIA',\n label: 'TIA',\n children: {\n // Cat8: {\n // label: 'Cat8',\n // children: [\n // { value: 'TIA Cat 8 Perm.Link', label: 'TIA Cat 8 Perm.Link' },\n // { value: 'TIA Cat 8 Perm.Link (+ALL)', label: 'TIA Cat 8 Perm.Link (+ALL)' },\n // { value: 'TIA Cat 8 Perm.Link (+PoE)', label: 'TIA Cat 8 Perm.Link (+PoE)' },\n // { value: 'TIA Cat 8 Channel', label: 'TIA Cat 8 Channel' },\n // { value: 'TIA Cat 8 Channel (+ALL)', label: 'TIA Cat 8 Channel (+ALL)' },\n // { value: 'TIA Cat 8 Channel (+PoE)', label: 'TIA Cat 8 Channel (+PoE)' }\n // ]\n // },\n Cat6A: {\n label: 'Cat6A',\n children: [\n {\n value: 'TIA Cat 6A Perm.Link',\n label: 'TIA Cat 6A Perm.Link'\n },\n {\n value: 'TIA Cat 6A Perm.Link (+ALL)',\n label: 'TIA Cat 6A Perm.Link (+ALL)'\n },\n {\n value: 'TIA Cat 6A Perm.Link (+PoE)',\n label: 'TIA Cat 6A Perm.Link (+PoE)'\n },\n {\n value: 'TIA Cat 6A Channel',\n label: 'TIA Cat 6A Channel'\n },\n {\n value: 'TIA Cat 6A Channel (+ALL)',\n label: 'TIA Cat 6A Channel (+ALL)'\n },\n {\n value: 'TIA Cat 6A Channel (+PoE)',\n label: 'TIA Cat 6A Channel (+PoE)'\n },\n {\n value: 'TIA Cat 6A MPTL',\n label: 'TIA Cat 6A MPTL'\n },\n {\n value: 'TIA Cat 6A MPTL (+PoE)',\n label: 'TIA Cat 6A MPTL (+PoE)'\n },\n // { value: 'TIA 1005 Cat 6A Perm.Link', label: 'TIA 1005 Cat 6A Perm.Link' },\n // { value: 'TIA 1005 Cat 6A Channel', label: 'TIA 1005 Cat 6A Channel' },\n {\n value: 'TIA 1005 Cat 6A Channel E1 (+ALL)',\n label: 'TIA 1005 Cat 6A Channel E1 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6A Channel E1 (+PoE)', label: 'TIA 1005 Cat 6A Channel E1 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6A Channel E2 (+ALL)',\n label: 'TIA 1005 Cat 6A Channel E2 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6A Channel E2 (+PoE)', label: 'TIA 1005 Cat 6A Channel E2 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6A Channel E3 (+ALL)',\n label: 'TIA 1005 Cat 6A Channel E3 (+ALL)'\n }\n ]\n },\n Cat6: {\n label: 'Cat6',\n children: [\n {\n value: 'TIA Cat 6 Perm.Link',\n label: 'TIA Cat 6 Perm.Link'\n },\n {\n value: 'TIA Cat 6 Perm.Link (+ALL)',\n label: 'TIA Cat 6 Perm.Link (+ALL)'\n },\n {\n value: 'TIA Cat 6 Perm.Link (+PoE)',\n label: 'TIA Cat 6 Perm.Link (+PoE)'\n },\n {\n value: 'TIA Cat 6 Channel',\n label: 'TIA Cat 6 Channel'\n },\n {\n value: 'TIA Cat 6 Channel (+ALL)',\n label: 'TIA Cat 6 Channel (+ALL)'\n },\n {\n value: 'TIA Cat 6 Channel (+PoE)',\n label: 'TIA Cat 6 Channel (+PoE)'\n },\n {\n value: 'TIA Cat 6 MPTL',\n label: 'TIA Cat 6 MPTL'\n },\n {\n value: 'TIA Cat 6 MPTL (+PoE)',\n label: 'TIA Cat 6 MPTL (+PoE)'\n },\n // { value: 'TIA 1005 Cat 6 Perm.Link', label: 'TIA 1005 Cat 6 Perm.Link' },\n // { value: 'TIA 1005 Cat 6 Channel', label: 'TIA 1005 Cat 6 Channel' },\n // { value: 'TIA 1005 Cat 6 Channel (+ALL)', label: 'TIA 1005 Cat 6 Channel (+ALL)' },\n // { value: 'TIA 1005 Cat 6 Channel (+PoE)', label: 'TIA 1005 Cat 6 Channel (+PoE)' },\n {\n value: 'TIA 1005 Cat 6 Channel E1 (+ALL)',\n label: 'TIA 1005 Cat 6 Channel E1 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6 Channel E1 (+PoE)', label: 'TIA 1005 Cat 6 Channel E1 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6 Channel E2 (+ALL)',\n label: 'TIA 1005 Cat 6 Channel E2 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6 Channel E2 (+PoE)', label: 'TIA 1005 Cat 6 Channel E2 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6 Channel E3 (+ALL)',\n label: 'TIA 1005 Cat 6 Channel E3 (+ALL)'\n }\n ]\n },\n Cat5e: {\n label: 'Cat5e',\n children: [\n {\n value: 'TIA Cat 5e Perm.Link',\n label: 'TIA Cat 5e Perm.Link'\n },\n {\n value: 'TIA Cat 5e Perm.Link (+ALL)',\n label: 'TIA Cat 5e Perm.Link (+ALL)'\n },\n {\n value: 'TIA Cat 5e Perm.Link (+PoE)',\n label: 'TIA Cat 5e Perm.Link (+PoE)'\n },\n {\n value: 'TIA Cat 5e Channel',\n label: 'TIA Cat 5e Channel'\n },\n {\n value: 'TIA Cat 5e Channel (+ALL)',\n label: 'TIA Cat 5e Channel (+ALL)'\n },\n {\n value: 'TIA Cat 5e Channel (+PoE)',\n label: 'TIA Cat 5e Channel (+PoE)'\n },\n {\n value: 'TIA Cat 5e MPTL',\n label: 'TIA Cat 5e MPTL'\n },\n {\n value: 'TIA Cat 5e MPTL (+PoE)',\n label: 'TIA Cat 5e MPTL (+PoE)'\n },\n // { value: 'TIA 1005 Cat 5e Perm.Link', label: 'TIA 1005 Cat 5e Perm.Link' },\n // { value: 'TIA 1005 Cat 5e Channel', label: 'TIA 1005 Cat 5e Channel' },\n // { value: 'TIA 1005 Cat 5e Channel (+ALL)', label: 'TIA 1005 Cat 5e Channel (+ALL)' },\n // { value: 'TIA 1005 Cat 5e Channel (+PoE)', label: 'TIA 1005 Cat 5e Channel (+PoE)' },\n {\n value: 'TIA 1005 Cat 5e Channel E1 (+ALL)',\n label: 'TIA 1005 Cat 5e Channel E1 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 5e Channel E1 (+PoE)', label: 'TIA 1005 Cat 5e Channel E1 (+PoE)' },\n {\n value: 'TIA 1005 Cat 5e Channel E2 (+ALL)',\n label: 'TIA 1005 Cat 5e Channel E2 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 5e Channel E2 (+PoE)', label: 'TIA 1005 Cat 5e Channel E2 (+PoE)' },\n {\n value: 'TIA 1005 Cat 5e Channel E3 (+ALL)',\n label: 'TIA 1005 Cat 5e Channel E3 (+ALL)'\n }\n ]\n }\n }\n },\n {\n value: 'ISO',\n label: 'ISO',\n children: {\n // 'Class Ⅱ': {\n // label: 'Class Ⅱ',\n // children: [\n // { value: 'ISO11801 PL Class Ⅱ', label: 'ISO11801 PL Class Ⅱ' },\n // { value: 'ISO11801 PL Class Ⅱ (+ALL)', label: 'ISO11801 PL Class Ⅱ (+ALL)' },\n // { value: 'ISO11801 PL Class Ⅱ (+PoE)', label: 'ISO11801 PL Class Ⅱ (+PoE)' },\n // { value: 'ISO11801 Channel Class Ⅱ', label: 'ISO11801 Channel Class Ⅱ' },\n // { value: 'ISO11801 Channel Class Ⅱ (+ALL)', label: 'ISO11801 Channel Class Ⅱ (+ALL)' },\n // { value: 'ISO11801 Channel Class Ⅱ (+PoE)', label: 'ISO11801 Channel Class Ⅱ (+PoE)' }\n // ],\n // disabled: true \n // },\n // 'Class Ⅰ': {\n // label: 'Class Ⅰ',\n // children: [\n // { value: 'ISO11801 PL Class Ⅰ', label: 'ISO11801 PL Class Ⅰ' },\n // { value: 'ISO11801 PL Class Ⅰ (+ALL)', label: 'ISO11801 PL Class Ⅰ (+ALL)' },\n // { value: 'ISO11801 PL Class Ⅰ (+PoE)', label: 'ISO11801 PL Class Ⅰ (+PoE)' },\n // { value: 'ISO11801 Channel Class Ⅰ', label: 'ISO11801 Channel Class Ⅰ' },\n // { value: 'ISO11801 Channel Class Ⅰ (+ALL)', label: 'ISO11801 Channel Class Ⅰ (+ALL)' },\n // { value: 'ISO11801 Channel Class Ⅰ (+PoE)', label: 'ISO11801 Channel Class Ⅰ (+PoE)' }\n // ],\n // disabled: true \n // },\n // 'Class Fa': {\n // label: 'Class Fa',\n // children: [\n // { value: 'ISO11801 PL2 Class Fa', label: 'ISO11801 PL2 Class Fa' },\n // { value: 'ISO11801 PL2 Class Fa (+ALL)', label: 'ISO11801 PL2 Class Fa (+ALL)' },\n // { value: 'ISO11801 PL2 Class Fa (+PoE)', label: 'ISO11801 PL2 Class Fa (+PoE)' },\n // { value: 'ISO11801 PL3 Class Fa', label: 'ISO11801 PL3 Class Fa' },\n // { value: 'ISO11801 PL3 Class Fa (+ALL)', label: 'ISO11801 PL3 Class Fa (+ALL)' },\n // { value: 'ISO11801 PL3 Class Fa (+PoE)', label: 'ISO11801 PL3 Class Fa (+PoE)' },\n // { value: 'ISO11801 Channel Class Fa', label: 'ISO11801 Channel Class Fa' },\n // { value: 'ISO11801 Channel Class Fa (+ALL)', label: 'ISO11801 Channel Class Fa (+ALL)' },\n // { value: 'ISO11801 Channel Class Fa (+PoE)', label: 'ISO11801 Channel Class Fa (+PoE)' }\n // ],\n // disabled: true \n // },\n // 'Class F': {\n // label: 'Class F',\n // children: [\n // { value: 'ISO11801 PL Class F', label: 'ISO11801 PL Class F' },\n // { value: 'ISO11801 PL Class F (+ALL)', label: 'ISO11801 PL Class F (+ALL)' },\n // { value: 'ISO11801 PL Class F (+PoE)', label: 'ISO11801 PL Class F (+PoE)' },\n // { value: 'ISO11801 Channel Class F', label: 'ISO11801 Channel Class F' },\n // { value: 'ISO11801 Channel Class F (+ALL)', label: 'ISO11801 Channel Class F (+ALL)' },\n // { value: 'ISO11801 Channel Class F (+PoE)', label: 'ISO11801 Channel Class F (+PoE)' }\n // ],\n // disabled: true \n // },\n 'Class Ea': {\n label: 'Class Ea',\n children: [\n {\n value: 'ISO11801 PL2 Class Ea',\n label: 'ISO11801 PL2 Class Ea'\n },\n {\n value: 'ISO11801 PL2 Class Ea (+ALL)',\n label: 'ISO11801 PL2 Class Ea (+ALL)'\n },\n {\n value: 'ISO11801 PL2 Class Ea (+PoE)',\n label: 'ISO11801 PL2 Class Ea (+PoE)'\n },\n {\n value: 'ISO11801 PL3 Class Ea',\n label: 'ISO11801 PL3 Class Ea'\n },\n {\n value: 'ISO11801 PL3 Class Ea (+ALL)',\n label: 'ISO11801 PL3 Class Ea (+ALL)'\n },\n {\n value: 'ISO11801 PL3 Class Ea (+PoE)',\n label: 'ISO11801 PL3 Class Ea (+PoE)'\n },\n {\n value: 'ISO11801 Channel Class Ea',\n label: 'ISO11801 Channel Class Ea'\n },\n {\n value: 'ISO11801 Channel Class Ea (+ALL)',\n label: 'ISO11801 Channel Class Ea (+ALL)'\n },\n {\n value: 'ISO11801 Channel Class Ea (+PoE)',\n label: 'ISO11801 Channel Class Ea (+PoE)'\n },\n {\n value: 'ISO MPTL Class Ea',\n label: 'ISO MPTL Class Ea'\n },\n {\n value: 'ISO MPTL Class Ea (+PoE)',\n label: 'ISO MPTL Class Ea (+PoE)'\n }\n ]\n },\n 'Class E': {\n label: 'Class E',\n children: [\n {\n value: 'ISO11801 PL Class E',\n label: 'ISO11801 PL Class E'\n },\n {\n value: 'ISO11801 PL Class E (+ALL)',\n label: 'ISO11801 PL Class E (+ALL)'\n },\n {\n value: 'ISO11801 PL Class E (+PoE)',\n label: 'ISO11801 PL Class E (+PoE)'\n },\n {\n value: 'ISO11801 Channel Class E',\n label: 'ISO11801 Channel Class E'\n },\n {\n value: 'ISO11801 Channel Class E (+ALL)',\n label: 'ISO11801 Channel Class E (+ALL)'\n },\n {\n value: 'ISO11801 Channel Class E (+PoE)',\n label: 'ISO11801 Channel Class E (+PoE)'\n },\n {\n value: 'ISO MPTL Class E',\n label: 'ISO MPTL Class E'\n },\n {\n value: 'ISO MPTL Class E (+PoE)',\n label: 'ISO MPTL Class E (+PoE)'\n }\n ]\n },\n 'Class D': {\n label: 'Class D',\n children: [\n {\n value: 'ISO11801 PL Class D',\n label: 'ISO11801 PL Class D'\n },\n {\n value: 'ISO11801 PL Class D (+ALL)',\n label: 'ISO11801 PL Class D (+ALL)'\n },\n {\n value: 'ISO11801 PL Class D (+PoE)',\n label: 'ISO11801 PL Class D (+PoE)'\n },\n {\n value: 'ISO11801 Channel Class D',\n label: 'ISO11801 Channel Class D'\n },\n {\n value: 'ISO11801 Channel Class D (+ALL)',\n label: 'ISO11801 Channel Class D (+ALL)'\n },\n {\n value: 'ISO11801 Channel Class D (+PoE)',\n label: 'ISO11801 Channel Class D (+PoE)'\n },\n {\n value: 'ISO MPTL Class D',\n label: 'ISO MPTL Class D'\n },\n {\n value: 'ISO MPTL Class D (+PoE)',\n label: 'ISO MPTL Class D (+PoE)'\n }\n ]\n }\n }\n },\n {\n value: '区域',\n label: '区域',\n children: {\n '中国': {\n label: '中国',\n children: [\n // { value: 'GBT 50312-2016 Cat 7A PL no CP', label: 'GB/T 50312-2016 Cat 7A PL no CP' },\n // { value: 'GBT 50312-2016 Cat 7A PL no CP (+ALL)', label: 'GB/T 50312-2016 Cat 7A PL no CP (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7A PL no CP (+PoE)', label: 'GB/T 50312-2016 Cat 7A PL no CP (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7A PL with CP', label: 'GB/T 50312-2016 Cat 7A PL with CP' },\n // { value: 'GBT 50312-2016 Cat 7A PL with CP (+ALL)', label: 'GB/T 50312-2016 Cat 7A PL with CP (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7A PL with CP (+PoE)', label: 'GB/T 50312-2016 Cat 7A PL with CP (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7A Ch', label: 'GB/T 50312-2016 Cat 7A Ch' },\n // { value: 'GBT 50312-2016 Cat 7A Ch (+ALL)', label: 'GB/T 50312-2016 Cat 7A Ch (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7A Ch (+PoE)', label: 'GB/T 50312-2016 Cat 7A Ch (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7 PL', label: 'GB/T 50312-2016 Cat 7 PL' },\n // { value: 'GBT 50312-2016 Cat 7 PL (+ALL)', label: 'GB/T 50312-2016 Cat 7 PL (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7 PL (+PoE)', label: 'GB/T 50312-2016 Cat 7 PL (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7 Ch', label: 'GB/T 50312-2016 Cat 7 Ch' },\n // { value: 'GBT 50312-2016 Cat 7 Ch (+ALL)', label: 'GB/T 50312-2016 Cat 7 Ch (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7 Ch (+PoE)', label: 'GB/T 50312-2016 Cat 7 Ch (+PoE)' },\n {\n value: 'GBT 50312-2016 Cat 6A PL no CP',\n label: 'GB/T 50312-2016 Cat 6A PL no CP'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL no CP (+ALL)',\n label: 'GB/T 50312-2016 Cat 6A PL no CP (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL no CP (+PoE)',\n label: 'GB/T 50312-2016 Cat 6A PL no CP (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL with CP',\n label: 'GB/T 50312-2016 Cat 6A PL with CP'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL with CP (+ALL)',\n label: 'GB/T 50312-2016 Cat 6A PL with CP (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL with CP (+PoE)',\n label: 'GB/T 50312-2016 Cat 6A PL with CP (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A Ch',\n label: 'GB/T 50312-2016 Cat 6A Ch'\n },\n {\n value: 'GBT 50312-2016 Cat 6A Ch (+ALL)',\n label: 'GB/T 50312-2016 Cat 6A Ch (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A Ch (+PoE)',\n label: 'GB/T 50312-2016 Cat 6A Ch (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 PL',\n label: 'GB/T 50312-2016 Cat 6 PL'\n },\n {\n value: 'GBT 50312-2016 Cat 6 PL (+ALL)',\n label: 'GB/T 50312-2016 Cat 6 PL (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 PL (+PoE)',\n label: 'GB/T 50312-2016 Cat 6 PL (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 Ch',\n label: 'GB/T 50312-2016 Cat 6 Ch'\n },\n {\n value: 'GBT 50312-2016 Cat 6 Ch (+ALL)',\n label: 'GB/T 50312-2016 Cat 6 Ch (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 Ch (+PoE)',\n label: 'GB/T 50312-2016 Cat 6 Ch (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e PL',\n label: 'GB/T 50312-2016 Cat 5e PL'\n },\n {\n value: 'GBT 50312-2016 Cat 5e PL (+ALL)',\n label: 'GB/T 50312-2016 Cat 5e PL (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e PL (+PoE)',\n label: 'GB/T 50312-2016 Cat 5e PL (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e Ch',\n label: 'GB/T 50312-2016 Cat 5e Ch'\n },\n {\n value: 'GBT 50312-2016 Cat 5e Ch (+ALL)',\n label: 'GB/T 50312-2016 Cat 5e Ch (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e Ch (+PoE)',\n label: 'GB/T 50312-2016 Cat 5e Ch (+PoE)'\n }\n ]\n }\n }\n },\n {\n value: '跳线',\n label: '跳线',\n disabled: true,\n children: {\n 'Cat6A Patch Cords': {\n label: 'Cat6A Patch Cords',\n disabled: true,\n children: []\n },\n 'Cat6 Patch Cords': {\n label: 'Cat6 Patch Cords',\n disabled: true,\n children: []\n },\n 'Cat5e Patch Cords': {\n label: 'Cat5e Patch Cords',\n disabled: true,\n children: []\n },\n 'M12 Patch Cords': {\n label: 'M12 Patch Cords',\n disabled: true,\n children: []\n }\n }\n },\n {\n value: '应用',\n label: '应用',\n disabled: false,\n children: [\n {\n value: 'Profinet',\n label: 'Profinet'\n }\n ]\n }\n ]\n },\n WIRE_ORDER: {\n title: '插座配置',\n items: [\n {\n value: 'T568A',\n label: 'T568A',\n disabled: true\n },\n {\n value: 'T568B',\n label: 'T568B'\n },\n {\n value: 'Ethernet Two-Pair',\n label: 'Ethernet Two-Pair'\n },\n {\n value: 'M12-D Two-Pair',\n label: 'M12-D Two-Pair'\n }\n ]\n },\n FIBER_TYPE: {\n title: '光纤类型',\n subTitle: '电缆组',\n items: [\n {\n value: '定制',\n label: '定制',\n disabled: true,\n children: {}\n },\n {\n value: 'general',\n label: '通用',\n children: [\n {\n value: 'OM1 Mulitmode 62.5',\n label: 'OM1 Mulitmode 62.5'\n },\n {\n value: 'OM2 Mulitmode 50',\n label: 'OM2 Mulitmode 50'\n },\n {\n value: 'OM3 Mulitmode 50',\n label: 'OM3 Mulitmode 50'\n },\n {\n value: 'OM4 Mulitmode 50',\n label: 'OM4 Mulitmode 50'\n },\n {\n value: 'OM5 Mulitmode 50',\n label: 'OM5 Mulitmode 50'\n },\n {\n value: 'OS1 Singlemode',\n label: 'OS1 Singlemode'\n },\n {\n value: 'OS2 Singlemode',\n label: 'OS2 Singlemode'\n }\n ]\n },\n {\n value: '制造商',\n label: '制造商',\n disabled: true,\n children: {}\n }\n ]\n },\n CFP_LIMIT: {\n title: '测试极限值',\n subTitle: '极限值组',\n items: [\n {\n value: 'TIA',\n label: 'TIA',\n children: [\n {\n value: 'TIA-568.3-E Multimode (STD)',\n label: 'TIA-568.3-E Multimode (STD)'\n },\n {\n value: 'TIA-568.3-E Multimode (REF)',\n label: 'TIA-568.3-E Multimode (REF)'\n },\n {\n value: 'TIA-568.3-E Singlemode ISP (STD)',\n label: 'TIA-568.3-E Singlemode ISP (STD)'\n },\n {\n value: 'TIA-568.3-E Singlemode OSP (STD)',\n label: 'TIA-568.3-E Singlemode OSP (STD)'\n },\n {\n value: 'TIA-568.3-E Singlemode ISP (REF)',\n label: 'TIA-568.3-E Singlemode ISP (REF)'\n },\n {\n value: 'TIA-568.3-E Singlemode OSP (REF)',\n label: 'TIA-568.3-E Singlemode OSP (REF)'\n }\n ]\n },\n {\n value: 'China',\n label: '中国',\n children: [\n {\n value: 'GB/T 50312-2016 Fiber Link',\n label: 'GB/T 50312-2016 Fiber Link'\n },\n {\n value: 'GB/T 50312-2016 OF-300 Ch',\n label: 'GB/T 50312-2016 OF-300 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-500 Ch',\n label: 'GB/T 50312-2016 OF-500 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-2000 Ch',\n label: 'GB/T 50312-2016 OF-2000 Ch'\n }\n ]\n },\n {\n value: 'ISO',\n label: 'ISO',\n children: [\n {\n value: 'ISO/IEC 11801-2002 Fibre Link',\n label: 'ISO/IEC 11801-2002 Fibre Link'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-300 CH',\n label: 'ISO/IEC 11801-2002 OF-300 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-500 CH',\n label: 'ISO/IEC 11801-2002 OF-500 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-2000 CH',\n label: 'ISO/IEC 11801-2002 OF-2000 CH'\n },\n {\n value: 'ISO/IEC 14763-3:2024 (Draft)',\n label: 'ISO/IEC 14763-3:2024 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2014',\n label: 'ISO/IEC 14763-3:2014'\n },\n {\n value: 'ISO/IEC 14763-3',\n label: 'ISO/IEC 14763-3'\n }\n ]\n }\n ]\n },\n OFP_LIMIT: {\n title: 'OFP极限值',\n items: [\n {\n value: 'TIA',\n label: 'TIA',\n children: [\n {\n value: 'ANSI/TIA-568.3-E',\n label: 'ANSI/TIA-568.3-E'\n },\n {\n value: 'ANSI/TIA-568.3-E RL = 20 dB',\n label: 'ANSI/TIA-568.3-E RL = 20 dB'\n },\n {\n value: 'ANSI/TIA-568.3-E RL = 35 dB',\n label: 'ANSI/TIA-568.3-E RL = 35 dB'\n },\n {\n value: 'ANSI/TIA-568.3-E RL = 55 dB',\n label: 'ANSI/TIA-568.3-E RL = 55 dB'\n }\n ]\n },\n {\n value: 'China',\n label: '中国',\n children: [\n {\n value: 'GB/T 50312-2016 Fiber Link',\n label: 'GB/T 50312-2016 Fiber Link'\n },\n {\n value: 'GB/T 50312-2016 OF-300 Ch',\n label: 'GB/T 50312-2016 OF-300 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-500 Ch',\n label: 'GB/T 50312-2016 OF-500 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-2000 Ch',\n label: 'GB/T 50312-2016 OF-2000 Ch'\n }\n ]\n },\n {\n value: 'ISO',\n label: 'ISO',\n children: [\n {\n value: 'ISO/IEC 11801-2002 Fibre Link',\n label: 'ISO/IEC 11801-2002 Fibre Link'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-300 CH',\n label: 'ISO/IEC 11801-2002 OF-300 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-500 CH',\n label: 'ISO/IEC 11801-2002 OF-500 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-2000 CH',\n label: 'ISO/IEC 11801-2002 OF-2000 CH'\n },\n {\n value: 'ISO/IEC 14763-3:2024 (Draft)',\n label: 'ISO/IEC 14763-3:2024 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2024 RL = 20 (Draft)',\n label: 'ISO/IEC 14763-3:2024 RL = 20 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2024 RL = 35 (Draft)',\n label: 'ISO/IEC 14763-3:2024 RL = 35 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2024 RL = 60 (Draft)',\n label: 'ISO/IEC 14763-3:2024 RL = 60 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2014',\n label: 'ISO/IEC 14763-3:2014'\n },\n {\n value: 'ISO/IEC 14763-3',\n label: 'ISO/IEC 14763-3'\n }\n ]\n }\n ]\n }\n};\nfunction MenuList() {\n const { navigation, getCurrentProject, updateProject, navigateTo, goBack } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const currentProject = getCurrentProject();\n const { menuType, selectedConfigId } = navigation.current.params;\n const [selectedPath, setSelectedPath] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [currentMenu, setCurrentMenu] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(menuData[menuType]);\n // 获取当前选中的配置\n const currentConfig = currentProject.testConfigs.find((config)=>config.id === selectedConfigId);\n // 处理菜单选项选择\n const handleMenuSelect = (item)=>{\n if (item.disabled) return;\n if (item.children) {\n // 如果有子菜单,更新路径和当前菜单\n setSelectedPath([\n ...selectedPath,\n item\n ]);\n setCurrentMenu(item.children);\n return;\n }\n // 如果是最终选项,更新配置并返回\n let updatedConfig = {\n ...currentConfig\n };\n switch(menuType){\n case 'CABLE_TYPE':\n updatedConfig.params.cableType = item.value;\n break;\n case 'LIMIT_VALUE':\n updatedConfig.params.limitValue = item.value;\n break;\n case 'WIRE_ORDER':\n updatedConfig.params.wireOrder = item.value;\n break;\n case 'FIBER_TYPE':\n updatedConfig.params.cableType = item.value;\n if (updatedConfig.moduleType === 'cfp') {\n if (item.value.includes('OM')) {\n updatedConfig.params.limitValue = 'TIA-568.3-E Multimode (STD)';\n } else {\n updatedConfig.params.limitValue = 'TIA-568.3-E Singlemode ISP (STD)';\n }\n }\n break;\n case 'CFP_LIMIT':\n updatedConfig.params.limitValue = item.value;\n break;\n case 'OFP_LIMIT':\n updatedConfig.params.limitValue = item.value;\n break;\n case 'MODULE':\n // 如果模块类型发生变化,完全替换配置对象\n if (currentConfig.moduleType !== item.value) {\n switch(item.value){\n case '8000':\n updatedConfig = {\n id: currentConfig.id,\n moduleType: '8000',\n modulelable: 'DSX-8000',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B'\n }\n };\n break;\n case 'cfp':\n updatedConfig = {\n id: currentConfig.id,\n moduleType: 'cfp',\n modulelable: 'CertiFiber Pro-Quad',\n params: {\n limitValue: 'TIA-568.3-E Multimode (STD)',\n cableType: 'OM3 Multimode 50',\n refJumper: '1',\n spliceCount: '0',\n connectorCount: '2'\n }\n };\n break;\n case 'ofp':\n updatedConfig = {\n id: currentConfig.id,\n moduleType: 'ofp',\n modulelable: 'OptiFiber Pro-Quad',\n params: {\n limitValue: 'General Fiber RL = 35 dB',\n cableType: 'OM3 Multimode 50'\n }\n };\n break;\n }\n } else {\n updatedConfig.moduleType = item.value;\n updatedConfig.modulelable = item.label;\n }\n break;\n }\n // 更新项目数据\n const updatedConfigs = currentProject.testConfigs.map((config)=>{\n if (config.id === selectedConfigId) {\n return updatedConfig;\n }\n return config;\n });\n const projectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.projectIndex;\n updateProject(projectIndex, {\n testConfigs: updatedConfigs\n });\n // 返回上一页\n goBack();\n };\n // 处理返回上一级\n const handleBack = ()=>{\n if (selectedPath.length > 0) {\n const newPath = selectedPath.slice(0, -1);\n setSelectedPath(newPath);\n if (newPath.length === 0) {\n setCurrentMenu(menuData[menuType]);\n } else {\n let current = menuData[menuType];\n for (const item of newPath){\n current = current.items.find((i)=>i.value === item.value).children;\n }\n setCurrentMenu(current);\n }\n } else {\n goBack();\n }\n };\n // 渲染菜单选项\n const renderMenuOptions = ()=>{\n if (!currentMenu) return null;\n // 如果是子菜单,直接渲染子菜单项\n if (Array.isArray(currentMenu)) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px]\",\n children: currentMenu.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[60px] w-full bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] p-4 shadow-lg flex items-center ${item.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'} ${currentConfig.params.cableType === item.value ? 'bg-blue-500' : ''}`,\n onClick: ()=>handleMenuSelect(item),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: item.label\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 606,\n columnNumber: 29\n }, this)\n }, item.value, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 597,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 595,\n columnNumber: 17\n }, this);\n }\n // 如果是对象形式的子菜单(如 LIMIT_VALUE 的二级菜单)\n if (typeof currentMenu === 'object' && !currentMenu.items) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px]\",\n children: Object.entries(currentMenu).map(([key, item])=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[60px] w-full bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] p-4 shadow-lg flex items-center cursor-pointer ${currentConfig.params.cableType === item.value ? 'bg-blue-500' : ''}`,\n onClick: ()=>handleMenuSelect(item),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: item.label\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 625,\n columnNumber: 29\n }, this)\n }, key, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 618,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 616,\n columnNumber: 17\n }, this);\n }\n // 如果是主菜单,渲染主菜单项\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px]\",\n children: currentMenu.items.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[60px] w-full bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] p-4 shadow-lg flex items-center ${item.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'} ${currentConfig.params.cableType === item.value ? 'bg-blue-500' : ''}`,\n onClick: ()=>handleMenuSelect(item),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: item.label\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 645,\n columnNumber: 25\n }, this)\n }, item.value, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 636,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 634,\n columnNumber: 13\n }, this);\n };\n // 获取当前菜单标题(返回 null 表示不显示)\n const getCurrentTitle = ()=>{\n if (selectedPath.length === 0) {\n const subTitle = menuData[menuType]?.subTitle;\n return subTitle ? subTitle : null; // 如果 subTitle 为空则返回 null\n }\n return selectedPath[selectedPath.length - 1].label;\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 663,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: menuData[menuType].title,\n backTo: selectedPath.length > 0 ? 'menulist' : navigation.previous?.name,\n view: selectedPath.length > 0 ? 'setup' : navigation.previous?.view,\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 664,\n columnNumber: 9\n }, this),\n getCurrentTitle() !== null && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: getCurrentTitle()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 672,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full overflow-y-auto [&::-webkit-scrollbar]:hidden\",\n children: renderMenuOptions()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 675,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 674,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/MenuList.js\",\n lineNumber: 662,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvTWVudUxpc3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFrRDtBQUNDO0FBQ0Y7QUFDTTtBQUNKO0FBRW5ELFNBQVM7QUFDVCxNQUFNTyxXQUFXO0lBQ1RDLFFBQVE7UUFDSkMsT0FBTztRQUNQQyxPQUFPO1lBQ0g7Z0JBQUVDLE9BQU87Z0JBQVFDLE9BQU87WUFBVztZQUNuQztnQkFBRUQsT0FBTztnQkFBT0MsT0FBTztZQUFzQjtZQUM3QztnQkFBRUQsT0FBTztnQkFBT0MsT0FBTztZQUFxQjtTQUMvQztJQUNMO0lBQ0FDLFlBQVk7UUFDUkosT0FBTztRQUNQSyxVQUFVO1FBQ1ZKLE9BQU87WUFDSDtnQkFBRUMsT0FBTztnQkFBVUMsT0FBTztnQkFBTUcsVUFBVTtZQUFLO1lBQy9DO2dCQUNJSixPQUFPO2dCQUNQQyxPQUFPO2dCQUNQSSxVQUFVO29CQUNOLGdEQUFnRDtvQkFDaEQsa0RBQWtEO29CQUNsRCxnREFBZ0Q7b0JBQ2hELGtEQUFrRDtvQkFDbEQ7d0JBQUVMLE9BQU87d0JBQWVDLE9BQU87b0JBQWM7b0JBQzdDO3dCQUFFRCxPQUFPO3dCQUFlQyxPQUFPO29CQUFjO29CQUM3Qzt3QkFBRUQsT0FBTzt3QkFBY0MsT0FBTztvQkFBYTtvQkFDM0M7d0JBQUVELE9BQU87d0JBQWNDLE9BQU87b0JBQWE7b0JBQzNDLGdEQUFnRDtvQkFDaEQ7d0JBQUVELE9BQU87d0JBQWVDLE9BQU87b0JBQWM7b0JBQzdDO3dCQUFFRCxPQUFPO3dCQUFlQyxPQUFPO29CQUFjO2lCQUdoRDtZQUNMO1lBQ0E7Z0JBQUVELE9BQU87Z0JBQVdDLE9BQU87Z0JBQVVHLFVBQVU7WUFBSztZQUNwRDtnQkFBRUosT0FBTztnQkFBZ0JDLE9BQU87Z0JBQU9HLFVBQVU7WUFBSztTQUN6RDtJQUNMO0lBQ0FFLGFBQWE7UUFDVFIsT0FBTztRQUNQSyxVQUFVO1FBQ1ZKLE9BQU87WUFD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REFBQzBEO1FBQUlDLFdBQVU7OzBCQUNmLDhEQUFDcEUsaUVBQVNBOzs7OzswQkFDViw4REFBQ0MsZ0VBQVFBO2dCQUNMSyxPQUFPRixRQUFRLENBQUN5QixTQUFTLENBQUN2QixLQUFLO2dCQUMvQm9FLFFBQVF6QyxhQUFhMkIsTUFBTSxHQUFHLElBQUksYUFBYXJDLFdBQVdvRCxRQUFRLEVBQUVDO2dCQUNwRUMsTUFBTTVDLGFBQWEyQixNQUFNLEdBQUcsSUFBSSxVQUFVckMsV0FBV29ELFFBQVEsRUFBRUU7Z0JBQy9EQyxRQUFRbkI7Ozs7OztZQUdYYyxzQkFBc0Isc0JBQ25CLDhEQUFDdkUsbUVBQVdBO2dCQUFDSSxPQUFPbUU7Ozs7OzswQkFFeEIsOERBQUNOO2dCQUFJQyxXQUFVOzBCQUNYLDRFQUFDRDtvQkFBSUMsV0FBVTs4QkFDZEo7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS2IiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9mbHVrZS9NZW51TGlzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1N0YXR1c0Jhcic7XG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9UaXRsZUJhcic7XG5pbXBvcnQgU3ViVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdWJUaXRsZUJhcic7XG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcblxuLy8g6I+c5Y2V5pWw5o2u5a6a5LmJXG5jb25zdCBtZW51RGF0YSA9IHtcbiAgICAgICAgTU9EVUxFOiB7XG4gICAgICAgICAgICB0aXRsZTogJ+aooeWdlycsXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICc4MDAwJywgbGFiZWw6ICdEU1gtODAwMCcgfSxcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiAnY2ZwJywgbGFiZWw6ICdDZXJ0aUZpYmVyIFByby1RdWFkJyB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdvZnAnLCBsYWJlbDogJ09wdGlGaWJlciBQcm8tUXVhZCcgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBDQUJMRV9UWVBFOiB7XG4gICAgICAgICAgICB0aXRsZTogJ+eUtee8huexu+WeiycsXG4gICAgICAgICAgICBzdWJUaXRsZTogJ+eUtee8huexu+WeiycsXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdjdXN0b20nLCBsYWJlbDogJ+WumuWIticsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdnZW5lcmFsJywgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAn6YCa55SoJyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ4IFMvRlRQJywgbGFiZWw6ICdDYXQ4IFMvRlRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0NhdDdBIFMvRlRQJywgbGFiZWw6ICdDYXQ3QSBTL0ZUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ3IFMvRlRQJywgbGFiZWw6ICdDYXQ3IFMvRlRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0NhdDZBIFMvRlRQJywgbGFiZWw6ICdDYXQ2QSBTL0ZUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdDYXQ2QSBVL1VUUCcsIGxhYmVsOiAnQ2F0NkEgVS9VVFAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnQ2F0NkEgRi9VVFAnLCBsYWJlbDogJ0NhdDZBIEYvVVRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0NhdDYgVS9VVFAnLCBsYWJlbDogJ0NhdDYgVS9VVFAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnQ2F0NiBGL1VUUCcsIGxhYmVsOiAnQ2F0NiBGL1VUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ2IFUvRlRQJywgbGFiZWw6ICdDYXQ2IFUvRlRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0NhdDVlIFUvVVRQJywgbGFiZWw6ICdDYXQ1ZSBVL1VUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdDYXQ1ZSBGL1VUUCcsIGxhYmVsOiAnQ2F0NWUgRi9VVFAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnQ2F0NSBVL1VUUCcsIGxhYmVsOiAnQ2F0NSBVL1VUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ1IEYvVVRQJywgbGFiZWw6ICdDYXQ1IEYvVVRQJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdjb2F4aWFsJywgbGFiZWw6ICfpgJrnlKjlkIzovbTnlLXnvIYnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdtYW51ZmFjdHVyZXInLCBsYWJlbDogJ+WItumAoOWVhicsIGRpc2FibGVkOiB0cnVlIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgTElNSVRfVkFMVUU6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5rWL6K+V5p6B6ZmQ5YC8JyxcbiAgICAgICAgICAgIHN1YlRpdGxlOiAn5p6B6ZmQ5YC857uEJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1RJQScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUSUEnLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgICAvLyBDYXQ4OiB7XG4gICAgICAgICAgICAgICAgICAvLyAgIGxhYmVsOiAnQ2F0OCcsXG4gICAgICAgICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgOCBQZXJtLkxpbmsnLCBsYWJlbDogJ1RJQSBDYXQgOCBQZXJtLkxpbmsnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgOCBQZXJtLkxpbmsgKCtBTEwpJywgbGFiZWw6ICdUSUEgQ2F0IDggUGVybS5MaW5rICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnVElBIENhdCA4IFBlcm0uTGluayAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgOCBQZXJtLkxpbmsgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDggQ2hhbm5lbCcsIGxhYmVsOiAnVElBIENhdCA4IENoYW5uZWwnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgOCBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA4IENoYW5uZWwgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDggQ2hhbm5lbCAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgOCBDaGFubmVsICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgLy8gICBdXG4gICAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgICAgQ2F0NkE6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDYXQ2QScsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNkEgUGVybS5MaW5rJywgbGFiZWw6ICdUSUEgQ2F0IDZBIFBlcm0uTGluaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBQZXJtLkxpbmsgKCtBTEwpJywgbGFiZWw6ICdUSUEgQ2F0IDZBIFBlcm0uTGluayAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNkEgUGVybS5MaW5rICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA2QSBQZXJtLkxpbmsgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDZBIENoYW5uZWwnLCBsYWJlbDogJ1RJQSBDYXQgNkEgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA2QSBDaGFubmVsICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBDaGFubmVsICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA2QSBDaGFubmVsICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBNUFRMJywgbGFiZWw6ICdUSUEgQ2F0IDZBIE1QVEwnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNkEgTVBUTCAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgNkEgTVBUTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBQZXJtLkxpbmsnLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2QSBQZXJtLkxpbmsnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTEgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUxICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTEgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMiAoK0FMTCknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUyICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTIgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMiAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUzICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTMgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMyAoK1BvRSknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUzICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgQ2F0Njoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDYnLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDYgUGVybS5MaW5rJywgbGFiZWw6ICdUSUEgQ2F0IDYgUGVybS5MaW5rJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDYgUGVybS5MaW5rICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA2IFBlcm0uTGluayAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNiBQZXJtLkxpbmsgKCtQb0UpJywgbGFiZWw6ICdUSUEgQ2F0IDYgUGVybS5MaW5rICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwnLCBsYWJlbDogJ1RJQSBDYXQgNiBDaGFubmVsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDYgQ2hhbm5lbCAoK0FMTCknLCBsYWJlbDogJ1RJQSBDYXQgNiBDaGFubmVsICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwgKCtQb0UpJywgbGFiZWw6ICdUSUEgQ2F0IDYgQ2hhbm5lbCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNiBNUFRMJywgbGFiZWw6ICdUSUEgQ2F0IDYgTVBUTCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2IE1QVEwgKCtQb0UpJywgbGFiZWw6ICdUSUEgQ2F0IDYgTVBUTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IFBlcm0uTGluaycsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgUGVybS5MaW5rJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMSAoK0FMTCknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUxICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTIgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUyICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMiAoK1BvRSknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTIgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUzICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMyAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTMgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUzICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgQ2F0NWU6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDYXQ1ZScsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNWUgUGVybS5MaW5rJywgbGFiZWw6ICdUSUEgQ2F0IDVlIFBlcm0uTGluaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBQZXJtLkxpbmsgKCtBTEwpJywgbGFiZWw6ICdUSUEgQ2F0IDVlIFBlcm0uTGluayAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNWUgUGVybS5MaW5rICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA1ZSBQZXJtLkxpbmsgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDVlIENoYW5uZWwnLCBsYWJlbDogJ1RJQSBDYXQgNWUgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA1ZSBDaGFubmVsICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBDaGFubmVsICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA1ZSBDaGFubmVsICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBNUFRMJywgbGFiZWw6ICdUSUEgQ2F0IDVlIE1QVEwnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNWUgTVBUTCAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgNWUgTVBUTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBQZXJtLkxpbmsnLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA1ZSBQZXJtLkxpbmsnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMSAoK0FMTCknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUxICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTEgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUyICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTIgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMiAoK1BvRSknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUyICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTMgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMyAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUzICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTMgKCtQb0UpJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ0lTTycsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdJU08nLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgICAvLyAnQ2xhc3Mg4oWhJzoge1xuICAgICAgICAgICAgICAgICAgLy8gICBsYWJlbDogJ0NsYXNzIOKFoScsXG4gICAgICAgICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIOKFoScsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3Mg4oWhJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaEnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWhICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWhICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgLy8gICBdLFxuICAgICAgICAgICAgICAgICAgLy8gICBkaXNhYmxlZDogdHJ1ZSBcbiAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICAvLyAnQ2xhc3Mg4oWgJzoge1xuICAgICAgICAgICAgICAgICAgLy8gICBsYWJlbDogJ0NsYXNzIOKFoCcsXG4gICAgICAgICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIOKFoCcsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3Mg4oWgJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoCcsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaAnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWgICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaAgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoCAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWgICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgLy8gICBdLFxuICAgICAgICAgICAgICAgICAgLy8gICBkaXNhYmxlZDogdHJ1ZSBcbiAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICAvLyAnQ2xhc3MgRmEnOiB7XG4gICAgICAgICAgICAgICAgICAvLyAgIGxhYmVsOiAnQ2xhc3MgRmEnLFxuICAgICAgICAgICAgICAgICAgLy8gICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTDIgQ2xhc3MgRmEnLCBsYWJlbDogJ0lTTzExODAxIFBMMiBDbGFzcyBGYScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrUG9FKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwzIENsYXNzIEZhJywgbGFiZWw6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRmEnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEnLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEZhICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBGYSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEgKCtQb0UpJyB9XG4gICAgICAgICAgICAgICAgICAvLyAgIF0sXG4gICAgICAgICAgICAgICAgICAvLyAgIGRpc2FibGVkOiB0cnVlIFxuICAgICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAgIC8vICdDbGFzcyBGJzoge1xuICAgICAgICAgICAgICAgICAgLy8gICBsYWJlbDogJ0NsYXNzIEYnLFxuICAgICAgICAgICAgICAgICAgLy8gICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyBGJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyBGJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyBGICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRiAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIEYgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyBGICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBGJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEYnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK1BvRSknIH1cbiAgICAgICAgICAgICAgICAgIC8vICAgXSxcbiAgICAgICAgICAgICAgICAgIC8vICAgZGlzYWJsZWQ6IHRydWUgXG4gICAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgICAgJ0NsYXNzIEVhJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NsYXNzIEVhJyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwyIENsYXNzIEVhJywgbGFiZWw6ICdJU08xMTgwMSBQTDIgQ2xhc3MgRWEnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMyBDbGFzcyBFYScsIGxhYmVsOiAnSVNPMTE4MDEgUEwzIENsYXNzIEVhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFYSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRWEgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPIE1QVEwgQ2xhc3MgRWEnLCBsYWJlbDogJ0lTTyBNUFRMIENsYXNzIEVhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08gTVBUTCBDbGFzcyBFYSAoK1BvRSknLCBsYWJlbDogJ0lTTyBNUFRMIENsYXNzIEVhICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJ0NsYXNzIEUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2xhc3MgRScsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIEUnLCBsYWJlbDogJ0lTTzExODAxIFBMIENsYXNzIEUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIEUgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyBFICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIFBMIENsYXNzIEUgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEUnLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrUG9FKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPIE1QVEwgQ2xhc3MgRScsIGxhYmVsOiAnSVNPIE1QVEwgQ2xhc3MgRScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPIE1QVEwgQ2xhc3MgRSAoK1BvRSknLCBsYWJlbDogJ0lTTyBNUFRMIENsYXNzIEUgKCtQb0UpJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAnQ2xhc3MgRCc6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDbGFzcyBEJyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCcsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIFBMIENsYXNzIEQgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyBEICgrUG9FKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRCcsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBEJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08gTVBUTCBDbGFzcyBEJywgbGFiZWw6ICdJU08gTVBUTCBDbGFzcyBEJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08gTVBUTCBDbGFzcyBEICgrUG9FKScsIGxhYmVsOiAnSVNPIE1QVEwgQ2xhc3MgRCAoK1BvRSknIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAn5Yy65Z+fJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ+WMuuWfnycsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICAgICfkuK3lm70nOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAn5Lit5Zu9JyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgN0EgUEwgbm8gQ1AgKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQICgrUG9FKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA3QSBQTCBubyBDUCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3QSBQTCB3aXRoIENQJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIHdpdGggQ1AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3QSBQTCB3aXRoIENQICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA3QSBQTCB3aXRoIENQICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIHdpdGggQ1AgKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIHdpdGggQ1AgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgN0EgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgN0EgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3QSBDaCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgN0EgQ2ggKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgN0EgQ2ggKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIENoICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDcgUEwnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNyBQTCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDcgUEwgKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDcgUEwgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNyBQTCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNyBQTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3IENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDcgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3IENoICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA3IENoICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDcgQ2ggKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDcgQ2ggKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2QSBQTCBubyBDUCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AgKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIG5vIENQICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIHdpdGggQ1AnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgd2l0aCBDUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIHdpdGggQ1AgKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIHdpdGggQ1AgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNkEgUEwgd2l0aCBDUCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgd2l0aCBDUCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2QSBDaCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2QSBDaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDZBIENoICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2QSBDaCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2QSBDaCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgQ2ggKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNiBQTCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2IFBMJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNiBQTCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNiBQTCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2IFBMICgrUG9FKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2IFBMICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDYgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNiBDaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDYgQ2ggKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDYgQ2ggKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNiBDaCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNiBDaCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDVlIFBMICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNWUgUEwgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNWUgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNWUgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA1ZSBDaCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNWUgQ2ggKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNWUgQ2ggKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDVlIENoICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICfot7Pnur8nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAn6Lez57q/JyxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgICAgJ0NhdDZBIFBhdGNoIENvcmRzJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDZBIFBhdGNoIENvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICdDYXQ2IFBhdGNoIENvcmRzJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDYgUGF0Y2ggQ29yZHMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJ0NhdDVlIFBhdGNoIENvcmRzJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDVlIFBhdGNoIENvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICdNMTIgUGF0Y2ggQ29yZHMnOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTTEyIFBhdGNoIENvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAn5bqU55SoJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ+W6lOeUqCcsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnUHJvZmluZXQnLCBsYWJlbDogJ1Byb2ZpbmV0JyB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgIFdJUkVfT1JERVI6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5o+S5bqn6YWN572uJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1Q1NjhBJywgbGFiZWw6ICdUNTY4QScgLCBkaXNhYmxlZDogdHJ1ZX0sXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1Q1NjhCJywgbGFiZWw6ICdUNTY4QicgfSxcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiAnRXRoZXJuZXQgVHdvLVBhaXInLCBsYWJlbDogJ0V0aGVybmV0IFR3by1QYWlyJyB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdNMTItRCBUd28tUGFpcicsIGxhYmVsOiAnTTEyLUQgVHdvLVBhaXInIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIEZJQkVSX1RZUEU6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5YWJ57qk57G75Z6LJyxcbiAgICAgICAgICAgIHN1YlRpdGxlOiAn55S157yG57uEJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ+WumuWIticsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAn5a6a5Yi2JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7fVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2dlbmVyYWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ+mAmueUqCcsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT00xIE11bGl0bW9kZSA2Mi41JywgbGFiZWw6ICdPTTEgTXVsaXRtb2RlIDYyLjUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT00yIE11bGl0bW9kZSA1MCcsIGxhYmVsOiAnT00yIE11bGl0bW9kZSA1MCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdPTTMgTXVsaXRtb2RlIDUwJywgbGFiZWw6ICdPTTMgTXVsaXRtb2RlIDUwJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ09NNCBNdWxpdG1vZGUgNTAnLCBsYWJlbDogJ09NNCBNdWxpdG1vZGUgNTAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT001IE11bGl0bW9kZSA1MCcsIGxhYmVsOiAnT001IE11bGl0bW9kZSA1MCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdPUzEgU2luZ2xlbW9kZScsIGxhYmVsOiAnT1MxIFNpbmdsZW1vZGUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT1MyIFNpbmdsZW1vZGUnLCBsYWJlbDogJ09TMiBTaW5nbGVtb2RlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICfliLbpgKDllYYnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ+WItumAoOWVhicsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjoge31cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIENGUF9MSU1JVDoge1xuICAgICAgICAgICAgdGl0bGU6ICfmtYvor5XmnoHpmZDlgLwnLFxuICAgICAgICAgICAgc3ViVGl0bGU6ICfmnoHpmZDlgLznu4QnLFxuICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnVElBJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1RJQScsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQS01NjguMy1FIE11bHRpbW9kZSAoU1REKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChTVEQpJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChSRUYpJywgbGFiZWw6ICdUSUEtNTY4LjMtRSBNdWx0aW1vZGUgKFJFRiknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIElTUCAoU1REKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBJU1AgKFNURCknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIE9TUCAoU1REKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBPU1AgKFNURCknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIElTUCAoUkVGKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBJU1AgKFJFRiknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIE9TUCAoUkVGKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBPU1AgKFJFRiknIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ0NoaW5hJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ+S4reWbvScsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQi9UIDUwMzEyLTIwMTYgRmliZXIgTGluaycsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IEZpYmVyIExpbmsnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0IvVCA1MDMxMi0yMDE2IE9GLTMwMCBDaCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IE9GLTMwMCBDaCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQi9UIDUwMzEyLTIwMTYgT0YtNTAwIENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgT0YtNTAwIENoJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCL1QgNTAzMTItMjAxNiBPRi0yMDAwIENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgT0YtMjAwMCBDaCcgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnSVNPJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0lTTycsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDExODAxLTIwMDIgRmlicmUgTGluaycsIGxhYmVsOiAnSVNPL0lFQyAxMTgwMS0yMDAyIEZpYnJlIExpbmsnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxMTgwMS0yMDAyIE9GLTMwMCBDSCcsIGxhYmVsOiAnSVNPL0lFQyAxMTgwMS0yMDAyIE9GLTMwMCBDSCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtNTAwIENIJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtNTAwIENIJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi0yMDAwIENIJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtMjAwMCBDSCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCAoRHJhZnQpJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTQ3NjMtMzoyMDE0JywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAxNCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDE0NzYzLTMnLCBsYWJlbDogJ0lTTy9JRUMgMTQ3NjMtMycgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBPRlBfTElNSVQ6IHtcbiAgICAgICAgICAgIHRpdGxlOiAnT0ZQ5p6B6ZmQ5YC8JyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1RJQScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUSUEnLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnQU5TSS9USUEtNTY4LjMtRScsIGxhYmVsOiAnQU5TSS9USUEtNTY4LjMtRScgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdBTlNJL1RJQS01NjguMy1FIFJMID0gMjAgZEInLCBsYWJlbDogJ0FOU0kvVElBLTU2OC4zLUUgUkwgPSAyMCBkQicgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdBTlNJL1RJQS01NjguMy1FIFJMID0gMzUgZEInLCBsYWJlbDogJ0FOU0kvVElBLTU2OC4zLUUgUkwgPSAzNSBkQicgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdBTlNJL1RJQS01NjguMy1FIFJMID0gNTUgZEInLCBsYWJlbDogJ0FOU0kvVElBLTU2OC4zLUUgUkwgPSA1NSBkQicgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnQ2hpbmEnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAn5Lit5Zu9JyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCL1QgNTAzMTItMjAxNiBGaWJlciBMaW5rJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgRmliZXIgTGluaycgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQi9UIDUwMzEyLTIwMTYgT0YtMzAwIENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgT0YtMzAwIENoJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCL1QgNTAzMTItMjAxNiBPRi01MDAgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBPRi01MDAgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0IvVCA1MDMxMi0yMDE2IE9GLTIwMDAgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBPRi0yMDAwIENoJyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICdJU08nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnSVNPJyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTE4MDEtMjAwMiBGaWJyZSBMaW5rJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgRmlicmUgTGluaycgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtMzAwIENIJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtMzAwIENIJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi01MDAgQ0gnLCBsYWJlbDogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi01MDAgQ0gnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxMTgwMS0yMDAyIE9GLTIwMDAgQ0gnLCBsYWJlbDogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi0yMDAwIENIJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTQ3NjMtMzoyMDI0IChEcmFmdCknLCBsYWJlbDogJ0lTTy9JRUMgMTQ3NjMtMzoyMDI0IChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMjQgUkwgPSAyMCAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCBSTCA9IDIwIChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMjQgUkwgPSAzNSAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCBSTCA9IDM1IChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMjQgUkwgPSA2MCAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCBSTCA9IDYwIChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMTQnLCBsYWJlbDogJ0lTTy9JRUMgMTQ3NjMtMzoyMDE0JyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTQ3NjMtMycsIGxhYmVsOiAnSVNPL0lFQyAxNDc2My0zJyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZW51TGlzdCgpIHtcbiAgICBjb25zdCB7IFxuICAgICAgICBuYXZpZ2F0aW9uLFxuICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcbiAgICAgICAgdXBkYXRlUHJvamVjdCxcbiAgICAgICAgbmF2aWdhdGVUbyxcbiAgICAgICAgZ29CYWNrXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xuXG5cblxuXG4gICAgY29uc3QgY3VycmVudFByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdCgpO1xuICAgIGNvbnN0IHsgbWVudVR5cGUsIHNlbGVjdGVkQ29uZmlnSWQgfSA9IG5hdmlnYXRpb24uY3VycmVudC5wYXJhbXM7XG4gICAgY29uc3QgW3NlbGVjdGVkUGF0aCwgc2V0U2VsZWN0ZWRQYXRoXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbY3VycmVudE1lbnUsIHNldEN1cnJlbnRNZW51XSA9IHVzZVN0YXRlKG1lbnVEYXRhW21lbnVUeXBlXSk7XG5cbiAgIFxuXG4gICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE6YWN572uXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IGN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzLmZpbmQoXG4gICAgICAgIGNvbmZpZyA9PiBjb25maWcuaWQgPT09IHNlbGVjdGVkQ29uZmlnSWRcbiAgICApO1xuXG5cblxuICAgIC8vIOWkhOeQhuiPnOWNlemAiemhuemAieaLqVxuICAgIGNvbnN0IGhhbmRsZU1lbnVTZWxlY3QgPSAoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlrZDoj5zljZXvvIzmm7TmlrDot6/lvoTlkozlvZPliY3oj5zljZVcbiAgICAgICAgICAgIHNldFNlbGVjdGVkUGF0aChbLi4uc2VsZWN0ZWRQYXRoLCBpdGVtXSk7XG4gICAgICAgICAgICBzZXRDdXJyZW50TWVudShpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOaYr+acgOe7iOmAiemhue+8jOabtOaWsOmFjee9ruW5tui/lOWbnlxuICAgICAgICBsZXQgdXBkYXRlZENvbmZpZyA9IHsgLi4uY3VycmVudENvbmZpZyB9O1xuICAgICAgICBzd2l0Y2ggKG1lbnVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdDQUJMRV9UWVBFJzpcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnBhcmFtcy5jYWJsZVR5cGUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTElNSVRfVkFMVUUnOlxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmxpbWl0VmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnV0lSRV9PUkRFUic6XG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5wYXJhbXMud2lyZU9yZGVyID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ZJQkVSX1RZUEUnOlxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmNhYmxlVHlwZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRDb25maWcubW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUuaW5jbHVkZXMoJ09NJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmxpbWl0VmFsdWUgPSAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChTVEQpJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmxpbWl0VmFsdWUgPSAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBJU1AgKFNURCknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ0ZQX0xJTUlUJzpcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnBhcmFtcy5saW1pdFZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ09GUF9MSU1JVCc6XG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5wYXJhbXMubGltaXRWYWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNT0RVTEUnOlxuICAgICAgICAgICAgICAgIC8vIOWmguaenOaooeWdl+exu+Wei+WPkeeUn+WPmOWMlu+8jOWujOWFqOabv+aNoumFjee9ruWvueixoVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnLm1vZHVsZVR5cGUgIT09IGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4MDAwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogY3VycmVudENvbmZpZy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlVHlwZTogJzgwMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVsYWJsZTogJ0RTWC04MDAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVUeXBlOiAnQ2F0NiBVL1VUUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXI6ICdUNTY4QidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjZnAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBjdXJyZW50Q29uZmlnLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVUeXBlOiAnY2ZwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlbGFibGU6ICdDZXJ0aUZpYmVyIFByby1RdWFkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFZhbHVlOiAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChTVEQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlVHlwZTogJ09NMyBNdWx0aW1vZGUgNTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmSnVtcGVyOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VDb3VudDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yQ291bnQ6ICcyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29mcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGN1cnJlbnRDb25maWcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZVR5cGU6ICdvZnAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVsYWJsZTogJ09wdGlGaWJlciBQcm8tUXVhZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRWYWx1ZTogJ0dlbmVyYWwgRmliZXIgUkwgPSAzNSBkQicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWJsZVR5cGU6ICdPTTMgTXVsdGltb2RlIDUwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcubW9kdWxlVHlwZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcubW9kdWxlbGFibGUgPSBpdGVtLmxhYmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOabtOaWsOmhueebruaVsOaNrlxuICAgICAgICBjb25zdCB1cGRhdGVkQ29uZmlncyA9IGN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzLm1hcChjb25maWcgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5pZCA9PT0gc2VsZWN0ZWRDb25maWdJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkQ29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnByb2plY3RJbmRleDtcbiAgICAgICAgdXBkYXRlUHJvamVjdChwcm9qZWN0SW5kZXgsIHsgdGVzdENvbmZpZ3M6IHVwZGF0ZWRDb25maWdzIH0pO1xuXG4gICAgICAgIC8vIOi/lOWbnuS4iuS4gOmhtVxuICAgICAgICBnb0JhY2soKTtcbiAgICB9O1xuXG4gICAgLy8g5aSE55CG6L+U5Zue5LiK5LiA57qnXG4gICAgY29uc3QgaGFuZGxlQmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gc2VsZWN0ZWRQYXRoLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkUGF0aChuZXdQYXRoKTtcbiAgICAgICAgICAgIGlmIChuZXdQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRNZW51KG1lbnVEYXRhW21lbnVUeXBlXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gbWVudURhdGFbbWVudVR5cGVdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lml0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSBpdGVtLnZhbHVlKS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudE1lbnUoY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnb0JhY2soKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyDmuLLmn5Poj5zljZXpgInpoblcbiAgICBjb25zdCByZW5kZXJNZW51T3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFjdXJyZW50TWVudSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgLy8g5aaC5p6c5piv5a2Q6I+c5Y2V77yM55u05o6l5riy5p+T5a2Q6I+c5Y2V6aG5XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnRNZW51KSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF1cIj5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRNZW51Lm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aXRlbS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BoLVs2MHB4XSB3LWZ1bGwgYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcC00IHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVkID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZSA9PT0gaXRlbS52YWx1ZSA/ICdiZy1ibHVlLTUwMCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1lbnVTZWxlY3QoaXRlbSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57aXRlbS5sYWJlbH08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDlpoLmnpzmmK/lr7nosaHlvaLlvI/nmoTlrZDoj5zljZXvvIjlpoIgTElNSVRfVkFMVUUg55qE5LqM57qn6I+c5Y2V77yJXG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudE1lbnUgPT09ICdvYmplY3QnICYmICFjdXJyZW50TWVudS5pdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF1cIj5cbiAgICAgICAgICAgICAgICAgICAge09iamVjdC5lbnRyaWVzKGN1cnJlbnRNZW51KS5tYXAoKFtrZXksIGl0ZW1dKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaC1bNjBweF0gdy1mdWxsIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHAtNCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlID09PSBpdGVtLnZhbHVlID8gJ2JnLWJsdWUtNTAwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTWVudVNlbGVjdChpdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntpdGVtLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOaYr+S4u+iPnOWNle+8jOa4suafk+S4u+iPnOWNlemhuVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNDkwcHhdXCI+XG4gICAgICAgICAgICAgICAge2N1cnJlbnRNZW51Lml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BoLVs2MHB4XSB3LWZ1bGwgYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcC00IHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZSA9PT0gaXRlbS52YWx1ZSA/ICdiZy1ibHVlLTUwMCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNZW51U2VsZWN0KGl0ZW0pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntpdGVtLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvLyDojrflj5blvZPliY3oj5zljZXmoIfpopjvvIjov5Tlm54gbnVsbCDooajnpLrkuI3mmL7npLrvvIlcbiAgICBjb25zdCBnZXRDdXJyZW50VGl0bGUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZFBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHN1YlRpdGxlID0gbWVudURhdGFbbWVudVR5cGVdPy5zdWJUaXRsZTtcbiAgICAgICAgcmV0dXJuIHN1YlRpdGxlID8gc3ViVGl0bGUgOiBudWxsOyAvLyDlpoLmnpwgc3ViVGl0bGUg5Li656m65YiZ6L+U5ZueIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRQYXRoW3NlbGVjdGVkUGF0aC5sZW5ndGggLSAxXS5sYWJlbDtcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICA8U3RhdHVzQmFyIC8+XG4gICAgICAgIDxUaXRsZUJhciBcbiAgICAgICAgICAgIHRpdGxlPXttZW51RGF0YVttZW51VHlwZV0udGl0bGV9XG4gICAgICAgICAgICBiYWNrVG89e3NlbGVjdGVkUGF0aC5sZW5ndGggPiAwID8gJ21lbnVsaXN0JyA6IG5hdmlnYXRpb24ucHJldmlvdXM/Lm5hbWV9IFxuICAgICAgICAgICAgdmlldz17c2VsZWN0ZWRQYXRoLmxlbmd0aCA+IDAgPyAnc2V0dXAnIDogbmF2aWdhdGlvbi5wcmV2aW91cz8udmlld31cbiAgICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cbiAgICAgICAgLz5cbiAgICAgICAgey8qIOWPquacieW9kyBnZXRDdXJyZW50VGl0bGUoKSDov5Tlm57lgLzkuI3kuLogbnVsbCDml7bmiY3muLLmn5MgU3ViVGl0bGVCYXIgKi99XG4gICAgICAgIHtnZXRDdXJyZW50VGl0bGUoKSAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgICA8U3ViVGl0bGVCYXIgdGl0bGU9e2dldEN1cnJlbnRUaXRsZSgpfSAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bIzMwMzA0MF1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIG92ZXJmbG93LXktYXV0byBbJjo6LXdlYmtpdC1zY3JvbGxiYXJdOmhpZGRlblwiPlxuICAgICAgICAgICAge3JlbmRlck1lbnVPcHRpb25zKCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsIlN1YlRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwibWVudURhdGEiLCJNT0RVTEUiLCJ0aXRsZSIsIml0ZW1zIiwidmFsdWUiLCJsYWJlbCIsIkNBQkxFX1RZUEUiLCJzdWJUaXRsZSIsImRpc2FibGVkIiwiY2hpbGRyZW4iLCJMSU1JVF9WQUxVRSIsIkNhdDZBIiwiQ2F0NiIsIkNhdDVlIiwiV0lSRV9PUkRFUiIsIkZJQkVSX1RZUEUiLCJDRlBfTElNSVQiLCJPRlBfTElNSVQiLCJNZW51TGlzdCIsIm5hdmlnYXRpb24iLCJnZXRDdXJyZW50UHJvamVjdCIsInVwZGF0ZVByb2plY3QiLCJuYXZpZ2F0ZVRvIiwiZ29CYWNrIiwiY3VycmVudFByb2plY3QiLCJtZW51VHlwZSIsInNlbGVjdGVkQ29uZmlnSWQiLCJjdXJyZW50IiwicGFyYW1zIiwic2VsZWN0ZWRQYXRoIiwic2V0U2VsZWN0ZWRQYXRoIiwiY3VycmVudE1lbnUiLCJzZXRDdXJyZW50TWVudSIsImN1cnJlbnRDb25maWciLCJ0ZXN0Q29uZmlncyIsImZpbmQiLCJjb25maWciLCJpZCIsImhhbmRsZU1lbnVTZWxlY3QiLCJpdGVtIiwidXBkYXRlZENvbmZpZyIsImNhYmxlVHlwZSIsImxpbWl0VmFsdWUiLCJ3aXJlT3JkZXIiLCJtb2R1bGVUeXBlIiwiaW5jbHVkZXMiLCJtb2R1bGVsYWJsZSIsInJlZkp1bXBlciIsInNwbGljZUNvdW50IiwiY29ubmVjdG9yQ291bnQiLCJ1cGRhdGVkQ29uZmlncyIsIm1hcCIsInByb2plY3RJbmRleCIsImdldFN0YXRlIiwic2VsZWN0ZWRJbmRleGVzIiwiaGFuZGxlQmFjayIsImxlbmd0aCIsIm5ld1BhdGgiLCJzbGljZSIsImkiLCJyZW5kZXJNZW51T3B0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsImRpdiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJPYmplY3QiLCJlbnRyaWVzIiwia2V5IiwiZ2V0Q3VycmVudFRpdGxlIiwiYmFja1RvIiwicHJldmlvdXMiLCJuYW1lIiwidmlldyIsIm9uQmFjayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/MenuList.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/Operators.js":
/*!***************************************************!*\
!*** ./src/components/dsxpage/fluke/Operators.js ***!
\***************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Operators)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\nfunction Operators() {\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [selectedOperators, setSelectedOperators] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const { getCurrentProject, setSelectedIndexes, updateCurrentView, addOperator, updateProject, goBack, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const currentProject = getCurrentProject();\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.current;\n const handleDeleteOperators = ()=>{\n if (selectedOperators.length === currentProject.operators.length) {\n setToastMessage('至少需要保留一个操作员');\n return;\n }\n // 过滤掉被选中的操作员\n const newOperators = currentProject.operators.filter((operator)=>!selectedOperators.includes(operator.id));\n // 更新项目\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.projectIndex;\n updateProject(currentIndex, {\n operators: newOperators\n });\n // 如果当前选中的操作员被删除了,重置选中的操作员索引为0\n if (selectedOperators.includes(currentProject.operators[_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.operatorIndex].id)) {\n setSelectedIndexes({\n operatorIndex: 0\n });\n }\n // 清空选中列表并返回main视图\n setSelectedOperators([]);\n updateCurrentView('main');\n };\n const renderContent = ()=>{\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: currentProject.operators.map((operator, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[50px] p-4 shadow-lg flex items-center cursor-pointer ${index === _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.operatorIndex ? 'bg-blue-500' : 'bg-gradient-to-b from-[#e6e3e6] to-[#7b797b]'}`,\n onClick: ()=>{\n setSelectedIndexes({\n operatorIndex: index\n });\n goBack();\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: operator.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 64,\n columnNumber: 37\n }, this)\n }, operator.id, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 56,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 54,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 53,\n columnNumber: 21\n }, this);\n case 'delete':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: currentProject.operators.map((operator)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] p-4 shadow-lg flex items-center justify-between bg-gradient-to-b from-[#e6e3e6] to-[#7b797b]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: operator.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 80,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n className: \"w-4 h-4\",\n checked: selectedOperators.includes(operator.id),\n onChange: (e)=>{\n if (e.target.checked) {\n setSelectedOperators([\n ...selectedOperators,\n operator.id\n ]);\n } else {\n setSelectedOperators(selectedOperators.filter((id)=>id !== operator.id));\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 81,\n columnNumber: 37\n }, this)\n ]\n }, operator.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 76,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 74,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 73,\n columnNumber: 21\n }, this);\n case 'new':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入操作员名称\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n // 保存光标位置\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 103,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 102,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n if (inputValue.trim()) {\n const newOperator = {\n id: Math.random().toString(36).substr(2, 9),\n name: inputValue.trim()\n };\n addOperator(newOperator);\n setInputValue('');\n updateCurrentView('main');\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 122,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 101,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 151,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: view === 'main' ? \"操作员\" : view === 'new' ? \"新操作员\" : \"删除操作员\",\n backTo: view === 'main' ? goBack : _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 152,\n columnNumber: 13\n }, this),\n renderContent(),\n view === 'main' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('delete'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"编辑列表\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 164,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('new'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"新操作员\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 170,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 163,\n columnNumber: 17\n }, this),\n view === 'delete' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleDeleteOperators,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"删除\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 180,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 179,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Operators.js\",\n lineNumber: 150,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvT3BlcmF0b3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0M7QUFDVztBQUNGO0FBQ0E7QUFDRTtBQUVwQyxTQUFTTTtJQUNwQixNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR1AsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDUSxnQkFBZ0JDLGtCQUFrQixHQUFHVCwrQ0FBUUEsQ0FBQztJQUNyRCxNQUFNLENBQUNVLG1CQUFtQkMscUJBQXFCLEdBQUdYLCtDQUFRQSxDQUFDLEVBQUU7SUFDN0QsTUFBTSxFQUNGWSxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLGFBQWEsRUFDYkMsTUFBTSxFQUNOQyxlQUFlLEVBQ2xCLEdBQUdkLCtEQUFlQTtJQUVuQixNQUFNZSxpQkFBaUJQO0lBQ3ZCLE1BQU0sRUFBRVEsSUFBSSxFQUFFLEdBQUdoQixvRUFBd0IsR0FBR2tCLFVBQVUsQ0FBQ0MsT0FBTztJQUU5RCxNQUFNQyx3QkFBd0I7UUFDMUIsSUFBSWQsa0JBQWtCZSxNQUFNLEtBQUtOLGVBQWVPLFNBQVMsQ0FBQ0QsTUFBTSxFQUFFO1lBQzlEUCxnQkFBZ0I7WUFDaEI7UUFDSjtRQUVBLGFBQWE7UUFDYixNQUFNUyxlQUFlUixlQUFlTyxTQUFTLENBQUNFLE1BQU0sQ0FDaERDLENBQUFBLFdBQVksQ0FBQ25CLGtCQUFrQm9CLFFBQVEsQ0FBQ0QsU0FBU0UsRUFBRTtRQUd2RCxPQUFPO1FBQ1AsTUFBTUMsZUFBZTVCLG9FQUF3QixHQUFHNkIsZUFBZSxDQUFDQyxZQUFZO1FBQzVFbEIsY0FBY2dCLGNBQWM7WUFBRU4sV0FBV0M7UUFBYTtRQUV0RCw4QkFBOEI7UUFDOUIsSUFBSWpCLGtCQUFrQm9CLFFBQVEsQ0FBQ1gsZUFBZU8sU0FBUyxDQUFDdEIsb0VBQXdCLEdBQUc2QixlQUFlLENBQUNFLGFBQWEsQ0FB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ZjtJQUNKO0lBRUEscUJBQ0ksOERBQUN1QjtRQUFJQyxXQUFVOzswQkFDWCw4REFBQ3JDLGlFQUFTQTs7Ozs7MEJBQ1YsOERBQUNDLGdFQUFRQTtnQkFDTDZELE9BQ0kzQyxTQUFTLFNBQVMsUUFDbEJBLFNBQVMsUUFBUSxTQUNqQjtnQkFFSjRDLFFBQVE1QyxTQUFTLFNBQVNILFNBQVNiLG9FQUF3QixHQUFHa0IsVUFBVSxDQUFDMkMsUUFBUSxFQUFFdkIsUUFBUTtnQkFDM0Z0QixNQUFNaEIsb0VBQXdCLEdBQUdrQixVQUFVLENBQUMyQyxRQUFRLEVBQUU3QyxRQUFROzs7Ozs7WUFFakVnQjtZQUNBaEIsU0FBUyx3QkFDTiw4REFBQ2lCO2dCQUFJQyxXQUFVOztrQ0FDWCw4REFBQzRCO3dCQUNHekIsU0FBUyxJQUFNM0Isa0JBQWtCO3dCQUNqQ3dCLFdBQVU7a0NBQ2I7Ozs7OztrQ0FHRCw4REFBQzRCO3dCQUNHekIsU0FBUyxJQUFNM0Isa0JBQWtCO3dCQUNqQ3dCLFdBQVU7a0NBQ2I7Ozs7Ozs7Ozs7OztZQUtSbEIsU0FBUywwQkFDTiw4REFBQ2lCO2dCQUFJQyxXQUFVOzBCQUNYLDRFQUFDNEI7b0JBQ0d6QixTQUFTakI7b0JBQ1RjLFdBQVU7OEJBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3JCIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvT3BlcmF0b3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1N0YXR1c0Jhcic7XHJcbmltcG9ydCBUaXRsZUJhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1RpdGxlQmFyJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvS2V5Ym9hcmQnO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE9wZXJhdG9ycygpIHtcclxuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFtjdXJzb3JQb3NpdGlvbiwgc2V0Q3Vyc29yUG9zaXRpb25dID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc2VsZWN0ZWRPcGVyYXRvcnMsIHNldFNlbGVjdGVkT3BlcmF0b3JzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IHtcclxuICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcclxuICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMsXHJcbiAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcsXHJcbiAgICAgICAgYWRkT3BlcmF0b3IsXHJcbiAgICAgICAgdXBkYXRlUHJvamVjdCxcclxuICAgICAgICBnb0JhY2ssXHJcbiAgICAgICAgc2V0VG9hc3RNZXNzYWdlXHJcbiAgICB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcblxyXG4gICAgY29uc3QgY3VycmVudFByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdCgpO1xyXG4gICAgY29uc3QgeyB2aWV3IH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlRGVsZXRlT3BlcmF0b3JzID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wZXJhdG9ycy5sZW5ndGggPT09IGN1cnJlbnRQcm9qZWN0Lm9wZXJhdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfoh7PlsJHpnIDopoHkv53nlZnkuIDkuKrmk43kvZzlkZgnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyDov4fmu6TmjonooqvpgInkuK3nmoTmk43kvZzlkZhcclxuICAgICAgICBjb25zdCBuZXdPcGVyYXRvcnMgPSBjdXJyZW50UHJvamVjdC5vcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICBvcGVyYXRvciA9PiAhc2VsZWN0ZWRPcGVyYXRvcnMuaW5jbHVkZXMob3BlcmF0b3IuaWQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmm7TmlrDpobnnm65cclxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4O1xyXG4gICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7IG9wZXJhdG9yczogbmV3T3BlcmF0b3JzIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWmguaenOW9k+WJjemAieS4reeahOaTjeS9nOWRmOiiq+WIoOmZpOS6hu+8jOmHjee9rumAieS4reeahOaTjeS9nOWRmOe0ouW8leS4ujBcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcGVyYXRvcnMuaW5jbHVkZXMoY3VycmVudFByb2plY3Qub3BlcmF0b3JzW3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5vcGVyYXRvckluZGV4XS5pZCkpIHtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzKHsgb3BlcmF0b3JJbmRleDogMCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5riF56m66YCJ5Lit5YiX6KGo5bm26L+U5ZuebWFpbuinhuWbvlxyXG4gICAgICAgIHNldFNlbGVjdGVkT3BlcmF0b3JzKFtdKTtcclxuICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdtYWluJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRQcm9qZWN0Lm9wZXJhdG9ycy5tYXAoKG9wZXJhdG9yLCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BlcmF0b3IuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGgtWzUwcHhdIHAtNCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgJHtpbmRleCA9PT0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLm9wZXJhdG9ySW5kZXggPyAnYmctYmx1ZS01MDAnIDogJ2JnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyBvcGVyYXRvckluZGV4OiBpbmRleCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvQmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57b3BlcmF0b3IubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bIzMwMzA0MF0gcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudFByb2plY3Qub3BlcmF0b3JzLm1hcCgob3BlcmF0b3IpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wZXJhdG9yLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBwLTQgc2hhZG93LWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntvcGVyYXRvci5uYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTQgaC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkT3BlcmF0b3JzLmluY2x1ZGVzKG9wZXJhdG9yLmlkKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkT3BlcmF0b3JzKFsuLi5zZWxlY3RlZE9wZXJhdG9ycywgb3BlcmF0b3IuaWRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE9wZXJhdG9ycyhzZWxlY3RlZE9wZXJhdG9ycy5maWx0ZXIoaWQgPT4gaWQgIT09IG9wZXJhdG9yLmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICduZXcnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bIzMwMzA0MF0gcC00IGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcC00IHRleHQtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5pON5L2c5ZGY5ZCN56ewXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS/neWtmOWFieagh+S9jee9rlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEtleWJvYXJkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbj17Y3Vyc29yUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG5ld1ZhbHVlLCBuZXdQb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKG5ld1Bvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wZXJhdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGlucHV0VmFsdWUudHJpbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9wZXJhdG9yKG5ld09wZXJhdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdtYWluJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XHJcbiAgICAgICAgICAgIDxUaXRsZUJhciBcclxuICAgICAgICAgICAgICAgIHRpdGxlPXtcclxuICAgICAgICAgICAgICAgICAgICB2aWV3ID09PSAnbWFpbicgPyBcIuaTjeS9nOWRmFwiIDogXHJcbiAgICAgICAgICAgICAgICAgICAgdmlldyA9PT0gJ25ldycgPyBcIuaWsOaTjeS9nOWRmFwiIDogXHJcbiAgICAgICAgICAgICAgICAgICAgXCLliKDpmaTmk43kvZzlkZhcIlxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGJhY2tUbz17dmlldyA9PT0gJ21haW4nID8gZ29CYWNrIDogdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5wcmV2aW91cz8ubmFtZSB8fCAnaG9tZSd9XHJcbiAgICAgICAgICAgICAgICB2aWV3PXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy52aWV3IHx8ICdtYWluJ30gXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XHJcbiAgICAgICAgICAgIHt2aWV3ID09PSAnbWFpbicgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnZGVsZXRlJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDnvJbovpHliJfooahcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnbmV3Jyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDmlrDmk43kvZzlkZhcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICB7dmlldyA9PT0gJ2RlbGV0ZScgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZU9wZXJhdG9yc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59ICJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiU3RhdHVzQmFyIiwiVGl0bGVCYXIiLCJLZXlib2FyZCIsInVzZURpc3BsYXlTdG9yZSIsIk9wZXJhdG9ycyIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwiY3Vyc29yUG9zaXRpb24iLCJzZXRDdXJzb3JQb3NpdGlvbiIsInNlbGVjdGVkT3BlcmF0b3JzIiwic2V0U2VsZWN0ZWRPcGVyYXRvcnMiLCJnZXRDdXJyZW50UHJvamVjdCIsInNldFNlbGVjdGVkSW5kZXhlcyIsInVwZGF0ZUN1cnJlbnRWaWV3IiwiYWRkT3BlcmF0b3IiLCJ1cGRhdGVQcm9qZWN0IiwiZ29CYWNrIiwic2V0VG9hc3RNZXNzYWdlIiwiY3VycmVudFByb2plY3QiLCJ2aWV3IiwiZ2V0U3RhdGUiLCJuYXZpZ2F0aW9uIiwiY3VycmVudCIsImhhbmRsZURlbGV0ZU9wZXJhdG9ycyIsImxlbmd0aCIsIm9wZXJhdG9ycyIsIm5ld09wZXJhdG9ycyIsImZpbHRlciIsIm9wZXJhdG9yIiwiaW5jbHVkZXMiLCJpZCIsImN1cnJlbnRJbmRleCIsInNlbGVjdGVkSW5kZXhlcyIsInByb2plY3RJbmRleCIsIm9wZXJhdG9ySW5kZXgiLCJyZW5kZXJDb250ZW50IiwiZGl2IiwiY2xhc3NOYW1lIiwibWFwIiwiaW5kZXgiLCJvbkNsaWNrIiwibmFtZSIsImlucHV0IiwidHlwZSIsImNoZWNrZWQiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJ2YWx1ZSIsInBsYWNlaG9sZGVyIiwic2VsZWN0aW9uU3RhcnQiLCJvbkZvY3VzIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJuZXdWYWx1ZSIsIm5ld1Bvc2l0aW9uIiwib25Db21wbGV0ZSIsInRyaW0iLCJuZXdPcGVyYXRvciIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0ciIsInRpdGxlIiwiYmFja1RvIiwicHJldmlvdXMiLCJidXR0b24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/Operators.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/Project.js":
/*!*************************************************!*\
!*** ./src/components/dsxpage/fluke/Project.js ***!
\*************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Project)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/lib/Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__, _store_displayStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__, _store_displayStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\nfunction Project() {\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const { getCurrentProject, navigation, navigateTo, updateCurrentView, goBack, deleteProject, setSelectedIndexes, updateProject, addProject, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n // 获取当前项目数据\n const currentProject = getCurrentProject();\n const passCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }).length;\n const failCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }).length;\n const renderContent = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'choose':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().projects.map((project, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>{\n setSelectedIndexes({\n projectIndex: index\n });\n setSelectedIndexes({\n testConfigIndex: 0\n });\n updateCurrentView('main');\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: project.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 77,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 79,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 78,\n columnNumber: 37\n }, this)\n ]\n }, project.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 68,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 66,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 65,\n columnNumber: 21\n }, this);\n case 'rxtx':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[200px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex items-center justify-center\",\n onClick: ()=>updateCurrentView('rxtx2'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"选择存储设备\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 99,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 95,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 94,\n columnNumber: 21\n }, this);\n case 'rxtx2':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"导出\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 108,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 107,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"导入\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 111,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 110,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 106,\n columnNumber: 21\n }, this);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg\",\n onClick: ()=>{\n if (currentProject?.id === 'default') {\n setToastMessage('默认项目不能重命名');\n return;\n }\n setInputValue(currentProject?.name || '');\n updateCurrentView('rename');\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"重命名\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 130,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 119,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg\",\n onClick: ()=>{\n if (currentProject?.id === 'default') {\n setToastMessage('默认项目不能删除');\n return;\n }\n // 删除当前项目\n deleteProject(_store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex);\n // 切换到默认项目(索引0)\n setSelectedIndexes({\n projectIndex: 0\n });\n updateCurrentView('main');\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"删除\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 146,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 132,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 118,\n columnNumber: 21\n }, this);\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black mb-4\",\n value: inputValue,\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 155,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 154,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n if (currentProject?.id === 'default') {\n setToastMessage('默认项目不能重命名');\n setInputValue('');\n updateCurrentView('main');\n return;\n }\n if (inputValue.trim()) {\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex;\n updateProject(currentIndex, {\n name: inputValue.trim()\n });\n setInputValue('');\n updateCurrentView('main');\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 172,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 153,\n columnNumber: 21\n }, this);\n case 'new':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black mb-4\",\n value: inputValue,\n placeholder: \"请输入项目名称\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 201,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 200,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n if (inputValue.trim()) {\n // 生成唯一ID的函数\n const generateId = ()=>Math.random().toString(36).substr(2, 9);\n // 创建新项目\n const newProject = {\n id: generateId(),\n name: inputValue.trim(),\n testResults: [],\n testConfigs: [\n {\n id: generateId(),\n moduleType: '8000',\n modulelable: 'DSX-8000',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B'\n }\n }\n ],\n cableIds: [\n {\n id: generateId(),\n name: '001'\n },\n {\n id: generateId(),\n name: '002'\n }\n ],\n operators: [\n {\n id: generateId(),\n name: 'Bob'\n }\n ]\n };\n // 添加新项目\n addProject(newProject);\n // 获取新项目的索引\n const newIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().projects.length - 1;\n // 更新选中索引,重置所有相关索引\n setSelectedIndexes({\n projectIndex: newIndex,\n testConfigIndex: 0,\n operatorIndex: 0,\n cableIdIndex: 0\n });\n // 清空输入并更新视图\n setInputValue('');\n updateCurrentView('main');\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 219,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 199,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('operators', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n \"操作员: \",\n currentProject?.operators[_store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.operatorIndex]?.name\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 293,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 295,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 294,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 289,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-400\",\n children: [\n \"结果 \",\n currentProject?.testResults[0]?.date,\n \" - \",\n currentProject?.testResults[currentProject.testResults.length - 1]?.date\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 306,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('result', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-green-500\",\n children: passCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 316,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/pass.png'),\n alt: \"通过\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 318,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 317,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 315,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-500\",\n children: failCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 328,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/fail.png'),\n alt: \"失败\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 330,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 329,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 327,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 314,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 313,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 342,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 341,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 309,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 305,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1 flex-1 overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-400\",\n children: \"测试设置\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 355,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"bg-[#404040] text-white px-3 py-1 rounded-sm text-sm\",\n onClick: ()=>{\n // 生成唯一ID\n const generateId = ()=>Math.random().toString(36).substr(2, 9);\n // 创建新的测试配置\n const newConfig = {\n id: generateId(),\n name: '新测试配置',\n moduleType: '8000',\n modulelable: 'DSX-8000',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B',\n refJumper: '1',\n spliceCount: '0',\n connectorCount: '2'\n }\n };\n // 更新项目,添加新的测试配置\n const currentProjectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex;\n const updatedProject = {\n ...currentProject,\n testConfigs: [\n ...currentProject.testConfigs,\n newConfig\n ]\n };\n updateProject(currentProjectIndex, updatedProject);\n // 设置新配置为选中状态\n const newConfigIndex = updatedProject.testConfigs.length - 1;\n setSelectedIndexes({\n testConfigIndex: newConfigIndex\n });\n // 跳转到测试配置页面并进入编辑视图\n navigateTo('testConfig', 'setup');\n },\n children: \"新测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 356,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 354,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] overflow-y-auto space-y-2 pr-2\",\n children: currentProject?.testConfigs.map((config, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg cursor-pointer\",\n onClick: ()=>navigateTo('testConfig', 'main'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0.2\",\n children: [\n config.moduleType === '8000' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 408,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 409,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.wireOrder\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 410,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 415,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 416,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 417,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n config.params.refJumper,\n \" 跳线参照\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 418,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'ofp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 423,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 424,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 425,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 405,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-end justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-sm\",\n children: config.modulelable\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 430,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-6 h-6 bg-[#404040] rounded-sm flex items-center justify-center\",\n onClick: (e)=>{\n e.stopPropagation(); // 阻止事件冒泡\n const currentProjectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex;\n const currentTestConfigIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.testConfigIndex;\n const selectedConfigId = currentProject.testConfigs[currentTestConfigIndex]?.id;\n // 禁止删除最后一项配置\n if (currentProject.testConfigs.length <= 1) {\n setToastMessage('不能删除最后一项配置');\n return;\n }\n // 更新项目,删除选中的测试配置\n const updatedProject = {\n ...currentProject,\n testConfigs: currentProject.testConfigs.filter((testConfig)=>testConfig.id !== config.id)\n };\n updateProject(currentProjectIndex, updatedProject);\n // 更新选中索引\n const newIndex = updatedProject.testConfigs.findIndex((testConfig)=>testConfig.id === selectedConfigId);\n // 如果删除的是当前选中的配置,或者找不到选中的配置ID,则设置索引为0\n setSelectedIndexes({\n testConfigIndex: newIndex === -1 ? 0 : newIndex\n });\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-4 h-4 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/delete.png'),\n alt: \"删除\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 467,\n columnNumber: 45\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 466,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 432,\n columnNumber: 54\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 431,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 429,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 404,\n columnNumber: 25\n }, this)\n }, config.id, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 399,\n columnNumber: 37\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 397,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 353,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-400\",\n children: \"电缆ID集\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 487,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 486,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('cableId', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n \"下一个ID: \",\n currentProject?.cableIds?.[0]?.name || '001'\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 493,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 497,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 496,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 489,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 485,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 287,\n columnNumber: 13\n }, this);\n }\n };\n const renderTitleBar = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'choose':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"更改项目\",\n backTo: null,\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 518,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择您要的项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 519,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'rxtx':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"传输项目\",\n backTo: null,\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 526,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择存储设备\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 527,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'rxtx2':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"传输项目\",\n backTo: null,\n view: \"rxtx\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 534,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择所需操作\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 535,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"管理项目\",\n backTo: null,\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 542,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: currentProject?.name || 'DEFAULT'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 543,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"重命名\",\n backTo: null,\n view: \"setup\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 550,\n columnNumber: 25\n }, this)\n }, void 0, false);\n case 'new':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"新项目\",\n backTo: null,\n view: \"choose\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 557,\n columnNumber: 25\n }, this)\n }, void 0, false);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"项目\",\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 565,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: currentProject?.name || 'DEFAULT'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 566,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n }\n };\n const renderFooter = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'choose':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('new'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"新项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 579,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 578,\n columnNumber: 21\n }, this);\n case 'rxtx':\n case 'rxtx2':\n case 'setup':\n case 'rename':\n case 'new':\n return null;\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('choose'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"更改项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 599,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('rxtx'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"传输\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 605,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('setup'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"管理\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 611,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 598,\n columnNumber: 13\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 624,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Project.js\",\n lineNumber: 623,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvUHJvamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF3QztBQUNUO0FBQ29CO0FBQ0Y7QUFDTTtBQUNOO0FBQ0U7QUFDUDtBQUU3QixTQUFTUztJQUNwQixNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR1YsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDVyxnQkFBZ0JDLGtCQUFrQixHQUFHWiwrQ0FBUUEsQ0FBQztJQUNyRCxNQUFNLEVBQ0ZhLGlCQUFpQixFQUNqQkMsVUFBVSxFQUNWQyxVQUFVLEVBQ1ZDLGlCQUFpQixFQUNqQkMsTUFBTSxFQUNOQyxhQUFhLEVBQ2JDLGtCQUFrQixFQUNsQkMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLGVBQWUsRUFDbEIsR0FBR2hCLCtEQUFlQTtJQUVuQixXQUFXO0lBQ1gsTUFBTWlCLGlCQUFpQlY7SUFDdkIsTUFBTVcsWUFBWUQsZ0JBQWdCRSxZQUFZQyxPQUFPQyxDQUFBQTtRQUNqRCxNQUFNQyxlQUFlRCxPQUFPRSxrQkFBa0I7UUFDOUMsTUFBTUMsWUFBWUgsT0FBT0ksZUFBZTtRQUN4QyxNQUFNQyxZQUFZTCxPQUFPTSxlQUFlO1FBRXhDLElBQUlMLGNBQWM7WUFDZCxPQUFPQSxpQkFBaUI7UUFDNUIsT0FBTyxJQUFJRSxXQUFXO1lBQ2xCLE9BQU9BLGNBQWM7UUFDekIsT0FBTyxJQUFJRSxXQUFXO1lBQ2xCLE9BQU9BLGNBQWM7UUFDekI7UUFDQSxPQUFPO0lBQ1gsR0FBR0U7SUFFSCxNQUFNQyxZQUFZWixnQkFBZ0JFLFlBQVlDLE9BQU9DLENBQUFBO1FBQ2pELE1BQU1DLGVBQWVELE9BQU9FLGtCQUFrQjtRQUM5QyxNQUFNQyxZQUFZSCxPQUFPSSxlQUFlO1FBQ3hDLE1BQU1DLFlBQVlMLE9BQU9NLGVBQWU7UUFFeEMsSUFBSUwsY0FBYztZQUNkLE9BQU9BLGlCQUFpQjtRQUM1QixPQUFPLElBQUlF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UyxJQUFNOUIsa0JBQWtCOzRCQUNqQ3dCLFdBQVU7c0NBQ3JCOzs7Ozs7c0NBR0QsOERBQUNjOzRCQUNXUixTQUFTLElBQU05QixrQkFBa0I7NEJBQ3pDd0IsV0FBVTtzQ0FDYjs7Ozs7O3NDQUdELDhEQUFDYzs0QkFDV1IsU0FBUyxJQUFNOUIsa0JBQWtCOzRCQUN6Q3dCLFdBQVU7c0NBQ2I7Ozs7Ozs7Ozs7OztRQUtUO0lBQ0o7SUFFQSxxQkFDSSw4REFBQ0Q7UUFBSUMsV0FBVTs7MEJBQ1gsOERBQUN0QyxpRUFBU0E7Ozs7O1lBQ1R1RztZQUNBckU7WUFDQXdFOzs7Ozs7O0FBR2IiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9mbHVrZS9Qcm9qZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBJbWFnZSBmcm9tICduZXh0L2ltYWdlJztcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdGF0dXNCYXInO1xuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvVGl0bGVCYXInO1xuaW1wb3J0IFN1YlRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvU3ViVGl0bGVCYXInO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvS2V5Ym9hcmQnO1xuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJ0AvdXRpbHMvYXNzZXQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcm9qZWN0KCkge1xuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbY3Vyc29yUG9zaXRpb24sIHNldEN1cnNvclBvc2l0aW9uXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IHsgXG4gICAgICAgIGdldEN1cnJlbnRQcm9qZWN0LFxuICAgICAgICBuYXZpZ2F0aW9uLFxuICAgICAgICBuYXZpZ2F0ZVRvLFxuICAgICAgICB1cGRhdGVDdXJyZW50VmlldyxcbiAgICAgICAgZ29CYWNrLFxuICAgICAgICBkZWxldGVQcm9qZWN0LFxuICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMsXG4gICAgICAgIHVwZGF0ZVByb2plY3QsXG4gICAgICAgIGFkZFByb2plY3QsXG4gICAgICAgIHNldFRvYXN0TWVzc2FnZVxuICAgIH0gPSB1c2VEaXNwbGF5U3RvcmUoKTtcblxuICAgIC8vIOiOt+WPluW9k+WJjemhueebruaVsOaNrlxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcbiAgICBjb25zdCBwYXNzQ291bnQgPSBjdXJyZW50UHJvamVjdD8udGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IGNvcHBlclN0YXR1cyA9IHJlc3VsdC5Db3BwZXJSZXN1bHRTdGF0dXM7XG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XG4gICAgICAgIGNvbnN0IG9mcFN0YXR1cyA9IHJlc3VsdC5vZnBSZXN1bHRTdGF0dXM7XG4gICAgICAgIFxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29wcGVyU3RhdHVzID09PSAncGFzcyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ZwU3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAncGFzcyc7XG4gICAgICAgIH0gZWxzZSBpZiAob2ZwU3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gb2ZwU3RhdHVzID09PSAncGFzcyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pLmxlbmd0aDtcbiAgICBcbiAgICBjb25zdCBmYWlsQ291bnQgPSBjdXJyZW50UHJvamVjdD8udGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IGNvcHBlclN0YXR1cyA9IHJlc3VsdC5Db3BwZXJSZXN1bHRTdGF0dXM7XG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XG4gICAgICAgIGNvbnN0IG9mcFN0YXR1cyA9IHJlc3VsdC5vZnBSZXN1bHRTdGF0dXM7XG4gICAgICAgIFxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29wcGVyU3RhdHVzID09PSAnZmFpbCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ZwU3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAnZmFpbCc7XG4gICAgICAgIH0gZWxzZSBpZiAob2ZwU3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gb2ZwU3RhdHVzID09PSAnZmFpbCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pLmxlbmd0aDtcblxuXG4gICAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XG4gICAgICAgIFxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nob29zZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMubWFwKChwcm9qZWN0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtwcm9qZWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzKHsgcHJvamVjdEluZGV4OiBpbmRleCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyB0ZXN0Q29uZmlnSW5kZXg6IDAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ21haW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e3Byb2plY3QubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSAncnh0eCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bMjAwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3J4dHgyJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7pgInmi6nlrZjlgqjorr7lpIc8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjYXNlICdyeHR4Mic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwidy1mdWxsIGgtWzEwMHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sZ1wiPuWvvOWHujwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInctZnVsbCBoLVsxMDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7lr7zlhaU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjYXNlICdzZXR1cCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzEwMHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9qZWN0Py5pZCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+m7mOiupOmhueebruS4jeiDvemHjeWRveWQjScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoY3VycmVudFByb2plY3Q/Lm5hbWUgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVuYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sZ1wiPumHjeWRveWQjTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVsxMDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvamVjdD8uaWQgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfpu5jorqTpobnnm67kuI3og73liKDpmaQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5b2T5YmN6aG555uuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVQcm9qZWN0KHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5wcm9qZWN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiH5o2i5Yiw6buY6K6k6aG555uu77yI57Si5byVMO+8iVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzKHsgcHJvamVjdEluZGV4OiAwIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ21haW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+5Yig6ZmkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSAncmVuYW1lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bIzMwMzA0MF0gcC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrIG1iLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbj17Y3Vyc29yUG9zaXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9qZWN0Py5pZCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+m7mOiupOmhueebruS4jeiDvemHjeWRveWQjScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnByb2plY3RJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7IG5hbWU6IGlucHV0VmFsdWUudHJpbSgpIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1bI2ZmZmZlMV0gcm91bmRlZC1zbSBwLTQgdGV4dC1ibGFjayBtYi00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl6aG555uu5ZCN56ewXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbj17Y3Vyc29yUG9zaXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnlJ/miJDllK/kuIBJROeahOWHveaVsFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVJZCA9ICgpID0+IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yib5bu65paw6aG555uuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQcm9qZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaW5wdXRWYWx1ZS50cmltKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWdzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVUeXBlOiAnODAwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZWxhYmxlOiAnRFNYLTgwMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0VmFsdWU6ICdUSUEgQ2F0IDYgQ2hhbm5lbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWJsZVR5cGU6ICdDYXQ2IFUvVVRQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlcjogJ1Q1NjhCJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVJZHM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcwMDEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcwMDInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0JvYidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5re75Yqg5paw6aG555uuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQcm9qZWN0KG5ld1Byb2plY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDojrflj5bmlrDpobnnm67nmoTntKLlvJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6YCJ5Lit57Si5byV77yM6YeN572u5omA5pyJ55u45YWz57Si5byVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWdJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlSWRJbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa4heepuui+k+WFpeW5tuabtOaWsOinhuWbvlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICB7Lyog5pON5L2c5ZGY5L+h5oGvICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnb3BlcmF0b3JzJywgJ21haW4nKX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPuaTjeS9nOWRmDoge2N1cnJlbnRQcm9qZWN0Py5vcGVyYXRvcnNbdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLm9wZXJhdG9ySW5kZXhdPy5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiDnu5Pmnpznu5/orqEgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIOe7k+aenCB7Y3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzWzBdPy5kYXRlfSAtIHtjdXJyZW50UHJvamVjdD8udGVzdFJlc3VsdHNbY3VycmVudFByb2plY3QudGVzdFJlc3VsdHMubGVuZ3RoIC0gMV0/LmRhdGV9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdyZXN1bHQnLCAnbWFpbicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmVlbi01MDBcIj57cGFzc0NvdW50fHwgMH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL3Bhc3MucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumAmui/h1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwXCI+e2ZhaWxDb3VudHx8IDB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9mYWlsLnBuZycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLlpLHotKVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz17XCJhdXRvXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7Lyog5rWL6K+V6K6+572uICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMSBmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj7mtYvor5Xorr7nva48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1bIzQwNDA0MF0gdGV4dC13aGl0ZSBweC0zIHB5LTEgcm91bmRlZC1zbSB0ZXh0LXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnlJ/miJDllK/kuIBJRFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlSWQgPSAoKSA9PiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yib5bu65paw55qE5rWL6K+V6YWN572uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn5paw5rWL6K+V6YWN572uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlVHlwZTogJzgwMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVsYWJsZTogJ0RTWC04MDAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVUeXBlOiAnQ2F0NiBVL1VUUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXI6ICdUNTY4QicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZKdW1wZXI6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudDogJzInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6aG555uu77yM5re75Yqg5paw55qE5rWL6K+V6YWN572uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFByb2plY3RJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5wcm9qZWN0SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRQcm9qZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29uZmlnczogWy4uLmN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzLCBuZXdDb25maWddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0SW5kZXgsIHVwZGF0ZWRQcm9qZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiuvue9ruaWsOmFjee9ruS4uumAieS4reeKtuaAgVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZ0luZGV4ID0gdXBkYXRlZFByb2plY3QudGVzdENvbmZpZ3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyB0ZXN0Q29uZmlnSW5kZXg6IG5ld0NvbmZpZ0luZGV4IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6Lez6L2s5Yiw5rWL6K+V6YWN572u6aG16Z2i5bm26L+b5YWl57yW6L6R6KeG5Zu+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygndGVzdENvbmZpZycsICdzZXR1cCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaWsOa1i+ivlVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bMTAwcHhdIG92ZXJmbG93LXktYXV0byBzcGFjZS15LTIgcHItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzLm1hcCgoY29uZmlnLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbmZpZy5pZH0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bMTAwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygndGVzdENvbmZpZycsICdtYWluJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0wLjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb25maWcubW9kdWxlVHlwZSA9PT0gJzgwMDAnICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLndpcmVPcmRlcn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLm1vZHVsZVR5cGUgPT09ICdjZnAnICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPuaZuuiDvei/nOerrzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLnJlZkp1bXBlcn0g6Lez57q/5Y+C54WnPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5tb2R1bGVUeXBlID09PSAnb2ZwJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7oh6rliqhPVERSPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMubGltaXRWYWx1ZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtc21cIj57Y29uZmlnLm1vZHVsZWxhYmxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNiBoLTYgYmctWyM0MDQwNDBdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsgLy8g6Zi75q2i5LqL5Lu25YaS5rOhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFByb2plY3RJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5wcm9qZWN0SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRlc3RDb25maWdJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy50ZXN0Q29uZmlnSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb25maWdJZCA9IGN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzW2N1cnJlbnRUZXN0Q29uZmlnSW5kZXhdPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnpoHmraLliKDpmaTmnIDlkI7kuIDpobnphY3nva5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFByb2plY3QudGVzdENvbmZpZ3MubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfkuI3og73liKDpmaTmnIDlkI7kuIDpobnphY3nva4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDpobnnm67vvIzliKDpmaTpgInkuK3nmoTmtYvor5XphY3nva5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUHJvamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFByb2plY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWdzOiBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29uZmlnID0+IHRlc3RDb25maWcuaWQgIT09IGNvbmZpZy5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0SW5kZXgsIHVwZGF0ZWRQcm9qZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDpgInkuK3ntKLlvJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IHVwZGF0ZWRQcm9qZWN0LnRlc3RDb25maWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZyA9PiB0ZXN0Q29uZmlnLmlkID09PSBzZWxlY3RlZENvbmZpZ0lkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzliKDpmaTnmoTmmK/lvZPliY3pgInkuK3nmoTphY3nva7vvIzmiJbogIXmib7kuI3liLDpgInkuK3nmoTphY3nva5JRO+8jOWImeiuvue9rue0ouW8leS4ujBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZ0luZGV4OiBuZXdJbmRleCA9PT0gLTEgPyAwIDogbmV3SW5kZXggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00IGgtNCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9kZWxldGUucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLliKDpmaRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7Lyog55S157yGSUTpm4YgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTQwMFwiPueUtee8hklE6ZuGPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnY2FibGVJZCcsICdtYWluJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS4i+S4gOS4qklEOiB7Y3VycmVudFByb2plY3Q/LmNhYmxlSWRzPy5bMF0/Lm5hbWUgfHwgJzAwMSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyVGl0bGVCYXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdmlldyB9ID0gbmF2aWdhdGlvbi5jdXJyZW50O1xuICAgICAgICBcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICAgICAgICBjYXNlICdjaG9vc2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgdGl0bGU9XCLmm7TmlLnpobnnm65cIiBiYWNrVG89e251bGx9IHZpZXc9XCJtYWluXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUJhciB0aXRsZT1cIumAieaLqeaCqOimgeeahOmhueebrlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ3J4dHgnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgdGl0bGU9XCLkvKDovpPpobnnm65cIiBiYWNrVG89e251bGx9IHZpZXc9XCJtYWluXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUJhciB0aXRsZT1cIumAieaLqeWtmOWCqOiuvuWkh1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNhc2UgJ3J4dHgyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIHRpdGxlPVwi5Lyg6L6T6aG555uuXCIgYmFja1RvPXtudWxsfSB2aWV3PVwicnh0eFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ViVGl0bGVCYXIgdGl0bGU9XCLpgInmi6nmiYDpnIDmk43kvZxcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjYXNlICdzZXR1cCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciB0aXRsZT1cIueuoeeQhumhueebrlwiIGJhY2tUbz17bnVsbH0gdmlldz1cIm1haW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN1YlRpdGxlQmFyIHRpdGxlPXtjdXJyZW50UHJvamVjdD8ubmFtZSB8fCAnREVGQVVMVCd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciB0aXRsZT1cIumHjeWRveWQjVwiIGJhY2tUbz17bnVsbH0gdmlldz1cInNldHVwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIHRpdGxlPVwi5paw6aG555uuXCIgYmFja1RvPXtudWxsfSB2aWV3PVwiY2hvb3NlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSAnbWFpbic6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgdGl0bGU9XCLpobnnm65cIiBiYWNrVG89XCJob21lXCIgdmlldz1cIm1haW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN1YlRpdGxlQmFyIHRpdGxlPXtjdXJyZW50UHJvamVjdD8ubmFtZSB8fCAnREVGQVVMVCd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHZpZXcgfSA9IG5hdmlnYXRpb24uY3VycmVudDtcbiAgICAgICAgXG4gICAgICAgIHN3aXRjaCAodmlldykge1xuICAgICAgICAgICAgY2FzZSAnY2hvb3NlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnbmV3Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDmlrDpobnnm65cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdyeHR4JzpcbiAgICAgICAgICAgIGNhc2UgJ3J4dHgyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcbiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZSc6XG4gICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdtYWluJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC04XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnY2hvb3NlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIOabtOaUuemhueebrlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3J4dHgnKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIOS8oOi+k1xuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3NldHVwJyl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDnrqHnkIZcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XG4gICAgICAgICAgICB7cmVuZGVyVGl0bGVCYXIoKX1cbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICAgICAgICB7cmVuZGVyRm9vdGVyKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJJbWFnZSIsIlN0YXR1c0JhciIsIlRpdGxlQmFyIiwiU3ViVGl0bGVCYXIiLCJLZXlib2FyZCIsInVzZURpc3BsYXlTdG9yZSIsImdldEFzc2V0VXJsIiwiUHJvamVjdCIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwiY3Vyc29yUG9zaXRpb24iLCJzZXRDdXJzb3JQb3NpdGlvbiIsImdldEN1cnJlbnRQcm9qZWN0IiwibmF2aWdhdGlvbiIsIm5hdmlnYXRlVG8iLCJ1cGRhdGVDdXJyZW50VmlldyIsImdvQmFjayIsImRlbGV0ZVByb2plY3QiLCJzZXRTZWxlY3RlZEluZGV4ZXMiLCJ1cGRhdGVQcm9qZWN0IiwiYWRkUHJvamVjdCIsInNldFRvYXN0TWVzc2FnZSIsImN1cnJlbnRQcm9qZWN0IiwicGFzc0NvdW50IiwidGVzdFJlc3VsdHMiLCJmaWx0ZXIiLCJyZXN1bHQiLCJjb3BwZXJTdGF0dXMiLCJDb3BwZXJSZXN1bHRTdGF0dXMiLCJjZnBTdGF0dXMiLCJDRlBSZXN1bHRTdGF0dXMiLCJvZnBTdGF0dXMiLCJvZnBSZXN1bHRTdGF0dXMiLCJsZW5ndGgiLCJmYWlsQ291bnQiLCJyZW5kZXJDb250ZW50IiwidmlldyIsImN1cnJlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJnZXRTdGF0ZSIsInByb2plY3RzIiwibWFwIiwicHJvamVjdCIsImluZGV4Iiwib25DbGljayIsInByb2plY3RJbmRleCIsInRlc3RDb25maWdJbmRleCIsIm5hbWUiLCJzcmMiLCJhbHQiLCJmaWxsIiwiaWQiLCJidXR0b24iLCJzZWxlY3RlZEluZGV4ZXMiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInNlbGVjdGlvblN0YXJ0Iiwib25Gb2N1cyIsInNldFNlbGVjdGlvblJhbmdlIiwibmV3VmFsdWUiLCJuZXdQb3NpdGlvbiIsIm9uQ29tcGxldGUiLCJ0cmltIiwiY3VycmVudEluZGV4IiwicGxhY2Vob2xkZXIiLCJnZW5lcmF0ZUlkIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyIiwibmV3UHJvamVjdCIsInRlc3RDb25maWdzIiwibW9kdWxlVHlwZSIsIm1vZHVsZWxhYmxlIiwicGFyYW1zIiwibGltaXRWYWx1ZSIsImNhYmxlVHlwZSIsIndpcmVPcmRlciIsImNhYmxlSWRzIiwib3BlcmF0b3JzIiwibmV3SW5kZXgiLCJvcGVyYXRvckluZGV4IiwiY2FibGVJZEluZGV4IiwiZGF0ZSIsInNwYW4iLCJzaXplcyIsIm5ld0NvbmZpZyIsInJlZkp1bXBlciIsInNwbGljZUNvdW50IiwiY29ubmVjdG9yQ291bnQiLCJjdXJyZW50UHJvamVjdEluZGV4IiwidXBkYXRlZFByb2plY3QiLCJuZXdDb25maWdJbmRleCIsImNvbmZpZyIsInN0b3BQcm9wYWdhdGlvbiIsImN1cnJlbnRUZXN0Q29uZmlnSW5kZXgiLCJzZWxlY3RlZENvbmZpZ0lkIiwidGVzdENvbmZpZyIsImZpbmRJbmRleCIsInJlbmRlclRpdGxlQmFyIiwidGl0bGUiLCJiYWNrVG8iLCJyZW5kZXJGb290ZXIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/Project.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/Result.js":
/*!************************************************!*\
!*** ./src/components/dsxpage/fluke/Result.js ***!
\************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Result)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/lib/Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\nfunction Result() {\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n const { getCurrentProject, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const currentProject = getCurrentProject();\n const [isManageMode, setIsManageMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [selectedResults, setSelectedResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showKeyboard, setShowKeyboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n // 获取当前项目名称\n const projectName = currentProject?.name || '';\n // 获取测试结果并统计通过/失败数量\n const testResults = currentProject?.testResults || [];\n const passCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }).length;\n const failCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }).length;\n // 对测试结果进行排序:失败在前,通过在后,相同结果按name排序(数字部分按数值大小排序)\n const sortedResults = [\n ...testResults\n ].sort((a, b)=>{\n const aPass = a.resultdata?.result === 'pass';\n const bPass = b.resultdata?.result === 'pass';\n // 如果通过状态相同,则按name排序\n if (aPass === bPass) {\n // 将名称分割成文本和数字部分\n const splitName = (name)=>{\n const match = name.match(/^(.*?)(\\d+)$/);\n if (match) {\n return {\n text: match[1],\n number: parseInt(match[2], 10)\n };\n }\n return {\n text: name,\n number: 0\n };\n };\n const nameA = splitName(a.name);\n const nameB = splitName(b.name);\n // 先比较文本部分\n if (nameA.text !== nameB.text) {\n return nameA.text.localeCompare(nameB.text);\n }\n // 文本相同则比较数字部分\n return nameA.number - nameB.number;\n }\n return aPass ? 1 : -1;\n });\n // 处理选择结果\n const handleSelect = (result)=>{\n setSelectedResults((prev)=>{\n if (prev.includes(result.name)) {\n return prev.filter((name)=>name !== result.name);\n } else {\n return [\n ...prev,\n result.name\n ];\n }\n });\n };\n // 处理删除选中的结果\n const handleDelete = ()=>{\n if (selectedResults.length === 0) return;\n const newResults = testResults.filter((result)=>!selectedResults.includes(result.name));\n const updatedProject = {\n ...currentProject,\n testResults: newResults\n };\n const projectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === currentProject.id);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(projectIndex, updatedProject);\n setSelectedResults([]);\n setIsManageMode(false);\n setShowDeleteDialog(false);\n };\n // 重命名逻辑\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Result.useEffect\": ()=>{\n if (view === 'rename' && selectedResults.length === 1) {\n const selectedResult = testResults.find({\n \"Result.useEffect.selectedResult\": (result)=>result.name === selectedResults[0]\n }[\"Result.useEffect.selectedResult\"]);\n setInputValue(selectedResult.name);\n }\n }\n }[\"Result.useEffect\"], [\n view,\n selectedResults,\n testResults\n ]);\n // 处理重命名完成\n const handleRename = ()=>{\n if (!inputValue.trim()) return;\n // 检查是否与其他结果名称冲突\n const isDuplicate = testResults.some((result)=>result.name !== selectedResults[0] && result.name === inputValue.trim());\n if (isDuplicate) {\n setToastMessage('该名称已存在,请使用其他名称');\n return;\n }\n const newResults = testResults.map((result)=>{\n console.log(testResults);\n console.log(result);\n if (result.name === selectedResults[0]) {\n // 处理CFP模块类型的特殊重命名逻辑\n if (result.testconfig?.moduleType === 'cfp') {\n const oldName = result.name;\n const newName = inputValue.trim();\n // 判断旧名字是input还是output\n if (oldName === result.inputname) {\n // 查找关联结果:inputname相同但name不同的结果\n const relatedResult = testResults.find((r)=>r.inputname === result.inputname && r.name !== result.name);\n console.log(\"找到的关联结果:\", relatedResult);\n // 如果是当前选中的结果,更新name和inputname\n if (result.name === selectedResults[0]) {\n // 更新选中结果的name和inputname\n const updatedResult = {\n ...result,\n name: newName,\n inputname: newName\n };\n // 查找并更新关联结果的inputname\n const relatedResult = testResults.find((r)=>r.inputname === result.inputname && r.name !== result.name);\n if (relatedResult) {\n relatedResult.inputname = newName;\n }\n return updatedResult;\n }\n return result;\n } else if (oldName === result.outname) {\n // 查找关联结果:outname相同但name不同的结果\n if (result.name === selectedResults[0]) {\n // outname\n const updatedResult = {\n ...result,\n name: newName,\n outname: newName\n };\n // outname\n const relatedResult = testResults.find((r)=>r.outname === result.outname && r.name !== result.name);\n if (relatedResult) {\n relatedResult.outname = newName;\n }\n return updatedResult;\n }\n return result;\n }\n }\n return {\n ...result,\n name: inputValue.trim()\n };\n }\n return result;\n });\n const updatedProject = {\n ...currentProject,\n testResults: newResults\n };\n const projectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === currentProject.id);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(projectIndex, updatedProject);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'main');\n // 重置管理状态和选中结果状态\n setIsManageMode(false);\n setSelectedResults([]);\n };\n //确认删除提示框 \n const [showDeleteDialog, setShowDeleteDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n //确认移动提示框\n const [showConfirmDialog, setShowConfirmDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [targetProject, setTargetProject] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showOverwriteDialog, setShowOverwriteDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [duplicateResults, setDuplicateResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const moveResults = (project, index)=>{\n // 检查是否选择了结果和目标项目\n if (selectedResults.length === 0 || !project) return;\n // 检查是否在同一个项目中移动\n if (project.id === currentProject.id) {\n setToastMessage('不能移动到相同项目');\n return;\n }\n // 检查目标项目中是否有重名结果\n const duplicates = selectedResults.filter((resultName)=>project.testResults.some((targetResult)=>targetResult.name === resultName));\n if (duplicates.length > 0) {\n setDuplicateResults(duplicates);\n setTargetProject(project);\n setShowOverwriteDialog(true);\n } else {\n setTargetProject(project);\n setShowConfirmDialog(true);\n }\n };\n const handleMove = (overwrite = false)=>{\n if (!targetProject) return;\n // 获取要移动的结果对象\n const resultsToMove = testResults.filter((result)=>selectedResults.includes(result.name));\n // 更新目标项目\n const updatedTargetResults = overwrite ? [\n ...targetProject.testResults.filter((result)=>!selectedResults.includes(result.name)),\n ...resultsToMove\n ] : [\n ...targetProject.testResults,\n ...resultsToMove\n ];\n const updatedTargetProject = {\n ...targetProject,\n testResults: updatedTargetResults\n };\n // 更新当前项目\n const updatedCurrentResults = testResults.filter((result)=>!selectedResults.includes(result.name));\n const updatedCurrentProject = {\n ...currentProject,\n testResults: updatedCurrentResults\n };\n // 保存更改\n const targetIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === targetProject.id);\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === currentProject.id);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(targetIndex, updatedTargetProject);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(currentIndex, updatedCurrentProject);\n // 重置状态\n setSelectedResults([]);\n setIsManageMode(false);\n setShowConfirmDialog(false);\n setShowOverwriteDialog(false);\n setTargetProject(null);\n setDuplicateResults([]);\n // 显示成功消息并返回主视图\n setToastMessage('移动成功');\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'main');\n };\n // 渲染标题栏\n const renderTitleBar = ()=>{\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n switch(view){\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"重命名结果\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 283,\n columnNumber: 21\n }, this);\n case 'move':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"移至\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 291,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"结果\",\n backTo: 'home',\n view: 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 300,\n columnNumber: 21\n }, this);\n }\n };\n // 渲染主要内容\n const renderContent = ()=>{\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n switch(view){\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mb-4 cursor-pointer\",\n onClick: ()=>setShowKeyboard(true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入测试结果名称\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 321,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 317,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 341,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 316,\n columnNumber: 21\n }, this);\n case 'move':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择您要的项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 358,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2 p-4\",\n children: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.map((project, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>{\n moveResults(project, index);\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: project.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 369,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 371,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 370,\n columnNumber: 37\n }, this)\n ]\n }, project.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 362,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 360,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 357,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-gradient-to-b from-[#b0b0b0] via-[#e0e4e0] to-[#b0b0b0] px-4 flex flex-col justify-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black\",\n children: projectName\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 389,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-green-500\",\n children: passCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 393,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/pass.png'),\n alt: \"通过\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 395,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 394,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 392,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-500\",\n children: failCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 405,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/fail.png'),\n alt: \"失败\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 407,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 406,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 404,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 391,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 388,\n columnNumber: 25\n }, this),\n isManageMode && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[40px] px-4 bg-[#efebe6] flex items-center border-b border-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: selectedResults.length === sortedResults.length,\n onChange: ()=>{\n if (selectedResults.length === sortedResults.length) {\n setSelectedResults([]);\n } else {\n setSelectedResults(sortedResults.map((result)=>result.name));\n }\n },\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 421,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-black\",\n children: \"选择全部\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 433,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 420,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 419,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] overflow-y-auto\",\n style: {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: sortedResults.map((result, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] px-4 bg-[#efebe6] flex items-center justify-between border-b border-gray-600 cursor-pointer\",\n onClick: ()=>!isManageMode && _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('resultinfo', 'save', result),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n isManageMode && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: selectedResults.includes(result.name),\n onChange: ()=>handleSelect(result),\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 447,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-black\",\n children: result.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 454,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 445,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: result.CopperResultStatus === 'pass' || result.ofpResultStatus === 'pass' || result.name === result.inputname && result.InPortStatus === 'pass' || result.name === result.outname && result.OutPortStatus === 'pass' ? (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/pass.png') : (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/fail.png'),\n alt: result.CopperResultStatus === 'pass' || result.ofpResultStatus === 'pass' || result.name === result.inputname && result.InPortStatus === 'pass' || result.name === result.outname && result.OutPortStatus === 'pass' ? '通过' : '失败',\n className: \"w-7 h-7\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 456,\n columnNumber: 41\n }, this)\n ]\n }, index, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 440,\n columnNumber: 37\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 438,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 437,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n }\n };\n // 渲染底部按钮\n const renderFooter = ()=>{\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n switch(view){\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\",\n children: !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleRename,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"完成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 493,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 491,\n columnNumber: 21\n }, this);\n case 'move':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-5\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 504,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n if (selectedResults.length > 0) {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'move');\n }\n },\n disabled: selectedResults.length === 0,\n style: {\n opacity: selectedResults.length > 0 ? 1 : 0.5\n },\n children: \"移动\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 513,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 512,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n if (selectedResults.length === 1) {\n const selectedResult = testResults.find((result)=>result.name === selectedResults[0]);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'rename', selectedResult);\n }\n },\n disabled: selectedResults.length !== 1,\n style: {\n opacity: selectedResults.length === 1 ? 1 : 0.5\n },\n children: \"重命名\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 528,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 527,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>isManageMode ? setShowDeleteDialog(true) : setIsManageMode(true),\n children: isManageMode ? '删除' : '管理'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 543,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 542,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 511,\n columnNumber: 21\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 557,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter(),\n showDeleteDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-9999\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 566,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: \"是否删除选中的测试结果?\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 568,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 567,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mt-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>setShowDeleteDialog(false),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 572,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>handleDelete(),\n children: \"确认\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 578,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 571,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 570,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 565,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 564,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 563,\n columnNumber: 29\n }, this),\n showConfirmDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-9999\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 595,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: [\n \"是否将选中的测试结果移动到项目 \",\n targetProject?.name,\n \"?\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 597,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 596,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mt-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \" text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>setShowConfirmDialog(false),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 601,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \" text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>handleMove(false),\n children: \"确认\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 607,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 600,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 599,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 594,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 593,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 592,\n columnNumber: 29\n }, this),\n showOverwriteDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-9999\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 625,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex flex-col items-center justify-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg mb-4\",\n children: \"以下测试结果在目标项目中已存在:\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 627,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mb-4 list-disc pl-6\",\n children: duplicateResults.map((name, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: \"text-red-500\",\n children: name\n }, index, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 630,\n columnNumber: 45\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 628,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: \"是否覆盖这些结果?\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 633,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 626,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mt-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>{\n setShowOverwriteDialog(false);\n setTargetProject(null);\n setDuplicateResults([]);\n },\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 637,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>handleMove(true),\n children: \"覆盖\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 647,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 636,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 635,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 624,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 623,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 622,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Result.js\",\n lineNumber: 556,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvUmVzdWx0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ3BCO0FBQ29CO0FBQ0Y7QUFDTTtBQUNKO0FBQ0Y7QUFDTDtBQUU3QixTQUFTVTtJQUNwQixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHSixvRUFBd0IsR0FBR00sVUFBVSxDQUFDQyxPQUFPO0lBQzlELE1BQU0sRUFBRUMsaUJBQWlCLEVBQUNDLGVBQWUsRUFBRSxHQUFHVCwrREFBZUE7SUFDN0QsTUFBTVUsaUJBQWlCRjtJQUN2QixNQUFNLENBQUNHLGNBQWNDLGdCQUFnQixHQUFHbEIsK0NBQVFBLENBQUM7SUFDakQsTUFBTSxDQUFDbUIsaUJBQWlCQyxtQkFBbUIsR0FBR3BCLCtDQUFRQSxDQUFDLEVBQUU7SUFDekQsTUFBTSxDQUFDcUIsWUFBWUMsY0FBYyxHQUFHdEIsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDdUIsY0FBY0MsZ0JBQWdCLEdBQUd4QiwrQ0FBUUEsQ0FBQztJQUNqRCxNQUFNLENBQUN5QixnQkFBZ0JDLGtCQUFrQixHQUFHMUIsK0NBQVFBLENBQUM7SUFDckQsV0FBVztJQUNYLE1BQU0yQixjQUFjWCxnQkFBZ0JZLFFBQVE7SUFFNUMsbUJBQW1CO0lBQ25CLE1BQU1DLGNBQWNiLGdCQUFnQmEsZUFBZSxFQUFFO0lBQ3JELE1BQU1DLFlBQVlkLGdCQUFnQmEsWUFBWUUsT0FBT0MsQ0FBQUE7UUFDakQsTUFBTUMsZUFBZUQsT0FBT0Usa0JBQWtCO1FBQzlDLE1BQU1DLFlBQVlILE9BQU9JLGVBQWU7UUFDeEMsTUFBTUMsWUFBWUwsT0FBT00sZUFBZTtRQUV4QyxJQUFJTCxjQUFjO1lBQ2QsT0FBT0EsaUJBQWlCO1FBQzVCLE9BQU8sSUFBSUUsV0FBVztZQUNsQixPQUFPQSxjQUFjO1FBQ3pCLE9BQU8sSUFBSUUsV0FBVztZQUNsQixPQUFPQSxjQUFjO1FBQ3pC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QUNHNUIsV0FBVTs0Q0FDVkMsU0FBUyxJQUFNN0IscUJBQXFCO3NEQUN2Qzs7Ozs7O3NEQUdELDhEQUFDd0Q7NENBQ0c1QixXQUFVOzRDQUNWQyxTQUFTLElBQU1oQixXQUFXO3NEQUM3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBV3hCVixxQ0FDZSw4REFBQ3dCO2dCQUFJQyxXQUFVOzBCQUNmLDRFQUFDRDtvQkFBSUMsV0FBVTs4QkFDUCw0RUFBQ0Q7d0JBQUlDLFdBQVU7OzBDQUNmLDhEQUFDK0I7Z0NBQUcvQixXQUFVOzBDQUFvQzs7Ozs7OzBDQUNsRCw4REFBQ0Q7Z0NBQUlDLFdBQVU7O2tEQUNmLDhEQUFDRDt3Q0FBSUMsV0FBVTtrREFBMEI7Ozs7OztrREFDekMsOERBQUNnQzt3Q0FBR2hDLFdBQVU7a0RBQ1R2QixpQkFBaUJwQixHQUFHLENBQUMsQ0FBQy9DLE1BQU11RSxzQkFDekIsOERBQUNvRDtnREFBZWpDLFdBQVU7MERBQWdCMUY7K0NBQWpDdUU7Ozs7Ozs7Ozs7a0RBR2pCLDhEQUFDa0I7d0NBQUlDLFdBQVU7a0RBQXFCOzs7Ozs7Ozs7Ozs7MENBRXBDLDhEQUFDRDtnQ0FBSUMsV0FBVTswQ0FDZiw0RUFBQ0Q7b0NBQUlDLFdBQVU7O3NEQUNYLDhEQUFDNEI7NENBQ0c1QixXQUFVOzRDQUNWQyxTQUFTO2dEQUNMekIsdUJBQXVCO2dEQUN2QkYsaUJBQWlCO2dEQUNqQkksb0JBQW9CLEVBQUU7NENBQzFCO3NEQUNIOzs7Ozs7c0RBR0QsOERBQUNrRDs0Q0FDRzVCLFdBQVU7NENBQ1ZDLFNBQVMsSUFBTWhCLFdBQVc7c0RBQzdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXekMiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9mbHVrZS9SZXN1bHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBJbWFnZSBmcm9tICduZXh0L2ltYWdlJztcclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1N0YXR1c0Jhcic7XHJcbmltcG9ydCBUaXRsZUJhciBmcm9tICdAL2NvbXBvbmVudHMvbGliL1RpdGxlQmFyJztcclxuaW1wb3J0IFN1YlRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvU3ViVGl0bGVCYXInO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvS2V5Ym9hcmQnO1xyXG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJ0AvdXRpbHMvYXNzZXQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzdWx0KCkge1xyXG4gICAgY29uc3QgeyB2aWV3IH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICBjb25zdCB7IGdldEN1cnJlbnRQcm9qZWN0LHNldFRvYXN0TWVzc2FnZSB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICBjb25zdCBbaXNNYW5hZ2VNb2RlLCBzZXRJc01hbmFnZU1vZGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3NlbGVjdGVkUmVzdWx0cywgc2V0U2VsZWN0ZWRSZXN1bHRzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFtzaG93S2V5Ym9hcmQsIHNldFNob3dLZXlib2FyZF0gPSB1c2VTdGF0ZSh0cnVlKTtcclxuICAgIGNvbnN0IFtjdXJzb3JQb3NpdGlvbiwgc2V0Q3Vyc29yUG9zaXRpb25dID0gdXNlU3RhdGUoMCk7XHJcbiAgICAvLyDojrflj5blvZPliY3pobnnm67lkI3np7BcclxuICAgIGNvbnN0IHByb2plY3ROYW1lID0gY3VycmVudFByb2plY3Q/Lm5hbWUgfHwgJyc7XHJcblxyXG4gICAgLy8g6I635Y+W5rWL6K+V57uT5p6c5bm257uf6K6h6YCa6L+HL+Wksei0peaVsOmHj1xyXG4gICAgY29uc3QgdGVzdFJlc3VsdHMgPSBjdXJyZW50UHJvamVjdD8udGVzdFJlc3VsdHMgfHwgW107XHJcbiAgICBjb25zdCBwYXNzQ291bnQgPSBjdXJyZW50UHJvamVjdD8udGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgY29uc3QgY29wcGVyU3RhdHVzID0gcmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cztcclxuICAgICAgICBjb25zdCBjZnBTdGF0dXMgPSByZXN1bHQuQ0ZQUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IG9mcFN0YXR1cyA9IHJlc3VsdC5vZnBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvcHBlclN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY29wcGVyU3RhdHVzID09PSAncGFzcyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNmcFN0YXR1cyA9PT0gJ3Bhc3MnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2ZwU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZnBTdGF0dXMgPT09ICdwYXNzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkubGVuZ3RoO1xyXG4gICAgXHJcbiAgICBjb25zdCBmYWlsQ291bnQgPSBjdXJyZW50UHJvamVjdD8udGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgY29uc3QgY29wcGVyU3RhdHVzID0gcmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cztcclxuICAgICAgICBjb25zdCBjZnBTdGF0dXMgPSByZXN1bHQuQ0ZQUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IG9mcFN0YXR1cyA9IHJlc3VsdC5vZnBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvcHBlclN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY29wcGVyU3RhdHVzID09PSAnZmFpbCc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNmcFN0YXR1cyA9PT0gJ2ZhaWwnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2ZwU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZnBTdGF0dXMgPT09ICdmYWlsJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkubGVuZ3RoO1xyXG5cclxuICAgIC8vIOWvuea1i+ivlee7k+aenOi/m+ihjOaOkuW6j++8muWksei0peWcqOWJje+8jOmAmui/h+WcqOWQju+8jOebuOWQjOe7k+aenOaMiW5hbWXmjpLluo/vvIjmlbDlrZfpg6jliIbmjInmlbDlgLzlpKflsI/mjpLluo/vvIlcclxuICAgIGNvbnN0IHNvcnRlZFJlc3VsdHMgPSBbLi4udGVzdFJlc3VsdHNdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBjb25zdCBhUGFzcyA9IGEucmVzdWx0ZGF0YT8ucmVzdWx0ID09PSAncGFzcyc7XHJcbiAgICAgICAgY29uc3QgYlBhc3MgPSBiLnJlc3VsdGRhdGE/LnJlc3VsdCA9PT0gJ3Bhc3MnO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWmguaenOmAmui/h+eKtuaAgeebuOWQjO+8jOWImeaMiW5hbWXmjpLluo9cclxuICAgICAgICBpZiAoYVBhc3MgPT09IGJQYXNzKSB7XHJcbiAgICAgICAgICAgIC8vIOWwhuWQjeensOWIhuWJsuaIkOaWh+acrOWSjOaVsOWtl+mDqOWIhlxyXG4gICAgICAgICAgICBjb25zdCBzcGxpdE5hbWUgPSAobmFtZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBuYW1lLm1hdGNoKC9eKC4qPykoXFxkKykkLyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBtYXRjaFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBwYXJzZUludChtYXRjaFsyXSwgMTApXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQ6IG5hbWUsIG51bWJlcjogMCB9O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgbmFtZUEgPSBzcGxpdE5hbWUoYS5uYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbmFtZUIgPSBzcGxpdE5hbWUoYi5uYW1lKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOWFiOavlOi+g+aWh+acrOmDqOWIhlxyXG4gICAgICAgICAgICBpZiAobmFtZUEudGV4dCAhPT0gbmFtZUIudGV4dCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVBLnRleHQubG9jYWxlQ29tcGFyZShuYW1lQi50ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyDmlofmnKznm7jlkIzliJnmr5TovoPmlbDlrZfpg6jliIZcclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVBLm51bWJlciAtIG5hbWVCLm51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGFQYXNzID8gMSA6IC0xO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5aSE55CG6YCJ5oup57uT5p6cXHJcbiAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgc2V0U2VsZWN0ZWRSZXN1bHRzKHByZXYgPT4ge1xyXG4gICAgICAgICAgICBpZiAocHJldi5pbmNsdWRlcyhyZXN1bHQubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2LmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHJlc3VsdC5uYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgcmVzdWx0Lm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOWkhOeQhuWIoOmZpOmAieS4reeahOe7k+aenFxyXG4gICAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFJlc3VsdHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0cyA9IHRlc3RSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gIXNlbGVjdGVkUmVzdWx0cy5pbmNsdWRlcyhyZXN1bHQubmFtZSkpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9qZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5jdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgdGVzdFJlc3VsdHM6IG5ld1Jlc3VsdHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHByb2plY3RJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnByb2plY3RzLmZpbmRJbmRleChwID0+IHAuaWQgPT09IGN1cnJlbnRQcm9qZWN0LmlkKTtcclxuICAgICAgICB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS51cGRhdGVQcm9qZWN0KHByb2plY3RJbmRleCwgdXBkYXRlZFByb2plY3QpO1xyXG4gICAgICAgIHNldFNlbGVjdGVkUmVzdWx0cyhbXSk7XHJcbiAgICAgICAgc2V0SXNNYW5hZ2VNb2RlKGZhbHNlKTtcclxuICAgICAgICBzZXRTaG93RGVsZXRlRGlhbG9nKGZhbHNlKTtcclxuXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvLyDph43lkb3lkI3pgLvovpFcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdyZW5hbWUnICYmIHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZXN1bHQgPSB0ZXN0UmVzdWx0cy5maW5kKHJlc3VsdCA9PiByZXN1bHQubmFtZSA9PT0gc2VsZWN0ZWRSZXN1bHRzWzBdKTtcclxuICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShzZWxlY3RlZFJlc3VsdC5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdmlldywgc2VsZWN0ZWRSZXN1bHRzLCB0ZXN0UmVzdWx0c10pO1xyXG5cclxuICAgIC8vIOWkhOeQhumHjeWRveWQjeWujOaIkFxyXG4gICAgY29uc3QgaGFuZGxlUmVuYW1lID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZS50cmltKCkpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbkuI7lhbbku5bnu5PmnpzlkI3np7DlhrLnqoFcclxuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHRlc3RSZXN1bHRzLnNvbWUocmVzdWx0ID0+IFxyXG4gICAgICAgICAgICByZXN1bHQubmFtZSAhPT0gc2VsZWN0ZWRSZXN1bHRzWzBdICYmIHJlc3VsdC5uYW1lID09PSBpbnB1dFZhbHVlLnRyaW0oKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivpeWQjeensOW3suWtmOWcqO+8jOivt+S9v+eUqOWFtuS7luWQjeensCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IG5ld1Jlc3VsdHMgPSB0ZXN0UmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGVzdFJlc3VsdHMpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5uYW1lID09PSBzZWxlY3RlZFJlc3VsdHNbMF0pIHtcclxuICAgICAgICAgICAgICAgIC8vIOWkhOeQhkNGUOaooeWdl+exu+Wei+eahOeJueauiumHjeWRveWQjemAu+i+kVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZE5hbWUgPSByZXN1bHQubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdOYW1lID0gaW5wdXRWYWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yik5pat5pen5ZCN5a2X5pivaW5wdXTov5jmmK9vdXRwdXRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkTmFtZSA9PT0gcmVzdWx0LmlucHV0bmFtZSkgeyAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmn6Xmib7lhbPogZTnu5PmnpzvvJppbnB1dG5hbWXnm7jlkIzkvYZuYW1l5LiN5ZCM55qE57uT5p6cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRSZXN1bHQgPSB0ZXN0UmVzdWx0cy5maW5kKHIgPT4gci5pbnB1dG5hbWUgPT09IHJlc3VsdC5pbnB1dG5hbWUgJiYgci5uYW1lICE9PSByZXN1bHQubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5om+5Yiw55qE5YWz6IGU57uT5p6c77yaXCIsIHJlbGF0ZWRSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmmK/lvZPliY3pgInkuK3nmoTnu5PmnpzvvIzmm7TmlrBuYW1l5ZKMaW5wdXRuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubmFtZSA9PT0gc2VsZWN0ZWRSZXN1bHRzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDpgInkuK3nu5PmnpznmoRuYW1l5ZKMaW5wdXRuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUmVzdWx0ID0geyAuLi5yZXN1bHQsIG5hbWU6IG5ld05hbWUsIGlucHV0bmFtZTogbmV3TmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5p+l5om+5bm25pu05paw5YWz6IGU57uT5p6c55qEaW5wdXRuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxhdGVkUmVzdWx0ID0gdGVzdFJlc3VsdHMuZmluZChyID0+IHIuaW5wdXRuYW1lID09PSByZXN1bHQuaW5wdXRuYW1lICYmIHIubmFtZSAhPT0gcmVzdWx0Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0ZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkUmVzdWx0LmlucHV0bmFtZSA9IG5ld05hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZE5hbWUgPT09IHJlc3VsdC5vdXRuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOafpeaJvuWFs+iBlOe7k+aenO+8mm91dG5hbWXnm7jlkIzkvYZuYW1l5LiN5ZCM55qE57uT5p6cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubmFtZSA9PT0gc2VsZWN0ZWRSZXN1bHRzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUmVzdWx0ID0geyAuLi5yZXN1bHQsIG5hbWU6IG5ld05hbWUsIG91dG5hbWU6IG5ld05hbWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRSZXN1bHQgPSB0ZXN0UmVzdWx0cy5maW5kKHIgPT4gci5vdXRuYW1lID09PSByZXN1bHQub3V0bmFtZSAmJiByLm5hbWUgIT09IHJlc3VsdC5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGVkUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZFJlc3VsdC5vdXRuYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3VsdCwgbmFtZTogaW5wdXRWYWx1ZS50cmltKCkgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9qZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5jdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgdGVzdFJlc3VsdHM6IG5ld1Jlc3VsdHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHByb2plY3RJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnByb2plY3RzLmZpbmRJbmRleChwID0+IHAuaWQgPT09IGN1cnJlbnRQcm9qZWN0LmlkKTtcclxuICAgICAgICB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS51cGRhdGVQcm9qZWN0KHByb2plY3RJbmRleCwgdXBkYXRlZFByb2plY3QpO1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRlVG8oJ3Jlc3VsdCcsICdtYWluJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g6YeN572u566h55CG54q25oCB5ZKM6YCJ5Lit57uT5p6c54q25oCBXHJcbiAgICAgICAgc2V0SXNNYW5hZ2VNb2RlKGZhbHNlKTtcclxuICAgICAgICBzZXRTZWxlY3RlZFJlc3VsdHMoW10pO1xyXG4gICAgICAgIFxyXG4gICAgfTtcclxuICAgXHJcbiAgICAvL+ehruiupOWIoOmZpOaPkOekuuahhiBcclxuICAgIGNvbnN0IFtzaG93RGVsZXRlRGlhbG9nLCBzZXRTaG93RGVsZXRlRGlhbG9nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIC8v56Gu6K6k56e75Yqo5o+Q56S65qGGXHJcbiAgICBjb25zdCBbc2hvd0NvbmZpcm1EaWFsb2csIHNldFNob3dDb25maXJtRGlhbG9nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFt0YXJnZXRQcm9qZWN0LCBzZXRUYXJnZXRQcm9qZWN0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3Nob3dPdmVyd3JpdGVEaWFsb2csIHNldFNob3dPdmVyd3JpdGVEaWFsb2ddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2R1cGxpY2F0ZVJlc3VsdHMsIHNldER1cGxpY2F0ZVJlc3VsdHNdID0gdXNlU3RhdGUoW10pO1xyXG5cclxuICAgIGNvbnN0IG1vdmVSZXN1bHRzID0gKHByb2plY3QsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm6YCJ5oup5LqG57uT5p6c5ZKM55uu5qCH6aG555uuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPT09IDAgfHwgIXByb2plY3QpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKblnKjlkIzkuIDkuKrpobnnm67kuK3np7vliqhcclxuICAgICAgICBpZiAocHJvamVjdC5pZCA9PT0gY3VycmVudFByb2plY3QuaWQpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfkuI3og73np7vliqjliLDnm7jlkIzpobnnm64nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l55uu5qCH6aG555uu5Lit5piv5ZCm5pyJ6YeN5ZCN57uT5p6cXHJcbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IHNlbGVjdGVkUmVzdWx0cy5maWx0ZXIocmVzdWx0TmFtZSA9PlxyXG4gICAgICAgICAgICBwcm9qZWN0LnRlc3RSZXN1bHRzLnNvbWUodGFyZ2V0UmVzdWx0ID0+IHRhcmdldFJlc3VsdC5uYW1lID09PSByZXN1bHROYW1lKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2V0RHVwbGljYXRlUmVzdWx0cyhkdXBsaWNhdGVzKTtcclxuICAgICAgICAgICAgc2V0VGFyZ2V0UHJvamVjdChwcm9qZWN0KTtcclxuICAgICAgICAgICAgc2V0U2hvd092ZXJ3cml0ZURpYWxvZyh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUYXJnZXRQcm9qZWN0KHByb2plY3QpO1xyXG4gICAgICAgICAgICBzZXRTaG93Q29uZmlybURpYWxvZyh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdmUgPSAob3ZlcndyaXRlID0gZmFsc2UpID0+IHtcclxuICAgICAgICBpZiAoIXRhcmdldFByb2plY3QpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g6I635Y+W6KaB56e75Yqo55qE57uT5p6c5a+56LGhXHJcbiAgICAgICAgY29uc3QgcmVzdWx0c1RvTW92ZSA9IHRlc3RSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gc2VsZWN0ZWRSZXN1bHRzLmluY2x1ZGVzKHJlc3VsdC5uYW1lKSk7XHJcblxyXG4gICAgICAgIC8vIOabtOaWsOebruagh+mhueebrlxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRUYXJnZXRSZXN1bHRzID0gb3ZlcndyaXRlXHJcbiAgICAgICAgICAgID8gWy4uLnRhcmdldFByb2plY3QudGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiAhc2VsZWN0ZWRSZXN1bHRzLmluY2x1ZGVzKHJlc3VsdC5uYW1lKSksIC4uLnJlc3VsdHNUb01vdmVdXHJcbiAgICAgICAgICAgIDogWy4uLnRhcmdldFByb2plY3QudGVzdFJlc3VsdHMsIC4uLnJlc3VsdHNUb01vdmVdO1xyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVkVGFyZ2V0UHJvamVjdCA9IHtcclxuICAgICAgICAgICAgLi4udGFyZ2V0UHJvamVjdCxcclxuICAgICAgICAgICAgdGVzdFJlc3VsdHM6IHVwZGF0ZWRUYXJnZXRSZXN1bHRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5b2T5YmN6aG555uuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlZEN1cnJlbnRSZXN1bHRzID0gdGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiAhc2VsZWN0ZWRSZXN1bHRzLmluY2x1ZGVzKHJlc3VsdC5uYW1lKSk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZEN1cnJlbnRQcm9qZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5jdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgdGVzdFJlc3VsdHM6IHVwZGF0ZWRDdXJyZW50UmVzdWx0c1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIOS/neWtmOabtOaUuVxyXG4gICAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gdGFyZ2V0UHJvamVjdC5pZCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gY3VycmVudFByb2plY3QuaWQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnVwZGF0ZVByb2plY3QodGFyZ2V0SW5kZXgsIHVwZGF0ZWRUYXJnZXRQcm9qZWN0KTtcclxuICAgICAgICB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS51cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwgdXBkYXRlZEN1cnJlbnRQcm9qZWN0KTtcclxuXHJcbiAgICAgICAgLy8g6YeN572u54q25oCBXHJcbiAgICAgICAgc2V0U2VsZWN0ZWRSZXN1bHRzKFtdKTtcclxuICAgICAgICBzZXRJc01hbmFnZU1vZGUoZmFsc2UpO1xyXG4gICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICBzZXRTaG93T3ZlcndyaXRlRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICBzZXRUYXJnZXRQcm9qZWN0KG51bGwpO1xyXG4gICAgICAgIHNldER1cGxpY2F0ZVJlc3VsdHMoW10pO1xyXG5cclxuICAgICAgICAvLyDmmL7npLrmiJDlip/mtojmga/lubbov5Tlm57kuLvop4blm75cclxuICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+enu+WKqOaIkOWKnycpO1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRlVG8oJ3Jlc3VsdCcsICdtYWluJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOa4suafk+agh+mimOagj1xyXG4gICAgY29uc3QgcmVuZGVyVGl0bGVCYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCLph43lkb3lkI3nu5PmnpxcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvPXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy5uYW1lIHx8ICdob21lJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXc9e3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/LnZpZXcgfHwgJ21haW4nfSBcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnbW92ZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCLnp7voh7NcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvPXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy5uYW1lIHx8ICdob21lJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXc9e3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/LnZpZXcgfHwgJ21haW4nfSBcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnbWFpbic6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCLnu5PmnpxcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvPXsnaG9tZSd9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3PXsnbWFpbid9IFxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5Li76KaB5YaF5a65XHJcbiAgICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdyZW5hbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bIzMwMzA0MF0gcC00IGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG1iLTQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0tleWJvYXJkKHRydWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1bI2ZmZmZlMV0gcm91bmRlZC1zbSBwLTQgdGV4dC1ibGFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmtYvor5Xnu5PmnpzlkI3np7BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0tleWJvYXJkKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dLZXlib2FyZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8S2V5Ym9hcmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmFsdWUsIG5ld1Bvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdtb3ZlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIGZsZXggZmxleC1jb2wgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFN1YlRpdGxlQmFyIHRpdGxlPVwi6YCJ5oup5oKo6KaB55qE6aG555uuXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIHAtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnByb2plY3RzLm1hcCgocHJvamVjdCwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb2plY3QuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlUmVzdWx0cyhwcm9qZWN0LCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntwcm9qZWN0Lm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2IwYjBiMF0gdmlhLVsjZTBlNGUwXSB0by1bI2IwYjBiMF0gcHgtNCBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2tcIj57cHJvamVjdE5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmVlbi01MDBcIj57cGFzc0NvdW50fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvcGFzcy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLpgJrov4dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDBcIj57ZmFpbENvdW50fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvZmFpbC5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLlpLHotKVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc01hbmFnZU1vZGUgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNDBweF0gcHgtNCBiZy1bI2VmZWJlNl0gZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA9PT0gc29ydGVkUmVzdWx0cy5sZW5ndGh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPT09IHNvcnRlZFJlc3VsdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZFJlc3VsdHMoW10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRSZXN1bHRzKHNvcnRlZFJlc3VsdHMubWFwKHJlc3VsdCA9PiByZXN1bHQubmFtZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTQgaC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrXCI+6YCJ5oup5YWo6YOoPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBvdmVyZmxvdy15LWF1dG9cIiBzdHlsZT17eyBzY3JvbGxiYXJXaWR0aDogJ25vbmUnLCBtc092ZXJmbG93U3R5bGU6ICdub25lJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NvcnRlZFJlc3VsdHMubWFwKChyZXN1bHQsIGluZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gcHgtNCBiZy1bI2VmZWJlNl0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGJvcmRlci1ncmF5LTYwMCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAhaXNNYW5hZ2VNb2RlICYmIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRlVG8oJ3Jlc3VsdGluZm8nLCAnc2F2ZScsIHJlc3VsdCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNNYW5hZ2VNb2RlICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0ZWRSZXN1bHRzLmluY2x1ZGVzKHJlc3VsdC5uYW1lKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBoYW5kbGVTZWxlY3QocmVzdWx0KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNCBoLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ibGFja1wiPntyZXN1bHQubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQub2ZwUmVzdWx0U3RhdHVzID09PSAncGFzcycgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5uYW1lID09PSByZXN1bHQuaW5wdXRuYW1lICYmIHJlc3VsdC5JblBvcnRTdGF0dXMgPT09ICdwYXNzJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5uYW1lID09PSByZXN1bHQub3V0bmFtZSAmJiByZXN1bHQuT3V0UG9ydFN0YXR1cyA9PT0gJ3Bhc3MnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdldEFzc2V0VXJsKCcvcGFzcy5wbmcnKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRBc3NldFVybCgnL2ZhaWwucG5nJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQub2ZwUmVzdWx0U3RhdHVzID09PSAncGFzcycgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5uYW1lID09PSByZXN1bHQuaW5wdXRuYW1lICYmIHJlc3VsdC5JblBvcnRTdGF0dXMgPT09ICdwYXNzJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5uYW1lID09PSByZXN1bHQub3V0bmFtZSAmJiByZXN1bHQuT3V0UG9ydFN0YXR1cyA9PT0gJ3Bhc3MnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICfpgJrov4cnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICflpLHotKUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNyBoLTdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5bqV6YOo5oyJ6ZKuXHJcbiAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgeyFzaG93S2V5Ym9hcmQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZW5hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlrozmiJBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnbW92ZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4oXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY2FzZSAnbWFpbic6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRlVG8oJ3Jlc3VsdCcsICdtb3ZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFJlc3VsdHMubGVuZ3RoID09PSAwfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG9wYWNpdHk6IHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPiAwID8gMSA6IDAuNSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOenu+WKqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFJlc3VsdCA9IHRlc3RSZXN1bHRzLmZpbmQocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBzZWxlY3RlZFJlc3VsdHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0ZVRvKCdyZXN1bHQnLCAncmVuYW1lJywgc2VsZWN0ZWRSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCAhPT0gMX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG9wYWNpdHk6IHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPT09IDEgPyAxIDogMC41IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOmHjeWRveWQjVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXgganVzdGlmeS1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBpc01hbmFnZU1vZGUgPyBzZXRTaG93RGVsZXRlRGlhbG9nKHRydWUpIDogc2V0SXNNYW5hZ2VNb2RlKHRydWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNNYW5hZ2VNb2RlID8gJ+WIoOmZpCcgOiAn566h55CGJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAge3JlbmRlclRpdGxlQmFyKCl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJGb290ZXIoKX1cclxuICAgICAgICAgICAgey8qIOehruiupOWIoOmZpOWvueivneahhiAqL31cclxuICAgICAgICAgICAge3Nob3dEZWxldGVEaWFsb2cgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LVs0ODBweF0gaC1bNjQwcHhdIGJnLVsjMDAyODQyZDRdIGFic29sdXRlIHotOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3BsLTEwIHB0LTYwJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1bIzJCM0M1Ql0gcm91bmRlZC1sZyBwLTYgdy1bNDAwcHhdIG1pbi1oLVsyMDBweF0gZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXhsIGZvbnQtYm9sZCBtYi00XCI+5o+Q56S6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtbGdcIj7mmK/lkKbliKDpmaTpgInkuK3nmoTmtYvor5Xnu5PmnpzvvJ88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtcyBmb250LWJvbGQgcHgtNCBweS0yIGJnLVsjMWQzMTU1XSByb3VuZGVkLW1kIGhvdmVyOmJnLVsjMmI0NDY2XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93RGVsZXRlRGlhbG9nKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtcyBmb250LWJvbGQgcHgtNCBweS0yIGJnLVsjMWQzMTU1XSByb3VuZGVkLW1kIGhvdmVyOmJnLVsjMmI0NDY2XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGUoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg56Gu6K6kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICB7Lyog56Gu6K6k56e75Yqo5a+56K+d5qGGICovfVxyXG4gICAgICAgICAgICB7c2hvd0NvbmZpcm1EaWFsb2cgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LVs0ODBweF0gaC1bNjQwcHhdIGJnLVsjMDAyODQyZDRdIGFic29sdXRlIHotOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3BsLTEwIHB0LTYwJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1bIzJCM0M1Ql0gcm91bmRlZC1sZyBwLTYgdy1bNDAwcHhdIG1pbi1oLVsyMDBweF0gZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXhsIGZvbnQtYm9sZCBtYi00XCI+5o+Q56S6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtbGdcIj7mmK/lkKblsIbpgInkuK3nmoTmtYvor5Xnu5Pmnpznp7vliqjliLDpobnnm64ge3RhcmdldFByb2plY3Q/Lm5hbWV977yfPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiIHRleHQtd2hpdGUgdGV4dC1zIGZvbnQtYm9sZCBweC00IHB5LTIgYmctWyMxZDMxNTVdIHJvdW5kZWQtbWQgaG92ZXI6YmctWyMyYjQ0NjZdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dDb25maXJtRGlhbG9nKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCIgdGV4dC13aGl0ZSB0ZXh0LXMgZm9udC1ib2xkIHB4LTQgcHktMiBiZy1bIzFkMzE1NV0gcm91bmRlZC1tZCBob3ZlcjpiZy1bIzJiNDQ2Nl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW92ZShmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOehruiupFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIHsvKiDph43lkI3opobnm5bnoa7orqTlr7nor53moYYgKi99XHJcbiAgICAgICAgICAgIHtzaG93T3ZlcndyaXRlRGlhbG9nICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1bNDgwcHhdIGgtWzY0MHB4XSBiZy1bIzAwMjg0MmQ0XSBhYnNvbHV0ZSB6LTk5OTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdwbC0xMCBwdC02MCc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctWyMyQjNDNUJdIHJvdW5kZWQtbGcgcC02IHctWzQwMHB4XSBtaW4taC1bMjAwcHhdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC14bCBmb250LWJvbGQgbWItNFwiPuaPkOekujwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LWxnIG1iLTRcIj7ku6XkuIvmtYvor5Xnu5PmnpzlnKjnm67moIfpobnnm67kuK3lt7LlrZjlnKjvvJo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm1iLTQgbGlzdC1kaXNjIHBsLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkdXBsaWNhdGVSZXN1bHRzLm1hcCgobmFtZSwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtpbmRleH0gY2xhc3NOYW1lPVwidGV4dC1yZWQtNTAwXCI+e25hbWV9PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1sZ1wiPuaYr+WQpuimhueblui/meS6m+e7k+aenO+8nzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1zIGZvbnQtYm9sZCBweC00IHB5LTIgYmctWyMxZDMxNTVdIHJvdW5kZWQtbWQgaG92ZXI6YmctWyMyYjQ0NjZdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dPdmVyd3JpdGVEaWFsb2coZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUYXJnZXRQcm9qZWN0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREdXBsaWNhdGVSZXN1bHRzKFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWPlua2iFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXMgZm9udC1ib2xkIHB4LTQgcHktMiBiZy1bIzFkMzE1NV0gcm91bmRlZC1tZCBob3ZlcjpiZy1bIzJiNDQ2Nl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vdmUodHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg6KaG55uWXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59XHJcbiAgICJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiSW1hZ2UiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsIlN1YlRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwiS2V5Ym9hcmQiLCJnZXRBc3NldFVybCIsIlJlc3VsdCIsInZpZXciLCJnZXRTdGF0ZSIsIm5hdmlnYXRpb24iLCJjdXJyZW50IiwiZ2V0Q3VycmVudFByb2plY3QiLCJzZXRUb2FzdE1lc3NhZ2UiLCJjdXJyZW50UHJvamVjdCIsImlzTWFuYWdlTW9kZSIsInNldElzTWFuYWdlTW9kZSIsInNlbGVjdGVkUmVzdWx0cyIsInNldFNlbGVjdGVkUmVzdWx0cyIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwic2hvd0tleWJvYXJkIiwic2V0U2hvd0tleWJvYXJkIiwiY3Vyc29yUG9zaXRpb24iLCJzZXRDdXJzb3JQb3NpdGlvbiIsInByb2plY3ROYW1lIiwibmFtZSIsInRlc3RSZXN1bHRzIiwicGFzc0NvdW50IiwiZmlsdGVyIiwicmVzdWx0IiwiY29wcGVyU3RhdHVzIiwiQ29wcGVyUmVzdWx0U3RhdHVzIiwiY2ZwU3RhdHVzIiwiQ0ZQUmVzdWx0U3RhdHVzIiwib2ZwU3RhdHVzIiwib2ZwUmVzdWx0U3RhdHVzIiwibGVuZ3RoIiwiZmFpbENvdW50Iiwic29ydGVkUmVzdWx0cyIsInNvcnQiLCJhIiwiYiIsImFQYXNzIiwicmVzdWx0ZGF0YSIsImJQYXNzIiwic3BsaXROYW1lIiwibWF0Y2giLCJ0ZXh0IiwibnVtYmVyIiwicGFyc2VJbnQiLCJuYW1lQSIsIm5hbWVCIiwibG9jYWxlQ29tcGFyZSIsImhhbmRsZVNlbGVjdCIsInByZXYiLCJpbmNsdWRlcyIsImhhbmRsZURlbGV0ZSIsIm5ld1Jlc3VsdHMiLCJ1cGRhdGVkUHJvamVjdCIsInByb2plY3RJbmRleCIsInByb2plY3RzIiwiZmluZEluZGV4IiwicCIsImlkIiwidXBkYXRlUHJvamVjdCIsInNldFNob3dEZWxldGVEaWFsb2ciLCJzZWxlY3RlZFJlc3VsdCIsImZpbmQiLCJoYW5kbGVSZW5hbWUiLCJ0cmltIiwiaXNEdXBsaWNhdGUiLCJzb21lIiwibWFwIiwiY29uc29sZSIsImxvZyIsInRlc3Rjb25maWciLCJtb2R1bGVUeXBlIiwib2xkTmFtZSIsIm5ld05hbWUiLCJpbnB1dG5hbWUiLCJyZWxhdGVkUmVzdWx0IiwiciIsInVwZGF0ZWRSZXN1bHQiLCJvdXRuYW1lIiwibmF2aWdhdGVUbyIsInNob3dEZWxldGVEaWFsb2ciLCJzaG93Q29uZmlybURpYWxvZyIsInNldFNob3dDb25maXJtRGlhbG9nIiwidGFyZ2V0UHJvamVjdCIsInNldFRhcmdldFByb2plY3QiLCJzaG93T3ZlcndyaXRlRGlhbG9nIiwic2V0U2hvd092ZXJ3cml0ZURpYWxvZyIsImR1cGxpY2F0ZVJlc3VsdHMiLCJzZXREdXBsaWNhdGVSZXN1bHRzIiwibW92ZVJlc3VsdHMiLCJwcm9qZWN0IiwiaW5kZXgiLCJkdXBsaWNhdGVzIiwicmVzdWx0TmFtZSIsInRhcmdldFJlc3VsdCIsImhhbmRsZU1vdmUiLCJvdmVyd3JpdGUiLCJyZXN1bHRzVG9Nb3ZlIiwidXBkYXRlZFRhcmdldFJlc3VsdHMiLCJ1cGRhdGVkVGFyZ2V0UHJvamVjdCIsInVwZGF0ZWRDdXJyZW50UmVzdWx0cyIsInVwZGF0ZWRDdXJyZW50UHJvamVjdCIsInRhcmdldEluZGV4IiwiY3VycmVudEluZGV4IiwicmVuZGVyVGl0bGVCYXIiLCJ0aXRsZSIsImJhY2tUbyIsInByZXZpb3VzIiwicmVuZGVyQ29udGVudCIsImRpdiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwic2VsZWN0aW9uU3RhcnQiLCJvbkZvY3VzIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJuZXdWYWx1ZSIsIm5ld1Bvc2l0aW9uIiwib25Db21wbGV0ZSIsInNyYyIsImFsdCIsImZpbGwiLCJzcGFuIiwic2l6ZXMiLCJjaGVja2VkIiwic3R5bGUiLCJzY3JvbGxiYXJXaWR0aCIsIm1zT3ZlcmZsb3dTdHlsZSIsImltZyIsIkluUG9ydFN0YXR1cyIsIk91dFBvcnRTdGF0dXMiLCJyZW5kZXJGb290ZXIiLCJidXR0b24iLCJkaXNhYmxlZCIsIm9wYWNpdHkiLCJoMyIsInVsIiwibGkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/Result.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/ResultInfo.js":
/*!****************************************************!*\
!*** ./src/components/dsxpage/fluke/ResultInfo.js ***!
\****************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ResultInfo)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/ResultTitleBar */ \"(pages-dir-node)/./src/components/lib/ResultTitleBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/CopperResultMain */ \"(pages-dir-node)/./src/components/lib/CopperResultMain.js\");\n/* harmony import */ var _components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/lib/OLTSResultMain */ \"(pages-dir-node)/./src/components/lib/OLTSResultMain.js\");\n/* harmony import */ var _components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/lib/OTDRResultMain */ \"(pages-dir-node)/./src/components/lib/OTDRResultMain.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/lib/Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\n/* harmony import */ var _components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/AudioProvider */ \"(pages-dir-node)/./src/components/AudioProvider.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__, _components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__, _components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__, _store_displayStore__WEBPACK_IMPORTED_MODULE_9__, _utils_asset__WEBPACK_IMPORTED_MODULE_10__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__, _components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__, _components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__, _store_displayStore__WEBPACK_IMPORTED_MODULE_9__, _utils_asset__WEBPACK_IMPORTED_MODULE_10__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\n\n\n\n// 自定义确认弹窗组件\nconst ConfirmDialog = ({ message, onConfirm, onCancel })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-[9999] top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 19,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: message\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 21,\n columnNumber: 21\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 20,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-4 mt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onConfirm,\n className: \"bg-[#354e7a] text-white px-6 py-2 rounded hover:bg-[#1E293B] transition-colors\",\n children: \"确定\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 24,\n columnNumber: 21\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onCancel,\n className: \"bg-[#4a4a4a] text-white px-6 py-2 rounded hover:bg-[#3a3a3a] transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 30,\n columnNumber: 21\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 23,\n columnNumber: 17\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 18,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 17,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 16,\n columnNumber: 5\n }, undefined);\nfunction ResultInfo() {\n const [showKeyboard, setShowKeyboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [inputValue2, setInputValue2] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [activeInput, setActiveInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1); // 1 表示第一个输入框,2 表示第二个输入框\n const [showConfirmDialog, setShowConfirmDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [confirmDialogMessage, setConfirmDialogMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [confirmDialogCallback, setConfirmDialogCallback] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const { navigation } = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState();\n const tempTestResult = navigation.current.params;\n const { play } = (0,_components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__.useAudio)();\n // 根据测试结果播放音效\n const { hasPlayedSound } = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ResultInfo.useEffect\": ()=>{\n // 只有从测试页面进入nosave视图时才播放声音\n if (navigation.previous.name === 'testing' && tempTestResult && !hasPlayedSound) {\n if (tempTestResult.CopperResultStatus === 'pass' || tempTestResult.CFPResultStatus === 'pass' || tempTestResult.ofpResultStatus === 'pass') {\n play('pass');\n } else {\n play('fail');\n }\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n hasPlayedSound: true\n });\n }\n }\n }[\"ResultInfo.useEffect\"], [\n navigation,\n tempTestResult,\n hasPlayedSound\n ]);\n // 从URL参数中获取临时测试结果\n const { getCurrentProject, getCurrentCableId, getCurrentCableId2, updateCurrentView, getCurrentTestConfig, navigateTo, setToastMessage, updateProject } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n const currentProject = getCurrentProject();\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation.current;\n // 获取当前的线缆ID\n const currentCableId = getCurrentCableId().name || '';\n const currentCableId2 = getCurrentCableId2().name || '';\n // 计算下一个序号的ID\n const getNextId = (currentId)=>{\n if (!currentId) return '';\n // 检查是否以数字结尾\n const numMatch = currentId.match(/^(.*?)(\\d+)$/);\n if (numMatch) {\n const [, prefix, num] = numMatch;\n const nextNum = String(Number(num) + 1).padStart(num.length, '0');\n return prefix + nextNum;\n }\n // 检查是否以字母结尾\n const letterMatch = currentId.match(/^(.*?)([a-zA-Z]+)$/);\n if (letterMatch) {\n const [, prefix, letters] = letterMatch;\n // 将字母转换为数组以便处理\n const letterArray = letters.split('');\n let carry = true;\n // 从右向左处理每个字母\n for(let i = letterArray.length - 1; i >= 0 && carry; i--){\n if (letterArray[i] === 'z') {\n letterArray[i] = 'a';\n carry = true;\n } else if (letterArray[i] === 'Z') {\n letterArray[i] = 'A';\n carry = true;\n } else {\n letterArray[i] = String.fromCharCode(letterArray[i].charCodeAt(0) + 1);\n carry = false;\n }\n }\n // 如果还有进位,说明需要在前面添加一个字母\n if (carry) {\n if (letters[0] >= 'a' && letters[0] <= 'z') {\n letterArray.unshift('a');\n } else {\n letterArray.unshift('A');\n }\n }\n return prefix + letterArray.join('');\n }\n // 如果既不是数字也不是字母结尾,直接返回原值\n return currentId;\n };\n // 初始化输入值为当前的线缆ID\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ResultInfo.useEffect\": ()=>{\n setInputValue(currentCableId);\n setInputValue2(currentCableId2);\n }\n }[\"ResultInfo.useEffect\"], [\n currentCableId,\n currentCableId2\n ]);\n // 当第一个输入框值变化时,仅在用户手动输入时自动更新第二个输入框\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ResultInfo.useEffect\": ()=>{\n if (tempTestResult?.testconfig?.moduleType === 'cfp' && inputValue && inputValue !== currentCableId) {\n setInputValue2(getNextId(inputValue));\n }\n }\n }[\"ResultInfo.useEffect\"], [\n inputValue,\n view,\n currentCableId\n ]);\n //创建保存结果存储逻辑\n const handleComplete = ()=>{\n const currentId = inputValue.trim();\n // 检查是否存在重名的测试结果\n const currentProject = getCurrentProject();\n const existingResults = currentProject?.testResults || [];\n // 检查两个ID是否重复\n const isDuplicate = existingResults.some((result)=>result.name === currentId);\n // 重名替换\n if (isDuplicate) {\n setConfirmDialogMessage('该线缆ID已使用,是否覆盖?');\n setConfirmDialogCallback(()=>()=>{\n // 更新临时测试结果的名称\n const updatedTestResult = {\n ...tempTestResult,\n name: currentId\n };\n // 更新当前项目的测试结果\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n // 移除旧的测试结果并添加新的\n const newResults = existingResults.filter((result)=>result.name !== currentId);\n updateProject(currentIndex, {\n testResults: [\n ...newResults,\n updatedTestResult\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult\n }\n }\n });\n }\n updateCurrentView('save');\n setShowConfirmDialog(false);\n });\n setShowConfirmDialog(true);\n return;\n }\n // 更新临时测试结果的名称并保存到项目中\n if (tempTestResult) {\n const updatedTestResult = {\n ...tempTestResult,\n name: currentId\n };\n // 更新当前项目的cableIds.name为下一个ID\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n //更新测试结果\n updateProject(currentIndex, {\n testResults: [\n ...currentProject.testResults || [],\n updatedTestResult\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n const navigation = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation;\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult\n }\n }\n });\n // 获取下一个ID\n const nextId = (()=>{\n const currentId = inputValue.trim();\n if (!currentId) return currentId;\n // 获取最后一个字符\n const lastChar = currentId.slice(-1);\n const prefix = currentId.slice(0, -1);\n // 如果最后一个字符是数字\n if (/\\d/.test(lastChar)) {\n const match = currentId.match(/^(.*?)(\\d+)$/);\n if (match) {\n const numPrefix = match[1];\n const number = parseInt(match[2]) + 1;\n return `${numPrefix}${number.toString().padStart(match[2].length, '0')}`;\n }\n }\n // 如果最后一个字符是字母\n if (/[A-Za-z]/.test(lastChar)) {\n const nextChar = String.fromCharCode(lastChar.charCodeAt(0) + 1);\n // 如果超过Z或z,回到A或a\n if (lastChar === 'Z' && nextChar > 'Z' || lastChar === 'z' && nextChar > 'z') {\n const baseChar = lastChar === 'Z' ? 'A' : 'a';\n return `${prefix}${baseChar}`;\n }\n return `${prefix}${nextChar}`;\n }\n return currentId;\n })();\n // 获取当前项目的所有cableIds\n const currentCableIds = currentProject?.cableIds || [];\n const selectedId = getCurrentCableId().id;\n // 只更新选中的ID,保留其他ID不变\n const updatedCableIds = currentCableIds.map((cable)=>cable.id === selectedId ? {\n ...cable,\n name: nextId\n } : cable);\n // 更新项目\n updateProject(currentIndex, {\n cableIds: updatedCableIds\n });\n }\n updateCurrentView('save');\n }\n };\n const handleComplete2 = ()=>{\n const currentId = inputValue.trim();\n const currentId2 = inputValue2.trim();\n // 检查两个ID是否相同\n if (currentId === currentId2) {\n setConfirmDialogMessage('输入输出ID不能相同,请检查');\n setConfirmDialogCallback(()=>()=>{\n setShowConfirmDialog(false);\n });\n setShowConfirmDialog(true);\n return;\n }\n // 检查是否存在重名的测试结果\n const currentProject = getCurrentProject();\n const existingResults = currentProject?.testResults || [];\n // 检查两个ID是否重复\n const isDuplicate1 = existingResults.some((result)=>result.name === currentId);\n const isDuplicate2 = existingResults.some((result)=>result.name === currentId2);\n const currentConfig = getCurrentTestConfig();\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n if (isDuplicate1 || isDuplicate2) {\n const message = [];\n if (isDuplicate1) message.push(`线缆ID ${currentId}`);\n if (isDuplicate2) message.push(`线缆ID ${currentId2}`);\n setConfirmDialogMessage(`${message.join(' 和 ')}已使用,是否覆盖?`);\n setConfirmDialogCallback(()=>()=>{\n // 更新临时测试结果的名称\n const updatedTestResult1 = {\n ...tempTestResult,\n name: currentId,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n const updatedTestResult2 = {\n ...tempTestResult,\n name: currentId2,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n // 更新当前项目的测试结果\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n // 移除旧的测试结果并添加新的\n const newResults = existingResults.filter((result)=>result.name !== currentId && result.name !== currentId2);\n updateProject(currentIndex, {\n testResults: [\n ...newResults,\n updatedTestResult1,\n updatedTestResult2\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult1\n }\n }\n });\n }\n updateCurrentView('save');\n setShowConfirmDialog(false);\n });\n setShowConfirmDialog(true);\n return;\n }\n // 更新临时测试结果的名称并保存到项目中\n if (tempTestResult) {\n // 创建两个测试结果\n const updatedTestResult1 = {\n ...tempTestResult,\n name: currentId,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n const updatedTestResult2 = {\n ...tempTestResult,\n name: currentId2,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n // 更新当前项目的cableIds.name为下一个ID\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n //更新测试结果\n updateProject(currentIndex, {\n testResults: [\n ...currentProject.testResults || [],\n updatedTestResult1,\n updatedTestResult2\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n const navigation = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation;\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult1\n }\n }\n });\n // 获取下一个ID\n const nextId = getNextId(getNextId(inputValue.trim()));\n // 获取下一个ID2\n const nextId2 = getNextId(getNextId(inputValue2.trim()));\n // 获取当前项目的所有cableIds\n const currentCableIds = currentProject?.cableIds || [];\n const selectedId = getCurrentCableId().id;\n const selectedId2 = getCurrentCableId2().id;\n // 只更新选中的ID,保留其他ID不变\n const updatedCableIds = currentCableIds.map((cable)=>cable.id === selectedId ? {\n ...cable,\n name: nextId\n } : cable.id === selectedId2 ? {\n ...cable,\n name: nextId2\n } : cable);\n // 更新项目,添加两个测试结果\n updateProject(currentIndex, {\n cableIds: updatedCableIds\n });\n }\n updateCurrentView('save');\n }\n };\n // 创建测试结果的视图\n const renderContent = ()=>{\n const renderResultMain = ()=>{\n const moduleType = tempTestResult?.testconfig?.moduleType;\n switch(moduleType){\n case '8000':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 429,\n columnNumber: 28\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 431,\n columnNumber: 28\n }, this);\n case 'ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 433,\n columnNumber: 28\n }, this);\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 435,\n columnNumber: 28\n }, this);\n }\n };\n const renderSetName = ()=>{\n const moduleType = tempTestResult?.testconfig?.moduleType;\n switch(moduleType){\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输出光纤ID1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 446,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue,\n placeholder: \"请输入线缆ID1\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(1);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 448,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 447,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 445,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输入光纤ID2\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 470,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue2,\n placeholder: \"请输入线缆ID2\",\n onChange: (e)=>{\n setInputValue2(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(2);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 472,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 471,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 469,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n value: activeInput === 1 ? inputValue : inputValue2,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n if (activeInput === 1) {\n setInputValue(newValue);\n } else {\n setInputValue2(newValue);\n }\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 494,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 444,\n columnNumber: 21\n }, this);\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mb-4 cursor-pointer\",\n onClick: ()=>setShowKeyboard(true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入线缆ID\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n // 保存光标位置\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 519,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 515,\n columnNumber: 21\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 540,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 514,\n columnNumber: 21\n }, this);\n }\n };\n switch(view){\n case 'nosave':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 561,\n columnNumber: 25\n }, this),\n tempTestResult?.testconfig?.moduleType !== 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \"未保存结果\",\n testResult: tempTestResult,\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 563,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \" \",\n testResult: tempTestResult,\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 564,\n columnNumber: 30\n }, this),\n renderResultMain(),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('setname'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 568,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 567,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 560,\n columnNumber: 21\n }, this);\n case 'setname':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 581,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"保存结果\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 583,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-2 flex flex-col\",\n children: renderSetName()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 589,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: tempTestResult?.testconfig?.moduleType === \"cfp\" ? !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleComplete2(),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 595,\n columnNumber: 37\n }, this) : !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleComplete(),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 603,\n columnNumber: 51\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 592,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 580,\n columnNumber: 21\n }, this);\n case 'save':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 620,\n columnNumber: 25\n }, this),\n tempTestResult?.testconfig?.moduleType !== 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n testResult: tempTestResult,\n backTo: \"result\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 622,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \" \",\n testResult: tempTestResult,\n backTo: \"result\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 623,\n columnNumber: 30\n }, this),\n renderResultMain(),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n navigateTo('home', 'main');\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"主页\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 627,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 626,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 619,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const content = renderContent();\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-full\",\n children: [\n content,\n showConfirmDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ConfirmDialog, {\n message: confirmDialogMessage,\n onConfirm: confirmDialogCallback,\n onCancel: ()=>setShowConfirmDialog(false)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 649,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/ResultInfo.js\",\n lineNumber: 646,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvUmVzdWx0SW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0E7QUFDVTtBQUNaO0FBQ2lCO0FBQ0w7QUFDQTtBQUNaO0FBQ0U7QUFDUDtBQUNVO0FBR3RELFlBQVk7QUFDWixNQUFNYSxnQkFBZ0IsQ0FBQyxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxFQUFFLGlCQUNuRCw4REFBQ0M7UUFBSUMsV0FBVTtrQkFDWCw0RUFBQ0Q7WUFBSUMsV0FBVTtzQkFDWCw0RUFBQ0Q7Z0JBQUlDLFdBQVU7O2tDQUNYLDhEQUFDQzt3QkFBR0QsV0FBVTtrQ0FBb0M7Ozs7OztrQ0FDbEQsOERBQUNEO3dCQUFJQyxXQUFVO2tDQUNYLDRFQUFDRDs0QkFBSUMsV0FBVTtzQ0FBc0JKOzs7Ozs7Ozs7OztrQ0FFekMsOERBQUNHO3dCQUFJQyxXQUFVOzswQ0FDWCw4REFBQ0U7Z0NBQ0dDLFNBQVNOO2dDQUNURyxXQUFVOzBDQUNiOzs7Ozs7MENBR0QsOERBQUNFO2dDQUNHQyxTQUFTTDtnQ0FDVEUsV0FBVTswQ0FDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNOLFNBQVNJO0lBQ3BCLE1BQU0sQ0FBQ0MsY0FBY0MsZ0JBQWdCLEdBQUd2QiwrQ0FBUUEsQ0FBQztJQUNqRCxNQUFNLENBQUN3QixnQkFBZ0JDLGtCQUFrQixHQUFHekIsK0NBQVFBLENBQUM7SUFDckQsTUFBTSxDQUFDMEIsWUFBWUMsY0FBYyxHQUFHM0IsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDNEIsYUFBYUMsZUFBZSxHQUFHN0IsK0NBQVFBLENBQUM7SUFDL0MsTUFBTSxDQUFDOEIsYUFBYUMsZUFBZSxHQUFHL0IsK0NBQVFBLENBQUMsSUFBSSx3QkFBd0I7SUFDM0UsTUFBTSxDQUFDZ0MsbUJBQW1CQyxxQkFBcUIsR0FBR2pDLCtDQUFRQSxDQUFDO0lBQzNELE1BQU0sQ0FBQ2tDLHNCQUFzQkMsd0JBQXdCLEdBQUduQywrQ0FBUUEsQ0FBQztJQUNqRSxNQUFNLENBQUNvQyx1QkFBdUJDLHlCQUF5QixHQUFHckMsK0NBQVFBLENBQUM7SUFDbkUsTUFBTSxFQUFFc0MsVUFBVSxFQUFFLEdBQUc3QixvRUFBd0I7SUFDL0MsTUFBTStCLGlCQUFpQkYsV0FBV0csT0FBTyxDQUFDQyxNQUFNO0lBQ2hELE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdoQyxvRUFBUUE7SUFDekIsYUFBYTtJQUNiLE1BQU0sRUFBRWlDLGNBQWMsRUFBRSxHQUFHbkMsb0VBQXdCO0lBRW5EUixnREFBU0E7Z0NBQUM7WUFDTiwwQkFBMEI7WUFDMUIsSUFBSXFDLFdBQVdPLFFBQVEsQ0FBQ0MsSUFBSSxLQUFLLGFBQzdCTixrQkFDQSxDQUFDSSxnQkFBZ0I7Z0JBQ2pCLElBQUlKLGVBQWVPLGtCQUFrQixLQUFLLFVBQVFQLGVBQWVRLGVBQWUsS0FBSyxVQUFTUixlQUFlUyxlQUFlLEtBQUssUUFBUTtvQkFDcklOLEtBQUs7Z0JBQ1QsT0FBTztvQkFDSEEsS0FBSztnQkFDVDtnQkFDQWxDLG9FQUF3QixDQUFDO29CQUFFbUMsZ0JBQWdCO2dCQUFLO1lBQ3BEO1FBR0o7K0JBQUc7UUFBQ047UUFBWUU7UUFBZ0JJO0tBQWU7SUFFL0Msa0JBQWtCO0lBQ2xCLE1BQU0sRUFDRk8saUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxvQkFBb0IsRUFDcEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxhQUFhLEVBQ2hCLEdBQUdqRCwrREFBZUE7SUFFbkIsTUFBTWtELGlCQUFpQlI7SUFDdkIsTUFBTSxFQUFFUyxJQUFJLEVBQUUsR0FBR25ELG9FQUF3QixHQUFHNkIsVUFBVSxDQUFDRyxPQUFPO0lBRTlELFlBQVk7SUFDWixNQUFNb0IsaUJBQWlCVCxvQkFBb0JOLElBQUksSUFBSTtJQUNuRCxNQUFNZ0Isa0JBQWtCVCxxQkFBcUJQLElBQUksSUFBSTtJQUNyRCxhQUFhO0lBQ2IsTUFBTWlCLFlBQVksQ0FBQ0M7UUFDZixJQUFJLENBQUNBLFdBQVcsT0FBTztRQUV2QixZQUFZO1FBQ1osTUFBTUMsV0FBV0QsVUFBVUUsS0FBSyxDQUFDO1FBQ2pDLElBQUlELFVBQVU7WUFDVixNQUFNLEdBQUdFLFFBQVFDLElBQUksR0FBR0g7WUFDeEIsTUFBTUksVUFBVUMsT0FBT0MsT0FBT0gsT0FBTyxHQUFHSSxRQUFRLENBQUNKLElBQUlLLE1BQU0sRUFBRTtZQUM3RCxPQUFPTixTQUFTRTtRQUNwQjtRQUVBLFlBQVk7UUFDWixNQUFNSyxjQUFjVixVQUFVRSxLQUFLLENBQUM7UUFDcEMsSUFBSVEsYUFBYTtZQUNiLE1BQU0sR0FBR1AsUUFBUVEsUUFBUSxHQUFHRDtZQUU1QixlQUFlO1lBQ2YsTUFBTUUsY0FBY0QsUUFBUUUsS0FBSyxDQUFDO1lBQ2xDLElBQUlDLFFBQVE7WUFFWixhQUFhO1lBQ2IsSUFBSyxJQUFJQyxJQUFJSCxZQUFZSCxNQUFNLEdBQUcsR0FBR00sS0FBSyxLQUFLRCxPQUFPQyxJQUFLO2dCQUN2RCxJQUFJSCxXQUFXLENBQUNHLEVBQUUsS0FBSyxLQUFLO29CQUN4QkgsV0FBVyxDQUFDRyxFQUFFLEdBQUc7b0JBQ2pCRCxRQUFRO2dCQUNaLE9BQU8sSUFBSUYsV0FBVyxDQUFDRyxFQUFFLEtBQUssS0FBSztvQkFDL0JILFdBQVcsQ0FBQ0csRUFBRSxHQUFHO29CQUNqQkQsUUFBUTtnQkFDWixPQUFPO29CQUNIRixXQUFXLENBQUNHLEVBQUUsR0FBR1QsT0FBT1UsWUFBWSxDQUFDSixXQUFXLENBQUNHLEVBQUUsQ0FBQ0UsVUFBVSxDQUFDLEtBQUs7b0JBQ3BFSCxRQUFRO2dCQUNaO1lBQ0o7WUFFQSx1QkFBdUI7WUFDdkIsSUFBSUEsT0FBTztnQkFDUCxJQUFJSCxPQUFPLENBQUMsRUFBRSxJQUFJLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBSztvQkFDeENDLFlBQVlNLE9BQU8sQ0FBQztnQkFDeEIsT0FBTztvQkFDSE4sWUFBWU0sT0FBTyxDQUFDO2dCQUN4QjtZQUNKO1lBRUEsT0FBT2YsU0FBU1MsWUFBWU8sSUFBSSxDQUFDO1FBQ3JDO1FBRUEsd0JBQXdCO1FBQ3hCLE9BQU9uQjtJQUNYO0lBRUEsaUJBQWlCO0lBQ2pCL0QsZ0RBQVNBO2dDQUFDO1lBQ04wQixjQUFja0M7WUFDZGhDLGVBQWVpQztRQUNuQjsrQkFBRztRQUFDRDtRQUFnQkM7S0FBZ0I7SUFFcEMsa0NBQWtDO0lBQ2xDN0QsZ0RBQVNBO2dDQUFDO1lBQ04sSUFBSXVDLGdCQUFnQjRDLFlBQVlDLGVBQWUsU0FBUzNELGNBQWNBLGVBQWVtQyxnQkFBZ0I7Z0JBQ2pHaEMsZUFBZWtDLFVBQVVyQztZQUM3QjtRQUNKOytCQUFHO1FBQUNBO1FBQVlrQztRQUFNQztLQUFlO0lBRWpDLFlBQVk7SUFDWixNQUFNeUIsaUJBQWlCO1FBQ25CLE1BQU10QixZQUFZdEMsV0FBVzZELElBQUk7UUFFakMsZ0JBQWdCO1FBQ2hCLE1BQU01QixpQkFBaUJSO1FBQ3ZCLE1BQU1xQyxrQkFBa0I3QixnQkFBZ0I4QixlQUFlLEVBQUU7UUFFekQsYUFBYTtRQUNiLE1BQU1DLGNBQWNGLGdCQUFnQkcsSUFBSSxDQUFDQyxDQUFBQSxTQUFVQSxPQUFPOUMsSUFBSSxLQUFLa0I7UUFFbkUsT0FBTztRQUNQLElBQUkwQixhQUFhO1lBQ2J2RCx3QkFBd0I7WUFDeEJFLHlCQUF5QixJQUFNO29CQUMzQixjQUFjO29CQUNkLE1BQU13RCxvQkFBb0I7d0JBQ3RCLEdBQUdyRCxjQUFjO3dCQUNqQk0sTUFBTWtCO29CQUNWO29CQUVBLGNBQWM7b0JBQ2QsTUFBTThCLGVBQWVyRixvRUFBd0IsR0FBR3NGLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxDQUFBQSxJQUFLQSxNQUFNdEM7b0JBQzlFLElBQUltQyxpQkFBaUIsQ0FBQyxHQUFHO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLE1BQU1JLGFBQWFWLGdCQUFnQlcsTUFBTSxDQUFDUCxDQUFBQSxTQUFVQSxPQUFPOUMsSUFBSSxLQUFLa0I7d0JBQ3BFTixjQUFjb0MsY0FBYzs0QkFDeEJMLGFBQWE7bUNBQUlTO2dDQUFZTDs2QkFBa0I7d0JBQ25EO3dCQUNBLHNDQUFzQzt3QkFDdENwRixvRUFBd0IsQ0FBQzs0QkFDckI2QixZQUFZO2dDQUNSLEdBQUdBLFVBQVU7Z0NBQ2JHLFNBQVM7b0NBQ0wsR0FBR0gsV0FBV0csT0FBTztvQ0FDckJDLFFBQVFtRDtnQ0FDWjs0QkFDSjt3QkFDSjtvQkFDSjtvQkFDQXZDLGtCQUFrQjtvQkFDbEJyQixxQkFBcUI7Z0JBQ3pCO1lBQ0FBLHFCQUFxQjtZQUNyQjtRQUNKO1FBQ0EscUJBQXFCO1FBQ3JCLElBQUlPLGdCQUFnQjtZQUNoQixNQUFNcUQsb0JBQW9CO2dCQUN0QixHQUFHckQsY0FBYztnQkFDakJNLE1BQU1rQjtZQUNWO1lBRUEsNkJBQTZCO1lBQzdCLE1BQU04QixlQUFlckYsb0VBQXdCLEdBQUdzRixRQUFRLENBQUNDLFNBQVMsQ0FBQ0MsQ0FBQUEsSUFBS0EsTUFBTXRDO1lBQzlFLElBQUltQyxpQkFBaUIsQ0FBQyxHQUFHO2dCQUNyQixRQUFRO2dCQUNScEMsY0FBY29DLGNBQWM7b0JBQ3hCTCxhQUFhOzJCQUFLOUIsZUFBZThCLFdBQVcsSUFBSSxFQUFFO3dCQUFHSTtxQkFBa0I7Z0JBQzNFO2dCQUVBLHNDQUFzQztnQkFDdEMsTUFBTXZELGFBQWE3QixvRUFBd0IsR0FBRzZCLFVBQVU7Z0JBQ3hEN0Isb0VBQXdCLENBQUM7b0JBQ3JCNkIsWUFBWTt3QkFDUixHQUFHQSxVQUFVO3dCQUNiRyxTQUFTOzRCQUNMLEdBQUdILFdBQVdHLE9BQU87NEJBQ3JCQyxRQUFRbUQ7d0JBQ1o7b0JBQ0o7Z0JBQ0o7Z0JBRUEsVUFBVTtnQkFDVixNQUFNTyxTQUFTLENBQUM7b0JBQ1osTUFBTXBDLFlBQVl0QyxXQUFXNkQsSUFBSTtvQkFDakMsSUFBSSxDQUFDdkIsV0FBVyxPQUFPQTtvQkFFdkIsV0FBVztvQkFDWCxNQUFNcUMsV0FBV3JDLFVBQVVzQyxLQUFLLENBQUMsQ0FBQztvQkFDbEMsTUFBTW5DLFNBQVNILFVBQVVzQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUVuQyxjQUFjO29CQUNkLElBQUksS0FBS0MsSUFBSSxDQUFDRixXQUFXO3dCQUNyQixNQUFNbkMsUUFBUUYsVUFBVUUsS0FBSyxDQUFDO3dCQUM5QixJQUFJQSxPQUFPOzRCQUNQLE1BQU1zQyxZQUFZdEMsS0FBSyxDQUFDLEVBQUU7NEJBQzFCLE1BQU11QyxTQUFTQyxTQUFTeEMsS0FBSyxDQUFDLEVBQUUsSUFBSTs0QkFDcEMsT0FBTyxHQUFHc0MsWUFBWUMsT0FBT0UsUUFBUSxHQUFHbkMsUUFBUSxDQUFDTixLQUFLLENBQUMsRUFBRSxDQUFDTyxNQUFNLEVBQUUsTUFBTTt3QkFDNUU7b0JBQ0o7b0JBRUEsY0FBYztvQkFDZCxJQUFJLFdBQVc4QixJQUFJLENBQUNGLFdBQVc7d0JBQzNCLE1BQU1PLFdBQVd0QyxPQUFPVSxZQUFZLENBQUNxQixTQUFTcEIsVUFBVSxDQUFDLEtBQUs7d0JBQzlELGdCQUFnQjt3QkFDaEIsSUFBSSxhQUFjLE9BQU8yQixXQUFXLE9BQVNQLGFBQWEsT0FBT08sV0FBVyxLQUFNOzRCQUM5RSxNQUFNQyxXQUFXUixhQUFhLE1BQU0sTUFBTTs0QkFDMUMsT0FBTyxHQUFHbEMsU0FBUzBDLFVBQVU7d0JBQ2pDO3dCQUNBLE9BQU8sR0FBRzFDLFNBQVN5QyxVQUFVO29CQUNqQztvQkFFQSxPQUFPNUM7Z0JBQ1g7Z0JBRUEsb0JBQW9CO2dCQUNyQixNQUFNOEMsa0JBQWtCbkQsZ0JBQWdCb0QsWUFBWSxFQUFFO2dCQUNyRCxNQUFNQyxhQUFhNUQsb0JBQW9CNkQsRUFBRTtnQkFFekMsb0JBQW9CO2dCQUNwQixNQUFNQyxrQkFBa0JKLGdCQUFnQkssR0FBRyxDQUFDQyxDQUFBQSxRQUN4Q0EsTUFBTUgsRUFBRSxLQUFLRCxhQUFhO3dCQUFFLEdBQUdJLEtBQUs7d0JBQUV0RSxNQUFNc0Q7b0JBQU8sSUFBSWdCO2dCQUczRCxPQUFPO2dCQUNQMUQsY0FBY29DLGNBQWM7b0JBQ3hCaUIsVUFBVUc7Z0JBQ2Q7WUFDSjtZQUNBNUQsa0JBQWtCO1FBQ3RCO0lBQ0o7SUFDQSxNQUFNK0Qsa0JBQWtCO1FBQ3BCLE1BQU1yRCxZQUFZdEMsV0FBVzZELElBQUk7UUFDakMsTUFBTStCLGFBQWExRixZQUFZMkQsSUFBSTtRQUVuQyxhQUFhO1FBQ2IsSUFBSXZCLGNBQWNzRCxZQUFZO1lBQzFCbkYsd0JBQXdCO1lBQ3hCRSx5QkFBeUIsSUFBTTtvQkFDM0JKLHFCQUFxQjtnQkFDekI7WUFDQUEscUJBQXFCO1lBQ3JCO1FBQ0o7UUFFQSxnQkFBZ0I7UUFDaEIsTUFBTTBCLGlCQUFpQlI7UUFDdkIsTUFBTXFDLGtCQUFrQjdCLGdCQUFnQjhCLGVBQWUsRUFBRTtRQUV6RCxhQUFhO1FBQ2IsTUFBTThCLGVBQWUvQixnQkFBZ0JHLElBQUksQ0FBQ0MsQ0FBQUEsU0FBVUEsT0FBTzlDLElBQUksS0FBS2tCO1FBQ3BFLE1BQU13RCxlQUFlaEMsZ0JBQWdCRyxJQUFJLENBQUNDLENBQUFBLFNBQVVBLE9BQU85QyxJQUFJLEtBQUt3RTtRQUVwRSxNQUFNRyxnQkFBZ0JsRTtRQUN0QixNQUFNbUUsWUFBWUQsY0FBYy9FLE1BQU0sQ0FBQ2dGLFNBQVM7UUFDaEQsTUFBTUMsY0FBY0QsVUFBVUUsUUFBUSxDQUFDO1FBRXZDLElBQUlMLGdCQUFnQkMsY0FBYztZQUM5QixNQUFNM0csVUFBVSxFQUFFO1lBQ2xCLElBQUkwRyxjQUFjMUcsUUFBUWdILElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTdELFdBQVc7WUFDbEQsSUFBSXdELGNBQWMzRyxRQUFRZ0gsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFUCxZQUFZO1lBRW5EbkYsd0JBQXdCLEdBQUd0QixRQUFRc0UsSUFBSSxDQUFDLE9BQU8sU0FBUyxDQUFDO1lBQ3pEOUMseUJBQXlCLElBQU07b0JBQzNCLGNBQWM7b0JBQ2QsTUFBTXlGLHFCQUFxQjt3QkFDdkIsR0FBR3RGLGNBQWM7d0JBQ2pCTSxNQUFNa0I7d0JBQ04rRCxXQUFXSixjQUFjTCxhQUFhdEQ7d0JBQ3RDZ0UsU0FBU0wsY0FBYzNELFlBQVlzRDtvQkFDdkM7b0JBRUEsTUFBTVcscUJBQXFCO3dCQUN2QixHQUFHekYsY0FBYzt3QkFDakJNLE1BQU13RTt3QkFDTlMsV0FBV0osY0FBY0wsYUFBYXREO3dCQUN0Q2dFLFNBQVNMLGNBQWMzRCxZQUFZc0Q7b0JBQ3ZDO29CQUVBLGNBQWM7b0JBQ2QsTUFBTXhCLGVBQWVyRixvRUFBd0IsR0FBR3NGLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxDQUFBQSxJQUFLQSxNQUFNdEM7b0JBQzlFLElBQUltQyxpQkFBaUIsQ0FBQyxHQUFHO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLE1BQU1JLGFBQWFWLGdCQUFnQlcsTUFBTSxDQUFDUCxDQUFBQSxTQUN0Q0EsT0FBTzlDLElBQUksS0FBS2tCLGFBQWE0QixPQUFPOUMsSUFBSSxLQUFLd0U7d0JBRWpENUQsY0FBY29DLGNBQWM7NEJBQ3hCTCxhQUFhO21DQUFJUztnQ0FBWTRCO2dDQUFvQkc7NkJBQW1CO3dCQUN4RTt3QkFFQSxzQ0FBc0M7d0JBQ3RDeEgsb0VBQXdCLENBQUM7NEJBQ3JCNkIsWUFBWTtnQ0FDUixHQUFHQSxVQUFVO2dDQUNiRyxTQUFTO29DQUNMLEdBQUdILFdBQVdHLE9BQU87b0NBQ3JCQyxRQUFRb0Y7Z0NBQ1o7NEJBQ0o7d0JBQ0o7b0JBQ0o7b0JBQ0F4RSxrQkFBa0I7b0JBQ2xCckIscUJBQXFCO2dCQUN6QjtZQUNBQSxxQkFBcUI7WUFDckI7UUFDSjtRQUNBLHFCQUFxQjtRQUNyQixJQUFJTyxnQkFBZ0I7WUFFaEIsV0FBVztZQUNYLE1BQU1zRixxQkFBcUI7Z0JBQ25CLEdBQUd0RixjQUFjO2dCQUNqQk0sTUFBTWtCO2dCQUNOK0QsV0FBV0osY0FBY0wsYUFBYXREO2dCQUN0Q2dFLFNBQVNMLGNBQWMzRCxZQUFZc0Q7WUFDdkM7WUFFQSxNQUFNVyxxQkFBcUI7Z0JBQ3ZCLEdBQUd6RixjQUFjO2dCQUNqQk0sTUFBTXdFO2dCQUNOUyxXQUFXSixjQUFjTCxhQUFhdEQ7Z0JBQ3RDZ0UsU0FBU0wsY0FBYzNELFlBQVlzRDtZQUN2QztZQUVKLDZCQUE2QjtZQUM3QixNQUFNeEIsZUFBZXJGLG9FQUF3QixHQUFHc0YsUUFBUSxDQUFDQyxTQUFTLENBQUNDLENBQUFBLElBQUtBLE1BQU10QztZQUM5RSxJQUFJbUMsaUJBQWlCLENBQUMsR0FBRztnQkFDckIsUUFBUTtnQkFDUnBDLGNBQWNvQyxjQUFjO29CQUN4QkwsYUFBYTsyQkFBSzlCLGVBQWU4QixXQUFXLElBQUksRUFBRTt3QkFBR3FDO3dCQUFtQkc7cUJBQW1CO2dCQUMvRjtnQkFFQSxzQ0FBc0M7Z0JBQ3RDLE1BQU0zRixhQUFhN0Isb0VBQXdCLEdBQUc2QixVQUFVO2dCQUN4RDdCLG9FQUF3QixDQUFDO29CQUNyQjZCLFlBQVk7d0JBQ1IsR0FBR0EsVUFBVTt3QkFDYkcsU0FBUzs0QkFDTCxHQUFHSCxXQUFXRyxPQUFPOzRCQUNyQkMsUUFBUW9GO3dCQUNaO29CQUNKO2dCQUNKO2dCQUVBLFVBQVU7Z0JBQ1YsTUFBTTFCLFNBQVNyQyxVQUFVQSxVQUFVckMsV0FBVzZELElBQUk7Z0JBRWxELFdBQVc7Z0JBQ1gsTUFBTTJDLFVBQVVuRSxVQUFVQSxVQUFVbkMsWUFBWTJELElBQUk7Z0JBRXBELG9CQUFvQjtnQkFDcEIsTUFBTXVCLGtCQUFrQm5ELGdCQUFnQm9ELFlBQVksRUFBRTtnQkFDdEQsTUFBTUMsYUFBYTVELG9CQUFvQjZELEVBQUU7Z0JBQ3pDLE1BQU1rQixjQUFjOUUscUJBQXFCNEQsRUFBRTtnQkFJM0Msb0JBQW9CO2dCQUNwQixNQUFNQyxrQkFBa0JKLGdCQUFnQkssR0FBRyxDQUFDQyxDQUFBQSxRQUN4Q0EsTUFBTUgsRUFBRSxLQUFLRCxhQUFhO3dCQUFFLEdBQUdJLEtBQUs7d0JBQUV0RSxNQUFNc0Q7b0JBQU8sSUFDbkRnQixNQUFNSCxFQUFFLEtBQUtrQixjQUFjO3dCQUFFLEdBQUdmLEtBQUs7d0JBQUV0RSxNQUFNb0Y7b0JBQVEsSUFDckRkO2dCQUtKLGdCQUFnQjtnQkFDaEIxRCxjQUFjb0MsY0FBYztvQkFDeEJpQixVQUFVRztnQkFDZDtZQUNKO1lBQ0E1RCxrQkFBa0I7UUFDdEI7SUFDSjtJQUVKLFlBQVk7SUFDWixNQUFNOEUsZ0JBQWdCO1FBQ2xCLE1BQU1DLG1CQUFtQjtZQUNyQixNQUFNaEQsYUFBYTdDLGdCQUFnQjRDLFlBQVlDO1lBQy9DLE9BQVFBO2dCQUNKLEtBQUs7b0JBQ0QscUJBQU8sOERBQUNoRix3RUFBZ0JBO3dCQUFDaUksWUFBWTlGOzs7Ozs7Z0JBQ3pDLEtBQUs7b0JBQ0QscUJBQU8sOERBQUNsQyxzRUFBY0E7d0JBQUNnSSxZQUFZOUY7Ozs7OztnQkFDdkMsS0FBSztvQkFDRCxxQkFBTyw4REFBQ2pDLHNFQUFjQTt3QkFBQytILFlBQVk5Rjs7Ozs7O2dCQUN2QztvQkFDSSxxQkFBTyw4REFBQ25DLHdFQUFnQkE7d0JBQUNpSSxZQUFZOUY7Ozs7OztZQUM3QztRQUNKO1FBRUEsTUFBTStGLGdCQUFnQjtZQUNsQixNQUFNbEQsYUFBYTdDLGdCQUFnQjRDLFlBQVlDO1lBQy9DLE9BQVFBO2dCQUNKLEtBQUs7b0JBQ0QscUJBQ0EsOERBQUNyRTt3QkFBSUMsV0FBVTs7MENBQ1gsOERBQUNEO2dDQUFJQyxXQUFVOztrREFDWCw4REFBQ0Q7d0NBQUlDLFdBQVU7a0RBQTBCOzs7Ozs7a0RBQ3pDLDhEQUFDRDt3Q0FBSUMsV0FBVTtrREFDWCw0RUFBQ3VIOzRDQUNHQyxNQUFLOzRDQUNMeEgsV0FBVTs0Q0FDVnlILE9BQU9oSDs0Q0FDUGlILGFBQVk7NENBQ1pDLFVBQVUsQ0FBQ0M7Z0RBQ1BsSCxjQUFja0gsRUFBRUMsTUFBTSxDQUFDSixLQUFLO2dEQUM1QmpILGtCQUFrQm9ILEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzs0Q0FDN0M7NENBQ0EzSCxTQUFTLENBQUN5SDtnREFDTjlHLGVBQWU7Z0RBQ2ZSLGdCQUFnQjtnREFDaEJFLGtCQUFrQm9ILEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzs0Q0FDN0M7NENBQ0FDLFNBQVMsQ0FBQ0g7Z0RBQ04sTUFBTXJILGlCQUFpQnFILEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYztnREFDOUNGLEVBQUVDLE1BQU0sQ0FBQ0csaUJBQWlCLENBQUN6SCxnQkFBZ0JBOzRDQUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7MENBSVosOERBQUNSOztrREFDRyw4REFBQ0E7d0NBQUlDLFdBQVU7a0RBQTBCOzs7Ozs7a0RBQ3pDLDhEQUFDRDt3Q0FBSUMsV0FBVTtrREFDWCw0RUFBQ3VIOzRDQUNHQyxNQUFLOzRDQUNMeEgsV0FBVTs0Q0FDVnlILE9BQU85Rzs0Q0FDUCtHLGFBQVk7NENBQ1pDLFVBQVUsQ0FBQ0M7Z0RBQ1BoSCxlQUFlZ0gsRUFBRUMsTUFBTSxDQUFDSixLQUFLO2dEQUM3QmpILGtCQUFrQm9ILEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzs0Q0FDN0M7NENBQ0EzSCxTQUFTLENBQUN5SDtnREFDTjlHLGVBQWU7Z0RBQ2ZSLGdCQUFnQjtnREFDaEJFLGtCQUFrQm9ILEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzs0Q0FDN0M7NENBQ0FDLFNBQVMsQ0FBQ0g7Z0RBQ04sTUFBTXJILGlCQUFpQnFILEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYztnREFDOUNGLEVBQUVDLE1BQU0sQ0FBQ0csaUJBQWlCLENBQUN6SCxnQkFBZ0JBOzRDQUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBSVhGLDhCQUNHLDhEQUFDZCxnRUFBUUE7Z0NBQ0xrSSxPQUFPNUcsZ0JBQWdCLElBQUlKLGFBQWFFO2dDQUN4Q0osZ0JBQWdCQTtnQ0FDaEJvSCxVQUFVLENBQUNNLFVBQVVDO29DQUNqQixJQUFJckgsZ0JBQWdCLEdBQUc7d0NBQ25CSCxjQUFjdUg7b0NBQ2xCLE9BQU87d0NBQ0hySCxlQUFlcUg7b0NBQ25CO29DQUNBekgsa0JBQWtCMEg7Z0NBQ3RCO2dDQUNBQyxZQUFZO29DQUNSN0gsZ0JBQWdCO2dDQUNwQjs7Ozs7Ozs7Ozs7O2dCQUtoQjtvQkFDSSxxQkFDQSw4REFBQ1A7d0JBQUlDLFdBQVU7OzBDQUNmLDhEQUFDRDtnQ0FDR0MsV0FBVTtnQ0FDVkcsU0FBUyxJQUFNRyxnQkFBZ0I7MENBRS9CLDRFQUFDaUg7b0NBQ09DLE1BQUs7b0NBQ0x4SCxXQUFVO29DQUNWeUgsT0FBT2hIO29DQUNQaUgsYUFBWTtvQ0FDWkMsVUFBVSxDQUFDQzt3Q0FDUGxILGNBQWNrSCxFQUFFQyxNQUFNLENBQUNKLEtBQUs7d0NBQzVCakgsa0JBQWtCb0gsRUFBRUMsTUFBTSxDQUFDQyxjQUFjO29DQUM3QztvQ0FDQTNILFNBQVMsQ0FBQ3lIO3dDQUNOdEgsZ0JBQWdCO3dDQUNoQkUsa0JBQWtCb0gsRUFBRUMsTUFBTSxDQUFDQyxjQUFjO29DQUM3QztvQ0FDQUMsU0FBUyxDQUFDSDt3Q0FDTixTQUFTO3dDQUNULE1BQU1ySCxpQkFBaUJxSCxFQUFFQyxNQUFNLENBQUNDLGNBQWM7d0NBQzlDRixFQUFFQyxNQUFNLENBQUNHLGlCQUFpQixDQUFDekgsZ0JBQWdCQTtvQ0FDL0M7Ozs7Ozs7Ozs7OzRCQUdYRiw4QkFDRyw4REFBQ2QsZ0VBQVFBO2dDQUNMa0ksT0FBT2hIO2dDQUNQRixnQkFBZ0JBO2dDQUNoQm9ILFVBQVUsQ0FBQ00sVUFBVUM7b0NBQ2pCeEgsY0FBY3VIO29DQUNkekgsa0JBQWtCMEg7Z0NBQ3RCO2dDQUNBQyxZQUFZO29DQUNSN0gsZ0JBQWdCO2dDQUNwQjs7Ozs7Ozs7Ozs7O1lBS2hCO1FBQ0o7UUFFQSxPQUFRcUM7WUFDSixLQUFLO2dCQUNELHFCQUNJLDhEQUFDNUM7b0JBQUlDLFdBQVU7O3NDQUNYLDhEQUFDZixpRUFBU0E7Ozs7O3dCQUNUc0MsZ0JBQWdCNEMsWUFBWUMsZUFBZSxzQkFDeEMsOERBQUNsRixzRUFBY0E7NEJBQUNrSixPQUFNOzRCQUFRZixZQUFZOUY7NEJBQWdCOEcsUUFBTzs0QkFBTzFGLE1BQUs7Ozs7O2lEQUM1RSw4REFBQ3pELHNFQUFjQTs0QkFBRWtKLE9BQU07NEJBQUlmLFlBQVk5Rjs0QkFBZ0I4RyxRQUFPOzRCQUFPMUYsTUFBSzs7Ozs7O3dCQUU5RXlFO3NDQUNELDhEQUFDckg7NEJBQUlDLFdBQVU7c0NBQ1gsNEVBQUNFO2dDQUNHQyxTQUFTLElBQU1rQyxrQkFBa0I7Z0NBQ2pDckMsV0FBVTswQ0FDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFPakIsS0FBSztnQkFDRCxxQkFDSSw4REFBQ0Q7b0JBQUlDLFdBQVU7O3NDQUNYLDhEQUFDZixpRUFBU0E7Ozs7O3NDQUVWLDhEQUFDRSxnRUFBUUE7NEJBQ0xpSixPQUFNOzRCQUNOQyxRQUFRN0ksb0VBQXdCLEdBQUc2QixVQUFVLENBQUNPLFFBQVEsRUFBRUMsUUFBUTs0QkFDaEVjLE1BQU1uRCxvRUFBd0IsR0FBRzZCLFVBQVUsQ0FBQ08sUUFBUSxFQUFFZSxRQUFROzs7Ozs7c0NBR2xFLDhEQUFDNUM7NEJBQUlDLFdBQVU7c0NBQ2JzSDs7Ozs7O3NDQUVGLDhEQUFDdkg7NEJBQUlDLFdBQVU7c0NBQ1Z1QixnQkFBZ0I0QyxZQUFZQyxlQUFlLFFBQ3hDLENBQUMvRCw4QkFDRyw4REFBQ0g7Z0NBQ0dDLFNBQVMsSUFBTWlHO2dDQUNmcEcsV0FBVTswQ0FDYjs7Ozs7dUNBS0wsQ0FBQ0ssOEJBQWlCLDhEQUFDSDtnQ0FDbkJDLFNBQVMsSUFBTWtFO2dDQUNmckUsV0FBVTswQ0FDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFXakIsS0FBSztnQkFDRCxxQkFDSSw4REFBQ0Q7b0JBQUlDLFdBQVU7O3NDQUNYLDhEQUFDZixpRUFBU0E7Ozs7O3dCQUNUc0MsZ0JBQWdCNEMsWUFBWUMsZUFBZSxzQkFDeEMsOERBQUNsRixzRUFBY0E7NEJBQUVtSSxZQUFZOUY7NEJBQWdCOEcsUUFBTzs0QkFBUzFGLE1BQUs7Ozs7O2lEQUNqRSw4REFBQ3pELHNFQUFjQTs0QkFBRWtKLE9BQU07NEJBQUlmLFlBQVk5Rjs0QkFBZ0I4RyxRQUFPOzRCQUFTMUYsTUFBSzs7Ozs7O3dCQUVoRnlFO3NDQUNELDhEQUFDckg7NEJBQUlDLFdBQVU7c0NBQ1gsNEVBQUNFO2dDQUNHQyxTQUFTO29DQUNMb0MsV0FBVyxRQUFRO2dDQUN2QjtnQ0FDQXZDLFdBQVU7MENBQ2I7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBT2pCO2dCQUNJLE9BQU87UUFDZjtJQUNKO0lBRUEsTUFBTXNJLFVBQVVuQjtJQUNoQixxQkFDSSw4REFBQ3BIO1FBQUlDLFdBQVU7O1lBQ1ZzSTtZQUNBdkgsbUNBQ0csOERBQUNwQjtnQkFDR0MsU0FBU3FCO2dCQUNUcEIsV0FBV3NCO2dCQUNYckIsVUFBVSxJQUFNa0IscUJBQXFCOzs7Ozs7Ozs7Ozs7QUFLekQiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9mbHVrZS9SZXN1bHRJbmZvLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvU3RhdHVzQmFyJztcclxuaW1wb3J0IFJlc3VsdFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvUmVzdWx0VGl0bGVCYXInO1xyXG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9UaXRsZUJhcic7XHJcbmltcG9ydCBDb3BwZXJSZXN1bHRNYWluIGZyb20gICdAL2NvbXBvbmVudHMvbGliL0NvcHBlclJlc3VsdE1haW4nO1xyXG5pbXBvcnQgT0xUU1Jlc3VsdE1haW4gZnJvbSAnQC9jb21wb25lbnRzL2xpYi9PTFRTUmVzdWx0TWFpbic7XHJcbmltcG9ydCBPVERSUmVzdWx0TWFpbiBmcm9tICdAL2NvbXBvbmVudHMvbGliL09URFJSZXN1bHRNYWluJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvS2V5Ym9hcmQnO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuaW1wb3J0IHsgZ2V0QXNzZXRVcmwgfSBmcm9tICdAL3V0aWxzL2Fzc2V0JztcclxuaW1wb3J0IHsgdXNlQXVkaW8gfSBmcm9tICdAL2NvbXBvbmVudHMvQXVkaW9Qcm92aWRlcic7XHJcblxyXG5cclxuLy8g6Ieq5a6a5LmJ56Gu6K6k5by556qX57uE5Lu2XHJcbmNvbnN0IENvbmZpcm1EaWFsb2cgPSAoeyBtZXNzYWdlLCBvbkNvbmZpcm0sIG9uQ2FuY2VsIH0pID0+IChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwidy1bNDgwcHhdIGgtWzY0MHB4XSBiZy1bIzAwMjg0MmQ0XSBhYnNvbHV0ZSB6LVs5OTk5XSB0b3AtMS8yIGxlZnQtMS8yIHRyYW5zZm9ybSAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncGwtMTAgcHQtNjAnPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLVsjMkIzQzVCXSByb3VuZGVkLWxnIHAtNiB3LVs0MDBweF0gbWluLWgtWzIwMHB4XSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXhsIGZvbnQtYm9sZCBtYi00XCI+5o+Q56S6PC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtbGdcIj57bWVzc2FnZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC00IG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ29uZmlybX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctWyMzNTRlN2FdIHRleHQtd2hpdGUgcHgtNiBweS0yIHJvdW5kZWQgaG92ZXI6YmctWyMxRTI5M0JdIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIOehruWumlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DYW5jZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLVsjNGE0YTRhXSB0ZXh0LXdoaXRlIHB4LTYgcHktMiByb3VuZGVkIGhvdmVyOmJnLVsjM2EzYTNhXSB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDlj5bmtohcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzdWx0SW5mbygpIHtcclxuICAgIGNvbnN0IFtzaG93S2V5Ym9hcmQsIHNldFNob3dLZXlib2FyZF0gPSB1c2VTdGF0ZSh0cnVlKTtcclxuICAgIGNvbnN0IFtjdXJzb3JQb3NpdGlvbiwgc2V0Q3Vyc29yUG9zaXRpb25dID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbaW5wdXRWYWx1ZTIsIHNldElucHV0VmFsdWUyXSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFthY3RpdmVJbnB1dCwgc2V0QWN0aXZlSW5wdXRdID0gdXNlU3RhdGUoMSk7IC8vIDEg6KGo56S656ys5LiA5Liq6L6T5YWl5qGG77yMMiDooajnpLrnrKzkuozkuKrovpPlhaXmoYZcclxuICAgIGNvbnN0IFtzaG93Q29uZmlybURpYWxvZywgc2V0U2hvd0NvbmZpcm1EaWFsb2ddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2NvbmZpcm1EaWFsb2dNZXNzYWdlLCBzZXRDb25maXJtRGlhbG9nTWVzc2FnZV0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbY29uZmlybURpYWxvZ0NhbGxiYWNrLCBzZXRDb25maXJtRGlhbG9nQ2FsbGJhY2tdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCB7IG5hdmlnYXRpb24gfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpO1xyXG4gICAgY29uc3QgdGVtcFRlc3RSZXN1bHQgPSBuYXZpZ2F0aW9uLmN1cnJlbnQucGFyYW1zO1xyXG4gICAgY29uc3QgeyBwbGF5IH0gPSB1c2VBdWRpbygpO1xyXG4gICAgLy8g5qC55o2u5rWL6K+V57uT5p6c5pKt5pS+6Z+z5pWIXHJcbiAgICBjb25zdCB7IGhhc1BsYXllZFNvdW5kIH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKTtcclxuICAgIFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAvLyDlj6rmnInku47mtYvor5XpobXpnaLov5vlhaVub3NhdmXop4blm77ml7bmiY3mkq3mlL7lo7Dpn7NcclxuICAgICAgICBpZiAobmF2aWdhdGlvbi5wcmV2aW91cy5uYW1lID09PSAndGVzdGluZycgJiYgXHJcbiAgICAgICAgICAgIHRlbXBUZXN0UmVzdWx0ICYmIFxyXG4gICAgICAgICAgICAhaGFzUGxheWVkU291bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBUZXN0UmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnfHx0ZW1wVGVzdFJlc3VsdC5DRlBSZXN1bHRTdGF0dXMgPT09ICdwYXNzJyB8fHRlbXBUZXN0UmVzdWx0Lm9mcFJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnKSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5KCdwYXNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5KCdmYWlsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdXNlRGlzcGxheVN0b3JlLnNldFN0YXRlKHsgaGFzUGxheWVkU291bmQ6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sIFtuYXZpZ2F0aW9uLCB0ZW1wVGVzdFJlc3VsdCwgaGFzUGxheWVkU291bmRdKTtcclxuXHJcbiAgICAvLyDku45VUkzlj4LmlbDkuK3ojrflj5bkuLTml7bmtYvor5Xnu5PmnpxcclxuICAgIGNvbnN0IHtcclxuICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcclxuICAgICAgICBnZXRDdXJyZW50Q2FibGVJZCxcclxuICAgICAgICBnZXRDdXJyZW50Q2FibGVJZDIsXHJcbiAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcsXHJcbiAgICAgICAgZ2V0Q3VycmVudFRlc3RDb25maWcsXHJcbiAgICAgICAgbmF2aWdhdGVUbyxcclxuICAgICAgICBzZXRUb2FzdE1lc3NhZ2UsXHJcbiAgICAgICAgdXBkYXRlUHJvamVjdFxyXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgXHJcbiAgICAvLyDojrflj5blvZPliY3nmoTnur/nvIZJRFxyXG4gICAgY29uc3QgY3VycmVudENhYmxlSWQgPSBnZXRDdXJyZW50Q2FibGVJZCgpLm5hbWUgfHwgJyc7XHJcbiAgICBjb25zdCBjdXJyZW50Q2FibGVJZDIgPSBnZXRDdXJyZW50Q2FibGVJZDIoKS5uYW1lIHx8ICcnO1xyXG4gICAgLy8g6K6h566X5LiL5LiA5Liq5bqP5Y+355qESURcclxuICAgIGNvbnN0IGdldE5leHRJZCA9IChjdXJyZW50SWQpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRJZCkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbku6XmlbDlrZfnu5PlsL5cclxuICAgICAgICBjb25zdCBudW1NYXRjaCA9IGN1cnJlbnRJZC5tYXRjaCgvXiguKj8pKFxcZCspJC8pO1xyXG4gICAgICAgIGlmIChudW1NYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBbLCBwcmVmaXgsIG51bV0gPSBudW1NYXRjaDtcclxuICAgICAgICAgICAgY29uc3QgbmV4dE51bSA9IFN0cmluZyhOdW1iZXIobnVtKSArIDEpLnBhZFN0YXJ0KG51bS5sZW5ndGgsICcwJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBuZXh0TnVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm5Lul5a2X5q+N57uT5bC+XHJcbiAgICAgICAgY29uc3QgbGV0dGVyTWF0Y2ggPSBjdXJyZW50SWQubWF0Y2goL14oLio/KShbYS16QS1aXSspJC8pO1xyXG4gICAgICAgIGlmIChsZXR0ZXJNYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBbLCBwcmVmaXgsIGxldHRlcnNdID0gbGV0dGVyTWF0Y2g7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDlsIblrZfmr43ovazmjaLkuLrmlbDnu4Tku6Xkvr/lpITnkIZcclxuICAgICAgICAgICAgY29uc3QgbGV0dGVyQXJyYXkgPSBsZXR0ZXJzLnNwbGl0KCcnKTtcclxuICAgICAgICAgICAgbGV0IGNhcnJ5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOS7juWPs+WQkeW3puWkhOeQhuavj+S4quWtl+avjVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGV0dGVyQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwICYmIGNhcnJ5OyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJBcnJheVtpXSA9PT0gJ3onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXlbaV0gPSAnYSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZXR0ZXJBcnJheVtpXSA9PT0gJ1onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXlbaV0gPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXR0ZXJBcnJheVtpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUobGV0dGVyQXJyYXlbaV0uY2hhckNvZGVBdCgwKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcnJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOWmguaenOi/mOaciei/m+S9je+8jOivtOaYjumcgOimgeWcqOWJjemdoua3u+WKoOS4gOS4quWtl+avjVxyXG4gICAgICAgICAgICBpZiAoY2FycnkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzWzBdID49ICdhJyAmJiBsZXR0ZXJzWzBdIDw9ICd6Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldHRlckFycmF5LnVuc2hpZnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXkudW5zaGlmdCgnQScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgbGV0dGVyQXJyYXkuam9pbignJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlpoLmnpzml6LkuI3mmK/mlbDlrZfkuZ/kuI3mmK/lrZfmr43nu5PlsL7vvIznm7TmjqXov5Tlm57ljp/lgLxcclxuICAgICAgICByZXR1cm4gY3VycmVudElkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDliJ3lp4vljJbovpPlhaXlgLzkuLrlvZPliY3nmoTnur/nvIZJRFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBzZXRJbnB1dFZhbHVlKGN1cnJlbnRDYWJsZUlkKTtcclxuICAgICAgICBzZXRJbnB1dFZhbHVlMihjdXJyZW50Q2FibGVJZDIpO1xyXG4gICAgfSwgW2N1cnJlbnRDYWJsZUlkLCBjdXJyZW50Q2FibGVJZDJdKTtcclxuXHJcbiAgICAvLyDlvZPnrKzkuIDkuKrovpPlhaXmoYblgLzlj5jljJbml7bvvIzku4XlnKjnlKjmiLfmiYvliqjovpPlhaXml7boh6rliqjmm7TmlrDnrKzkuozkuKrovpPlhaXmoYZcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRlbXBUZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlID09PSAnY2ZwJyAmJiBpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUgIT09IGN1cnJlbnRDYWJsZUlkKSB7XHJcbiAgICAgICAgICAgIHNldElucHV0VmFsdWUyKGdldE5leHRJZChpbnB1dFZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lucHV0VmFsdWUsIHZpZXcsIGN1cnJlbnRDYWJsZUlkXSk7XHJcblxyXG4gICAgICAgIC8v5Yib5bu65L+d5a2Y57uT5p6c5a2Y5YKo6YC76L6RXHJcbiAgICAgICAgY29uc3QgaGFuZGxlQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IGlucHV0VmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5a2Y5Zyo6YeN5ZCN55qE5rWL6K+V57uT5p6cXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHRzID0gY3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzIHx8IFtdO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vIOajgOafpeS4pOS4qklE5piv5ZCm6YeN5aSNXHJcbiAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gZXhpc3RpbmdSZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBjdXJyZW50SWQpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g6YeN5ZCN5pu/5o2iXHJcbiAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2UoJ+ivpee6v+e8hklE5bey5L2/55So77yM5piv5ZCm6KaG55uW77yfJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtRGlhbG9nQ2FsbGJhY2soKCkgPT4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsOS4tOaXtua1i+ivlee7k+aenOeahOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRUZXN0UmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZW1wVGVzdFJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw5b2T5YmN6aG555uu55qE5rWL6K+V57uT5p6cXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcCA9PT0gY3VycmVudFByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOenu+mZpOaXp+eahOa1i+ivlee7k+aenOW5tua3u+WKoOaWsOeahFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSZXN1bHRzID0gZXhpc3RpbmdSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0Lm5hbWUgIT09IGN1cnJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0czogWy4uLm5ld1Jlc3VsdHMsIHVwZGF0ZWRUZXN0UmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VEaXNwbGF5U3RvcmUuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5uYXZpZ2F0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50Vmlldygnc2F2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2V0U2hvd0NvbmZpcm1EaWFsb2codHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8g5pu05paw5Li05pe25rWL6K+V57uT5p6c55qE5ZCN56ew5bm25L+d5a2Y5Yiw6aG555uu5LitXHJcbiAgICAgICAgICAgIGlmICh0ZW1wVGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RSZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGVtcFRlc3RSZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvLyDmm7TmlrDlvZPliY3pobnnm67nmoRjYWJsZUlkcy5uYW1l5Li65LiL5LiA5LiqSURcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnByb2plY3RzLmZpbmRJbmRleChwID0+IHAgPT09IGN1cnJlbnRQcm9qZWN0KTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mm7TmlrDmtYvor5Xnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0czogWy4uLihjdXJyZW50UHJvamVjdC50ZXN0UmVzdWx0cyB8fCBbXSksIHVwZGF0ZWRUZXN0UmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubmF2aWdhdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5LiqSURcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SWQgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SWQgPSBpbnB1dFZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SWQpIHJldHVybiBjdXJyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDojrflj5bmnIDlkI7kuIDkuKrlrZfnrKZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdENoYXIgPSBjdXJyZW50SWQuc2xpY2UoLTEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXggPSBjdXJyZW50SWQuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5pyA5ZCO5LiA5Liq5a2X56ym5piv5pWw5a2XXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxkLy50ZXN0KGxhc3RDaGFyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjdXJyZW50SWQubWF0Y2goL14oLio/KShcXGQrKSQvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bVByZWZpeCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoWzJdKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke251bVByZWZpeH0ke251bWJlci50b1N0cmluZygpLnBhZFN0YXJ0KG1hdGNoWzJdLmxlbmd0aCwgJzAnKX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnIDlkI7kuIDkuKrlrZfnrKbmmK/lrZfmr41cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9bQS1aYS16XS8udGVzdChsYXN0Q2hhcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShsYXN0Q2hhci5jaGFyQ29kZUF0KDApICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzotoXov4da5oiWeu+8jOWbnuWIsEHmiJZhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxhc3RDaGFyID09PSAnWicgJiYgbmV4dENoYXIgPiAnWicpIHx8IChsYXN0Q2hhciA9PT0gJ3onICYmIG5leHRDaGFyID4gJ3onKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VDaGFyID0gbGFzdENoYXIgPT09ICdaJyA/ICdBJyA6ICdhJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7YmFzZUNoYXJ9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtuZXh0Q2hhcn1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN6aG555uu55qE5omA5pyJY2FibGVJZHNcclxuICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkcyA9IGN1cnJlbnRQcm9qZWN0Py5jYWJsZUlkcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gZ2V0Q3VycmVudENhYmxlSWQoKS5pZDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPquabtOaWsOmAieS4reeahElE77yM5L+d55WZ5YW25LuWSUTkuI3lj5hcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkQ2FibGVJZHMgPSBjdXJyZW50Q2FibGVJZHMubWFwKGNhYmxlID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZS5pZCA9PT0gc2VsZWN0ZWRJZCA/IHsgLi4uY2FibGUsIG5hbWU6IG5leHRJZCB9IDogY2FibGVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6aG555uuXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdChjdXJyZW50SW5kZXgsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVJZHM6IHVwZGF0ZWRDYWJsZUlkc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NhdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYW5kbGVDb21wbGV0ZTIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IGlucHV0VmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SWQyID0gaW5wdXRWYWx1ZTIudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgLy8g5qOA5p+l5Lik5LiqSUTmmK/lkKbnm7jlkIxcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJZCA9PT0gY3VycmVudElkMikge1xyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2UoJ+i+k+WFpei+k+WHuklE5LiN6IO955u45ZCM77yM6K+35qOA5p+lJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtRGlhbG9nQ2FsbGJhY2soKCkgPT4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2V0U2hvd0NvbmZpcm1EaWFsb2codHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOajgOafpeaYr+WQpuWtmOWcqOmHjeWQjeeahOa1i+ivlee7k+aenFxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIOajgOafpeS4pOS4qklE5piv5ZCm6YeN5aSNXHJcbiAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlMSA9IGV4aXN0aW5nUmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQubmFtZSA9PT0gY3VycmVudElkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUyID0gZXhpc3RpbmdSZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBjdXJyZW50SWQyKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDdXJyZW50VGVzdENvbmZpZygpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlNb2RlID0gY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRHVwbGljYXRlMSB8fCBpc0R1cGxpY2F0ZTIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZTEpIG1lc3NhZ2UucHVzaChg57q/57yGSUQgJHtjdXJyZW50SWR9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEdXBsaWNhdGUyKSBtZXNzYWdlLnB1c2goYOe6v+e8hklEICR7Y3VycmVudElkMn1gKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2UoYCR7bWVzc2FnZS5qb2luKCcg5ZKMICcpfeW3suS9v+eUqO+8jOaYr+WQpuimhueblu+8n2ApO1xyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ0NhbGxiYWNrKCgpID0+ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDkuLTml7bmtYvor5Xnu5PmnpznmoTlkI3np7BcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVGVzdFJlc3VsdDEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRlbXBUZXN0UmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bmFtZTogaXNNdWx0aU1vZGUgPyBjdXJyZW50SWQyIDogY3VycmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZCA6IGN1cnJlbnRJZDIsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RSZXN1bHQyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZW1wVGVzdFJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZDIgOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dG5hbWU6IGlzTXVsdGlNb2RlID8gY3VycmVudElkIDogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDlvZPliY3pobnnm67nmoTmtYvor5Xnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5wcm9qZWN0cy5maW5kSW5kZXgocCA9PiBwID09PSBjdXJyZW50UHJvamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g56e76Zmk5pen55qE5rWL6K+V57uT5p6c5bm25re75Yqg5paw55qEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Jlc3VsdHMgPSBleGlzdGluZ1Jlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lICE9PSBjdXJyZW50SWQgJiYgcmVzdWx0Lm5hbWUgIT09IGN1cnJlbnRJZDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdChjdXJyZW50SW5kZXgsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzOiBbLi4ubmV3UmVzdWx0cywgdXBkYXRlZFRlc3RSZXN1bHQxLCB1cGRhdGVkVGVzdFJlc3VsdDJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VEaXNwbGF5U3RvcmUuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5uYXZpZ2F0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHQxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NhdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRTaG93Q29uZmlybURpYWxvZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOabtOaWsOS4tOaXtua1i+ivlee7k+aenOeahOWQjeensOW5tuS/neWtmOWIsOmhueebruS4rVxyXG4gICAgICAgICAgICBpZiAodGVtcFRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8g5Yib5bu65Lik5Liq5rWL6K+V57uT5p6cXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVGVzdFJlc3VsdDEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRlbXBUZXN0UmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bmFtZTogaXNNdWx0aU1vZGUgPyBjdXJyZW50SWQyIDogY3VycmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZCA6IGN1cnJlbnRJZDIsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RSZXN1bHQyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZW1wVGVzdFJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZDIgOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dG5hbWU6IGlzTXVsdGlNb2RlID8gY3VycmVudElkIDogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOabtOaWsOW9k+WJjemhueebrueahGNhYmxlSWRzLm5hbWXkuLrkuIvkuIDkuKpJRFxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcCA9PT0gY3VycmVudFByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL+abtOaWsOa1i+ivlee7k+aenFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzOiBbLi4uKGN1cnJlbnRQcm9qZWN0LnRlc3RSZXN1bHRzIHx8IFtdKSwgdXBkYXRlZFRlc3RSZXN1bHQxLHVwZGF0ZWRUZXN0UmVzdWx0Ml1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubmF2aWdhdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHQxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5LiqSURcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SWQgPSBnZXROZXh0SWQoZ2V0TmV4dElkKGlucHV0VmFsdWUudHJpbSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5LiqSUQyXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dElkMiA9IGdldE5leHRJZChnZXROZXh0SWQoaW5wdXRWYWx1ZTIudHJpbSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN6aG555uu55qE5omA5pyJY2FibGVJZHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2FibGVJZHMgPSBjdXJyZW50UHJvamVjdD8uY2FibGVJZHMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCkuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZDIgPSBnZXRDdXJyZW50Q2FibGVJZDIoKS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPquabtOaWsOmAieS4reeahElE77yM5L+d55WZ5YW25LuWSUTkuI3lj5hcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkQ2FibGVJZHMgPSBjdXJyZW50Q2FibGVJZHMubWFwKGNhYmxlID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZS5pZCA9PT0gc2VsZWN0ZWRJZCA/IHsgLi4uY2FibGUsIG5hbWU6IG5leHRJZCB9IDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlLmlkID09PSBzZWxlY3RlZElkMiA/IHsgLi4uY2FibGUsIG5hbWU6IG5leHRJZDIgfSA6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDpobnnm67vvIzmt7vliqDkuKTkuKrmtYvor5Xnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZUlkczogdXBkYXRlZENhYmxlSWRzLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NhdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAvLyDliJvlu7rmtYvor5Xnu5PmnpznmoTop4blm75cclxuICAgIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyUmVzdWx0TWFpbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlVHlwZSA9IHRlbXBUZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJzgwMDAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q29wcGVyUmVzdWx0TWFpbiB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gIC8+O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPE9MVFNSZXN1bHRNYWluIHRlc3RSZXN1bHQ9e3RlbXBUZXN0UmVzdWx0fSAvPjtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29mcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxPVERSUmVzdWx0TWFpbiB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gLz47XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q29wcGVyUmVzdWx0TWFpbiB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gLz47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCByZW5kZXJTZXROYW1lID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVUeXBlID0gdGVtcFRlc3RSZXN1bHQ/LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGU7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4oXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0xIHRleHQtd2hpdGUgdGV4dC1zbVwiPui+k+WHuuWFiee6pElEMTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcHgtNCB0ZXh0LWJsYWNrIG92ZXJmbG93LXgtYXV0byB3aGl0ZXNwYWNlLW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJbnB1dCgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTEgdGV4dC13aGl0ZSB0ZXh0LXNtXCI+6L6T5YWl5YWJ57qkSUQyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1bI2ZmZmZlMV0gcm91bmRlZC1zbSBweC00IHRleHQtYmxhY2sgb3ZlcmZsb3cteC1hdXRvIHdoaXRlc3BhY2Utbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWUyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZTIoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5wdXQoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvd0tleWJvYXJkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWN0aXZlSW5wdXQgPT09IDEgPyBpbnB1dFZhbHVlIDogaW5wdXRWYWx1ZTJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmFsdWUsIG5ld1Bvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJbnB1dCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlMihuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24obmV3UG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbWItNCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dLZXlib2FyZCh0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y5YWJ5qCH5L2N572uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3Nob3dLZXlib2FyZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbm9zYXZlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3RlbXBUZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlICE9PSAnY2ZwJyA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZXN1bHRUaXRsZUJhciB0aXRsZT1cIuacquS/neWtmOe7k+aenFwiIHRlc3RSZXN1bHQ9e3RlbXBUZXN0UmVzdWx0fSBiYWNrVG89XCJob21lXCIgdmlldz1cIm1haW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKDxSZXN1bHRUaXRsZUJhciAgdGl0bGU9XCIgXCIgdGVzdFJlc3VsdD17dGVtcFRlc3RSZXN1bHR9IGJhY2tUbz1cImhvbWVcIiB2aWV3PVwibWFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSZXN1bHRNYWluKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3NldG5hbWUnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZkNzczXSB0by1bI2U3YWEyOV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS/neWtmFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3NldG5hbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCLkv53lrZjnu5PmnpxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvPXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy5uYW1lIHx8ICdob21lJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXc9e3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/LnZpZXcgfHwgJ21haW4nfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIHAtMiBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyU2V0TmFtZSgpfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGVtcFRlc3RSZXN1bHQ/LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGUgPT09IFwiY2ZwXCIgPyAgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzaG93S2V5Ym9hcmQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29tcGxldGUyKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZkNzczXSB0by1bI2U3YWEyOV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDkv53lrZhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNob3dLZXlib2FyZCAmJiAoPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb21wbGV0ZSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3NhdmUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGVtcFRlc3RSZXN1bHQ/LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGUgIT09ICdjZnAnID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlc3VsdFRpdGxlQmFyICB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gYmFja1RvPVwicmVzdWx0XCIgdmlldz1cIm1haW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKDxSZXN1bHRUaXRsZUJhciAgdGl0bGU9XCIgXCIgdGVzdFJlc3VsdD17dGVtcFRlc3RSZXN1bHR9IGJhY2tUbz1cInJlc3VsdFwiIHZpZXc9XCJtYWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclJlc3VsdE1haW4oKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlVG8oJ2hvbWUnLCAnbWFpbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDkuLvpobVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gcmVuZGVyQ29udGVudCgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cclxuICAgICAgICAgICAge2NvbnRlbnR9XHJcbiAgICAgICAgICAgIHtzaG93Q29uZmlybURpYWxvZyAmJiAoXHJcbiAgICAgICAgICAgICAgICA8Q29uZmlybURpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e2NvbmZpcm1EaWFsb2dNZXNzYWdlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURpYWxvZ0NhbGxiYWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRTaG93Q29uZmlybURpYWxvZyhmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiU3RhdHVzQmFyIiwiUmVzdWx0VGl0bGVCYXIiLCJUaXRsZUJhciIsIkNvcHBlclJlc3VsdE1haW4iLCJPTFRTUmVzdWx0TWFpbiIsIk9URFJSZXN1bHRNYWluIiwiS2V5Ym9hcmQiLCJ1c2VEaXNwbGF5U3RvcmUiLCJnZXRBc3NldFVybCIsInVzZUF1ZGlvIiwiQ29uZmlybURpYWxvZyIsIm1lc3NhZ2UiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCIsImRpdiIsImNsYXNzTmFtZSIsImgzIiwiYnV0dG9uIiwib25DbGljayIsIlJlc3VsdEluZm8iLCJzaG93S2V5Ym9hcmQiLCJzZXRTaG93S2V5Ym9hcmQiLCJjdXJzb3JQb3NpdGlvbiIsInNldEN1cnNvclBvc2l0aW9uIiwiaW5wdXRWYWx1ZSIsInNldElucHV0VmFsdWUiLCJpbnB1dFZhbHVlMiIsInNldElucHV0VmFsdWUyIiwiYWN0aXZlSW5wdXQiLCJzZXRBY3RpdmVJbnB1dCIsInNob3dDb25maXJtRGlhbG9nIiwic2V0U2hvd0NvbmZpcm1EaWFsb2ciLCJjb25maXJtRGlhbG9nTWVzc2FnZSIsInNldENvbmZpcm1EaWFsb2dNZXNzYWdlIiwiY29uZmlybURpYWxvZ0NhbGxiYWNrIiwic2V0Q29uZmlybURpYWxvZ0NhbGxiYWNrIiwibmF2aWdhdGlvbiIsImdldFN0YXRlIiwidGVtcFRlc3RSZXN1bHQiLCJjdXJyZW50IiwicGFyYW1zIiwicGxheSIsImhhc1BsYXllZFNvdW5kIiwicHJldmlvdXMiLCJuYW1lIiwiQ29wcGVyUmVzdWx0U3RhdHVzIiwiQ0ZQUmVzdWx0U3RhdHVzIiwib2ZwUmVzdWx0U3RhdHVzIiwic2V0U3RhdGUiLCJnZXRDdXJyZW50UHJvamVjdCIsImdldEN1cnJlbnRDYWJsZUlkIiwiZ2V0Q3VycmVudENhYmxlSWQyIiwidXBkYXRlQ3VycmVudFZpZXciLCJnZXRDdXJyZW50VGVzdENvbmZpZyIsIm5hdmlnYXRlVG8iLCJzZXRUb2FzdE1lc3NhZ2UiLCJ1cGRhdGVQcm9qZWN0IiwiY3VycmVudFByb2plY3QiLCJ2aWV3IiwiY3VycmVudENhYmxlSWQiLCJjdXJyZW50Q2FibGVJZDIiLCJnZXROZXh0SWQiLCJjdXJyZW50SWQiLCJudW1NYXRjaCIsIm1hdGNoIiwicHJlZml4IiwibnVtIiwibmV4dE51bSIsIlN0cmluZyIsIk51bWJlciIsInBhZFN0YXJ0IiwibGVuZ3RoIiwibGV0dGVyTWF0Y2giLCJsZXR0ZXJzIiwibGV0dGVyQXJyYXkiLCJzcGxpdCIsImNhcnJ5IiwiaSIsImZyb21DaGFyQ29kZSIsImNoYXJDb2RlQXQiLCJ1bnNoaWZ0Iiwiam9pbiIsInRlc3Rjb25maWciLCJtb2R1bGVUeXBlIiwiaGFuZGxlQ29tcGxldGUiLCJ0cmltIiwiZXhpc3RpbmdSZXN1bHRzIiwidGVzdFJlc3VsdHMiLCJpc0R1cGxpY2F0ZSIsInNvbWUiLCJyZXN1bHQiLCJ1cGRhdGVkVGVzdFJlc3VsdCIsImN1cnJlbnRJbmRleCIsInByb2plY3RzIiwiZmluZEluZGV4IiwicCIsIm5ld1Jlc3VsdHMiLCJmaWx0ZXIiLCJuZXh0SWQiLCJsYXN0Q2hhciIsInNsaWNlIiwidGVzdCIsIm51bVByZWZpeCIsIm51bWJlciIsInBhcnNlSW50IiwidG9TdHJpbmciLCJuZXh0Q2hhciIsImJhc2VDaGFyIiwiY3VycmVudENhYmxlSWRzIiwiY2FibGVJZHMiLCJzZWxlY3RlZElkIiwiaWQiLCJ1cGRhdGVkQ2FibGVJZHMiLCJtYXAiLCJjYWJsZSIsImhhbmRsZUNvbXBsZXRlMiIsImN1cnJlbnRJZDIiLCJpc0R1cGxpY2F0ZTEiLCJpc0R1cGxpY2F0ZTIiLCJjdXJyZW50Q29uZmlnIiwiY2FibGVUeXBlIiwiaXNNdWx0aU1vZGUiLCJpbmNsdWRlcyIsInB1c2giLCJ1cGRhdGVkVGVzdFJlc3VsdDEiLCJpbnB1dG5hbWUiLCJvdXRuYW1lIiwidXBkYXRlZFRlc3RSZXN1bHQyIiwibmV4dElkMiIsInNlbGVjdGVkSWQyIiwicmVuZGVyQ29udGVudCIsInJlbmRlclJlc3VsdE1haW4iLCJ0ZXN0UmVzdWx0IiwicmVuZGVyU2V0TmFtZSIsImlucHV0IiwidHlwZSIsInZhbHVlIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJzZWxlY3Rpb25TdGFydCIsIm9uRm9jdXMiLCJzZXRTZWxlY3Rpb25SYW5nZSIsIm5ld1ZhbHVlIiwibmV3UG9zaXRpb24iLCJvbkNvbXBsZXRlIiwidGl0bGUiLCJiYWNrVG8iLCJjb250ZW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/ResultInfo.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/TestConfig.js":
/*!****************************************************!*\
!*** ./src/components/dsxpage/fluke/TestConfig.js ***!
\****************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TestConfig)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! uuid */ \"uuid\");\n/* harmony import */ var _MenuList_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./MenuList.js */ \"(pages-dir-node)/./src/components/dsxpage/fluke/MenuList.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, uuid__WEBPACK_IMPORTED_MODULE_7__, _MenuList_js__WEBPACK_IMPORTED_MODULE_8__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, uuid__WEBPACK_IMPORTED_MODULE_7__, _MenuList_js__WEBPACK_IMPORTED_MODULE_8__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\n\nfunction TestConfig() {\n const [selectedConfigId, setSelectedConfigId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const { getCurrentProject, navigation, navigateTo, updateCurrentView, goBack, setSelectedIndexes, updateProject, addProject, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n // 获取当前项目数据\n const currentProject = getCurrentProject();\n // 单多模判断\n const { getCurrentTestConfig } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState();\n const currentConfig = getCurrentTestConfig();\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n // 设置默认选中的配置\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"TestConfig.useEffect\": ()=>{\n // 优先使用导航参数中的配置ID\n const configIdFromParams = navigation.current.params?.selectedConfigId;\n if (configIdFromParams) {\n setSelectedConfigId(configIdFromParams);\n return;\n }\n // 如果没有参数,使用当前选中的配置索引\n const currentTestConfigIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.testConfigIndex;\n if (currentProject?.testConfigs && currentTestConfigIndex >= 0) {\n setSelectedConfigId(currentProject.testConfigs[currentTestConfigIndex].id);\n }\n // 确保导航历史正确记录\n if (navigation.current.name === 'testconfig' && navigation.current.view === 'main') {\n const current = navigation.current;\n const previous = navigation.previous;\n if (!previous || previous.name !== 'testconfig' || previous.view !== 'main') {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('testconfig', 'main', current.params);\n }\n }\n }\n }[\"TestConfig.useEffect\"], [\n currentProject,\n navigation.current.params\n ]);\n // 渲染主视图内容\n const renderMainContent = ()=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[490px] flex-1 bg-[#303040] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full overflow-y-auto space-y-2 pr-2\",\n children: currentProject?.testConfigs.map((config)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex items-center gap-4 cursor-pointer\",\n onClick: ()=>{\n setSelectedConfigId(config.id);\n // 保存选中的配置ID到导航参数\n updateCurrentView('main', {\n selectedConfigId: config.id\n });\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 border-2 border-gray-600 rounded-full flex items-center justify-center\",\n children: selectedConfigId === config.id && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-4 h-4 bg-blue-500 rounded-full\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 78,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 76,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1\",\n children: [\n config.moduleType === '8000' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 86,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 87,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.wireOrder\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 88,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 93,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 94,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 95,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n config.params.refJumper,\n \" 跳线参照\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 96,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'ofp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 101,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 102,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 103,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 83,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-400 text-sm absolute top-0 right-0\",\n children: config.modulelable\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 107,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 81,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 110,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 109,\n columnNumber: 29\n }, this)\n ]\n }, config.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 67,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 65,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 64,\n columnNumber: 13\n }, this);\n };\n // 渲染设置视图内容\n const renderSetupContent = ()=>{\n const currentConfig = currentProject?.testConfigs.find((config)=>config.id === selectedConfigId);\n if (!currentConfig) return null;\n const renderConfigContent = ()=>{\n switch(currentConfig.moduleType){\n case '8000':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-t-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'CABLE_TYPE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"电缆类型:\",\n currentConfig.params.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 147,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 149,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 148,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 138,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"NVP:根据电缆类型生成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 153,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 155,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 154,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 152,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 137,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-t-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'LIMIT_VALUE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"测试极限值:\",\n currentConfig.params.limitValue\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 169,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 171,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 170,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 160,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"存储绘图数据:开\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 175,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 177,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 176,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 174,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"HDTDR/HDTDX:仅限失败/通过\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 181,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 183,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 182,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 180,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 159,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'WIRE_ORDER',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"插座配置:\",\n currentConfig.params.wireOrder\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 196,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 198,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 197,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 187,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 136,\n columnNumber: 25\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-t-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: \"测试类型:智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 208,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 210,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 209,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 207,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"双向:关\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 214,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 216,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 215,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 213,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 206,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'FIBER_TYPE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"光纤类型:\",\n currentConfig.params.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 229,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 231,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 230,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 220,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-t-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'CFP_LIMIT',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"测试极限值:\",\n currentConfig.params.limitValue\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 244,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 246,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 245,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 235,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l \",\n children: [\n \"参照方法:\",\n currentConfig.params.refJumper,\n \" 跳线\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 250,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 252,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 251,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 249,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"连接器类型:LC\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 256,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 258,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 257,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 255,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center cursor-pointer \",\n onClick: ()=>updateCurrentView('cfp-conunt'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: [\n \"接线/接头的数量:\",\n currentConfig.params.connectorCount,\n \"/\",\n currentConfig.params.spliceCount\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 262,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 264,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 263,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 261,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 234,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 205,\n columnNumber: 25\n }, this);\n case 'ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-t-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: \"测试类型:自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 275,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 277,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 276,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 274,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l \",\n children: \"前导补偿:开\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 281,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 282,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 280,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l \",\n children: [\n \"波长:\",\n currentConfig.params.cableType.includes('OM') ? '850 nm、1310nm' : '1310nm、1550nm'\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 287,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 288,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 286,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 273,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'FIBER_TYPE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"光纤类型:\",\n currentConfig.params.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 302,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 304,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 303,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 293,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'OFP_LIMIT',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"测试极限值:\",\n currentConfig.params.limitValue\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 316,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 318,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 317,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 307,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 272,\n columnNumber: 25\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full bg-gradient-to-b from-[#c6c3c6] to-[#c6c3c6] rounded-sm p-4 shadow-lg flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4 cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'MODULE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black font-bold text-lg\",\n children: [\n \"模块:\",\n currentConfig.modulelable\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 340,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-5 h-5 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 342,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 341,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 331,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-auto\",\n children: renderConfigContent()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 345,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 330,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 329,\n columnNumber: 13\n }, this);\n };\n // 渲染标题栏\n const renderTitleBar = ()=>{\n const { view } = navigation.current;\n const handleBack = ()=>{\n if (view === 'setup') {\n updateCurrentView('main');\n } else {\n goBack();\n }\n };\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"更改测试\",\n backTo: navigation.previous?.name || 'home',\n view: navigation.previous?.view || 'main',\n params: navigation.previous?.params || {},\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 368,\n columnNumber: 21\n }, this);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"测试设置\",\n backTo: navigation.previous?.name || 'testconfig',\n view: navigation.previous?.view || 'main',\n params: navigation.previous?.params || {},\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 378,\n columnNumber: 21\n }, this);\n case 'cfp-conunt':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \" \",\n view: 'setup',\n params: navigation.previous?.params || {}\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 388,\n columnNumber: 21\n }, this);\n }\n };\n // 渲染底部栏\n const renderFooter = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // 创建新的测试配置\n const newConfig = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_7__.v4)(),\n moduleType: '8000',\n modulelable: 'DSX-8000',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B',\n refJumper: '1',\n spliceCount: '0',\n connectorCount: '2'\n }\n };\n // 更新项目,添加新的测试配置\n const updatedProject = {\n ...currentProject,\n testConfigs: [\n ...currentProject.testConfigs,\n newConfig\n ]\n };\n updateProject(_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.projectIndex, updatedProject);\n // 设置新配置为选中状态并保存到导航参数\n setSelectedConfigId(newConfig.id);\n updateCurrentView('setup', {\n selectedConfigId: newConfig.id\n });\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"新测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 405,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n if (!selectedConfigId) {\n setToastMessage('请先选择一个测试配置');\n return;\n }\n // 保存选中的配置ID到导航参数\n updateCurrentView('setup', {\n selectedConfigId: selectedConfigId\n });\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"编辑\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 437,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n if (!selectedConfigId) {\n setToastMessage('请先选择一个测试配置');\n return;\n }\n const configIndex = currentProject.testConfigs.findIndex((config)=>config.id === selectedConfigId);\n setSelectedIndexes({\n testConfigIndex: configIndex\n });\n navigateTo('home', 'main');\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"使用所选\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 450,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 404,\n columnNumber: 21\n }, this);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // 保存配置并返回主视图\n updateCurrentView('main', {\n selectedConfigId: selectedConfigId\n });\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 471,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 470,\n columnNumber: 21\n }, this);\n case 'cfp-conunt':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // 保存配置并返回主视图\n updateCurrentView('setup', {\n selectedConfigId: selectedConfigId\n });\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 485,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 484,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const renderCFPCONUNTContent = ()=>{\n const currentConfig = currentProject?.testConfigs.find((config)=>config.id === selectedConfigId);\n if (!currentConfig) return null;\n const handleValueChange = (field, value)=>{\n const currentConfig = currentProject?.testConfigs.find((config)=>config.id === selectedConfigId);\n if (!currentConfig) return;\n // 更新当前配置的参数\n const updatedConfig = {\n ...currentConfig,\n params: {\n ...currentConfig.params,\n [field]: value\n }\n };\n // 更新项目中的测试配置\n const updatedProject = {\n ...currentProject,\n testConfigs: currentProject.testConfigs.map((config)=>config.id === selectedConfigId ? updatedConfig : config)\n };\n // 调用displayStore的updateProject方法更新状态\n updateProject(_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.projectIndex, updatedProject);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#0f172a] flex flex-col relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/olts-weldingPointSet.png`),\n alt: \"CFPCOUNUNT\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 539,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 538,\n columnNumber: 17\n }, this),\n currentConfig.params.connectorCount > 2 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-56.5 pt-45\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/icon-connector.svg`),\n alt: \"connector\",\n width: 30,\n height: 30,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 550,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.connectorCount - 2\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 557,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 549,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 548,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-43 pt-45\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/icon-connector.svg`),\n alt: \"connector\",\n width: 30,\n height: 30,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 564,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.connectorCount - 2\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 571,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 563,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 562,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 547,\n columnNumber: 62\n }, this),\n currentConfig.params.spliceCount > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-57 pt-65\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 rounded-full bg-[#104878]\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 580,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.spliceCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 581,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 579,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 578,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-44 pt-65\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 rounded-full bg-[#104878]\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 588,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.spliceCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 589,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 587,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 586,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 577,\n columnNumber: 59\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex flex-col gap-10 pl-75 pt-30\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n min: \"2\",\n max: \"20\",\n defaultValue: currentConfig.params.connectorCount,\n onChange: (e)=>handleValueChange('connectorCount', e.target.value),\n onKeyDown: (e)=>e.preventDefault(),\n className: \"w-16 h-8 px-2 bg-[#104878] rounded text-center focus:outline-none focus:ring-2 focus:ring-[#0ff] text-white\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 598,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-4 text-base font-roboto select-none text-black\",\n children: \"全部连接\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 607,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 597,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n min: \"0\",\n max: \"18\",\n defaultValue: currentConfig.params.spliceCount,\n onChange: (e)=>handleValueChange('spliceCount', e.target.value),\n onKeyDown: (e)=>e.preventDefault(),\n className: \"w-16 h-8 px-2 bg-[#104878] rounded text-center focus:outline-none focus:ring-2 focus:ring-[#0ff] text-white\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 610,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-4 text-base font-roboto select-none text-black\",\n children: \"接头\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 619,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 609,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n min: \"1\",\n max: \"1\",\n defaultValue: currentConfig.params.refJumper,\n onChange: (e)=>handleValueChange('refJumper', e.target.value),\n onKeyDown: (e)=>e.preventDefault(),\n className: \"w-16 h-8 px-2 bg-[#104878] rounded text-center focus:outline-none focus:ring-2 focus:ring-[#0ff] text-white\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 622,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-4 text-base font-roboto select-none text-black\",\n children: \"跳线参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 631,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 621,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 596,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 537,\n columnNumber: 13\n }, this);\n };\n // 渲染内容\n const renderContent = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'main':\n return renderMainContent();\n case 'setup':\n return renderSetupContent();\n case 'cfp-conunt':\n return renderCFPCONUNTContent();\n default:\n return renderMainContent();\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 656,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/TestConfig.js\",\n lineNumber: 655,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvVGVzdENvbmZpZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDcEI7QUFDb0I7QUFDRjtBQUNNO0FBQ0o7QUFDZjtBQUNDO0FBQ087QUFJN0IsU0FBU1k7SUFDcEIsTUFBTSxDQUFDQyxrQkFBa0JDLG9CQUFvQixHQUFHYiwrQ0FBUUEsQ0FBQztJQUN6RCxNQUFNLEVBQ0ZjLGlCQUFpQixFQUNqQkMsVUFBVSxFQUNWQyxVQUFVLEVBQ1ZDLGlCQUFpQixFQUNqQkMsTUFBTSxFQUNOQyxrQkFBa0IsRUFDbEJDLGFBQWEsRUFDYkMsVUFBVSxFQUNWQyxlQUFlLEVBQ2xCLEdBQUdoQiwrREFBZUE7SUFFbkIsV0FBVztJQUNYLE1BQU1pQixpQkFBaUJUO0lBRXZCLFFBQVE7SUFDUixNQUFNLEVBQUVVLG9CQUFvQixFQUFFLEdBQUdsQixvRUFBd0I7SUFDekQsTUFBTW9CLGdCQUFnQkY7SUFDdEIsTUFBTUcsWUFBWUQsY0FBY0UsTUFBTSxDQUFDRCxTQUFTO0lBQ2hELE1BQU1FLGNBQWNGLFVBQVVHLFFBQVEsQ0FBQztJQUV2QyxZQUFZO0lBQ1o3QixnREFBU0E7Z0NBQUM7WUFDRixpQkFBaUI7WUFDakIsTUFBTThCLHFCQUFxQmhCLFdBQVdpQixPQUFPLENBQUNKLE1BQU0sRUFBRWhCO1lBQ3RELElBQUltQixvQkFBb0I7Z0JBQ3BCbEIsb0JBQW9Ca0I7Z0JBQ3BCO1lBQ0o7WUFFQSxxQkFBcUI7WUFDckIsTUFBTUUseUJBQXlCM0Isb0VBQXdCLEdBQUc0QixlQUFlLENBQUNDLGVBQWU7WUFDekYsSUFBSVosZ0JBQWdCYSxlQUFlSCwwQkFBMEIsR0FBRztnQkFDNURwQixvQkFBb0JVLGVBQWVhLFdBQVcsQ0FBQ0gsdUJBQXVCLENBQUNJLEVBQUU7WUFDN0U7WUFFQSxhQUFhO1lBQ2IsSUFBSXRCLFdBQVdpQixPQUFPLENBQUNNLElBQUksS0FBSyxn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Q0ksOERBQUNDO1FBQUlDLFdBQVU7OzBCQUNYLDhEQUFDeEMsaUVBQVNBOzs7OztZQUNUNEQ7WUFDQThCO1lBQ0ExQjs7Ozs7OztBQUdiIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvVGVzdENvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IEltYWdlIGZyb20gJ25leHQvaW1hZ2UnO1xyXG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvU3RhdHVzQmFyJztcclxuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvVGl0bGVCYXInO1xyXG5pbXBvcnQgU3ViVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdWJUaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IE1lbnVMaXN0IGZyb20gJy4vTWVudUxpc3QuanMnO1xyXG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJ0AvdXRpbHMvYXNzZXQnO1xyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXN0Q29uZmlnKCkge1xyXG4gICAgY29uc3QgW3NlbGVjdGVkQ29uZmlnSWQsIHNldFNlbGVjdGVkQ29uZmlnSWRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCB7IFxyXG4gICAgICAgIGdldEN1cnJlbnRQcm9qZWN0LFxyXG4gICAgICAgIG5hdmlnYXRpb24sXHJcbiAgICAgICAgbmF2aWdhdGVUbyxcclxuICAgICAgICB1cGRhdGVDdXJyZW50VmlldyxcclxuICAgICAgICBnb0JhY2ssXHJcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzLFxyXG4gICAgICAgIHVwZGF0ZVByb2plY3QsXHJcbiAgICAgICAgYWRkUHJvamVjdCxcclxuICAgICAgICBzZXRUb2FzdE1lc3NhZ2VcclxuICAgIH0gPSB1c2VEaXNwbGF5U3RvcmUoKTtcclxuXHJcbiAgICAvLyDojrflj5blvZPliY3pobnnm67mlbDmja5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuXHJcbiAgICAvLyDljZXlpJrmqKHliKTmlq1cclxuICAgIGNvbnN0IHsgZ2V0Q3VycmVudFRlc3RDb25maWcgfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IGdldEN1cnJlbnRUZXN0Q29uZmlnKCk7XHJcbiAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGU7XHJcbiAgICBjb25zdCBpc011bHRpTW9kZSA9IGNhYmxlVHlwZS5pbmNsdWRlcygnT00nKTtcclxuXHJcbiAgICAvLyDorr7nva7pu5jorqTpgInkuK3nmoTphY3nva5cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOS8mOWFiOS9v+eUqOWvvOiIquWPguaVsOS4reeahOmFjee9rklEXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0lkRnJvbVBhcmFtcyA9IG5hdmlnYXRpb24uY3VycmVudC5wYXJhbXM/LnNlbGVjdGVkQ29uZmlnSWQ7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdJZEZyb21QYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQ29uZmlnSWQoY29uZmlnSWRGcm9tUGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g5aaC5p6c5rKh5pyJ5Y+C5pWw77yM5L2/55So5b2T5YmN6YCJ5Lit55qE6YWN572u57Si5byVXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUZXN0Q29uZmlnSW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMudGVzdENvbmZpZ0luZGV4O1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzICYmIGN1cnJlbnRUZXN0Q29uZmlnSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDb25maWdJZChjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlnc1tjdXJyZW50VGVzdENvbmZpZ0luZGV4XS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOehruS/neWvvOiIquWOhuWPsuato+ehruiusOW9lVxyXG4gICAgICAgICAgICBpZiAobmF2aWdhdGlvbi5jdXJyZW50Lm5hbWUgPT09ICd0ZXN0Y29uZmlnJyAmJiBuYXZpZ2F0aW9uLmN1cnJlbnQudmlldyA9PT0gJ21haW4nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBuYXZpZ2F0aW9uLnByZXZpb3VzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91cyB8fCBwcmV2aW91cy5uYW1lICE9PSAndGVzdGNvbmZpZycgfHwgcHJldmlvdXMudmlldyAhPT0gJ21haW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGVUbygndGVzdGNvbmZpZycsICdtYWluJywgY3VycmVudC5wYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgW2N1cnJlbnRQcm9qZWN0LCBuYXZpZ2F0aW9uLmN1cnJlbnQucGFyYW1zXSk7XHJcblxyXG4gICAgLy8g5riy5p+T5Li76KeG5Zu+5YaF5a65XHJcbiAgICBjb25zdCByZW5kZXJNYWluQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzQ5MHB4XSBmbGV4LTEgYmctWyMzMDMwNDBdIHAtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgb3ZlcmZsb3cteS1hdXRvIHNwYWNlLXktMiBwci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRQcm9qZWN0Py50ZXN0Q29uZmlncy5tYXAoKGNvbmZpZykgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjb25maWcuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVsxMDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXggaXRlbXMtY2VudGVyIGdhcC00IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENvbmZpZ0lkKGNvbmZpZy5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y6YCJ5Lit55qE6YWN572uSUTliLDlr7zoiKrlj4LmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicsIHsgc2VsZWN0ZWRDb25maWdJZDogY29uZmlnLmlkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTYgaC02IGJvcmRlci0yIGJvcmRlci1ncmF5LTYwMCByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRDb25maWdJZCA9PT0gY29uZmlnLmlkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTQgaC00IGJnLWJsdWUtNTAwIHJvdW5kZWQtZnVsbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5tb2R1bGVUeXBlID09PSAnODAwMCcgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy53aXJlT3JkZXJ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5tb2R1bGVUeXBlID09PSAnY2ZwJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+5pm66IO96L+c56uvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5saW1pdFZhbHVlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMucmVmSnVtcGVyfSDot7Pnur/lj4Lnhac8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLm1vZHVsZVR5cGUgPT09ICdvZnAnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7oh6rliqhPVERSPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5saW1pdFZhbHVlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNDAwIHRleHQtc20gYWJzb2x1dGUgdG9wLTAgcmlnaHQtMFwiPntjb25maWcubW9kdWxlbGFibGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T6K6+572u6KeG5Zu+5YaF5a65XHJcbiAgICBjb25zdCByZW5kZXJTZXR1cENvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0Q29uZmlncy5maW5kKFxyXG4gICAgICAgICAgICBjb25maWcgPT4gY29uZmlnLmlkID09PSBzZWxlY3RlZENvbmZpZ0lkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKCFjdXJyZW50Q29uZmlnKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgcmVuZGVyQ29uZmlnQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50Q29uZmlnLm1vZHVsZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJzgwMDAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtdC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ21lbnVsaXN0JywgJ3NldHVwJywgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVUeXBlOiAnQ0FCTEVfVFlQRScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVmlldzogJ3NldHVwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgZm9udC1ib2xkXCI+55S157yG57G75Z6L77yae2N1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSByb3VuZGVkLWItc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiPk5WUO+8muagueaNrueUtee8huexu+Wei+eUn+aIkDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdtZW51bGlzdCcsICdzZXR1cCcsIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51VHlwZTogJ0xJTUlUX1ZBTFVFJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnSWQ6IHNlbGVjdGVkQ29uZmlnSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG86ICd0ZXN0Y29uZmlnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7mtYvor5XmnoHpmZDlgLzvvJp7Y3VycmVudENvbmZpZy5wYXJhbXMubGltaXRWYWx1ZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSAgcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiPuWtmOWCqOe7mOWbvuaVsOaNru+8muW8gDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZmZmZl0gdG8tWyNmZmZmZmZdIHJvdW5kZWQtYi1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sXCI+SERURFIvSERURFjvvJrku4XpmZDlpLHotKUv6YCa6L+HPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ21lbnVsaXN0JywgJ3NldHVwJywgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdXSVJFX09SREVSJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7mj5LluqfphY3nva7vvJp7Y3VycmVudENvbmZpZy5wYXJhbXMud2lyZU9yZGVyfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtdC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sIGZvbnQtYm9sZFwiPua1i+ivleexu+Wei++8muaZuuiDvei/nOerrzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZmZmZl0gdG8tWyNmZmZmZmZdIHJvdW5kZWQtYi1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sXCI+5Y+M5ZCR77ya5YWzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ21lbnVsaXN0JywgJ3NldHVwJywgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdGSUJFUl9UWVBFJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7lhYnnuqTnsbvlnovvvJp7Y3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdtZW51bGlzdCcsICdzZXR1cCcsIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51VHlwZTogJ0NGUF9MSU1JVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVmlldzogJ3NldHVwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgZm9udC1ib2xkXCI+5rWL6K+V5p6B6ZmQ5YC877yae2N1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZmZmZmXSB0by1bI2ZmZmZmZl0gIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgXCI+5Y+C54Wn5pa55rOV77yae2N1cnJlbnRDb25maWcucGFyYW1zLnJlZkp1bXBlcn0g6Lez57q/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZmZmZmXSB0by1bI2ZmZmZmZl0gIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxcIj7ov57mjqXlmajnsbvlnovvvJpMQzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZmZmZl0gdG8tWyNmZmZmZmZdIHJvdW5kZWQtYi1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlciBcIiBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnY2ZwLWNvbnVudCcpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiID7mjqXnur8v5o6l5aS055qE5pWw6YeP77yae2N1cnJlbnRDb25maWcucGFyYW1zLmNvbm5lY3RvckNvdW50fS97Y3VycmVudENvbmZpZy5wYXJhbXMuc3BsaWNlQ291bnR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvZnAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl0gcm91bmRlZC10LXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgZm9udC1ib2xkXCI+5rWL6K+V57G75Z6L77ya6Ieq5YqoT1REUjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZmZmZl0gdG8tWyNmZmZmZmZdIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgXCI+5YmN5a+86KGl5YG/77ya5byAPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPiAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSByb3VuZGVkLWItc20gIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBcIj7ms6Lplb/vvJp7Y3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpID8gJzg1MCBubeOAgTEzMTBubScgOiAnMTMxMG5t44CBMTU1MG5tJ308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPiAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ21lbnVsaXN0JywgJ3NldHVwJywgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdGSUJFUl9UWVBFJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7lhYnnuqTnsbvlnovvvJp7Y3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdtZW51bGlzdCcsICdzZXR1cCcsIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVUeXBlOiAnT0ZQX0xJTUlUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7mtYvor5XmnoHpmZDlgLzvvJp7Y3VycmVudENvbmZpZy5wYXJhbXMubGltaXRWYWx1ZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bIzMwMzA0MF0gcC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBiZy1ncmFkaWVudC10by1iIGZyb20tWyNjNmMzYzZdIHRvLVsjYzZjM2M2XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnbWVudWxpc3QnLCAnc2V0dXAnLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdNT0RVTEUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tUbzogJ3Rlc3Rjb25maWcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1ZpZXc6ICdzZXR1cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgZm9udC1ib2xkIHRleHQtbGdcIj7mqKHlnZfvvJp7Y3VycmVudENvbmZpZy5tb2R1bGVsYWJsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgaC01IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyQ29uZmlnQ29udGVudCgpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOa4suafk+agh+mimOagj1xyXG4gICAgY29uc3QgcmVuZGVyVGl0bGVCYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaGFuZGxlQmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZpZXcgPT09ICdzZXR1cCcpIHtcclxuICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ29CYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwi5pu05pS55rWL6K+VXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tUbz17bmF2aWdhdGlvbi5wcmV2aW91cz8ubmFtZSB8fCAnaG9tZSd9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3PXtuYXZpZ2F0aW9uLnByZXZpb3VzPy52aWV3IHx8ICdtYWluJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz17bmF2aWdhdGlvbi5wcmV2aW91cz8ucGFyYW1zIHx8IHt9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIua1i+ivleiuvue9rlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG89e25hdmlnYXRpb24ucHJldmlvdXM/Lm5hbWUgfHwgJ3Rlc3Rjb25maWcnfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldz17bmF2aWdhdGlvbi5wcmV2aW91cz8udmlldyB8fCAnbWFpbid9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e25hdmlnYXRpb24ucHJldmlvdXM/LnBhcmFtcyB8fCB7fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdjZnAtY29udW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIiBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldz17J3NldHVwJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz17bmF2aWdhdGlvbi5wcmV2aW91cz8ucGFyYW1zIHx8IHt9fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5bqV6YOo5qCPXHJcbiAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIm+W7uuaWsOeahOa1i+ivlemFjee9rlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVUeXBlOiAnODAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZWxhYmxlOiAnRFNYLTgwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0VmFsdWU6ICdUSUEgQ2F0IDYgQ2hhbm5lbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWJsZVR5cGU6ICdDYXQ2IFUvVVRQJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlcjogJ1Q1NjhCJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkp1bXBlcjogJzEnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlQ291bnQ6ICcwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RvckNvdW50OiAnMidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsOmhueebru+8jOa3u+WKoOaWsOeahOa1i+ivlemFjee9rlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQcm9qZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZ3M6IFsuLi5jdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncywgbmV3Q29uZmlnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdCh1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4LCB1cGRhdGVkUHJvamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6K6+572u5paw6YWN572u5Li66YCJ5Lit54q25oCB5bm25L+d5a2Y5Yiw5a+86Iiq5Y+C5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDb25maWdJZChuZXdDb25maWcuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdzZXR1cCcsIHsgc2VsZWN0ZWRDb25maWdJZDogbmV3Q29uZmlnLmlkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaWsOa1i+ivlVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkQ29uZmlnSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfor7flhYjpgInmi6nkuIDkuKrmtYvor5XphY3nva4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjpgInkuK3nmoTphY3nva5JROWIsOWvvOiIquWPguaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdzZXR1cCcsIHsgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjNjU2NTY1XSB0by1bIzMxMzQzMV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnvJbovpFcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZENvbmZpZ0lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6K+35YWI6YCJ5oup5LiA5Liq5rWL6K+V6YWN572uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnSW5kZXggPSBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9PiBjb25maWcuaWQgPT09IHNlbGVjdGVkQ29uZmlnSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhlcyh7IHRlc3RDb25maWdJbmRleDogY29uZmlnSW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygnaG9tZScsICdtYWluJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L2/55So5omA6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnc2V0dXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y6YWN572u5bm26L+U5Zue5Li76KeG5Zu+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ21haW4nLCB7IHNlbGVjdGVkQ29uZmlnSWQ6IHNlbGVjdGVkQ29uZmlnSWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnY2ZwLWNvbnVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjphY3nva7lubbov5Tlm57kuLvop4blm75cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50Vmlldygnc2V0dXAnLCB7IHNlbGVjdGVkQ29uZmlnSWQ6IHNlbGVjdGVkQ29uZmlnSWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVuZGVyQ0ZQQ09OVU5UQ29udGVudCA9ICgpID0+e1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBjdXJyZW50UHJvamVjdD8udGVzdENvbmZpZ3MuZmluZChcclxuICAgICAgICAgICAgY29uZmlnID0+IGNvbmZpZy5pZCA9PT0gc2VsZWN0ZWRDb25maWdJZFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICghY3VycmVudENvbmZpZykgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbmRsZVZhbHVlQ2hhbmdlID0gKGZpZWxkLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gY3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICBjb25maWcgPT4gY29uZmlnLmlkID09PSBzZWxlY3RlZENvbmZpZ0lkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcpIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOabtOaWsOW9k+WJjemFjee9rueahOWPguaVsFxyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcucGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF06IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDmm7TmlrDpobnnm67kuK3nmoTmtYvor5XphY3nva5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgICAgIHRlc3RDb25maWdzOiBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncy5tYXAoY29uZmlnID0+IFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pZCA9PT0gc2VsZWN0ZWRDb25maWdJZCA/IHVwZGF0ZWRDb25maWcgOiBjb25maWdcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOiwg+eUqGRpc3BsYXlTdG9yZeeahHVwZGF0ZVByb2plY3Tmlrnms5Xmm7TmlrDnirbmgIFcclxuICAgICAgICAgICAgdXBkYXRlUHJvamVjdCh1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4LCB1cGRhdGVkUHJvamVjdCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMwZjE3MmFdIGZsZXggZmxleC1jb2wgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvb2x0cy13ZWxkaW5nUG9pbnRTZXQucG5nYCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNGUENPVU5VTlRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWcucGFyYW1zLmNvbm5lY3RvckNvdW50ID4gMiAmJiAoPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgZmxleCBmbGV4LWNvbCBnYXAtMTAgcGwtNTYuNSBwdC00NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvaWNvbi1jb25uZWN0b3Iuc3ZnYCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJjb25uZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezMwfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdHJhbnNmb3JtIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZy5wYXJhbXMuY29ubmVjdG9yQ291bnQtMn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGZsZXggZmxleC1jb2wgZ2FwLTEwIHBsLTQzIHB0LTQ1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoYC9pY29uLWNvbm5lY3Rvci5zdmdgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cImNvbm5lY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MzB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezMwfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtd2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q29uZmlnLnBhcmFtcy5jb25uZWN0b3JDb3VudC0yfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2Pil9XHJcbiAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZy5wYXJhbXMuc3BsaWNlQ291bnQgPiAwICYmICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBmbGV4IGZsZXgtY29sIGdhcC0xMCBwbC01NyBwdC02NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTYgaC02IHJvdW5kZWQtZnVsbCBiZy1bIzEwNDg3OF1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtd2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q29uZmlnLnBhcmFtcy5zcGxpY2VDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGZsZXggZmxleC1jb2wgZ2FwLTEwIHBsLTQ0IHB0LTY1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNiBoLTYgcm91bmRlZC1mdWxsIGJnLVsjMTA0ODc4XVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIHRyYW5zZm9ybSAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC13aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWcucGFyYW1zLnNwbGljZUNvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2Pil9XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGdhcC0xMCBwbC03NSBwdC0zMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17Y3VycmVudENvbmZpZy5wYXJhbXMuY29ubmVjdG9yQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVZhbHVlQ2hhbmdlKCdjb25uZWN0b3JDb3VudCcsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMTYgaC04IHB4LTIgYmctWyMxMDQ4NzhdIHJvdW5kZWQgdGV4dC1jZW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLVsjMGZmXSB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtNCB0ZXh0LWJhc2UgZm9udC1yb2JvdG8gc2VsZWN0LW5vbmUgdGV4dC1ibGFja1wiPuWFqOmDqOi/nuaOpTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjE4XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2N1cnJlbnRDb25maWcucGFyYW1zLnNwbGljZUNvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVWYWx1ZUNoYW5nZSgnc3BsaWNlQ291bnQnLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTE2IGgtOCBweC0yIGJnLVsjMTA0ODc4XSByb3VuZGVkIHRleHQtY2VudGVyIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1bIzBmZl0gdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1iYXNlIGZvbnQtcm9ib3RvIHNlbGVjdC1ub25lIHRleHQtYmxhY2tcIj7mjqXlpLQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2N1cnJlbnRDb25maWcucGFyYW1zLnJlZkp1bXBlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVmFsdWVDaGFuZ2UoJ3JlZkp1bXBlcicsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMTYgaC04IHB4LTIgYmctWyMxMDQ4NzhdIHJvdW5kZWQgdGV4dC1jZW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLVsjMGZmXSB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtNCB0ZXh0LWJhc2UgZm9udC1yb2JvdG8gc2VsZWN0LW5vbmUgdGV4dC1ibGFja1wiPui3s+e6v+WPgueFpzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG5cclxuICAgIH07XHJcbiAgICAvLyDmuLLmn5PlhoXlrrlcclxuICAgIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJTZXR1cENvbnRlbnQoKTtcclxuICAgICAgICAgICAgY2FzZSAnY2ZwLWNvbnVudCc6XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckNGUENPTlVOVENvbnRlbnQoKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNYWluQ29udGVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICB7cmVuZGVyVGl0bGVCYXIoKX1cclxuICAgICAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cclxuICAgICAgICAgICAge3JlbmRlckZvb3RlcigpfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiSW1hZ2UiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsIlN1YlRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwidjQiLCJ1dWlkdjQiLCJNZW51TGlzdCIsImdldEFzc2V0VXJsIiwiVGVzdENvbmZpZyIsInNlbGVjdGVkQ29uZmlnSWQiLCJzZXRTZWxlY3RlZENvbmZpZ0lkIiwiZ2V0Q3VycmVudFByb2plY3QiLCJuYXZpZ2F0aW9uIiwibmF2aWdhdGVUbyIsInVwZGF0ZUN1cnJlbnRWaWV3IiwiZ29CYWNrIiwic2V0U2VsZWN0ZWRJbmRleGVzIiwidXBkYXRlUHJvamVjdCIsImFkZFByb2plY3QiLCJzZXRUb2FzdE1lc3NhZ2UiLCJjdXJyZW50UHJvamVjdCIsImdldEN1cnJlbnRUZXN0Q29uZmlnIiwiZ2V0U3RhdGUiLCJjdXJyZW50Q29uZmlnIiwiY2FibGVUeXBlIiwicGFyYW1zIiwiaXNNdWx0aU1vZGUiLCJpbmNsdWRlcyIsImNvbmZpZ0lkRnJvbVBhcmFtcyIsImN1cnJlbnQiLCJjdXJyZW50VGVzdENvbmZpZ0luZGV4Iiwic2VsZWN0ZWRJbmRleGVzIiwidGVzdENvbmZpZ0luZGV4IiwidGVzdENvbmZpZ3MiLCJpZCIsIm5hbWUiLCJ2aWV3IiwicHJldmlvdXMiLCJyZW5kZXJNYWluQ29udGVudCIsImRpdiIsImNsYXNzTmFtZSIsIm1hcCIsImNvbmZpZyIsIm9uQ2xpY2siLCJtb2R1bGVUeXBlIiwibGltaXRWYWx1ZSIsIndpcmVPcmRlciIsInJlZkp1bXBlciIsIm1vZHVsZWxhYmxlIiwic3JjIiwiYWx0IiwiZmlsbCIsInJlbmRlclNldHVwQ29udGVudCIsImZpbmQiLCJyZW5kZXJDb25maWdDb250ZW50IiwibWVudVR5cGUiLCJiYWNrVG8iLCJiYWNrVmlldyIsImNvbm5lY3RvckNvdW50Iiwic3BsaWNlQ291bnQiLCJyZW5kZXJUaXRsZUJhciIsImhhbmRsZUJhY2siLCJ0aXRsZSIsIm9uQmFjayIsInJlbmRlckZvb3RlciIsImJ1dHRvbiIsIm5ld0NvbmZpZyIsInVwZGF0ZWRQcm9qZWN0IiwicHJvamVjdEluZGV4IiwiY29uZmlnSW5kZXgiLCJmaW5kSW5kZXgiLCJyZW5kZXJDRlBDT05VTlRDb250ZW50IiwiaGFuZGxlVmFsdWVDaGFuZ2UiLCJmaWVsZCIsInZhbHVlIiwidXBkYXRlZENvbmZpZyIsInNpemVzIiwid2lkdGgiLCJoZWlnaHQiLCJzcGFuIiwiaW5wdXQiLCJ0eXBlIiwibWluIiwibWF4IiwiZGVmYXVsdFZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwib25LZXlEb3duIiwicHJldmVudERlZmF1bHQiLCJyZW5kZXJDb250ZW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/TestConfig.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/Testing.js":
/*!*************************************************!*\
!*** ./src/components/dsxpage/fluke/Testing.js ***!
\*************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Testing)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! uuid */ \"uuid\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_5__, uuid__WEBPACK_IMPORTED_MODULE_6__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_5__, uuid__WEBPACK_IMPORTED_MODULE_6__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n// 计算电阻余量的函数\nfunction calculateResistanceMargin(data, limitdata, limitValue) {\n try {\n // 判断测试类型\n const isPoETest = limitValue.includes('+PoE');\n const isALLTest = limitValue.includes('+ALL');\n let minMargin = Infinity;\n // 回路电阻计算\n const loopResistanceData = data?.performance?.data?.['Loop Resistance (Ω)'];\n const loopResistanceLimit = limitdata?.['Loop Resistance (Ω)']?.['PAIRLimit (Ω)'];\n if (loopResistanceData && loopResistanceLimit) {\n const pairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of pairs){\n const actualValues = loopResistanceData[pair];\n if (actualValues && Array.isArray(actualValues)) {\n for(let i = 0; i < actualValues.length && i < loopResistanceLimit.length; i++){\n const actualValue = actualValues[i];\n const limitVal = loopResistanceLimit[i];\n if (actualValue !== undefined && actualValue !== null && limitVal !== undefined && limitVal !== null) {\n const margin = limitVal - Math.abs(actualValue);\n minMargin = Math.min(minMargin, margin);\n }\n }\n }\n }\n }\n // 线对UBL计算(仅在+PoE或+ALL测试时)\n if (isPoETest || isALLTest) {\n const ublData = data?.performance?.data?.['UBL (Ω)'];\n const ublLimit = limitdata?.['UBL (Ω)']?.['PAIRLimit (Ω)'];\n if (ublData && ublLimit) {\n const pairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of pairs){\n const actualValues = ublData[pair];\n if (actualValues && Array.isArray(actualValues)) {\n for(let i = 0; i < actualValues.length && i < ublLimit.length; i++){\n const actualValue = actualValues[i];\n const limitVal = ublLimit[i];\n if (actualValue !== undefined && actualValue !== null && limitVal !== undefined && limitVal !== null) {\n const margin = limitVal - Math.abs(actualValue);\n minMargin = Math.min(minMargin, margin);\n }\n }\n }\n }\n }\n }\n // P2PUBL计算(仅在+PoE或+ALL测试时)\n if (isPoETest || isALLTest) {\n const p2pUblData = data?.performance?.data?.['P2PUBL (Ω)'];\n const p2pUblLimit = limitdata?.['P2PUBL (Ω)']?.['PAIRLimit (Ω)'];\n if (p2pUblData && p2pUblLimit) {\n const pairs = [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ];\n for (const pair of pairs){\n const actualValues = p2pUblData[pair];\n if (actualValues && Array.isArray(actualValues)) {\n for(let i = 0; i < actualValues.length && i < p2pUblLimit.length; i++){\n const actualValue = actualValues[i];\n const limitVal = p2pUblLimit[i];\n if (actualValue !== undefined && actualValue !== null && limitVal !== undefined && limitVal !== null) {\n const margin = limitVal - Math.abs(actualValue);\n minMargin = Math.min(minMargin, margin);\n }\n }\n }\n }\n }\n }\n return minMargin === Infinity ? 0 : minMargin;\n } catch (error) {\n console.error('Error calculating resistance margin:', error);\n return 0;\n }\n}\nfunction Testing() {\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState().navigation.current;\n const { navigateTo, getCurrentTestConfig, getCurrentProject, getCurrentOperator, getCurrentCableId, getCurrentCableId2, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n const currentConfig = getCurrentTestConfig();\n const { connectionStatus, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n // 铜缆测试路径和状态\n const copperMainPathKey = connectionStatus?.mainPaths ? Object.keys(connectionStatus.mainPaths)[0] : null;\n const copperRemotePathKey = connectionStatus?.remotePaths ? Object.keys(connectionStatus.remotePaths)[0] : null;\n const coppermainend = copperMainPathKey ? connectionStatus.mainPaths[copperMainPathKey]?.end : null;\n const copperremoteend = copperRemotePathKey ? connectionStatus.remotePaths[copperRemotePathKey]?.end : null;\n const copperRefStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.copper?.status || null;\n // CFP测试路径和状态\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n const cfpRefStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.cfp?.status || null;\n const cfpRefConnectStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.cfp?.connectStatus || null;\n const cfpInResult = isMultiMode ? connectionStatus?.CFPMainIn : connectionStatus?.CFPMainOut;\n const cfpOutResult = isMultiMode ? connectionStatus?.CFPMainOut : connectionStatus?.CFPMainIn;\n // 获取isMultiMode\n const wavelength1 = isMultiMode ? '850' : '1310';\n const wavelength2 = isMultiMode ? '1300' : '1550';\n // OFP测试路径和状态\n const ofpMainEnd = copperMainPathKey ? connectionStatus.mainPaths[copperMainPathKey]?.end : null;\n const ofpRefStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.ofp?.status || null;\n const ofpRefConnectStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.ofp?.connectStatus || null;\n const [tempTestResult, setTempTestResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // 获取测试链路清洁状态\n const moduleType = currentConfig?.moduleType;\n // 检查路径中所有端口的清洁状态\n const checkPortsCleanStatus = (paths)=>{\n if (!paths || paths.length === 0) return false;\n // 检查每个端口的清洁状态\n const cleanPorts = paths.filter((portId)=>{\n const portElement = document.getElementById(portId);\n return portElement?.getAttribute('lcclean') === 'true';\n });\n // 返回已清洁的端口数量\n return cleanPorts.length;\n };\n let allPathsCleanStatus = {};\n let isAllPathsClean = 0; // 默认为0,表示全部未清洁\n // 只在模块类型为 cfp 或 ofp 时执行检测\n if (moduleType === 'cfp' || moduleType === 'ofp') {\n if (moduleType === 'cfp') {\n // CFP模块检测所有路径\n const mainInPaths = connectionStatus?.mainPaths?.['main-cfp-in']?.path || [];\n const mainOutPaths = connectionStatus?.mainPaths?.[isMultiMode ? 'main-cfp-mm-out' : 'main-cfp-sm-out']?.path || [];\n const remoteInPaths = connectionStatus?.remotePaths?.['remote-cfp-in']?.path || [];\n const remoteOutPaths = connectionStatus?.remotePaths?.[isMultiMode ? 'remote-cfp-mm-out' : 'remote-cfp-sm-out']?.path || [];\n // 获取每个路径的清洁端口数量\n const mainInClean = checkPortsCleanStatus(mainInPaths);\n const mainOutClean = checkPortsCleanStatus(mainOutPaths);\n const remoteInClean = checkPortsCleanStatus(remoteInPaths);\n const remoteOutClean = checkPortsCleanStatus(remoteOutPaths);\n // 计算总端口数和已清洁端口数\n const totalPorts = mainInPaths.length + mainOutPaths.length + remoteInPaths.length + remoteOutPaths.length;\n const cleanedPorts = mainInClean + mainOutClean + remoteInClean + remoteOutClean;\n // 设置清洁状态\n if (cleanedPorts === 0) isAllPathsClean = 0;\n else if (cleanedPorts < totalPorts) isAllPathsClean = 1;\n else if (cleanedPorts === totalPorts) isAllPathsClean = 2;\n allPathsCleanStatus = {\n mainInClean: mainInClean === mainInPaths.length,\n mainOutClean: mainOutClean === mainOutPaths.length,\n remoteInClean: remoteInClean === remoteInPaths.length,\n remoteOutClean: remoteOutClean === remoteOutPaths.length\n };\n } else {\n // OFP模块只检测主机输出端口\n const mainOutPaths = connectionStatus?.mainPaths?.[isMultiMode ? 'main-ofp-mm-out' : 'main-ofp-sm-out']?.path || [];\n const cleanedPorts = checkPortsCleanStatus(mainOutPaths);\n // 设置清洁状态\n if (cleanedPorts === 0) isAllPathsClean = 0;\n else if (cleanedPorts < mainOutPaths.length) isAllPathsClean = 1;\n else if (cleanedPorts === mainOutPaths.length) isAllPathsClean = 2;\n allPathsCleanStatus = {\n mainOutClean: cleanedPorts === mainOutPaths.length\n };\n }\n }\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Testing.useEffect\": ()=>{\n if (!tempTestResult) {\n const loadTestResult = {\n \"Testing.useEffect.loadTestResult\": async ()=>{\n try {\n const currentProject = getCurrentProject();\n const currentOperator = getCurrentOperator();\n // 获取当前选中的电缆ID\n const currentCableId = getCurrentCableId().name;\n // 获取当前选中的电缆ID2\n const currentCableId2 = getCurrentCableId2().name;\n const CopperWiremapStatus = connectionStatus?.CopperWiremapStatus;\n const CopperPerformanceStatus = connectionStatus?.CopperPerformanceStatus;\n const ofpResult = connectionStatus?.OFPStatus;\n const moduleType = currentConfig?.moduleType;\n const cableType = currentConfig?.params?.cableType;\n const wireOrder = currentConfig?.params?.wireOrder;\n let testResult;\n // 不同模块组装测试结果逻辑\n if (moduleType === '8000') {\n let CopperResultStatus = 'fail';\n let CopperWiremapResultStatus = 'fail';\n if (CopperWiremapStatus === 'pass') {\n if (wireOrder === 'T568B' || wireOrder === 'Ethernet Two-Pair' || wireOrder === 'M12-D Two-Pair') {\n CopperWiremapResultStatus = 'pass';\n console.log(CopperWiremapResultStatus);\n }\n } else if (CopperWiremapStatus === 'pass-2pair') {\n if (wireOrder === 'Ethernet Two-Pair' || wireOrder === 'M12-D Two-Pair') {\n CopperWiremapResultStatus = 'pass';\n } else if (wireOrder === 'T568B') {\n CopperWiremapResultStatus = 'fail';\n CopperResultStatus = 'fail';\n }\n } else if (CopperWiremapStatus === 'sopen') {\n if (wireOrder === 'T568B') {\n CopperWiremapResultStatus = 'fail';\n CopperResultStatus = 'fail';\n } else if (cableType.includes('U/UTP')) {\n CopperWiremapResultStatus = 'pass';\n } else if (cableType.includes('F/UTP')) {\n CopperWiremapResultStatus = 'fail';\n CopperResultStatus = 'fail';\n }\n }\n if (CopperWiremapResultStatus === 'pass') {\n try {\n const response = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.*\\\\.json$\")(`./${CopperPerformanceStatus}.json`);\n const data = response.default;\n // 加载限制数据\n const limitValue = currentConfig?.params?.limitValue;\n try {\n // 从limitValue中提取基础名称(移除+PoE和+ALL后缀)\n const baseName = limitValue.split(' (+')[0];\n // 使用基础名称加载带有(+ALL)后缀的文件\n const limitResponse = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.* \\\\(\\\\+ALL\\\\)\\\\.json$\")(`./${baseName} (+ALL).json`);\n const limitdata = limitResponse;\n // 计算所有参数的余量\n const paramTitles = [\n '插入损耗',\n '回波损耗',\n 'NEXT',\n 'PS NEXT',\n 'ACR-N',\n 'PS ACR-N',\n 'ACR-F',\n 'PS ACR-F',\n 'CDNEXT',\n 'CMRL',\n 'TCL',\n 'ELTCTL',\n '电阻'\n ];\n const dataGroupMap = {\n '插入损耗': 'Insertion Loss (dB)',\n '回波损耗': 'RL (dB)',\n 'NEXT': 'NEXT (dB)',\n 'PS NEXT': 'PS NEXT (dB)',\n 'ACR-N': 'ACR-N (dB)',\n 'PS ACR-N': 'PS ACR-N (dB)',\n 'ACR-F': 'ACR-F (dB)',\n 'PS ACR-F': 'PS ACR-F (dB)',\n 'CDNEXT': 'CDNEXT (dB)',\n 'CMRL': 'CMRL (dB)',\n 'TCL': 'TCL (dB)',\n 'ELTCTL': 'ELTCTL (dB)',\n '电阻': 'Resistance (Ω)'\n };\n let hasNegativeMargin = false;\n // 长度判断\n if (limitdata.LENGTH && data.performance.LENGTH) {\n const lengthPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of lengthPairs){\n if (data.performance.LENGTH[pair] > limitdata.LENGTH) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n // 电阻判断\n if (limitdata.LOOP && data.performance.OHM?.LOOP) {\n const loopPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of loopPairs){\n if (data.performance.OHM.LOOP[pair] > limitdata.LOOP) {\n hasNegativeMargin = true;\n console.log(\"电阻fail\");\n break;\n }\n }\n }\n // 检查是否是 +PoE 或 +ALL 测试\n const hasPoE = limitValue?.includes('+PoE');\n const hasALL = limitValue?.includes('+ALL');\n // +PoE 或 +ALL 测试的额外检查\n if ((hasPoE || hasALL) && data.performance.OHM) {\n // 线对 UBL 余量检查\n if (limitdata.PAIRUBL && data.performance.OHM.PAIRUBL) {\n const pairUblPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of pairUblPairs){\n if (Math.abs(data.performance.OHM.PAIRUBL[pair]) > limitdata.PAIRUBL) {\n hasNegativeMargin = true;\n console.log(\"UBL fail\");\n break;\n }\n }\n }\n // P2P UBL 余量检查\n if (limitdata.P2PUBL && data.performance.OHM.P2PUBL) {\n const p2pUblPairs = [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ];\n for (const pair of p2pUblPairs){\n if (Math.abs(data.performance.OHM.P2PUBL[pair]) > limitdata.P2PUBL) {\n hasNegativeMargin = true;\n console.log(\"P2P fail\");\n break;\n }\n }\n }\n }\n for (const paramTitle of paramTitles){\n const dataGroup = dataGroupMap[paramTitle];\n // 电阻参数的特殊处理\n if (paramTitle === '电阻') {\n const resistanceMargin = calculateResistanceMargin(data, limitdata, limitValue);\n if (resistanceMargin < 0) {\n hasNegativeMargin = true;\n }\n continue;\n }\n if (!dataGroup || !data?.performance?.data?.[dataGroup] || !limitdata?.[dataGroup]) continue;\n const testData = data.performance.data[dataGroup];\n const limitValues = limitdata[dataGroup]?.['PAIRLimit (dB)'] || [];\n const pairs = [\n 'NEXT (dB)',\n 'ACR-N (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ] : [\n 'ACR-F (dB)',\n 'CDNEXT (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3612',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4512',\n 'PAIR4535',\n 'PAIR4578',\n 'PAIR7812',\n 'PAIR7936',\n 'PAIR7845'\n ] : [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for(let index = 0; index < limitValues.length && !hasNegativeMargin; index++){\n const limitValue = limitValues[index];\n if (limitValue === undefined || limitValue === null) break;\n for (const pair of pairs){\n const actualValue = testData[pair]?.[index];\n if (actualValue !== undefined && actualValue !== null) {\n const margin = paramTitle === '插入损耗' ? Math.abs(limitValue) - Math.abs(actualValue) : Math.abs(actualValue) - limitValue;\n if (margin < 0) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n }\n }\n CopperResultStatus = hasNegativeMargin ? 'fail' : 'pass';\n } catch (error) {\n console.error('Error calculating margins:', error);\n }\n } catch (error) {\n console.error('加载测试结果失败:', error);\n }\n }\n testResult = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_6__.v4)(),\n name: currentProject?.cableIds[0]?.name || '',\n testconfig: JSON.parse(JSON.stringify(currentConfig || {})),\n operators: currentOperator?.name || '',\n CopperWiremapStatus,\n CopperWiremapResultStatus,\n CopperPerformanceStatus,\n CopperRef: copperRefStatus,\n CopperResultStatus\n };\n } else if (moduleType === 'cfp') {\n // 极限值导入\n const limitValue = currentConfig?.params?.limitValue;\n const CFP_LIMIT = (__webpack_require__(/*! @/store/FIBER/CFP_LIMIT */ \"(pages-dir-node)/./src/store/FIBER/CFP_LIMIT.js\")[\"default\"]);\n const limitData = CFP_LIMIT[limitValue];\n if (limitData) {\n // 使用limitData中的极限值进行后续处理\n const { adapterLoss, firstLastAdapterLoss, spliceLoss, totalLoss1310nm, totalLoss1550nm, lossPerKm850nm, lossPerKm13000nm, lossPerKm1310nm, lossPerKm1550nm, maxSMLength, manMMLength } = limitData;\n }\n // 用户配置加载\n const connectorCount = currentConfig?.params?.connectorCount;\n const spliceCount = currentConfig?.params?.spliceCount;\n const refJumper = currentConfig?.params?.refJumper;\n let cfpMainInStatus = null;\n let cfpMainOutStatus = null;\n if (cfpInResult) {\n try {\n // 加载第一个波长的数据\n const wave1Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpInResult}/${wavelength1}-dump.json`);\n // 加载第二个波长的数据\n const wave2Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpInResult}/${wavelength2}-dump.json`);\n // 添加随机浮动因子(损耗上下浮动1%)\n const getDistanceRandomFactor = {\n \"Testing.useEffect.loadTestResult.getDistanceRandomFactor\": ()=>1\n }[\"Testing.useEffect.loadTestResult.getDistanceRandomFactor\"]; // 长度不浮动\n const getLossRandomFactor = {\n \"Testing.useEffect.loadTestResult.getLossRandomFactor\": ()=>1 + (Math.random() * 0.02 - 0.01)\n }[\"Testing.useEffect.loadTestResult.getLossRandomFactor\"]; // 生成0.99到1.01之间的随机数\n // 先计算两个波长的损耗值\n const wave1Loss = wave1Data.Summary.totalLoss * getLossRandomFactor();\n const wave2Loss = wave2Data.Summary.totalLoss * getLossRandomFactor();\n // 如果是参考状态,增加0.1\n const finalWave1Loss = !cfpRefStatus ? wave1Loss : wave1Loss + 0.1;\n const finalWave2Loss = !cfpRefStatus ? wave2Loss : wave2Loss + 0.1;\n cfpMainInStatus = {\n wavelength1: {\n wave: wavelength1,\n distance: (wave1Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave1Loss.toFixed(2)\n },\n wavelength2: {\n wave: wavelength2,\n distance: (wave2Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave2Loss.toFixed(2)\n }\n };\n } catch (error) {\n setTimeout({\n \"Testing.useEffect.loadTestResult\": ()=>{\n setTotalToastMessage(\"被测链路与参考跳纤类型不一致,请检查\");\n }\n }[\"Testing.useEffect.loadTestResult\"], 1500); // 3000 毫秒 = 3 秒\n return;\n }\n }\n if (cfpOutResult) {\n try {\n // 加载第一个波长的数据\n const wave1Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpOutResult}/${wavelength1}-dump.json`);\n // 加载第二个波长的数据\n const wave2Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpOutResult}/${wavelength2}-dump.json`);\n // 添加随机浮动因子(损耗上下浮动1%)\n const getDistanceRandomFactor = {\n \"Testing.useEffect.loadTestResult.getDistanceRandomFactor\": ()=>1\n }[\"Testing.useEffect.loadTestResult.getDistanceRandomFactor\"]; // 长度不浮动\n const getLossRandomFactor = {\n \"Testing.useEffect.loadTestResult.getLossRandomFactor\": ()=>1 + (Math.random() * 0.02 - 0.01)\n }[\"Testing.useEffect.loadTestResult.getLossRandomFactor\"]; // 生成0.99到1.01之间的随机数\n // 先计算两个波长的损耗值\n const wave1Loss = wave1Data.Summary.totalLoss * getLossRandomFactor();\n const wave2Loss = wave2Data.Summary.totalLoss * getLossRandomFactor();\n // 如果是参考状态,增加0.1\n const finalWave1Loss = !cfpRefStatus ? wave1Loss : wave1Loss + 0.1;\n const finalWave2Loss = !cfpRefStatus ? wave2Loss : wave2Loss + 0.1;\n cfpMainOutStatus = {\n wavelength1: {\n wave: wavelength1,\n distance: (wave1Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave1Loss.toFixed(2)\n },\n wavelength2: {\n wave: wavelength2,\n distance: (wave2Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave2Loss.toFixed(2)\n }\n };\n } catch (error) {\n setTimeout({\n \"Testing.useEffect.loadTestResult\": ()=>{\n setToastMessage(\"未检测到光纤,请检查接口\");\n }\n }[\"Testing.useEffect.loadTestResult\"], 1500); // 3000 毫秒 = 3 秒\n return;\n }\n }\n // 结果计算与判断\n // 第一根光纤\n const cfpMainIndistance = cfpMainInStatus?.wavelength1?.distance || 0;\n const cfpMainIndistance2 = cfpMainInStatus?.wavelength2?.distance || 0;\n const cfpMainInloss = cfpMainInStatus?.wavelength1?.loss || 0;\n const cfpMainInloss2 = cfpMainInStatus?.wavelength2?.loss || 0;\n // 长度判断\n const maxLength = isMultiMode ? limitData.maxMMLength : limitData.maxSMLength;\n const isLengthValidIn = cfpMainIndistance <= maxLength && cfpMainIndistance2 <= maxLength;\n // 损耗判断\n const lossPerKm = isMultiMode ? limitData.lossPerKm850nm : limitData.lossPerKm1310nm;\n const lossPerKm2 = isMultiMode ? limitData.lossPerKm1300nm : limitData.lossPerKm1550nm;\n const totalLossLimit = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainIndistance / 1000 * lossPerKm : isMultiMode ? limitData.totalLoss850nm : limitData.totalLoss1310nm;\n const totalLossLimit2 = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainIndistance2 / 1000 * lossPerKm2 : isMultiMode ? limitData.totalLoss1300nm : limitData.totalLoss1550nm;\n const isLossValidIn = cfpMainInloss <= totalLossLimit && cfpMainInloss2 <= totalLossLimit2;\n // 第二根光纤\n const cfpMainOutdistance = cfpMainOutStatus?.wavelength1?.distance || 0;\n const cfpMainOutdistance2 = cfpMainOutStatus?.wavelength2?.distance || 0;\n const cfpMainOutloss = cfpMainOutStatus?.wavelength1?.loss || 0;\n const cfpMainOutloss2 = cfpMainOutStatus?.wavelength2?.loss || 0;\n // 长度判断\n const maxLengthOut = isMultiMode ? limitData.maxMMLength : limitData.maxSMLength;\n const isLengthValidOut = cfpMainOutdistance <= maxLength && cfpMainOutdistance2 <= maxLength;\n // 损耗判断\n const lossPerKmOut = isMultiMode ? limitData.lossPerKm850nm : limitData.lossPerKm1310nm;\n const lossPerKm2Out = isMultiMode ? limitData.lossPerKm1300nm : limitData.lossPerKm1550nm;\n const totalLossLimitOut = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainIndistance / 1000 * lossPerKmOut : isMultiMode ? limitData.totalLoss850nm : limitData.totalLoss1310nm;\n const totalLossLimit2Out = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainOutdistance2 / 1000 * lossPerKm2Out : isMultiMode ? limitData.totalLoss1300nm : limitData.totalLoss1550nm;\n const isLossValidOut = cfpMainOutloss <= totalLossLimitOut && cfpMainOutloss2 <= totalLossLimit2Out;\n // 结果判断\n const CFPResultStatus = isLengthValidIn && isLossValidIn && isLengthValidOut && isLossValidOut ? 'pass' : 'fail';\n // IN端口通过失败判断(根据 isMultiMode 判断使用哪组参数)\n const InPortStatus = isMultiMode ? isLengthValidIn && isLossValidIn ? 'pass' : 'fail' : isLengthValidOut && isLossValidOut ? 'pass' : 'fail';\n // OUT端口通过失败判断\n const OutPortStatus = isMultiMode ? isLengthValidOut && isLengthValidOut ? 'pass' : 'fail' : isLengthValidIn && isLossValidIn ? 'pass' : 'fail';\n testResult = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_6__.v4)(),\n name: currentCableId || '',\n name2: currentCableId2 || '',\n testconfig: JSON.parse(JSON.stringify(currentConfig || {})),\n operators: currentOperator?.name || '',\n CFPRef: cfpRefStatus,\n CFPRefConnect: cfpRefConnectStatus,\n CFPMainIn: cfpMainInStatus,\n isLengthValidIn,\n isLossValidIn,\n InPortStatus,\n isLengthValidOut,\n isLossValidOut,\n OutPortStatus,\n CFPMainOut: cfpMainOutStatus,\n CFPResultStatus,\n PortCleanStatus: isAllPathsClean\n };\n } else if (moduleType === 'ofp') {\n const ofpConnectionStatus = connectionStatus;\n let ofpResultStatus = 'fail';\n if (ofpResult.includes('pass')) {\n if (!ofpRefStatus) {\n if (connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-')) {\n ofpResultStatus = 'fail';\n } else {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'start') {\n if (connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-')) {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'end') {\n const hasSmOrMm = connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-');\n const hasSmcOrMmc = connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-');\n const hasConnectedSmOrMm = connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-');\n const hasConnectedSmcOrMmc = connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-');\n // 只有前导和末尾都是补偿线时才是pass,其他情况都是fail\n if (hasSmcOrMmc && hasConnectedSmcOrMmc) {\n ofpResultStatus = 'pass';\n } else {\n ofpResultStatus = 'fail';\n }\n }\n } else if (ofpResult === 'connector-fail-end') {\n if (!ofpRefStatus) {\n if (connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-')) {\n ofpResultStatus = 'fail';\n } else {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'start') {\n if (connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-')) {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'end') {\n const hasSmOrMm = connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-');\n const hasSmcOrMmc = connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-');\n const hasConnectedSmOrMm = connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-');\n const hasConnectedSmcOrMmc = connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-');\n // 只有前导和末尾都是补偿线时才是pass,其他情况都是fail\n if (hasSmcOrMmc && hasConnectedSmcOrMmc) {\n ofpResultStatus = 'pass';\n } else {\n ofpResultStatus = 'fail';\n }\n }\n } else if (ofpResult === 'connector-fail-start') {\n if (ofpRefStatus === 'start') {\n const hasSmOrMm = connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-');\n const hasSmcOrMmc = connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-');\n if (hasSmOrMm) {\n ofpResultStatus = 'fail';\n } else if (hasSmcOrMmc) {\n ofpResultStatus = 'fail';\n }\n }\n }\n testResult = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_6__.v4)(),\n name: currentProject?.cableIds[0]?.name || '',\n testconfig: JSON.parse(JSON.stringify(currentConfig || {})),\n operators: currentOperator?.name || '',\n ofpResult,\n ofpRefStatus,\n OFPRefConnect: ofpRefConnectStatus,\n ofpConnectionStatus,\n ofpResultStatus,\n PortCleanStatus: isAllPathsClean\n };\n }\n setTempTestResult(testResult);\n } catch (error) {\n console.error('加载测试结果失败:', error);\n }\n }\n }[\"Testing.useEffect.loadTestResult\"];\n loadTestResult();\n }\n }\n }[\"Testing.useEffect\"], [\n connectionStatus?.CopperWiremapStatus,\n connectionStatus?.CopperPerformanceStatus\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Testing.useEffect\": ()=>{\n if (tempTestResult) {\n const moduleType = tempTestResult.testconfig?.moduleType;\n let delayTime = 1500; // 默认延迟1.5秒\n if (moduleType === '8000') {\n delayTime = 5000; // 8000模块延迟5秒\n } else if (moduleType === 'cfp') {\n delayTime = 1500; // cfp模块延迟1.5秒\n } else if (moduleType === 'ofp') {\n delayTime = 6000; // ofp模块延迟6秒\n }\n const timer = setTimeout({\n \"Testing.useEffect.timer\": ()=>{\n navigateTo('resultinfo', 'nosave', tempTestResult);\n }\n }[\"Testing.useEffect.timer\"], delayTime);\n return ({\n \"Testing.useEffect\": ()=>clearTimeout(timer)\n })[\"Testing.useEffect\"];\n }\n }\n }[\"Testing.useEffect\"], [\n tempTestResult\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 718,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \"进程\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 719,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[490px] bg-[#303040] relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 bg-cover bg-center bg-no-repeat\",\n style: {\n backgroundImage: `url(${(0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/testing.gif')})`\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 724,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full top-8 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"flex items-center justify-center text-black text-xl font-bold\",\n children: currentConfig?.params?.limitValue || '未设置'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 731,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 730,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 722,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-center px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>navigateTo('home', 'main'),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 738,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 737,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Testing.js\",\n lineNumber: 717,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvVGVzdGluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDQTtBQUNGO0FBQ0U7QUFDRjtBQUNiO0FBQ1E7QUFFNUMsWUFBWTtBQUNaLFNBQVNVLDBCQUEwQkMsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLFVBQVU7SUFDMUQsSUFBSTtRQUNBLFNBQVM7UUFDVCxNQUFNQyxZQUFZRCxXQUFXRSxRQUFRLENBQUM7UUFDdEMsTUFBTUMsWUFBWUgsV0FBV0UsUUFBUSxDQUFDO1FBRXRDLElBQUlFLFlBQVlDO1FBRWhCLFNBQVM7UUFDVCxNQUFNQyxxQkFBcUJSLE1BQU1TLGFBQWFULE1BQU0sQ0FBQyxzQkFBc0I7UUFDM0UsTUFBTVUsc0JBQXNCVCxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxnQkFBZ0I7UUFFakYsSUFBSU8sc0JBQXNCRSxxQkFBcUI7WUFDM0MsTUFBTUMsUUFBUTtnQkFBQztnQkFBVTtnQkFBVTtnQkFBVTthQUFTO1lBQ3RELEtBQUssTUFBTUMsUUFBUUQsTUFBTztnQkFDdEIsTUFBTUUsZUFBZUwsa0JBQWtCLENBQUNJLEtBQUs7Z0JBQzdDLElBQUlDLGdCQUFnQkMsTUFBTUMsT0FBTyxDQUFDRixlQUFlO29CQUM3QyxJQUFLLElBQUlHLElBQUksR0FBR0EsSUFBSUgsYUFBYUksTUFBTSxJQUFJRCxJQUFJTixvQkFBb0JPLE1BQU0sRUFBRUQsSUFBSzt3QkFDNUUsTUFBTUUsY0FBY0wsWUFBWSxDQUFDRyxFQUFFO3dCQUNuQyxNQUFNRyxXQUFXVCxtQkFBbUIsQ0FBQ00sRUFBRTt3QkFDdkMsSUFBSUUsZ0JBQWdCRSxhQUFhRixnQkFBZ0IsUUFBUUMsYUFBYUMsYUFBYUQsYUFBYSxNQUFNOzRCQUNsRyxNQUFNRSxTQUFTRixXQUFXRyxLQUFLQyxHQUFHLENBQUNMOzRCQUNuQ1osWUFBWWdCLEtBQUtFLEdBQUcsQ0FBQ2xCLFdBQVdl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Qzs7Ozs7O2tDQUlwRSw4REFBQ3dPO3dCQUFJQyxXQUFVO2tDQUNYLDRFQUFDSTs0QkFBS0osV0FBVTtzQ0FDWDVMLGVBQWVpQixRQUFRMUQsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBS2xELDhEQUFDb087Z0JBQUlDLFdBQVU7MEJBQ0gsNEVBQUNLO29CQUNHTCxXQUFVO29CQUNWTSxTQUFTLElBQU16TSxXQUFXLFFBQVE7OEJBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU96QiIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2ZsdWtlL1Rlc3RpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdGF0dXNCYXInO1xyXG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9UaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJ0AvdXRpbHMvYXNzZXQnO1xyXG5cclxuLy8g6K6h566X55S16Zi75L2Z6YeP55qE5Ye95pWwXHJcbmZ1bmN0aW9uIGNhbGN1bGF0ZVJlc2lzdGFuY2VNYXJnaW4oZGF0YSwgbGltaXRkYXRhLCBsaW1pdFZhbHVlKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIOWIpOaWrea1i+ivleexu+Wei1xyXG4gICAgICAgIGNvbnN0IGlzUG9FVGVzdCA9IGxpbWl0VmFsdWUuaW5jbHVkZXMoJytQb0UnKTtcclxuICAgICAgICBjb25zdCBpc0FMTFRlc3QgPSBsaW1pdFZhbHVlLmluY2x1ZGVzKCcrQUxMJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG1pbk1hcmdpbiA9IEluZmluaXR5O1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWbnui3r+eUtemYu+iuoeeul1xyXG4gICAgICAgIGNvbnN0IGxvb3BSZXNpc3RhbmNlRGF0YSA9IGRhdGE/LnBlcmZvcm1hbmNlPy5kYXRhPy5bJ0xvb3AgUmVzaXN0YW5jZSAozqkpJ107XHJcbiAgICAgICAgY29uc3QgbG9vcFJlc2lzdGFuY2VMaW1pdCA9IGxpbWl0ZGF0YT8uWydMb29wIFJlc2lzdGFuY2UgKM6pKSddPy5bJ1BBSVJMaW1pdCAozqkpJ107XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGxvb3BSZXNpc3RhbmNlRGF0YSAmJiBsb29wUmVzaXN0YW5jZUxpbWl0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhaXJzID0gWydQQUlSMTInLCAnUEFJUjM2JywgJ1BBSVI0NScsICdQQUlSNzgnXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSBsb29wUmVzaXN0YW5jZURhdGFbcGFpcl07XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWVzICYmIEFycmF5LmlzQXJyYXkoYWN0dWFsVmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsVmFsdWVzLmxlbmd0aCAmJiBpIDwgbG9vcFJlc2lzdGFuY2VMaW1pdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWwgPSBsb29wUmVzaXN0YW5jZUxpbWl0W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxWYWx1ZSAhPT0gbnVsbCAmJiBsaW1pdFZhbCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0VmFsICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBsaW1pdFZhbCAtIE1hdGguYWJzKGFjdHVhbFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgbWFyZ2luKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyDnur/lr7lVQkzorqHnrpfvvIjku4XlnKgrUG9F5oiWK0FMTOa1i+ivleaXtu+8iVxyXG4gICAgICAgIGlmIChpc1BvRVRlc3QgfHwgaXNBTExUZXN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVibERhdGEgPSBkYXRhPy5wZXJmb3JtYW5jZT8uZGF0YT8uWydVQkwgKM6pKSddO1xyXG4gICAgICAgICAgICBjb25zdCB1YmxMaW1pdCA9IGxpbWl0ZGF0YT8uWydVQkwgKM6pKSddPy5bJ1BBSVJMaW1pdCAozqkpJ107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodWJsRGF0YSAmJiB1YmxMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFpcnMgPSBbJ1BBSVIxMicsICdQQUlSMzYnLCAnUEFJUjQ1JywgJ1BBSVI3OCddO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWVzID0gdWJsRGF0YVtwYWlyXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWVzICYmIEFycmF5LmlzQXJyYXkoYWN0dWFsVmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbFZhbHVlcy5sZW5ndGggJiYgaSA8IHVibExpbWl0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0VmFsID0gdWJsTGltaXRbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxWYWx1ZSAhPT0gbnVsbCAmJiBsaW1pdFZhbCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0VmFsICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gbGltaXRWYWwgLSBNYXRoLmFicyhhY3R1YWxWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBtYXJnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFAyUFVCTOiuoeeul++8iOS7heWcqCtQb0XmiJYrQUxM5rWL6K+V5pe277yJXHJcbiAgICAgICAgaWYgKGlzUG9FVGVzdCB8fCBpc0FMTFRlc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcDJwVWJsRGF0YSA9IGRhdGE/LnBlcmZvcm1hbmNlPy5kYXRhPy5bJ1AyUFVCTCAozqkpJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHAycFVibExpbWl0ID0gbGltaXRkYXRhPy5bJ1AyUFVCTCAozqkpJ10/LlsnUEFJUkxpbWl0ICjOqSknXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChwMnBVYmxEYXRhICYmIHAycFVibExpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYWlycyA9IFsnUEFJUjEyMzYnLCAnUEFJUjEyNDUnLCAnUEFJUjEyNzgnLCAnUEFJUjM2NDUnLCAnUEFJUjM2NzgnLCAnUEFJUjQ1NzgnXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlcyA9IHAycFVibERhdGFbcGFpcl07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbFZhbHVlcyAmJiBBcnJheS5pc0FycmF5KGFjdHVhbFZhbHVlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZXMubGVuZ3RoICYmIGkgPCBwMnBVYmxMaW1pdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFZhbCA9IHAycFVibExpbWl0W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbFZhbHVlICE9PSB1bmRlZmluZWQgJiYgYWN0dWFsVmFsdWUgIT09IG51bGwgJiYgbGltaXRWYWwgIT09IHVuZGVmaW5lZCAmJiBsaW1pdFZhbCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGxpbWl0VmFsIC0gTWF0aC5hYnMoYWN0dWFsVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgbWFyZ2luKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbWluTWFyZ2luID09PSBJbmZpbml0eSA/IDAgOiBtaW5NYXJnaW47XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNhbGN1bGF0aW5nIHJlc2lzdGFuY2UgbWFyZ2luOicsIGVycm9yKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGVzdGluZygpIHtcclxuICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgY29uc3QgeyBuYXZpZ2F0ZVRvLFxyXG4gICAgICAgICAgICBnZXRDdXJyZW50VGVzdENvbmZpZyxcclxuICAgICAgICAgICAgZ2V0Q3VycmVudFByb2plY3QsXHJcbiAgICAgICAgICAgIGdldEN1cnJlbnRPcGVyYXRvcixcclxuICAgICAgICAgICAgZ2V0Q3VycmVudENhYmxlSWQsXHJcbiAgICAgICAgICAgIGdldEN1cnJlbnRDYWJsZUlkMixcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlLFxyXG4gICAgICAgICAgICB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFRlc3RDb25maWcoKTtcclxuICAgIGNvbnN0IHsgY29ubmVjdGlvblN0YXR1cyxzZXRUb3RhbFRvYXN0TWVzc2FnZSB9ID0gdXNlRGV2aWNlU3RvcmUoKTtcclxuICAgIFxyXG4gICAgLy8g6ZOc57yG5rWL6K+V6Lev5b6E5ZKM54q25oCBXHJcbiAgICBjb25zdCBjb3BwZXJNYWluUGF0aEtleSA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocyA/IE9iamVjdC5rZXlzKGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzKVswXSA6IG51bGw7XHJcbiAgICBjb25zdCBjb3BwZXJSZW1vdGVQYXRoS2V5ID0gY29ubmVjdGlvblN0YXR1cz8ucmVtb3RlUGF0aHMgPyBPYmplY3Qua2V5cyhjb25uZWN0aW9uU3RhdHVzLnJlbW90ZVBhdGhzKVswXSA6IG51bGw7XHJcbiAgICBjb25zdCBjb3BwZXJtYWluZW5kID0gY29wcGVyTWFpblBhdGhLZXkgPyBjb25uZWN0aW9uU3RhdHVzLm1haW5QYXRoc1tjb3BwZXJNYWluUGF0aEtleV0/LmVuZCA6IG51bGw7XHJcbiAgICBjb25zdCBjb3BwZXJyZW1vdGVlbmQgPSBjb3BwZXJSZW1vdGVQYXRoS2V5ID8gY29ubmVjdGlvblN0YXR1cy5yZW1vdGVQYXRoc1tjb3BwZXJSZW1vdGVQYXRoS2V5XT8uZW5kIDogbnVsbDtcclxuICAgIGNvbnN0IGNvcHBlclJlZlN0YXR1cyA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpPy5yZWY/LmNvcHBlcj8uc3RhdHVzIHx8IG51bGw7XHJcbiAgICBcclxuICAgIC8vIENGUOa1i+ivlei3r+W+hOWSjOeKtuaAgVxyXG4gICAgXHJcbiAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGU7XHJcbiAgICBjb25zdCBpc011bHRpTW9kZSA9IGNhYmxlVHlwZS5pbmNsdWRlcygnT00nKTtcclxuICAgIGNvbnN0IGNmcFJlZlN0YXR1cyA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpPy5yZWY/LmNmcD8uc3RhdHVzIHx8IG51bGw7XHJcbiAgICBjb25zdCBjZnBSZWZDb25uZWN0U3RhdHVzID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCk/LnJlZj8uY2ZwPy5jb25uZWN0U3RhdHVzIHx8IG51bGw7XHJcbiAgICBcclxuICAgIGNvbnN0IGNmcEluUmVzdWx0ID0gaXNNdWx0aU1vZGUgPyBjb25uZWN0aW9uU3RhdHVzPy5DRlBNYWluSW4gOiBjb25uZWN0aW9uU3RhdHVzPy5DRlBNYWluT3V0O1xyXG4gICAgY29uc3QgY2ZwT3V0UmVzdWx0ID0gaXNNdWx0aU1vZGUgPyBjb25uZWN0aW9uU3RhdHVzPy5DRlBNYWluT3V0IDogY29ubmVjdGlvblN0YXR1cz8uQ0ZQTWFpbkluOyBcclxuXHJcblxyXG4gICAgLy8g6I635Y+WaXNNdWx0aU1vZGVcclxuICAgIGNvbnN0IHdhdmVsZW5ndGgxID0gaXNNdWx0aU1vZGUgPyAnODUwJyA6ICcxMzEwJztcclxuICAgIGNvbnN0IHdhdmVsZW5ndGgyID0gaXNNdWx0aU1vZGUgPyAnMTMwMCcgOiAnMTU1MCc7XHJcbiAgICBcclxuICAgIC8vIE9GUOa1i+ivlei3r+W+hOWSjOeKtuaAgVxyXG4gICAgY29uc3Qgb2ZwTWFpbkVuZCA9IGNvcHBlck1haW5QYXRoS2V5ID8gY29ubmVjdGlvblN0YXR1cy5tYWluUGF0aHNbY29wcGVyTWFpblBhdGhLZXldPy5lbmQgOiBudWxsO1xyXG4gICAgY29uc3Qgb2ZwUmVmU3RhdHVzID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCk/LnJlZj8ub2ZwPy5zdGF0dXMgfHwgbnVsbDtcclxuICAgIGNvbnN0IG9mcFJlZkNvbm5lY3RTdGF0dXMgPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKT8ucmVmPy5vZnA/LmNvbm5lY3RTdGF0dXMgfHwgbnVsbDtcclxuICAgIGNvbnN0IFt0ZW1wVGVzdFJlc3VsdCwgc2V0VGVtcFRlc3RSZXN1bHRdID0gdXNlU3RhdGUobnVsbCk7XHJcblxyXG4gICAgLy8g6I635Y+W5rWL6K+V6ZO+6Lev5riF5rSB54q25oCBXHJcbiAgICBjb25zdCBtb2R1bGVUeXBlID0gY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZTtcclxuXHJcbiAgICAvLyDmo4Dmn6Xot6/lvoTkuK3miYDmnInnq6/lj6PnmoTmuIXmtIHnirbmgIFcclxuICAgIGNvbnN0IGNoZWNrUG9ydHNDbGVhblN0YXR1cyA9IChwYXRocykgPT4ge1xyXG4gICAgICAgIGlmICghcGF0aHMgfHwgcGF0aHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5qOA5p+l5q+P5Liq56uv5Y+j55qE5riF5rSB54q25oCBXHJcbiAgICAgICAgY29uc3QgY2xlYW5Qb3J0cyA9IHBhdGhzLmZpbHRlcihwb3J0SWQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwb3J0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBvcnRJZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3J0RWxlbWVudD8uZ2V0QXR0cmlidXRlKCdsY2NsZWFuJykgPT09ICd0cnVlJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g6L+U5Zue5bey5riF5rSB55qE56uv5Y+j5pWw6YePXHJcbiAgICAgICAgcmV0dXJuIGNsZWFuUG9ydHMubGVuZ3RoO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgYWxsUGF0aHNDbGVhblN0YXR1cyA9IHt9O1xyXG4gICAgbGV0IGlzQWxsUGF0aHNDbGVhbiA9IDA7IC8vIOm7mOiupOS4ujDvvIzooajnpLrlhajpg6jmnKrmuIXmtIFcclxuXHJcbiAgICAvLyDlj6rlnKjmqKHlnZfnsbvlnovkuLogY2ZwIOaIliBvZnAg5pe25omn6KGM5qOA5rWLXHJcbiAgICBpZiAobW9kdWxlVHlwZSA9PT0gJ2NmcCcgfHwgbW9kdWxlVHlwZSA9PT0gJ29mcCcpIHtcclxuICAgICAgICBpZiAobW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHtcclxuICAgICAgICAgICAgLy8gQ0ZQ5qih5Z2X5qOA5rWL5omA5pyJ6Lev5b6EXHJcbiAgICAgICAgICAgIGNvbnN0IG1haW5JblBhdGhzID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bJ21haW4tY2ZwLWluJ10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgIGNvbnN0IG1haW5PdXRQYXRocyA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uW2lzTXVsdGlNb2RlID8gJ21haW4tY2ZwLW1tLW91dCcgOiAnbWFpbi1jZnAtc20tb3V0J10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW90ZUluUGF0aHMgPSBjb25uZWN0aW9uU3RhdHVzPy5yZW1vdGVQYXRocz8uWydyZW1vdGUtY2ZwLWluJ10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW90ZU91dFBhdGhzID0gY29ubmVjdGlvblN0YXR1cz8ucmVtb3RlUGF0aHM/Lltpc011bHRpTW9kZSA/ICdyZW1vdGUtY2ZwLW1tLW91dCcgOiAncmVtb3RlLWNmcC1zbS1vdXQnXT8ucGF0aCB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIOiOt+WPluavj+S4qui3r+W+hOeahOa4hea0geerr+WPo+aVsOmHj1xyXG4gICAgICAgICAgICBjb25zdCBtYWluSW5DbGVhbiA9IGNoZWNrUG9ydHNDbGVhblN0YXR1cyhtYWluSW5QYXRocyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1haW5PdXRDbGVhbiA9IGNoZWNrUG9ydHNDbGVhblN0YXR1cyhtYWluT3V0UGF0aHMpO1xyXG4gICAgICAgICAgICBjb25zdCByZW1vdGVJbkNsZWFuID0gY2hlY2tQb3J0c0NsZWFuU3RhdHVzKHJlbW90ZUluUGF0aHMpO1xyXG4gICAgICAgICAgICBjb25zdCByZW1vdGVPdXRDbGVhbiA9IGNoZWNrUG9ydHNDbGVhblN0YXR1cyhyZW1vdGVPdXRQYXRocyk7XHJcblxyXG4gICAgICAgICAgICAvLyDorqHnrpfmgLvnq6/lj6PmlbDlkozlt7LmuIXmtIHnq6/lj6PmlbBcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQb3J0cyA9IG1haW5JblBhdGhzLmxlbmd0aCArIG1haW5PdXRQYXRocy5sZW5ndGggKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVJblBhdGhzLmxlbmd0aCArIHJlbW90ZU91dFBhdGhzLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgY2xlYW5lZFBvcnRzID0gbWFpbkluQ2xlYW4gKyBtYWluT3V0Q2xlYW4gKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUluQ2xlYW4gKyByZW1vdGVPdXRDbGVhbjtcclxuXHJcbiAgICAgICAgICAgIC8vIOiuvue9rua4hea0geeKtuaAgVxyXG4gICAgICAgICAgICBpZiAoY2xlYW5lZFBvcnRzID09PSAwKSBpc0FsbFBhdGhzQ2xlYW4gPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjbGVhbmVkUG9ydHMgPCB0b3RhbFBvcnRzKSBpc0FsbFBhdGhzQ2xlYW4gPSAxO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjbGVhbmVkUG9ydHMgPT09IHRvdGFsUG9ydHMpIGlzQWxsUGF0aHNDbGVhbiA9IDI7XHJcblxyXG4gICAgICAgICAgICBhbGxQYXRoc0NsZWFuU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgbWFpbkluQ2xlYW46IG1haW5JbkNsZWFuID09PSBtYWluSW5QYXRocy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBtYWluT3V0Q2xlYW46IG1haW5PdXRDbGVhbiA9PT0gbWFpbk91dFBhdGhzLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHJlbW90ZUluQ2xlYW46IHJlbW90ZUluQ2xlYW4gPT09IHJlbW90ZUluUGF0aHMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgcmVtb3RlT3V0Q2xlYW46IHJlbW90ZU91dENsZWFuID09PSByZW1vdGVPdXRQYXRocy5sZW5ndGhcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBPRlDmqKHlnZflj6rmo4DmtYvkuLvmnLrovpPlh7rnq6/lj6NcclxuICAgICAgICAgICAgY29uc3QgbWFpbk91dFBhdGhzID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5baXNNdWx0aU1vZGUgPyAnbWFpbi1vZnAtbW0tb3V0JyA6ICdtYWluLW9mcC1zbS1vdXQnXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgY2xlYW5lZFBvcnRzID0gY2hlY2tQb3J0c0NsZWFuU3RhdHVzKG1haW5PdXRQYXRocyk7XHJcblxyXG4gICAgICAgICAgICAvLyDorr7nva7muIXmtIHnirbmgIFcclxuICAgICAgICAgICAgaWYgKGNsZWFuZWRQb3J0cyA9PT0gMCkgaXNBbGxQYXRoc0NsZWFuID0gMDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoY2xlYW5lZFBvcnRzIDwgbWFpbk91dFBhdGhzLmxlbmd0aCkgaXNBbGxQYXRoc0NsZWFuID0gMTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoY2xlYW5lZFBvcnRzID09PSBtYWluT3V0UGF0aHMubGVuZ3RoKSBpc0FsbFBhdGhzQ2xlYW4gPSAyO1xyXG5cclxuICAgICAgICAgICAgYWxsUGF0aHNDbGVhblN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgIG1haW5PdXRDbGVhbjogY2xlYW5lZFBvcnRzID09PSBtYWluT3V0UGF0aHMubGVuZ3RoXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIXRlbXBUZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvYWRUZXN0UmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE9wZXJhdG9yID0gZ2V0Q3VycmVudE9wZXJhdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE55S157yGSURcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2FibGVJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCkubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDojrflj5blvZPliY3pgInkuK3nmoTnlLXnvIZJRDJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2FibGVJZDIgPSBnZXRDdXJyZW50Q2FibGVJZDIoKS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENvcHBlcldpcmVtYXBTdGF0dXMgPSBjb25uZWN0aW9uU3RhdHVzPy5Db3BwZXJXaXJlbWFwU3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENvcHBlclBlcmZvcm1hbmNlU3RhdHVzID0gY29ubmVjdGlvblN0YXR1cz8uQ29wcGVyUGVyZm9ybWFuY2VTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2ZwUmVzdWx0ID0gY29ubmVjdGlvblN0YXR1cz8uT0ZQU3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZVR5cGUgPSBjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhYmxlVHlwZSA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8uY2FibGVUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpcmVPcmRlciA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8ud2lyZU9yZGVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVzdFJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuI3lkIzmqKHlnZfnu4Too4XmtYvor5Xnu5PmnpzpgLvovpFcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kdWxlVHlwZSA9PT0gJzgwMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBDb3BwZXJSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBDb3BwZXJXaXJlbWFwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENvcHBlcldpcmVtYXBTdGF0dXMgPT09ICdwYXNzJyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aXJlT3JkZXIgPT09ICdUNTY4QicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXIgPT09ICdFdGhlcm5ldCBUd28tUGFpcicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXIgPT09ICdNMTItRCBUd28tUGFpcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJXaXJlbWFwUmVzdWx0U3RhdHVzID0gJ3Bhc3MnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKENvcHBlcldpcmVtYXBTdGF0dXMgPT09ICdwYXNzLTJwYWlyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVPcmRlciA9PT0gJ0V0aGVybmV0IFR3by1QYWlyJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlciA9PT0gJ00xMi1EIFR3by1QYWlyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpcmVPcmRlciA9PT0gJ1Q1NjhCJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoQ29wcGVyV2lyZW1hcFN0YXR1cyA9PT0gJ3NvcGVuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVPcmRlciA9PT0gJ1Q1NjhCJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FibGVUeXBlLmluY2x1ZGVzKCdVL1VUUCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYWJsZVR5cGUuaW5jbHVkZXMoJ0YvVVRQJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJXaXJlbWFwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlclJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPT09ICdwYXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGltcG9ydChgQC9zdG9yZS9DT1BQRVIvJHtDb3BwZXJQZXJmb3JtYW5jZVN0YXR1c30uanNvbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWKoOi9vemZkOWItuaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0VmFsdWUgPSBjdXJyZW50Q29uZmlnPy5wYXJhbXM/LmxpbWl0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuObGltaXRWYWx1ZeS4reaPkOWPluWfuuehgOWQjeensCjnp7vpmaQrUG9F5ZKMK0FMTOWQjue8gClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBsaW1pdFZhbHVlLnNwbGl0KCcgKCsnKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2/55So5Z+656GA5ZCN56ew5Yqg6L295bim5pyJKCtBTEwp5ZCO57yA55qE5paH5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVzcG9uc2UgPSBhd2FpdCBpbXBvcnQoYEAvc3RvcmUvQ09QUEVSLyR7YmFzZU5hbWV9ICgrQUxMKS5qc29uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ZGF0YSA9IGxpbWl0UmVzcG9uc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDorqHnrpfmiYDmnInlj4LmlbDnmoTkvZnph49cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1UaXRsZXMgPSBbJ+aPkuWFpeaNn+iAlycsICflm57ms6LmjZ/ogJcnLCAnTkVYVCcsICdQUyBORVhUJywgJ0FDUi1OJywgJ1BTIEFDUi1OJywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FDUi1GJywgJ1BTIEFDUi1GJywgJ0NETkVYVCcsICdDTVJMJywgJ1RDTCcsICdFTFRDVEwnLCAn55S16Zi7J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFHcm91cE1hcCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICfmj5LlhaXmjZ/ogJcnOiAnSW5zZXJ0aW9uIExvc3MgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn5Zue5rOi5o2f6ICXJzogJ1JMIChkQiknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05FWFQnOiAnTkVYVCAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQUyBORVhUJzogJ1BTIE5FWFQgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUNSLU4nOiAnQUNSLU4gKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFMgQUNSLU4nOiAnUFMgQUNSLU4gKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUNSLUYnOiAnQUNSLUYgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFMgQUNSLUYnOiAnUFMgQUNSLUYgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ0RORVhUJzogJ0NETkVYVCAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDTVJMJzogJ0NNUkwgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVENMJzogJ1RDTCAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFTFRDVEwnOiAnRUxUQ1RMIChkQiknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+eUtemYuyc6ICdSZXNpc3RhbmNlICjOqSknXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzTmVnYXRpdmVNYXJnaW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmVv+W6puWIpOaWrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGltaXRkYXRhLkxFTkdUSCAmJiBkYXRhLnBlcmZvcm1hbmNlLkxFTkdUSCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoUGFpcnMgPSBbJ1BBSVIxMicsICdQQUlSMzYnLCAnUEFJUjQ1JywgJ1BBSVI3OCddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIGxlbmd0aFBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucGVyZm9ybWFuY2UuTEVOR1RIW3BhaXJdID4gbGltaXRkYXRhLkxFTkdUSCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZWdhdGl2ZU1hcmdpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g55S16Zi75Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdGRhdGEuTE9PUCAmJiBkYXRhLnBlcmZvcm1hbmNlLk9ITT8uTE9PUCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9vcFBhaXJzID0gWydQQUlSMTInLCAnUEFJUjM2JywgJ1BBSVI0NScsICdQQUlSNzgnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBsb29wUGFpcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wZXJmb3JtYW5jZS5PSE0uTE9PUFtwYWlyXSA+IGxpbWl0ZGF0YS5MT09QKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05lZ2F0aXZlTWFyZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLnlLXpmLtmYWlsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5pivICtQb0Ug5oiWICtBTEwg5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BvRSA9IGxpbWl0VmFsdWU/LmluY2x1ZGVzKCcrUG9FJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0FMTCA9IGxpbWl0VmFsdWU/LmluY2x1ZGVzKCcrQUxMJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICtQb0Ug5oiWICtBTEwg5rWL6K+V55qE6aKd5aSW5qOA5p+lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaGFzUG9FIHx8IGhhc0FMTCkgJiYgZGF0YS5wZXJmb3JtYW5jZS5PSE0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe6v+WvuSBVQkwg5L2Z6YeP5qOA5p+lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGltaXRkYXRhLlBBSVJVQkwgJiYgZGF0YS5wZXJmb3JtYW5jZS5PSE0uUEFJUlVCTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhaXJVYmxQYWlycyA9IFsnUEFJUjEyJywgJ1BBSVIzNicsICdQQUlSNDUnLCAnUEFJUjc4J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJVYmxQYWlycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGF0YS5wZXJmb3JtYW5jZS5PSE0uUEFJUlVCTFtwYWlyXSkgPiBsaW1pdGRhdGEuUEFJUlVCTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmVnYXRpdmVNYXJnaW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVQkwgZmFpbFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUDJQIFVCTCDkvZnph4/mo4Dmn6VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdGRhdGEuUDJQVUJMICYmIGRhdGEucGVyZm9ybWFuY2UuT0hNLlAyUFVCTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAycFVibFBhaXJzID0gWydQQUlSMTIzNicsICdQQUlSMTI0NScsICdQQUlSMTI3OCcsICdQQUlSMzY0NScsICdQQUlSMzY3OCcsICdQQUlSNDU3OCddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwMnBVYmxQYWlycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGF0YS5wZXJmb3JtYW5jZS5PSE0uUDJQVUJMW3BhaXJdKSA+IGxpbWl0ZGF0YS5QMlBVQkwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05lZ2F0aXZlTWFyZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUDJQIGZhaWxcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtVGl0bGUgb2YgcGFyYW1UaXRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFHcm91cCA9IGRhdGFHcm91cE1hcFtwYXJhbVRpdGxlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g55S16Zi75Y+C5pWw55qE54m55q6K5aSE55CGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1UaXRsZSA9PT0gJ+eUtemYuycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNpc3RhbmNlTWFyZ2luID0gY2FsY3VsYXRlUmVzaXN0YW5jZU1hcmdpbihkYXRhLCBsaW1pdGRhdGEsIGxpbWl0VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNpc3RhbmNlTWFyZ2luIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZWdhdGl2ZU1hcmdpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFHcm91cCB8fCAhZGF0YT8ucGVyZm9ybWFuY2U/LmRhdGE/LltkYXRhR3JvdXBdIHx8ICFsaW1pdGRhdGE/LltkYXRhR3JvdXBdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSBkYXRhLnBlcmZvcm1hbmNlLmRhdGFbZGF0YUdyb3VwXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0VmFsdWVzID0gbGltaXRkYXRhW2RhdGFHcm91cF0/LlsnUEFJUkxpbWl0IChkQiknXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFpcnMgPSBbJ05FWFQgKGRCKScsICdBQ1ItTiAoZEIpJ10uaW5jbHVkZXMoZGF0YUdyb3VwKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTIzNicsICdQQUlSMTI0NScsICdQQUlSMTI3OCcsICdQQUlSMzY0NScsICdQQUlSMzY3OCcsICdQQUlSNDU3OCddIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0FDUi1GIChkQiknLCAnQ0RORVhUIChkQiknXS5pbmNsdWRlcyhkYXRhR3JvdXApID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTIzNicsICdQQUlSMTI0NScsICdQQUlSMTI3OCcsICdQQUlSMzYxMicsICdQQUlSMzY0NScsICdQQUlSMzY3OCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUEFJUjQ1MTInLCAnUEFJUjQ1MzUnLCAnUEFJUjQ1NzgnLCAnUEFJUjc4MTInLCAnUEFJUjc5MzYnLCAnUEFJUjc4NDUnXSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnUEFJUjEyJywgJ1BBSVIzNicsICdQQUlSNDUnLCAnUEFJUjc4J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW1pdFZhbHVlcy5sZW5ndGggJiYgIWhhc05lZ2F0aXZlTWFyZ2luOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGxpbWl0VmFsdWVzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGltaXRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGxpbWl0VmFsdWUgPT09IG51bGwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IHRlc3REYXRhW3BhaXJdPy5baW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gcGFyYW1UaXRsZSA9PT0gJ+aPkuWFpeaNn+iAlycgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGxpbWl0VmFsdWUpIC0gTWF0aC5hYnMoYWN0dWFsVmFsdWUpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhhY3R1YWxWYWx1ZSkgLSBsaW1pdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmdpbiA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZWdhdGl2ZU1hcmdpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlclJlc3VsdFN0YXR1cyA9IGhhc05lZ2F0aXZlTWFyZ2luID8gJ2ZhaWwnIDogJ3Bhc3MnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNhbGN1bGF0aW5nIG1hcmdpbnM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign5Yqg6L295rWL6K+V57uT5p6c5aSx6LSlOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudFByb2plY3Q/LmNhYmxlSWRzWzBdPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGNvbmZpZzogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50Q29uZmlnIHx8IHt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcnM6IGN1cnJlbnRPcGVyYXRvcj8ubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJXaXJlbWFwUmVzdWx0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyUGVyZm9ybWFuY2VTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJSZWY6IGNvcHBlclJlZlN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlclJlc3VsdFN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZHVsZVR5cGUgPT09ICdjZnAnICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmnoHpmZDlgLzlr7zlhaVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8ubGltaXRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZQX0xJTUlUID0gcmVxdWlyZSgnQC9zdG9yZS9GSUJFUi9DRlBfTElNSVQnKS5kZWZhdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdERhdGEgPSBDRlBfTElNSVRbbGltaXRWYWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqGxpbWl0RGF0YeS4reeahOaegemZkOWAvOi/m+ihjOWQjue7reWkhOeQhlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXJMb3NzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TGFzdEFkYXB0ZXJMb3NzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUxvc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMb3NzMTMxMG5tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsTG9zczE1NTBubSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3NzUGVyS204NTBubSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3NzUGVyS20xMzAwMG5tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3NQZXJLbTEzMTBubSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3NzUGVyS20xNTUwbm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U01MZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuTU1MZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSBsaW1pdERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g55So5oi36YWN572u5Yqg6L29XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RvckNvdW50ID0gY3VycmVudENvbmZpZz8ucGFyYW1zPy5jb25uZWN0b3JDb3VudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaWNlQ291bnQgPSBjdXJyZW50Q29uZmlnPy5wYXJhbXM/LnNwbGljZUNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZKdW1wZXIgPSBjdXJyZW50Q29uZmlnPy5wYXJhbXM/LnJlZkp1bXBlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZnBNYWluSW5TdGF0dXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2ZwTWFpbk91dFN0YXR1cyA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ZwSW5SZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yqg6L2956ys5LiA5Liq5rOi6ZW/55qE5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZTFEYXRhID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0ZJQkVSLyR7Y2ZwSW5SZXN1bHR9LyR7d2F2ZWxlbmd0aDF9LWR1bXAuanNvbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWKoOi9veesrOS6jOS4quazoumVv+eahOaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhdmUyRGF0YSA9IGF3YWl0IGltcG9ydChgQC9zdG9yZS9GSUJFUi8ke2NmcEluUmVzdWx0fS8ke3dhdmVsZW5ndGgyfS1kdW1wLmpzb25gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmt7vliqDpmo/mnLrmta7liqjlm6DlrZDvvIjmjZ/ogJfkuIrkuIvmta7liqgxJe+8iVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldERpc3RhbmNlUmFuZG9tRmFjdG9yID0gKCkgPT4gMTsgLy8g6ZW/5bqm5LiN5rWu5YqoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0TG9zc1JhbmRvbUZhY3RvciA9ICgpID0+IDEgKyAoTWF0aC5yYW5kb20oKSAqIDAuMDIgLSAwLjAxKTsgLy8g55Sf5oiQMC45OeWIsDEuMDHkuYvpl7TnmoTpmo/mnLrmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlhYjorqHnrpfkuKTkuKrms6Lplb/nmoTmjZ/ogJflgLxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXZlMUxvc3MgPSB3YXZlMURhdGEuU3VtbWFyeS50b3RhbExvc3MgKiBnZXRMb3NzUmFuZG9tRmFjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZTJMb3NzID0gd2F2ZTJEYXRhLlN1bW1hcnkudG90YWxMb3NzICogZ2V0TG9zc1JhbmRvbUZhY3RvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOaYr+WPguiAg+eKtuaAge+8jOWinuWKoDAuMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsV2F2ZTFMb3NzID0gIWNmcFJlZlN0YXR1cyA/IHdhdmUxTG9zcyA6IHdhdmUxTG9zcyArIDAuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFdhdmUyTG9zcyA9ICFjZnBSZWZTdGF0dXMgPyB3YXZlMkxvc3MgOiB3YXZlMkxvc3MgKyAwLjE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZwTWFpbkluU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXZlbGVuZ3RoMToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F2ZTogd2F2ZWxlbmd0aDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogKHdhdmUxRGF0YS5TdW1tYXJ5LnRvdGFsRGlzdGFuY2UgKiBnZXREaXN0YW5jZVJhbmRvbUZhY3RvcigpKS50b0ZpeGVkKDIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zczogZmluYWxXYXZlMUxvc3MudG9GaXhlZCgyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXZlbGVuZ3RoMjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F2ZTogd2F2ZWxlbmd0aDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogKHdhdmUyRGF0YS5TdW1tYXJ5LnRvdGFsRGlzdGFuY2UgKiBnZXREaXN0YW5jZVJhbmRvbUZhY3RvcigpKS50b0ZpeGVkKDIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zczogZmluYWxXYXZlMkxvc3MudG9GaXhlZCgyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZShcIuiiq+a1i+mTvui3r+S4juWPguiAg+i3s+e6pOexu+Wei+S4jeS4gOiHtO+8jOivt+ajgOafpVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxNTAwKTsgLy8gMzAwMCDmr6vnp5IgPSAzIOenklxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ZwT3V0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWKoOi9veesrOS4gOS4quazoumVv+eahOaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhdmUxRGF0YSA9IGF3YWl0IGltcG9ydChgQC9zdG9yZS9GSUJFUi8ke2NmcE91dFJlc3VsdH0vJHt3YXZlbGVuZ3RoMX0tZHVtcC5qc29uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yqg6L2956ys5LqM5Liq5rOi6ZW/55qE5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZTJEYXRhID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0ZJQkVSLyR7Y2ZwT3V0UmVzdWx0fS8ke3dhdmVsZW5ndGgyfS1kdW1wLmpzb25gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmt7vliqDpmo/mnLrmta7liqjlm6DlrZDvvIjmjZ/ogJfkuIrkuIvmta7liqgxJe+8iVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldERpc3RhbmNlUmFuZG9tRmFjdG9yID0gKCkgPT4gMTsgLy8g6ZW/5bqm5LiN5rWu5YqoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0TG9zc1JhbmRvbUZhY3RvciA9ICgpID0+IDEgKyAoTWF0aC5yYW5kb20oKSAqIDAuMDIgLSAwLjAxKTsgLy8g55Sf5oiQMC45OeWIsDEuMDHkuYvpl7TnmoTpmo/mnLrmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlhYjorqHnrpfkuKTkuKrms6Lplb/nmoTmjZ/ogJflgLxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXZlMUxvc3MgPSB3YXZlMURhdGEuU3VtbWFyeS50b3RhbExvc3MgKiBnZXRMb3NzUmFuZG9tRmFjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZTJMb3NzID0gd2F2ZTJEYXRhLlN1bW1hcnkudG90YWxMb3NzICogZ2V0TG9zc1JhbmRvbUZhY3RvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOaYr+WPguiAg+eKtuaAge+8jOWinuWKoDAuMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsV2F2ZTFMb3NzID0gIWNmcFJlZlN0YXR1cyA/IHdhdmUxTG9zcyA6IHdhdmUxTG9zcyArIDAuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFdhdmUyTG9zcyA9ICFjZnBSZWZTdGF0dXMgPyB3YXZlMkxvc3MgOiB3YXZlMkxvc3MgKyAwLjE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZwTWFpbk91dFN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F2ZWxlbmd0aDE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdmU6IHdhdmVsZW5ndGgxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6ICh3YXZlMURhdGEuU3VtbWFyeS50b3RhbERpc3RhbmNlICogZ2V0RGlzdGFuY2VSYW5kb21GYWN0b3IoKSkudG9GaXhlZCgyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3M6IGZpbmFsV2F2ZTFMb3NzLnRvRml4ZWQoMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F2ZWxlbmd0aDI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdmU6IHdhdmVsZW5ndGgyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6ICh3YXZlMkRhdGEuU3VtbWFyeS50b3RhbERpc3RhbmNlICogZ2V0RGlzdGFuY2VSYW5kb21GYWN0b3IoKSkudG9GaXhlZCgyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3M6IGZpbmFsV2F2ZTJMb3NzLnRvRml4ZWQoMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoXCLmnKrmo4DmtYvliLDlhYnnuqTvvIzor7fmo4Dmn6XmjqXlj6NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTUwMCk7IC8vIDMwMDAg5q+r56eSID0gMyDnp5JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g57uT5p6c6K6h566X5LiO5Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOagueWFiee6pFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZnBNYWluSW5kaXN0YW5jZSA9IGNmcE1haW5JblN0YXR1cz8ud2F2ZWxlbmd0aDE/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5JbmRpc3RhbmNlMiA9IGNmcE1haW5JblN0YXR1cz8ud2F2ZWxlbmd0aDI/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5Jbmxvc3MgPSBjZnBNYWluSW5TdGF0dXM/LndhdmVsZW5ndGgxPy5sb3NzIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5Jbmxvc3MyID0gY2ZwTWFpbkluU3RhdHVzPy53YXZlbGVuZ3RoMj8ubG9zcyB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDplb/luqbliKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gaXNNdWx0aU1vZGUgPyBsaW1pdERhdGEubWF4TU1MZW5ndGggOiBsaW1pdERhdGEubWF4U01MZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGVuZ3RoVmFsaWRJbiA9IGNmcE1haW5JbmRpc3RhbmNlIDw9IG1heExlbmd0aCAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZnBNYWluSW5kaXN0YW5jZTIgPD0gbWF4TGVuZ3RoIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5o2f6ICX5Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvc3NQZXJLbSA9IGlzTXVsdGlNb2RlID8gKGxpbWl0RGF0YS5sb3NzUGVyS204NTBubSk6KGxpbWl0RGF0YS5sb3NzUGVyS20xMzEwbm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb3NzUGVyS20yID0gaXNNdWx0aU1vZGUgPyAobGltaXREYXRhLmxvc3NQZXJLbTEzMDBubSk6KGxpbWl0RGF0YS5sb3NzUGVyS20xNTUwbm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxMb3NzTGltaXQgPSBsaW1pdERhdGEuYWRhcHRlckxvc3MgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yQ291bnQgKiBsaW1pdERhdGEuYWRhcHRlckxvc3MgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50ICogbGltaXREYXRhLnNwbGljZUxvc3MgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZnBNYWluSW5kaXN0YW5jZS8xMDAwKSAqIGxvc3NQZXJLbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc011bHRpTW9kZSA/IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW1pdERhdGEudG90YWxMb3NzODUwbm0pOihsaW1pdERhdGEudG90YWxMb3NzMTMxMG5tKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsTG9zc0xpbWl0MiA9IGxpbWl0RGF0YS5hZGFwdGVyTG9zcyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudCAqIGxpbWl0RGF0YS5hZGFwdGVyTG9zcyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VDb3VudCAqIGxpbWl0RGF0YS5zcGxpY2VMb3NzICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZnBNYWluSW5kaXN0YW5jZTIvMTAwMCkgKiBsb3NzUGVyS20yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzTXVsdGlNb2RlID8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbWl0RGF0YS50b3RhbExvc3MxMzAwbm0pOihsaW1pdERhdGEudG90YWxMb3NzMTU1MG5tKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTG9zc1ZhbGlkSW4gPSBjZnBNYWluSW5sb3NzIDw9IHRvdGFsTG9zc0xpbWl0ICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZwTWFpbklubG9zczIgPD0gdG90YWxMb3NzTGltaXQyIDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOesrOS6jOagueWFiee6pFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZnBNYWluT3V0ZGlzdGFuY2UgPSBjZnBNYWluT3V0U3RhdHVzPy53YXZlbGVuZ3RoMT8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZwTWFpbk91dGRpc3RhbmNlMiA9IGNmcE1haW5PdXRTdGF0dXM/LndhdmVsZW5ndGgyPy5kaXN0YW5jZSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZnBNYWluT3V0bG9zcyA9IGNmcE1haW5PdXRTdGF0dXM/LndhdmVsZW5ndGgxPy5sb3NzIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5PdXRsb3NzMiA9IGNmcE1haW5PdXRTdGF0dXM/LndhdmVsZW5ndGgyPy5sb3NzIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmVv+W6puWIpOaWrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhMZW5ndGhPdXQgPSBpc011bHRpTW9kZSA/IGxpbWl0RGF0YS5tYXhNTUxlbmd0aCA6IGxpbWl0RGF0YS5tYXhTTUxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMZW5ndGhWYWxpZE91dCA9IGNmcE1haW5PdXRkaXN0YW5jZSA8PSBtYXhMZW5ndGggJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmcE1haW5PdXRkaXN0YW5jZTIgPD0gbWF4TGVuZ3RoIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5o2f6ICX5Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvc3NQZXJLbU91dCA9IGlzTXVsdGlNb2RlID8gKGxpbWl0RGF0YS5sb3NzUGVyS204NTBubSk6KGxpbWl0RGF0YS5sb3NzUGVyS20xMzEwbm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb3NzUGVyS20yT3V0ID0gaXNNdWx0aU1vZGUgPyAobGltaXREYXRhLmxvc3NQZXJLbTEzMDBubSk6KGxpbWl0RGF0YS5sb3NzUGVyS20xNTUwbm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxMb3NzTGltaXRPdXQgPSBsaW1pdERhdGEuYWRhcHRlckxvc3MgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yQ291bnQgKiBsaW1pdERhdGEuYWRhcHRlckxvc3MgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50ICogbGltaXREYXRhLnNwbGljZUxvc3MgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZnBNYWluSW5kaXN0YW5jZS8xMDAwKSAqIGxvc3NQZXJLbU91dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc011bHRpTW9kZSA/IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW1pdERhdGEudG90YWxMb3NzODUwbm0pOihsaW1pdERhdGEudG90YWxMb3NzMTMxMG5tKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsTG9zc0xpbWl0Mk91dCA9IGxpbWl0RGF0YS5hZGFwdGVyTG9zcyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudCAqIGxpbWl0RGF0YS5hZGFwdGVyTG9zcyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VDb3VudCAqIGxpbWl0RGF0YS5zcGxpY2VMb3NzICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZnBNYWluT3V0ZGlzdGFuY2UyLzEwMDApICogbG9zc1BlckttMk91dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc011bHRpTW9kZSA/IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW1pdERhdGEudG90YWxMb3NzMTMwMG5tKToobGltaXREYXRhLnRvdGFsTG9zczE1NTBubSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xvc3NWYWxpZE91dCA9IGNmcE1haW5PdXRsb3NzIDw9IHRvdGFsTG9zc0xpbWl0T3V0ICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZnBNYWluT3V0bG9zczIgPD0gdG90YWxMb3NzTGltaXQyT3V0IDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnu5PmnpzliKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZQUmVzdWx0U3RhdHVzID0gaXNMZW5ndGhWYWxpZEluICYmIGlzTG9zc1ZhbGlkSW4gJiYgaXNMZW5ndGhWYWxpZE91dCAmJiBpc0xvc3NWYWxpZE91dCA/ICdwYXNzJyA6ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSU7nq6/lj6PpgJrov4flpLHotKXliKTmlq3vvIjmoLnmja4gaXNNdWx0aU1vZGUg5Yik5pat5L2/55So5ZOq57uE5Y+C5pWw77yJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluUG9ydFN0YXR1cyA9IGlzTXVsdGlNb2RlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNMZW5ndGhWYWxpZEluICYmIGlzTG9zc1ZhbGlkSW4gPyAncGFzcycgOiAnZmFpbCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpc0xlbmd0aFZhbGlkT3V0ICYmIGlzTG9zc1ZhbGlkT3V0ID8gJ3Bhc3MnIDogJ2ZhaWwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT1VU56uv5Y+j6YCa6L+H5aSx6LSl5Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE91dFBvcnRTdGF0dXMgPSBpc011bHRpTW9kZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzTGVuZ3RoVmFsaWRPdXQgJiYgaXNMZW5ndGhWYWxpZE91dCA/ICdwYXNzJyA6ICdmYWlsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGlzTGVuZ3RoVmFsaWRJbiAmJiBpc0xvc3NWYWxpZEluID8gJ3Bhc3MnIDogJ2ZhaWwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudENhYmxlSWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lMjogY3VycmVudENhYmxlSWQyIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGNvbmZpZzogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50Q29uZmlnIHx8IHt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcnM6IGN1cnJlbnRPcGVyYXRvcj8ubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGUFJlZjpjZnBSZWZTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlBSZWZDb25uZWN0OmNmcFJlZkNvbm5lY3RTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlBNYWluSW46Y2ZwTWFpbkluU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMZW5ndGhWYWxpZEluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMb3NzVmFsaWRJbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluUG9ydFN0YXR1cywgICAgICAvLyDmt7vliqBJTuerr+WPo+eKtuaAgVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMZW5ndGhWYWxpZE91dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9zc1ZhbGlkT3V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0UG9ydFN0YXR1cywgICAgIC8vIOa3u+WKoE9VVOerr+WPo+eKtuaAgVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZQTWFpbk91dDpjZnBNYWluT3V0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZQUmVzdWx0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydENsZWFuU3RhdHVzOmlzQWxsUGF0aHNDbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZHVsZVR5cGUgPT09ICdvZnAnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAgb2ZwQ29ubmVjdGlvblN0YXR1cyA9IGNvbm5lY3Rpb25TdGF0dXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2ZwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mcFJlc3VsdC5pbmNsdWRlcygncGFzcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9mcFJlZlN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2ZwUmVmU3RhdHVzID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZnBSZWZTdGF0dXMgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU21Pck1tID0gY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdtbS0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTbWNPck1tYyA9IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tYy0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNDb25uZWN0ZWRTbU9yTW0gPSBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ21tLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0Nvbm5lY3RlZFNtY09yTW1jID0gY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnbW1jLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWPquacieWJjeWvvOWSjOacq+WwvumDveaYr+ihpeWBv+e6v+aXtuaJjeaYr3Bhc3PvvIzlhbbku5bmg4XlhrXpg73mmK9mYWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NtY09yTW1jICYmIGhhc0Nvbm5lY3RlZFNtY09yTW1jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mcFJlc3VsdCA9PT0gJ2Nvbm5lY3Rvci1mYWlsLWVuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2ZwUmVmU3RhdHVzKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2ZwUmVmU3RhdHVzID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZnBSZWZTdGF0dXMgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU21Pck1tID0gY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdtbS0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTbWNPck1tYyA9IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tYy0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNDb25uZWN0ZWRTbU9yTW0gPSBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ21tLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0Nvbm5lY3RlZFNtY09yTW1jID0gY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnbW1jLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Y+q5pyJ5YmN5a+85ZKM5pyr5bC+6YO95piv6KGl5YG/57q/5pe25omN5pivcGFzc++8jOWFtuS7luaDheWGtemDveaYr2ZhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU21jT3JNbWMgJiYgaGFzQ29ubmVjdGVkU21jT3JNbWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzID0gJ3Bhc3MnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmIChvZnBSZXN1bHQgPT09ICdjb25uZWN0b3ItZmFpbC1zdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZnBSZWZTdGF0dXMgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU21Pck1tID0gY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdtbS0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU21jT3JNbWMgPSBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnc21jLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdtbWMtJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc1NtT3JNbSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGhhc1NtY09yTW1jKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50UHJvamVjdD8uY2FibGVJZHNbMF0/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Y29uZmlnOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRDb25maWcgfHwge30pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yczogY3VycmVudE9wZXJhdG9yPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVmU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZQUmVmQ29ubmVjdDpvZnBSZWZDb25uZWN0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwQ29ubmVjdGlvblN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRDbGVhblN0YXR1czppc0FsbFBhdGhzQ2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRlbXBUZXN0UmVzdWx0KHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfliqDovb3mtYvor5Xnu5PmnpzlpLHotKU6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBsb2FkVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjb25uZWN0aW9uU3RhdHVzPy5Db3BwZXJXaXJlbWFwU3RhdHVzLCBjb25uZWN0aW9uU3RhdHVzPy5Db3BwZXJQZXJmb3JtYW5jZVN0YXR1c10pO1xyXG4gICAgXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0ZW1wVGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVUeXBlID0gdGVtcFRlc3RSZXN1bHQudGVzdGNvbmZpZz8ubW9kdWxlVHlwZTtcclxuICAgICAgICAgICAgbGV0IGRlbGF5VGltZSA9IDE1MDA7IC8vIOm7mOiupOW7tui/nzEuNeenklxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKG1vZHVsZVR5cGUgPT09ICc4MDAwJykge1xyXG4gICAgICAgICAgICAgICAgZGVsYXlUaW1lID0gNTAwMDsgLy8gODAwMOaooeWdl+W7tui/nzXnp5JcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb2R1bGVUeXBlID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICAgICAgZGVsYXlUaW1lID0gMTUwMDsgLy8gY2Zw5qih5Z2X5bu26L+fMS4156eSXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kdWxlVHlwZSA9PT0gJ29mcCcpIHtcclxuICAgICAgICAgICAgICAgIGRlbGF5VGltZSA9IDYwMDA7IC8vIG9mcOaooeWdl+W7tui/nzbnp5JcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRlVG8oJ3Jlc3VsdGluZm8nLCAnbm9zYXZlJywgdGVtcFRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICB9LCBkZWxheVRpbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdGVtcFRlc3RSZXN1bHRdKTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XHJcbiAgICAgICAgICAgIDxUaXRsZUJhciBcclxuICAgICAgICAgICAgICAgIHRpdGxlPVwi6L+b56iLXCIgXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNDkwcHhdIGJnLVsjMzAzMDQwXSByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgey8qIOiDjOaZr+WbvueJhyAqL31cclxuICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy1jb3ZlciBiZy1jZW50ZXIgYmctbm8tcmVwZWF0XCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtnZXRBc3NldFVybCgnL3Rlc3RpbmcuZ2lmJyl9KWAgfX1cclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHsvKiDmtYvor5XphY3nva5saW1pdOWAvCAqL31cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgIHctZnVsbCB0b3AtOCAgei0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgdGV4dC14bCBmb250LWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/LnBhcmFtcz8ubGltaXRWYWx1ZSB8fCAn5pyq6K6+572uJ31cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyM2NTY1NjVdIHRvLVsjMzEzNDMxXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdob21lJywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsInVzZURpc3BsYXlTdG9yZSIsInVzZURldmljZVN0b3JlIiwidjQiLCJ1dWlkdjQiLCJnZXRBc3NldFVybCIsImNhbGN1bGF0ZVJlc2lzdGFuY2VNYXJnaW4iLCJkYXRhIiwibGltaXRkYXRhIiwibGltaXRWYWx1ZSIsImlzUG9FVGVzdCIsImluY2x1ZGVzIiwiaXNBTExUZXN0IiwibWluTWFyZ2luIiwiSW5maW5pdHkiLCJsb29wUmVzaXN0YW5jZURhdGEiLCJwZXJmb3JtYW5jZSIsImxvb3BSZXNpc3RhbmNlTGltaXQiLCJwYWlycyIsInBhaXIiLCJhY3R1YWxWYWx1ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwibGVuZ3RoIiwiYWN0dWFsVmFsdWUiLCJsaW1pdFZhbCIsInVuZGVmaW5lZCIsIm1hcmdpbiIsIk1hdGgiLCJhYnMiLCJtaW4iLCJ1YmxEYXRhIiwidWJsTGltaXQiLCJwMnBVYmxEYXRhIiwicDJwVWJsTGltaXQiLCJlcnJvciIsImNvbnNvbGUiLCJUZXN0aW5nIiwidmlldyIsImdldFN0YXRlIiwibmF2aWdhdGlvbiIsImN1cnJlbnQiLCJuYXZpZ2F0ZVRvIiwiZ2V0Q3VycmVudFRlc3RDb25maWciLCJnZXRDdXJyZW50UHJvamVjdCIsImdldEN1cnJlbnRPcGVyYXRvciIsImdldEN1cnJlbnRDYWJsZUlkIiwiZ2V0Q3VycmVudENhYmxlSWQyIiwic2V0VG9hc3RNZXNzYWdlIiwiY3VycmVudENvbmZpZyIsImNvbm5lY3Rpb25TdGF0dXMiLCJzZXRUb3RhbFRvYXN0TWVzc2FnZSIsImNvcHBlck1haW5QYXRoS2V5IiwibWFpblBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsImNvcHBlclJlbW90ZVBhdGhLZXkiLCJyZW1vdGVQYXRocyIsImNvcHBlcm1haW5lbmQiLCJlbmQiLCJjb3BwZXJyZW1vdGVlbmQiLCJjb3BwZXJSZWZTdGF0dXMiLCJyZWYiLCJjb3BwZXIiLCJzdGF0dXMiLCJjYWJsZVR5cGUiLCJwYXJhbXMiLCJpc011bHRpTW9kZSIsImNmcFJlZlN0YXR1cyIsImNmcCIsImNmcFJlZkNvbm5lY3RTdGF0dXMiLCJjb25uZWN0U3RhdHVzIiwiY2ZwSW5SZXN1bHQiLCJDRlBNYWluSW4iLCJDRlBNYWluT3V0IiwiY2ZwT3V0UmVzdWx0Iiwid2F2ZWxlbmd0aDEiLCJ3YXZlbGVuZ3RoMiIsIm9mcE1haW5FbmQiLCJvZnBSZWZTdGF0dXMiLCJvZnAiLCJvZnBSZWZDb25uZWN0U3RhdHVzIiwidGVtcFRlc3RSZXN1bHQiLCJzZXRUZW1wVGVzdFJlc3VsdCIsIm1vZHVsZVR5cGUiLCJjaGVja1BvcnRzQ2xlYW5TdGF0dXMiLCJwYXRocyIsImNsZWFuUG9ydHMiLCJmaWx0ZXIiLCJwb3J0SWQiLCJwb3J0RWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRBdHRyaWJ1dGUiLCJhbGxQYXRoc0NsZWFuU3RhdHVzIiwiaXNBbGxQYXRoc0NsZWFuIiwibWFpbkluUGF0aHMiLCJwYXRoIiwibWFpbk91dFBhdGhzIiwicmVtb3RlSW5QYXRocyIsInJlbW90ZU91dFBhdGhzIiwibWFpbkluQ2xlYW4iLCJtYWluT3V0Q2xlYW4iLCJyZW1vdGVJbkNsZWFuIiwicmVtb3RlT3V0Q2xlYW4iLCJ0b3RhbFBvcnRzIiwiY2xlYW5lZFBvcnRzIiwibG9hZFRlc3RSZXN1bHQiLCJjdXJyZW50UHJvamVjdCIsImN1cnJlbnRPcGVyYXRvciIsImN1cnJlbnRDYWJsZUlkIiwibmFtZSIsImN1cnJlbnRDYWJsZUlkMiIsIkNvcHBlcldpcmVtYXBTdGF0dXMiLCJDb3BwZXJQZXJmb3JtYW5jZVN0YXR1cyIsIm9mcFJlc3VsdCIsIk9GUFN0YXR1cyIsIndpcmVPcmRlciIsInRlc3RSZXN1bHQiLCJDb3BwZXJSZXN1bHRTdGF0dXMiLCJDb3BwZXJXaXJlbWFwUmVzdWx0U3RhdHVzIiwibG9nIiwicmVzcG9uc2UiLCJkZWZhdWx0IiwiYmFzZU5hbWUiLCJzcGxpdCIsImxpbWl0UmVzcG9uc2UiLCJwYXJhbVRpdGxlcyIsImRhdGFHcm91cE1hcCIsImhhc05lZ2F0aXZlTWFyZ2luIiwiTEVOR1RIIiwibGVuZ3RoUGFpcnMiLCJMT09QIiwiT0hNIiwibG9vcFBhaXJzIiwiaGFzUG9FIiwiaGFzQUxMIiwiUEFJUlVCTCIsInBhaXJVYmxQYWlycyIsIlAyUFVCTCIsInAycFVibFBhaXJzIiwicGFyYW1UaXRsZSIsImRhdGFHcm91cCIsInJlc2lzdGFuY2VNYXJnaW4iLCJ0ZXN0RGF0YSIsImxpbWl0VmFsdWVzIiwiaW5kZXgiLCJpZCIsImNhYmxlSWRzIiwidGVzdGNvbmZpZyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9wZXJhdG9ycyIsIkNvcHBlclJlZiIsIkNGUF9MSU1JVCIsInJlcXVpcmUiLCJsaW1pdERhdGEiLCJhZGFwdGVyTG9zcyIsImZpcnN0TGFzdEFkYXB0ZXJMb3NzIiwic3BsaWNlTG9zcyIsInRvdGFsTG9zczEzMTBubSIsInRvdGFsTG9zczE1NTBubSIsImxvc3NQZXJLbTg1MG5tIiwibG9zc1BlckttMTMwMDBubSIsImxvc3NQZXJLbTEzMTBubSIsImxvc3NQZXJLbTE1NTBubSIsIm1heFNNTGVuZ3RoIiwibWFuTU1MZW5ndGgiLCJjb25uZWN0b3JDb3VudCIsInNwbGljZUNvdW50IiwicmVmSnVtcGVyIiwiY2ZwTWFpbkluU3RhdHVzIiwiY2ZwTWFpbk91dFN0YXR1cyIsIndhdmUxRGF0YSIsIndhdmUyRGF0YSIsImdldERpc3RhbmNlUmFuZG9tRmFjdG9yIiwiZ2V0TG9zc1JhbmRvbUZhY3RvciIsInJhbmRvbSIsIndhdmUxTG9zcyIsIlN1bW1hcnkiLCJ0b3RhbExvc3MiLCJ3YXZlMkxvc3MiLCJmaW5hbFdhdmUxTG9zcyIsImZpbmFsV2F2ZTJMb3NzIiwid2F2ZSIsImRpc3RhbmNlIiwidG90YWxEaXN0YW5jZSIsInRvRml4ZWQiLCJsb3NzIiwic2V0VGltZW91dCIsImNmcE1haW5JbmRpc3RhbmNlIiwiY2ZwTWFpbkluZGlzdGFuY2UyIiwiY2ZwTWFpbklubG9zcyIsImNmcE1haW5Jbmxvc3MyIiwibWF4TGVuZ3RoIiwibWF4TU1MZW5ndGgiLCJpc0xlbmd0aFZhbGlkSW4iLCJsb3NzUGVyS20iLCJsb3NzUGVyS20yIiwibG9zc1BlckttMTMwMG5tIiwidG90YWxMb3NzTGltaXQiLCJ0b3RhbExvc3M4NTBubSIsInRvdGFsTG9zc0xpbWl0MiIsInRvdGFsTG9zczEzMDBubSIsImlzTG9zc1ZhbGlkSW4iLCJjZnBNYWluT3V0ZGlzdGFuY2UiLCJjZnBNYWluT3V0ZGlzdGFuY2UyIiwiY2ZwTWFpbk91dGxvc3MiLCJjZnBNYWluT3V0bG9zczIiLCJtYXhMZW5ndGhPdXQiLCJpc0xlbmd0aFZhbGlkT3V0IiwibG9zc1BlckttT3V0IiwibG9zc1BlckttMk91dCIsInRvdGFsTG9zc0xpbWl0T3V0IiwidG90YWxMb3NzTGltaXQyT3V0IiwiaXNMb3NzVmFsaWRPdXQiLCJDRlBSZXN1bHRTdGF0dXMiLCJJblBvcnRTdGF0dXMiLCJPdXRQb3J0U3RhdHVzIiwibmFtZTIiLCJDRlBSZWYiLCJDRlBSZWZDb25uZWN0IiwiUG9ydENsZWFuU3RhdHVzIiwib2ZwQ29ubmVjdGlvblN0YXR1cyIsIm9mcFJlc3VsdFN0YXR1cyIsIk9GUG91dFJlZlN0YXR1cyIsImhhc1NtT3JNbSIsImhhc1NtY09yTW1jIiwiaGFzQ29ubmVjdGVkU21Pck1tIiwiT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXMiLCJoYXNDb25uZWN0ZWRTbWNPck1tYyIsIk9GUFJlZkNvbm5lY3QiLCJkZWxheVRpbWUiLCJ0aW1lciIsImNsZWFyVGltZW91dCIsImRpdiIsImNsYXNzTmFtZSIsInRpdGxlIiwic3R5bGUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJzcGFuIiwiYnV0dG9uIiwib25DbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/Testing.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/fluke/Tools.js":
/*!***********************************************!*\
!*** ./src/components/dsxpage/fluke/Tools.js ***!
\***********************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Tools)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib/StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib/TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib/SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _config_api__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/config/api */ \"(pages-dir-node)/./src/config/api.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\n/* harmony import */ var _components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/AudioProvider */ \"(pages-dir-node)/./src/components/AudioProvider.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\n\n\nfunction Tools() {\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n const { navigateTo, updateCurrentView, getCurrentProject, updataRef, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const currentProject = getCurrentProject();\n const currentConfig = currentProject?.testConfigs[_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.testConfigIndex];\n const faultScenario = _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().faultScenarios;\n // 获取连接状态\n const { connectionStatus, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const mainPortStart = connectionStatus?.mainPaths?.[Object.keys(connectionStatus.mainPaths)[0]]?.start;\n const mainPortEnd = connectionStatus?.mainPaths?.[Object.keys(connectionStatus.mainPaths)[0]]?.end;\n const mainpath = connectionStatus?.mainPaths?.[Object.keys(connectionStatus.mainPaths)[0]]?.path;\n const mainVFLEnd = connectionStatus?.mainPaths?.['main-vfl']?.end || null;\n const [connectionMap, setConnectionMap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const connectionMapRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); // 添加ref用于缓存connectionMap\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n const { play } = (0,_components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__.useAudio)();\n // VFL状态\n const [vflStatus, setVflStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // 获取连接配置\n const fetchConnectionMap = async ()=>{\n try {\n // 如果已经有缓存的connectionMap,直接返回\n if (connectionMapRef.current) {\n setConnectionMap(connectionMapRef.current);\n return;\n }\n const apiUrl = _config_api__WEBPACK_IMPORTED_MODULE_8__.API_URLS.CONNECTION.MAP_WITH_SCENE(faultScenario);\n const response = await fetch(apiUrl);\n if (!response.ok) {\n throw new Error('获取连接配置失败');\n }\n const data = await response.json();\n connectionMapRef.current = data || {}; // 缓存connectionMap\n setConnectionMap(data || {});\n } catch (error) {\n console.error('获取连接配置错误:', error);\n setConnectionMap({});\n }\n };\n // --------------------------------------VFL--------------------------------------\n // VFL功能函数\n const handleVfl = ()=>{\n fetchConnectionMap();\n if (!mainVFLEnd) return;\n console.log(connectionStatus?.mainPaths?.['main-vfl']);\n // 在connectionMap中查找与mainVFLEnd匹配的连接\n let connectedPort = null;\n let targetPortId = null;\n // 首先检查mainVFLEnd是否作为key存在\n if (connectionMap[mainVFLEnd]) {\n connectedPort = mainVFLEnd;\n targetPortId = connectionMap[mainVFLEnd].connectedTo;\n } else {\n // 如果不是key,则查找哪个key的connectedTo等于mainVFLEnd\n const foundKey = Object.keys(connectionMap).find((key)=>{\n return connectionMap[key].connectedTo === mainVFLEnd;\n });\n if (foundKey) {\n connectedPort = mainVFLEnd;\n targetPortId = foundKey;\n }\n }\n if (connectedPort && targetPortId) {\n // 如果targetPortId包含-portx(x为数字),则移除这部分\n if (targetPortId && /-port\\d+$/.test(targetPortId)) {\n targetPortId = targetPortId.replace(/-port\\d+$/, '');\n }\n const targetElement = document.getElementById(targetPortId);\n if (targetElement) {\n // 检查目标元素是否已连接\n if (targetElement.classList.contains('jtk-connected')) {\n return;\n }\n // 获取目标元素的位置信息\n const rect = targetElement.getBoundingClientRect();\n // 创建闪烁的红点\n const redDot = document.createElement('div');\n redDot.style.cssText = `\n position: absolute;\n width: 20px;\n height: 20px;\n background-color: red;\n border-radius: 50%;\n top: ${rect.top + rect.height / 2}px;\n left: ${rect.left + rect.width / 2}px;\n transform: translate(-50%, -50%);\n animation: blink 1s infinite;\n z-index: 9999;\n `;\n // 添加闪烁动画样式\n const style = document.createElement('style');\n style.textContent = `\n @keyframes blink {\n 0% { opacity: 1; }\n 50% { opacity: 0; }\n 100% { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n document.body.appendChild(redDot);\n // 在VFL状态关闭时移除红点\n return ()=>{\n document.body.removeChild(redDot);\n document.head.removeChild(style);\n };\n }\n }\n };\n // VFL状态切换函数\n const SetvflStatus = ()=>{\n setVflStatus(!vflStatus);\n };\n // 使用useRef来存储当前的connectedPort\n const currentConnectedPortRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n let cleanup;\n if (vflStatus) {\n // 获取当前的connectedPort,使用双向查找逻辑\n let connectedPort = null;\n if (connectionMap[mainVFLEnd]) {\n connectedPort = mainVFLEnd;\n } else {\n connectedPort = Object.keys(connectionMap).find({\n \"Tools.useEffect\": (key)=>{\n return connectionMap[key].connectedTo === mainVFLEnd;\n }\n }[\"Tools.useEffect\"]);\n }\n // 如果connectedPort发生变化,重新执行handleVfl\n if (connectedPort !== currentConnectedPortRef.current) {\n if (cleanup) {\n cleanup();\n }\n currentConnectedPortRef.current = connectedPort;\n cleanup = handleVfl();\n } else if (!cleanup) {\n // 如果没有cleanup,说明还没有执行过handleVfl\n cleanup = handleVfl();\n }\n }\n return ({\n \"Tools.useEffect\": ()=>{\n if (cleanup) {\n cleanup();\n }\n }\n })[\"Tools.useEffect\"];\n }\n }[\"Tools.useEffect\"], [\n vflStatus,\n mainVFLEnd,\n connectionMap\n ]);\n // 监听视图变化,当离开vfl视图时重置vflStatus\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n if (view !== 'vfl' && vflStatus) {\n setVflStatus(false);\n }\n }\n }[\"Tools.useEffect\"], [\n view\n ]);\n //---------------------------------------------------------------------------------\n // 铜缆基准判断函数 对应ref-copper页脚按钮\n const RefCopperButtonClick = ()=>{\n if (mainPortStart === 'main-permanent') {\n if (mainPortEnd === 'remote-channel') {\n updateCurrentView('ref-copper-setting');\n } else {\n setToastMessage('基准设置错误,请检查连接状态'); // 可以用自定义的提示方式替代alert\n }\n } else {\n setToastMessage('适配器不兼容,导致基准设置失败'); // 同样,可以用自定义的提示方式替代alert\n }\n };\n //铜缆基准设置状态更新函数\n const ReFCopperUpdata = ()=>{\n updataRef('copper', {\n status: true\n });\n };\n // cfp基准判断函数 对应cfp页脚按钮\n const RefCfpButtonClick = ()=>{\n const mainPaths = connectionStatus.mainPaths || {};\n const remotePaths = connectionStatus.remotePaths || {};\n // 检查端口是否存在\n const mainOutExists = isMultiMode ? mainPaths['main-cfp-mm-out'] || mainPaths['main-cfp-sm-out'] : mainPaths['main-cfp-sm-out'];\n const mainInExists = mainPaths['main-cfp-in'];\n const remoteOutExists = isMultiMode ? remotePaths['remote-cfp-mm-out'] || remotePaths['remote-cfp-sm-out'] : remotePaths['remote-cfp-sm-out'];\n const remoteInExists = remotePaths['remote-cfp-in'];\n // 获取端点连接\n const mainOutEnd = isMultiMode ? mainPaths['main-cfp-mm-out']?.end || mainPaths['main-cfp-sm-out']?.end : mainPaths['main-cfp-sm-out']?.end;\n const mainInEnd = mainPaths['main-cfp-in']?.end;\n const remoteOutEnd = isMultiMode ? remotePaths['remote-cfp-mm-out']?.end || remotePaths['remote-cfp-sm-out']?.end : remotePaths['remote-cfp-sm-out']?.end;\n const remoteInEnd = remotePaths['remote-cfp-in']?.end;\n // 检查所有端口是否存在\n if (!mainOutExists || !mainInExists || !remoteOutExists || !remoteInExists) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查是否有未连接的端口\n if (!mainOutEnd || !mainInEnd || !remoteOutEnd || !remoteInEnd) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 验证端口连接是否正确\n const isConnectionCorrect = mainOutEnd === 'remote-cfp-in' && mainInEnd === (isMultiMode ? 'remote-cfp-mm-out' : 'remote-cfp-sm-out') && remoteOutEnd === 'main-cfp-in' && remoteInEnd === (isMultiMode ? 'main-cfp-mm-out' : 'main-cfp-sm-out');\n if (isConnectionCorrect) {\n updateCurrentView('ref-cfp-setting');\n } else {\n setTotalToastMessage('请使用跳线设置基准');\n }\n };\n const [showRetryButtons, setShowRetryButtons] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const RefCfpRefButtonClick = ()=>{\n const mainPaths = connectionStatus.mainPaths || {};\n const remotePaths = connectionStatus.remotePaths || {};\n // 检查端口是否存在\n const mainOutExists = isMultiMode ? mainPaths['main-cfp-mm-out'] || mainPaths['main-cfp-sm-out'] : mainPaths['main-cfp-sm-out'];\n const mainInExists = mainPaths['main-cfp-in'];\n const remoteOutExists = isMultiMode ? remotePaths['remote-cfp-mm-out'] || remotePaths['remote-cfp-sm-out'] : remotePaths['remote-cfp-sm-out'];\n const remoteInExists = remotePaths['remote-cfp-in'];\n // 获取端点连接\n const mainOutEnd = isMultiMode ? mainPaths['main-cfp-mm-out']?.end || mainPaths['main-cfp-sm-out']?.end : mainPaths['main-cfp-sm-out']?.end;\n const mainInEnd = mainPaths['main-cfp-in']?.end;\n const remoteOutEnd = isMultiMode ? remotePaths['remote-cfp-mm-out']?.end || remotePaths['remote-cfp-sm-out']?.end : remotePaths['remote-cfp-sm-out']?.end;\n const remoteInEnd = remotePaths['remote-cfp-in']?.end;\n // 检查所有端口是否存在\n if (!mainOutExists || !mainInExists || !remoteOutExists || !remoteInExists) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查是否有未连接的端口\n if (!mainOutEnd || !mainInEnd || !remoteOutEnd || !remoteInEnd) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查端口连接是否正确\n const isConnectionCorrect = mainOutEnd === 'remote-cfp-in' && mainInEnd === (isMultiMode ? 'remote-cfp-mm-out' : 'remote-cfp-sm-out') && remoteOutEnd === 'main-cfp-in' && remoteInEnd === (isMultiMode ? 'main-cfp-mm-out' : 'main-cfp-sm-out');\n if (!isConnectionCorrect) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查TRC长度\n const mainTrcCount = mainPaths['main-cfp-in']?.path?.filter((p)=>isMultiMode ? p.includes('mm-lc-lc') : p.includes('sm-lc-lc'))?.length || 0;\n const remoteTrcCount = remotePaths['remote-cfp-in']?.path?.filter((p)=>isMultiMode ? p.includes('mm-lc-lc') : p.includes('sm-lc-lc'))?.length || 0;\n if (mainTrcCount < 4 || remoteTrcCount < 4) {\n updateCurrentView('ref-cfp-settrc-no50');\n setShowRetryButtons(true);\n return;\n }\n if (isConnectionCorrect) {\n updateCurrentView('ref-cfp-settrc');\n } else {\n setToastMessage('请检查端口连接');\n }\n };\n //CFP基准设置状态更新函数\n const ReFCFPUpdata = ()=>{\n updataRef('cfp', {\n status: true\n });\n updataRef('cfp', {\n connectStatus: true\n });\n };\n //OFP基准设置状态更新函数\n const ReFOFPUpdata = ()=>{\n const statusValue = ofpBackground === 'ref-ofp.png' ? 'start' : 'end';\n updataRef('ofp', {\n status: statusValue\n });\n updataRef('ofp', {\n connectStatus: true\n });\n };\n // OFP补偿检测函数\n const handleRefOFPTest = ()=>{\n // 获取当前选择的光纤类型\n const cableType = currentConfig?.params?.cableType;\n // 获取当前选择的补偿方式(仅前导 or 前导+末尾)\n const isLeadOnly = ofpBackground === 'ref-ofp.png';\n // 判断是否为多模光纤\n const isMultiMode = cableType.includes('OM');\n // 检查mainpath的第一个接口是否匹配当前光纤类型\n const firstPort = mainpath?.[0];\n if (!firstPort || isMultiMode && !firstPort.includes('mm-out') || !isMultiMode && !firstPort.includes('sm-out')) {\n setToastMessage('未检测到前导光纤');\n return;\n }\n // 检查补偿光纤类型是否匹配\n const hasInvalidFiber = mainpath?.some((path)=>{\n if (path.includes('mmc-') || path.includes('smc-')) {\n return isMultiMode && path.includes('smc-') || !isMultiMode && path.includes('mmc-');\n }\n return false;\n });\n if (hasInvalidFiber) {\n setTotalToastMessage(isMultiMode ? '请使用多模补偿光纤' : '请使用单模补偿光纤');\n return;\n }\n // 检查路径长度和组成\n if (isLeadOnly) {\n // 仅前导模式:应该只有主机out端口和一个补偿光纤\n if (mainpath?.length !== 2 || !mainpath[1].includes(isMultiMode ? 'mmc-' : 'smc-')) {\n setTotalToastMessage('请确保正确连接前导光纤');\n return;\n }\n } else {\n // 前导+末尾模式:应该有主机out端口、两个补偿光纤和一个连接器\n if (mainpath?.length !== 6 || !mainpath[1].includes(isMultiMode ? 'mmc-' : 'smc-') || !mainpath[5].includes(isMultiMode ? 'mmc-' : 'smc-')) {\n setTotalToastMessage('请确保正确连接前导光纤');\n return;\n }\n }\n // 所有检查通过,更新视图\n updateCurrentView('ref-ofp-setting');\n };\n // 处理定时器效果\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n if (view === 'ref-copper-setting') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n play('pass');\n updateCurrentView('ref-copper-ok');\n ReFCopperUpdata(); //更新状态\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n if (view === 'ref-cfp-setting') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-cfp4');\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n if (view === 'ref-cfp-settrc') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-cfp-trc');\n ReFCFPUpdata();\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n if (view === 'ref-cfp-settrc-no50') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-cfp-trc');\n setToastMessage('TRC长度不足50cm,请重新测试');\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n // 重置showRetryButtons状态\n if (view !== 'ref-cfp-settrc-no50' && view !== 'ref-cfp-trc') {\n setShowRetryButtons(false);\n }\n if (view === 'ref-ofp-setting') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-ofp-ok');\n ReFOFPUpdata();\n }\n }[\"Tools.useEffect.timer\"], 10000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n }\n }[\"Tools.useEffect\"], [\n view\n ]);\n const [ofpBackground, setOfpBackground] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('ref-ofp.png');\n // 监听view变化,当进入ref-ofp视图时重置背景图片\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n if (view === 'ref-ofp') {\n setOfpBackground('ref-ofp.png');\n }\n }\n }[\"Tools.useEffect\"], [\n view\n ]);\n // 处理单选框切换事件\n const handleCompensationChange = (value)=>{\n setOfpBackground(value === 'lead' ? 'ref-ofp.png' : 'ref-ofp-end.png');\n };\n const renderContent = ()=>{\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] p-4\",\n children: [\n currentConfig?.moduleType === '8000' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center\",\n onClick: ()=>updateCurrentView('ref-copper'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"设置基准\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 459,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 461,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 460,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 455,\n columnNumber: 29\n }, this),\n currentConfig?.moduleType === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center\",\n onClick: ()=>updateCurrentView('ref-cfp'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"设置参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 477,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 479,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 478,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 473,\n columnNumber: 29\n }, this),\n currentConfig?.moduleType === 'ofp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center\",\n onClick: ()=>updateCurrentView('ref-ofp'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"设置补偿\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 494,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 496,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 495,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 490,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center mt-4\",\n onClick: ()=>updateCurrentView('tone'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"音频发生器\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 510,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 512,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 511,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 506,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-gradient-to-b from-[#e6e3e6] to-[#7b797b] rounded-sm p-4 shadow-lg flex justify-between items-center mt-4\",\n onClick: ()=>updateCurrentView('vfl'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"可视故障定位\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 525,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 527,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 526,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 521,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n case 'ref-copper':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/ref-copper.png'),\n alt: \"铜缆参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 543,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 542,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 541,\n columnNumber: 21\n }, this);\n case 'ref-copper-setting':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/testing.gif'),\n alt: \"测试中\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 558,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 557,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 556,\n columnNumber: 21\n }, this);\n case 'ref-copper-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/ref-copper-ok.png'),\n alt: \"铜缆参照设置完成\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 573,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 572,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 571,\n columnNumber: 21\n }, this);\n case 'ref-cfp':\n case 'ref-cfp2':\n case 'ref-cfp3':\n case 'ref-cfp4':\n case 'ref-cfp5':\n case 'ref-cfp6':\n case 'ref-cfp7':\n case 'ref-cfp8':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/ref-cfp${view === 'ref-cfp' ? '1' : view.slice(-1)}${isMultiMode ? '-mm' : '-sm'}.png`),\n alt: \"光纤参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 595,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 594,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 593,\n columnNumber: 21\n }, this);\n case 'ref-cfp-setting':\n case 'ref-cfp-settrc':\n case 'ref-cfp-settrc-no50':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/testing.gif'),\n alt: \"测试中\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 612,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 611,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 610,\n columnNumber: 21\n }, this);\n case 'ref-cfp-trc':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/ref-cfp-trc${isMultiMode ? '-mm' : '-sm'}.png`),\n alt: `TRC验证 - ${isMultiMode ? '多模' : '单模'}`,\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 627,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 626,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 625,\n columnNumber: 21\n }, this);\n case 'ref-cfp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/ref-cfp-ok${isMultiMode ? '-mm' : '-sm'}.png`),\n alt: `光纤参照设置完成 - ${isMultiMode ? '多模' : '单模'}`,\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 642,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 641,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 640,\n columnNumber: 21\n }, this);\n case 'ref-ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/${ofpBackground}`),\n alt: \"OTDR参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 657,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 656,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex items-end justify-end px-20\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex flex-col items-start space-y-20\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col space-y-4 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"text-white text-xl flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n name: \"compensation\",\n value: \"lead\",\n defaultChecked: true,\n onChange: (e)=>handleCompensationChange(e.target.value),\n className: \"mr-3 w-5 h-5\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 669,\n columnNumber: 37\n }, this),\n \"仅前导\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 668,\n columnNumber: 33\n }, this),\n faultScenario !== 'DataCenter' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"text-white text-xl flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n name: \"compensation\",\n value: \"both\",\n onChange: (e)=>handleCompensationChange(e.target.value),\n className: \"mr-3 w-5 h-5\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 681,\n columnNumber: 41\n }, this),\n \"前导+末尾\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 680,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 667,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-m mb-4\",\n children: [\n \"光纤类型:\",\n currentConfig?.params?.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 692,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 666,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 665,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 655,\n columnNumber: 21\n }, this);\n case 'ref-ofp-setting':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/refeset-testing.gif'),\n alt: \"OTDR测试中\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 704,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 703,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 702,\n columnNumber: 21\n }, this);\n case 'ref-ofp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(ofpBackground === 'ref-ofp.png' ? '/ref-ofp-ok.png' : '/ref-ofp-ok-end.png'),\n alt: \"OTDR参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 719,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: ofpBackground === 'ref-ofp.png' ? '选择前导事件' : '选择前导和末尾事件'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 726,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 718,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 717,\n columnNumber: 21\n }, this);\n case 'tone':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/tone.gif'),\n alt: \"音频发生器\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 735,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 734,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 733,\n columnNumber: 21\n }, this);\n case 'vfl':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#303040] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(vflStatus ? '/vfl-on.png' : '/vfl-off.png'),\n alt: \"可视故障定位\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 749,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 748,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 747,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const renderFooter = ()=>{\n switch(view){\n case 'ref-copper':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: RefCopperButtonClick,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 770,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 769,\n columnNumber: 21\n }, this);\n case 'ref-cfp-setting':\n case 'ref-cfp-settrc':\n case 'ref-cfp-settrc-no50':\n case 'ref-copper-setting':\n case 'ref-ofp-setting':\n case 'tone':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 786,\n columnNumber: 21\n }, this);\n case 'vfl':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: SetvflStatus,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"开/关\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 793,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 792,\n columnNumber: 21\n }, this);\n case 'ref-copper-ok':\n case 'ref-cfp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>navigateTo('home', 'main'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"主页\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 806,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 805,\n columnNumber: 21\n }, this);\n case 'ref-cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('ref-cfp2'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 818,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 817,\n columnNumber: 21\n }, this);\n case 'ref-cfp2':\n case 'ref-cfp4':\n case 'ref-cfp5':\n case 'ref-cfp6':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView(`ref-cfp${parseInt(view.slice(-1)) + 1}`),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 832,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 831,\n columnNumber: 21\n }, this);\n case 'ref-cfp-trc':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-between px-4\",\n children: [\n showRetryButtons ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n RefCfpRefButtonClick();\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"重新验证\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 846,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n updateCurrentView('ref-cfp');\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"重新开始\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 854,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 864,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n updateCurrentView('ref-cfp8');\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#656565] to-[#313431] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 866,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 843,\n columnNumber: 21\n }, this);\n case 'ref-cfp3':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: RefCfpButtonClick,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"设置参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 880,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 879,\n columnNumber: 21\n }, this);\n case 'ref-cfp7':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: RefCfpRefButtonClick,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"TRC验证\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 892,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 891,\n columnNumber: 21\n }, this);\n case 'ref-cfp8':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('ref-cfp-ok'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 904,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 903,\n columnNumber: 21\n }, this);\n case 'ref-ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleRefOFPTest,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 918,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 917,\n columnNumber: 21\n }, this);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('ref-ofp-setting'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 928,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 927,\n columnNumber: 21\n }, this);\n case 'ref-ofp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#303030] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>navigateTo('home', 'main'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#ffd773] to-[#e7aa29] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 940,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 939,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const renderTitleBar = ()=>{\n switch(view){\n case 'ref-copper-setting':\n case 'ref-cfp-setting':\n case 'ref-cfp-settrc':\n case 'ref-cfp-settrc-no50':\n case 'ref-ofp-setting':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"进程\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 963,\n columnNumber: 24\n }, this);\n case 'ref-copper-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置基准\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 966,\n columnNumber: 24\n }, this);\n case 'ref-cfp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 968,\n columnNumber: 24\n }, this);\n case 'ref-copper':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置基准\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 971,\n columnNumber: 24\n }, this);\n case 'ref-cfp':\n case 'ref-cfp2':\n case 'ref-cfp3':\n case 'ref-cfp4':\n case 'ref-cfp5':\n case 'ref-cfp6':\n case 'ref-cfp7':\n case 'ref-cfp8':\n case 'ref-cfp-trc':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置参照\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 982,\n columnNumber: 24\n }, this);\n case 'ref-ofp':\n case 'ref-ofp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置补偿\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 986,\n columnNumber: 24\n }, this);\n case 'tone':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"音频发生器\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 988,\n columnNumber: 24\n }, this);\n case 'vfl':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"可视故障定位\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 990,\n columnNumber: 24\n }, this);\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"工具\",\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 993,\n columnNumber: 24\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 999,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/fluke/Tools.js\",\n lineNumber: 998,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZmx1a2UvVG9vbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFvRDtBQUNyQjtBQUNvQjtBQUNGO0FBQ007QUFDSjtBQUNGO0FBQ1Q7QUFDSTtBQUNVO0FBRXZDLFNBQVNZO0lBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdOLG9FQUF3QixHQUFHUSxVQUFVLENBQUNDLE9BQU87SUFDOUQsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLGlCQUFpQixFQUFFQyxpQkFBaUIsRUFBQ0MsU0FBUyxFQUFDQyxlQUFlLEVBQUUsR0FBR2QsK0RBQWVBO0lBQ3RHLE1BQU1lLGlCQUFpQkg7SUFDdkIsTUFBTUksZ0JBQWdCRCxnQkFBZ0JFLFdBQVcsQ0FBQ2pCLG9FQUF3QixHQUFHa0IsZUFBZSxDQUFDQyxlQUFlLENBQUM7SUFDN0csTUFBTUMsZ0JBQWdCbkIsbUVBQXVCLEdBQUdvQixjQUFjO0lBQzlELFNBQVM7SUFDVCxNQUFNLEVBQUVDLGdCQUFnQixFQUFFQyxvQkFBb0IsRUFBRSxHQUFHdEIsOERBQWNBO0lBQ2pFLE1BQU11QixnQkFBZ0JGLGtCQUFrQkcsV0FBVyxDQUFDQyxPQUFPQyxJQUFJLENBQUNMLGlCQUFpQkcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUVHO0lBQ2pHLE1BQU1DLGNBQWNQLGtCQUFrQkcsV0FBVyxDQUFDQyxPQUFPQyxJQUFJLENBQUNMLGlCQUFpQkcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUVLO0lBQy9GLE1BQU1DLFdBQVdULGtCQUFrQkcsV0FBVyxDQUFDQyxPQUFPQyxJQUFJLENBQUNMLGlCQUFpQkcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUVPO0lBQzVGLE1BQU1DLGFBQWFYLGtCQUFrQkcsV0FBVyxDQUFDLFdBQVcsRUFBRUssT0FBTztJQUNyRSxNQUFNLENBQUNJLGVBQWVDLGlCQUFpQixHQUFHMUMs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O1lBRXRELEtBQUs7WUFDTCxLQUFLO2dCQUNELHFCQUFPLDhEQUFDUixnRUFBUUE7b0JBQUNvSixPQUFNO29CQUFPSSxRQUFPO29CQUFRaEosTUFBSzs7Ozs7O1lBQ3RELEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNSLGdFQUFRQTtvQkFBQ29KLE9BQU07b0JBQVFJLFFBQU87b0JBQVFoSixNQUFLOzs7Ozs7WUFDdkQsS0FBSztnQkFDRCxxQkFBTyw4REFBQ1IsZ0VBQVFBO29CQUFDb0osT0FBTTtvQkFBU0ksUUFBTztvQkFBUWhKLE1BQUs7Ozs7OztZQUV4RDtnQkFDSSxxQkFBTyw4REFBQ1IsZ0VBQVFBO29CQUFDb0osT0FBTTtvQkFBS0ksUUFBTztvQkFBT2hKLE1BQUs7Ozs7OztRQUN2RDtJQUNKO0lBRUEscUJBQ0ksOERBQUMwSDtRQUFJQyxXQUFVOzswQkFDWCw4REFBQ3BJLGlFQUFTQTs7Ozs7WUFDVHdKO1lBQ0F0QjtZQUNBb0I7Ozs7Ozs7QUFHYiIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2ZsdWtlL1Rvb2xzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IEltYWdlIGZyb20gJ25leHQvaW1hZ2UnO1xyXG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvU3RhdHVzQmFyJztcclxuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvVGl0bGVCYXInO1xyXG5pbXBvcnQgU3ViVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi9TdWJUaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcbmltcG9ydCB7IEFQSV9VUkxTIH0gZnJvbSAnQC9jb25maWcvYXBpJztcclxuaW1wb3J0IHsgZ2V0QXNzZXRVcmwgfSBmcm9tICdAL3V0aWxzL2Fzc2V0JztcclxuaW1wb3J0IHsgdXNlQXVkaW8gfSBmcm9tICdAL2NvbXBvbmVudHMvQXVkaW9Qcm92aWRlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUb29scygpIHtcclxuICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgY29uc3QgeyBuYXZpZ2F0ZVRvLCB1cGRhdGVDdXJyZW50VmlldywgZ2V0Q3VycmVudFByb2plY3QsdXBkYXRhUmVmLHNldFRvYXN0TWVzc2FnZSB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcbiAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gY3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzW3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy50ZXN0Q29uZmlnSW5kZXhdO1xyXG4gICAgY29uc3QgZmF1bHRTY2VuYXJpbyA9IHVzZURldmljZVN0b3JlLmdldFN0YXRlKCkuZmF1bHRTY2VuYXJpb3M7XHJcbiAgICAvLyDojrflj5bov57mjqXnirbmgIFcclxuICAgIGNvbnN0IHsgY29ubmVjdGlvblN0YXR1cywgc2V0VG90YWxUb2FzdE1lc3NhZ2UgfSA9IHVzZURldmljZVN0b3JlKCk7XHJcbiAgICBjb25zdCBtYWluUG9ydFN0YXJ0ID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bT2JqZWN0LmtleXMoY29ubmVjdGlvblN0YXR1cy5tYWluUGF0aHMpWzBdXT8uc3RhcnQ7XHJcbiAgICBjb25zdCBtYWluUG9ydEVuZCA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uW09iamVjdC5rZXlzKGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzKVswXV0/LmVuZDtcclxuICAgIGNvbnN0IG1haW5wYXRoID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bT2JqZWN0LmtleXMoY29ubmVjdGlvblN0YXR1cy5tYWluUGF0aHMpWzBdXT8ucGF0aDtcclxuICAgIGNvbnN0IG1haW5WRkxFbmQgPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LlsnbWFpbi12ZmwnXT8uZW5kIHx8IG51bGw7XHJcbiAgICBjb25zdCBbY29ubmVjdGlvbk1hcCwgc2V0Q29ubmVjdGlvbk1hcF0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBjb25uZWN0aW9uTWFwUmVmID0gdXNlUmVmKG51bGwpOyAgLy8g5re75YqgcmVm55So5LqO57yT5a2YY29ubmVjdGlvbk1hcFxyXG4gICAgY29uc3QgY2FibGVUeXBlID0gY3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlO1xyXG4gICAgY29uc3QgaXNNdWx0aU1vZGUgPSBjYWJsZVR5cGUuaW5jbHVkZXMoJ09NJyk7XHJcbiAgICBjb25zdCB7IHBsYXkgfSA9IHVzZUF1ZGlvKCk7XHJcbiAgICBcclxuICAgIC8vIFZGTOeKtuaAgVxyXG4gICAgY29uc3QgW3ZmbFN0YXR1cywgc2V0VmZsU3RhdHVzXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgICAgICAgLy8g6I635Y+W6L+e5o6l6YWN572uXHJcbiAgICAgICAgY29uc3QgZmV0Y2hDb25uZWN0aW9uTWFwID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5bey57uP5pyJ57yT5a2Y55qEY29ubmVjdGlvbk1hcO+8jOebtOaOpei/lOWbnlxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25NYXBSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldENvbm5lY3Rpb25NYXAoY29ubmVjdGlvbk1hcFJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFwaVVybCA9IEFQSV9VUkxTLkNPTk5FQ1RJT04uTUFQX1dJVEhfU0NFTkUoZmF1bHRTY2VuYXJpbyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaVVybCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfojrflj5bov57mjqXphY3nva7lpLHotKUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uTWFwUmVmLmN1cnJlbnQgPSBkYXRhIHx8IHt9OyAgLy8g57yT5a2YY29ubmVjdGlvbk1hcFxyXG4gICAgICAgICAgICAgICAgc2V0Q29ubmVjdGlvbk1hcChkYXRhIHx8IHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iOt+WPlui/nuaOpemFjee9rumUmeivrzonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBzZXRDb25uZWN0aW9uTWFwKHt9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVZGTC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBWRkzlip/og73lh73mlbBcclxuICAgIGNvbnN0IGhhbmRsZVZmbCA9ICgpID0+IHtcclxuICAgICAgICBmZXRjaENvbm5lY3Rpb25NYXAoKTtcclxuICAgICAgICBpZiAoIW1haW5WRkxFbmQpIHJldHVybjtcclxuICAgICAgICBjb25zb2xlLmxvZyhjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LlsnbWFpbi12ZmwnXSk7XHJcblxyXG4gICAgICAgIC8vIOWcqGNvbm5lY3Rpb25NYXDkuK3mn6Xmib7kuI5tYWluVkZMRW5k5Yy56YWN55qE6L+e5o6lXHJcbiAgICAgICAgbGV0IGNvbm5lY3RlZFBvcnQgPSBudWxsO1xyXG4gICAgICAgIGxldCB0YXJnZXRQb3J0SWQgPSBudWxsO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOmmluWFiOajgOafpW1haW5WRkxFbmTmmK/lkKbkvZzkuLprZXnlrZjlnKhcclxuICAgICAgICBpZiAoY29ubmVjdGlvbk1hcFttYWluVkZMRW5kXSkge1xyXG4gICAgICAgICAgICBjb25uZWN0ZWRQb3J0ID0gbWFpblZGTEVuZDtcclxuICAgICAgICAgICAgdGFyZ2V0UG9ydElkID0gY29ubmVjdGlvbk1hcFttYWluVkZMRW5kXS5jb25uZWN0ZWRUbztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK9rZXnvvIzliJnmn6Xmib7lk6rkuKprZXnnmoRjb25uZWN0ZWRUb+etieS6jm1haW5WRkxFbmRcclxuICAgICAgICAgICAgY29uc3QgZm91bmRLZXkgPSBPYmplY3Qua2V5cyhjb25uZWN0aW9uTWFwKS5maW5kKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSBtYWluVkZMRW5kO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0ZWRQb3J0ID0gbWFpblZGTEVuZDtcclxuICAgICAgICAgICAgICAgIHRhcmdldFBvcnRJZCA9IGZvdW5kS2V5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjb25uZWN0ZWRQb3J0ICYmIHRhcmdldFBvcnRJZCkge1xyXG4gICAgICAgICAgICAvLyDlpoLmnpx0YXJnZXRQb3J0SWTljIXlkKstcG9ydHjvvIh45Li65pWw5a2X77yJ77yM5YiZ56e76Zmk6L+Z6YOo5YiGXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRQb3J0SWQgJiYgLy1wb3J0XFxkKyQvLnRlc3QodGFyZ2V0UG9ydElkKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0UG9ydElkID0gdGFyZ2V0UG9ydElkLnJlcGxhY2UoLy1wb3J0XFxkKyQvLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0UG9ydElkKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAvLyDmo4Dmn6Xnm67moIflhYPntKDmmK/lkKblt7Lov57mjqVcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnanRrLWNvbm5lY3RlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOiOt+WPluebruagh+WFg+e0oOeahOS9jee9ruS/oeaBr1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOWIm+W7uumXqueDgeeahOe6oueCuVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVkRG90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICByZWREb3Quc3R5bGUuY3NzVGV4dCA9IGBcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAke3JlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyfXB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6ICR7cmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDJ9cHg7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBibGluayAxcyBpbmZpbml0ZTtcclxuICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiA5OTk5O1xyXG4gICAgICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8g5re75Yqg6Zeq54OB5Yqo55S75qC35byPXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcclxuICAgICAgICAgICAgICAgICAgICBAa2V5ZnJhbWVzIGJsaW5rIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgMCUgeyBvcGFjaXR5OiAxOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDUwJSB7IG9wYWNpdHk6IDA7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlZERvdCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOWcqFZGTOeKtuaAgeWFs+mXreaXtuenu+mZpOe6oueCuVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHJlZERvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzdHlsZSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIFZGTOeKtuaAgeWIh+aNouWHveaVsFxyXG4gICAgY29uc3QgU2V0dmZsU3RhdHVzID0gKCkgPT4ge1xyXG4gICAgICAgIHNldFZmbFN0YXR1cyghdmZsU3RhdHVzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5L2/55SodXNlUmVm5p2l5a2Y5YKo5b2T5YmN55qEY29ubmVjdGVkUG9ydFxyXG4gICAgY29uc3QgY3VycmVudENvbm5lY3RlZFBvcnRSZWYgPSB1c2VSZWYobnVsbCk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBsZXQgY2xlYW51cDtcclxuICAgICAgICBpZiAodmZsU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeeahGNvbm5lY3RlZFBvcnTvvIzkvb/nlKjlj4zlkJHmn6Xmib7pgLvovpFcclxuICAgICAgICAgICAgbGV0IGNvbm5lY3RlZFBvcnQgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbk1hcFttYWluVkZMRW5kXSkge1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGVkUG9ydCA9IG1haW5WRkxFbmQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0ZWRQb3J0ID0gT2JqZWN0LmtleXMoY29ubmVjdGlvbk1hcCkuZmluZChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uTWFwW2tleV0uY29ubmVjdGVkVG8gPT09IG1haW5WRkxFbmQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g5aaC5p6cY29ubmVjdGVkUG9ydOWPkeeUn+WPmOWMlu+8jOmHjeaWsOaJp+ihjGhhbmRsZVZmbFxyXG4gICAgICAgICAgICBpZiAoY29ubmVjdGVkUG9ydCAhPT0gY3VycmVudENvbm5lY3RlZFBvcnRSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29ubmVjdGVkUG9ydFJlZi5jdXJyZW50ID0gY29ubmVjdGVkUG9ydDtcclxuICAgICAgICAgICAgICAgIGNsZWFudXAgPSBoYW5kbGVWZmwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2xlYW51cCkge1xyXG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5rKh5pyJY2xlYW51cO+8jOivtOaYjui/mOayoeacieaJp+ihjOi/h2hhbmRsZVZmbFxyXG4gICAgICAgICAgICAgICAgY2xlYW51cCA9IGhhbmRsZVZmbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjbGVhbnVwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSwgW3ZmbFN0YXR1cywgbWFpblZGTEVuZCwgY29ubmVjdGlvbk1hcF0pO1xyXG5cclxuICAgIC8vIOebkeWQrOinhuWbvuWPmOWMlu+8jOW9k+emu+W8gHZmbOinhuWbvuaXtumHjee9rnZmbFN0YXR1c1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodmlldyAhPT0gJ3ZmbCcgJiYgdmZsU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHNldFZmbFN0YXR1cyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW3ZpZXddKTtcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgXHJcbiAgICAvLyDpk5znvIbln7rlh4bliKTmlq3lh73mlbAg5a+55bqUcmVmLWNvcHBlcumhteiEmuaMiemSrlxyXG4gICAgY29uc3QgUmVmQ29wcGVyQnV0dG9uQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKG1haW5Qb3J0U3RhcnQgPT09ICdtYWluLXBlcm1hbmVudCcpIHtcclxuICAgICAgICAgICAgaWYgKG1haW5Qb3J0RW5kID09PSAncmVtb3RlLWNoYW5uZWwnKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNvcHBlci1zZXR0aW5nJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+WfuuWHhuiuvue9rumUmeivr++8jOivt+ajgOafpei/nuaOpeeKtuaAgScpOyAvLyDlj6/ku6XnlKjoh6rlrprkuYnnmoTmj5DnpLrmlrnlvI/mm7/ku6NhbGVydFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfpgILphY3lmajkuI3lhbzlrrnvvIzlr7zoh7Tln7rlh4borr7nva7lpLHotKUnKTsgLy8g5ZCM5qC377yM5Y+v5Lul55So6Ieq5a6a5LmJ55qE5o+Q56S65pa55byP5pu/5LujYWxlcnRcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLy/pk5znvIbln7rlh4borr7nva7nirbmgIHmm7TmlrDlh73mlbBcclxuICAgIGNvbnN0IFJlRkNvcHBlclVwZGF0YSA9ICgpID0+IHtcclxuICAgICAgICB1cGRhdGFSZWYoJ2NvcHBlcicsIHsgc3RhdHVzOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNmcOWfuuWHhuWIpOaWreWHveaVsCDlr7nlupRjZnDpobXohJrmjInpkq5cclxuICAgIGNvbnN0IFJlZkNmcEJ1dHRvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1haW5QYXRocyA9IGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZVBhdGhzID0gY29ubmVjdGlvblN0YXR1cy5yZW1vdGVQYXRocyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8g5qOA5p+l56uv5Y+j5piv5ZCm5a2Y5ZyoXHJcbiAgICAgICAgY29uc3QgbWFpbk91dEV4aXN0cyA9IGlzTXVsdGlNb2RlIFxyXG4gICAgICAgICAgICA/IChtYWluUGF0aHNbJ21haW4tY2ZwLW1tLW91dCddIHx8IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J10pXHJcbiAgICAgICAgICAgIDogbWFpblBhdGhzWydtYWluLWNmcC1zbS1vdXQnXTtcclxuICAgICAgICBjb25zdCBtYWluSW5FeGlzdHMgPSBtYWluUGF0aHNbJ21haW4tY2ZwLWluJ107XHJcbiAgICAgICAgY29uc3QgcmVtb3RlT3V0RXhpc3RzID0gaXNNdWx0aU1vZGVcclxuICAgICAgICAgICAgPyAocmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtbW0tb3V0J10gfHwgcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J10pXHJcbiAgICAgICAgICAgIDogcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J107XHJcbiAgICAgICAgY29uc3QgcmVtb3RlSW5FeGlzdHMgPSByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1pbiddO1xyXG5cclxuICAgICAgICAvLyDojrflj5bnq6/ngrnov57mjqVcclxuICAgICAgICBjb25zdCBtYWluT3V0RW5kID0gaXNNdWx0aU1vZGUgXHJcbiAgICAgICAgICAgID8gbWFpblBhdGhzWydtYWluLWNmcC1tbS1vdXQnXT8uZW5kIHx8IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J10/LmVuZFxyXG4gICAgICAgICAgICA6IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J10/LmVuZDtcclxuICAgICAgICBjb25zdCBtYWluSW5FbmQgPSBtYWluUGF0aHNbJ21haW4tY2ZwLWluJ10/LmVuZDtcclxuICAgICAgICBjb25zdCByZW1vdGVPdXRFbmQgPSBpc011bHRpTW9kZSBcclxuICAgICAgICAgICAgPyByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1tbS1vdXQnXT8uZW5kIHx8IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLXNtLW91dCddPy5lbmRcclxuICAgICAgICAgICAgOiByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1zbS1vdXQnXT8uZW5kO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZUluRW5kID0gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtaW4nXT8uZW5kO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmiYDmnInnq6/lj6PmmK/lkKblrZjlnKhcclxuICAgICAgICBpZiAoIW1haW5PdXRFeGlzdHMgfHwgIW1haW5JbkV4aXN0cyB8fCAhcmVtb3RlT3V0RXhpc3RzIHx8ICFyZW1vdGVJbkV4aXN0cykge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+ajgOafpeerr+WPo+i/nuaOpScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmnInmnKrov57mjqXnmoTnq6/lj6NcclxuICAgICAgICBpZiAoIW1haW5PdXRFbmQgfHwgIW1haW5JbkVuZCB8fCAhcmVtb3RlT3V0RW5kIHx8ICFyZW1vdGVJbkVuZCkge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+ajgOafpeerr+WPo+i/nuaOpScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDpqozor4Hnq6/lj6Pov57mjqXmmK/lkKbmraPnoa5cclxuICAgICAgICBjb25zdCBpc0Nvbm5lY3Rpb25Db3JyZWN0ID0gXHJcbiAgICAgICAgICAgIG1haW5PdXRFbmQgPT09ICdyZW1vdGUtY2ZwLWluJyAmJlxyXG4gICAgICAgICAgICBtYWluSW5FbmQgPT09IChpc011bHRpTW9kZSA/ICdyZW1vdGUtY2ZwLW1tLW91dCcgOiAncmVtb3RlLWNmcC1zbS1vdXQnKSAmJlxyXG4gICAgICAgICAgICByZW1vdGVPdXRFbmQgPT09ICdtYWluLWNmcC1pbicgJiZcclxuICAgICAgICAgICAgcmVtb3RlSW5FbmQgPT09IChpc011bHRpTW9kZSA/ICdtYWluLWNmcC1tbS1vdXQnIDogJ21haW4tY2ZwLXNtLW91dCcpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICBpZiAoaXNDb25uZWN0aW9uQ29ycmVjdCkge1xyXG4gICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcC1zZXR0aW5nJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+ivt+S9v+eUqOi3s+e6v+iuvue9ruWfuuWHhicpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG5cclxuICAgIGNvbnN0IFtzaG93UmV0cnlCdXR0b25zLCBzZXRTaG93UmV0cnlCdXR0b25zXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgICBcclxuICAgIGNvbnN0IFJlZkNmcFJlZkJ1dHRvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1haW5QYXRocyA9IGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZVBhdGhzID0gY29ubmVjdGlvblN0YXR1cy5yZW1vdGVQYXRocyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8g5qOA5p+l56uv5Y+j5piv5ZCm5a2Y5ZyoXHJcbiAgICAgICAgY29uc3QgbWFpbk91dEV4aXN0cyA9IGlzTXVsdGlNb2RlIFxyXG4gICAgICAgICAgICA/IChtYWluUGF0aHNbJ21haW4tY2ZwLW1tLW91dCddIHx8IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J10pXHJcbiAgICAgICAgICAgIDogbWFpblBhdGhzWydtYWluLWNmcC1zbS1vdXQnXTtcclxuICAgICAgICBjb25zdCBtYWluSW5FeGlzdHMgPSBtYWluUGF0aHNbJ21haW4tY2ZwLWluJ107XHJcbiAgICAgICAgY29uc3QgcmVtb3RlT3V0RXhpc3RzID0gaXNNdWx0aU1vZGVcclxuICAgICAgICAgICAgPyAocmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtbW0tb3V0J10gfHwgcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J10pXHJcbiAgICAgICAgICAgIDogcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J107XHJcbiAgICAgICAgY29uc3QgcmVtb3RlSW5FeGlzdHMgPSByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1pbiddO1xyXG5cclxuICAgICAgICAvLyDojrflj5bnq6/ngrnov57mjqVcclxuICAgICAgICBjb25zdCBtYWluT3V0RW5kID0gaXNNdWx0aU1vZGUgXHJcbiAgICAgICAgICAgID8gbWFpblBhdGhzWydtYWluLWNmcC1tbS1vdXQnXT8uZW5kIHx8IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J10/LmVuZFxyXG4gICAgICAgICAgICA6IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J10/LmVuZDtcclxuICAgICAgICBjb25zdCBtYWluSW5FbmQgPSBtYWluUGF0aHNbJ21haW4tY2ZwLWluJ10/LmVuZDtcclxuICAgICAgICBjb25zdCByZW1vdGVPdXRFbmQgPSBpc011bHRpTW9kZSBcclxuICAgICAgICAgICAgPyByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1tbS1vdXQnXT8uZW5kIHx8IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLXNtLW91dCddPy5lbmRcclxuICAgICAgICAgICAgOiByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1zbS1vdXQnXT8uZW5kO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZUluRW5kID0gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtaW4nXT8uZW5kO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmiYDmnInnq6/lj6PmmK/lkKblrZjlnKhcclxuICAgICAgICBpZiAoIW1haW5PdXRFeGlzdHMgfHwgIW1haW5JbkV4aXN0cyB8fCAhcmVtb3RlT3V0RXhpc3RzIHx8ICFyZW1vdGVJbkV4aXN0cykge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+ajgOafpeerr+WPo+i/nuaOpScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmnInmnKrov57mjqXnmoTnq6/lj6NcclxuICAgICAgICBpZiAoIW1haW5PdXRFbmQgfHwgIW1haW5JbkVuZCB8fCAhcmVtb3RlT3V0RW5kIHx8ICFyZW1vdGVJbkVuZCkge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+ajgOafpeerr+WPo+i/nuaOpScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6Xnq6/lj6Pov57mjqXmmK/lkKbmraPnoa5cclxuICAgICAgICBjb25zdCBpc0Nvbm5lY3Rpb25Db3JyZWN0ID0gXHJcbiAgICAgICAgICAgIG1haW5PdXRFbmQgPT09ICdyZW1vdGUtY2ZwLWluJyAmJlxyXG4gICAgICAgICAgICBtYWluSW5FbmQgPT09IChpc011bHRpTW9kZSA/ICdyZW1vdGUtY2ZwLW1tLW91dCcgOiAncmVtb3RlLWNmcC1zbS1vdXQnKSAmJlxyXG4gICAgICAgICAgICByZW1vdGVPdXRFbmQgPT09ICdtYWluLWNmcC1pbicgJiZcclxuICAgICAgICAgICAgcmVtb3RlSW5FbmQgPT09IChpc011bHRpTW9kZSA/ICdtYWluLWNmcC1tbS1vdXQnIDogJ21haW4tY2ZwLXNtLW91dCcpO1xyXG4gICAgICAgIGlmICghaXNDb25uZWN0aW9uQ29ycmVjdCkge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+ajgOafpeerr+WPo+i/nuaOpScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6VUUkPplb/luqZcclxuICAgICAgICBjb25zdCBtYWluVHJjQ291bnQgPSAobWFpblBhdGhzWydtYWluLWNmcC1pbiddPy5wYXRoPy5maWx0ZXIocCA9PiBcclxuICAgICAgICAgICAgaXNNdWx0aU1vZGUgPyBwLmluY2x1ZGVzKCdtbS1sYy1sYycpIDogcC5pbmNsdWRlcygnc20tbGMtbGMnKVxyXG4gICAgICAgICk/Lmxlbmd0aCB8fCAwKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCByZW1vdGVUcmNDb3VudCA9IChyZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1pbiddPy5wYXRoPy5maWx0ZXIocCA9PiBcclxuICAgICAgICAgICAgaXNNdWx0aU1vZGUgPyBwLmluY2x1ZGVzKCdtbS1sYy1sYycpIDogcC5pbmNsdWRlcygnc20tbGMtbGMnKVxyXG4gICAgICAgICk/Lmxlbmd0aCB8fCAwKTtcclxuXHJcbiAgICAgICAgaWYgKG1haW5UcmNDb3VudCA8IDQgfHwgcmVtb3RlVHJjQ291bnQgPCA0KSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwLXNldHRyYy1ubzUwJyk7XHJcbiAgICAgICAgICAgIHNldFNob3dSZXRyeUJ1dHRvbnModHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIGlmIChpc0Nvbm5lY3Rpb25Db3JyZWN0KSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwLXNldHRyYycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6K+35qOA5p+l56uv5Y+j6L+e5o6lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLy9DRlDln7rlh4borr7nva7nirbmgIHmm7TmlrDlh73mlbBcclxuICAgIGNvbnN0IFJlRkNGUFVwZGF0YSA9ICgpID0+IHtcclxuICAgICAgICB1cGRhdGFSZWYoJ2NmcCcsIHsgc3RhdHVzOiB0cnVlIH0pO1xyXG4gICAgICAgIHVwZGF0YVJlZignY2ZwJywgeyBjb25uZWN0U3RhdHVzOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL09GUOWfuuWHhuiuvue9rueKtuaAgeabtOaWsOWHveaVsFxyXG4gICAgY29uc3QgUmVGT0ZQVXBkYXRhID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c1ZhbHVlID0gb2ZwQmFja2dyb3VuZCA9PT0gJ3JlZi1vZnAucG5nJyA/ICdzdGFydCcgOiAnZW5kJztcclxuICAgICAgICB1cGRhdGFSZWYoJ29mcCcsIHsgc3RhdHVzOiBzdGF0dXNWYWx1ZSB9KTtcclxuICAgICAgICB1cGRhdGFSZWYoJ29mcCcsIHsgY29ubmVjdFN0YXR1czogdHJ1ZSB9KTtcclxuXHJcbiAgICB9XHJcbiAgICAvLyBPRlDooaXlgb/mo4DmtYvlh73mlbBcclxuICAgIGNvbnN0IGhhbmRsZVJlZk9GUFRlc3QgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8g6I635Y+W5b2T5YmN6YCJ5oup55qE5YWJ57qk57G75Z6LXHJcbiAgICAgICAgY29uc3QgY2FibGVUeXBlID0gY3VycmVudENvbmZpZz8ucGFyYW1zPy5jYWJsZVR5cGU7XHJcbiAgICAgICAgLy8g6I635Y+W5b2T5YmN6YCJ5oup55qE6KGl5YG/5pa55byP77yI5LuF5YmN5a+8IG9yIOWJjeWvvCvmnKvlsL7vvIlcclxuICAgICAgICBjb25zdCBpc0xlYWRPbmx5ID0gb2ZwQmFja2dyb3VuZCA9PT0gJ3JlZi1vZnAucG5nJztcclxuICAgICAgICBcclxuICAgICAgICAvLyDliKTmlq3mmK/lkKbkuLrlpJrmqKHlhYnnuqRcclxuICAgICAgICBjb25zdCBpc011bHRpTW9kZSA9IGNhYmxlVHlwZS5pbmNsdWRlcygnT00nKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmo4Dmn6VtYWlucGF0aOeahOesrOS4gOS4quaOpeWPo+aYr+WQpuWMuemFjeW9k+WJjeWFiee6pOexu+Wei1xyXG4gICAgICAgIGNvbnN0IGZpcnN0UG9ydCA9IG1haW5wYXRoPy5bMF07XHJcbiAgICAgICAgaWYgKCFmaXJzdFBvcnQgfHwgXHJcbiAgICAgICAgICAgIChpc011bHRpTW9kZSAmJiAhZmlyc3RQb3J0LmluY2x1ZGVzKCdtbS1vdXQnKSkgfHwgXHJcbiAgICAgICAgICAgICghaXNNdWx0aU1vZGUgJiYgIWZpcnN0UG9ydC5pbmNsdWRlcygnc20tb3V0JykpKSB7XHJcbiAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn5pyq5qOA5rWL5Yiw5YmN5a+85YWJ57qkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5qOA5p+l6KGl5YG/5YWJ57qk57G75Z6L5piv5ZCm5Yy56YWNXHJcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZEZpYmVyID0gbWFpbnBhdGg/LnNvbWUocGF0aCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCdtbWMtJykgfHwgcGF0aC5pbmNsdWRlcygnc21jLScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlzTXVsdGlNb2RlICYmIHBhdGguaW5jbHVkZXMoJ3NtYy0nKSkgfHwgKCFpc011bHRpTW9kZSAmJiBwYXRoLmluY2x1ZGVzKCdtbWMtJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoaGFzSW52YWxpZEZpYmVyKSB7XHJcbiAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKGlzTXVsdGlNb2RlID8gJ+ivt+S9v+eUqOWkmuaooeihpeWBv+WFiee6pCcgOiAn6K+35L2/55So5Y2V5qih6KGl5YG/5YWJ57qkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5qOA5p+l6Lev5b6E6ZW/5bqm5ZKM57uE5oiQXHJcbiAgICAgICAgaWYgKGlzTGVhZE9ubHkpIHtcclxuICAgICAgICAgICAgLy8g5LuF5YmN5a+85qih5byP77ya5bqU6K+l5Y+q5pyJ5Li75py6b3V056uv5Y+j5ZKM5LiA5Liq6KGl5YG/5YWJ57qkXHJcbiAgICAgICAgICAgIGlmIChtYWlucGF0aD8ubGVuZ3RoICE9PSAyIHx8IFxyXG4gICAgICAgICAgICAgICAgIW1haW5wYXRoWzFdLmluY2x1ZGVzKGlzTXVsdGlNb2RlID8gJ21tYy0nIDogJ3NtYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+ivt+ehruS/neato+ehrui/nuaOpeWJjeWvvOWFiee6pCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8g5YmN5a+8K+acq+WwvuaooeW8j++8muW6lOivpeacieS4u+acum91dOerr+WPo+OAgeS4pOS4quihpeWBv+WFiee6pOWSjOS4gOS4qui/nuaOpeWZqFxyXG4gICAgICAgICAgICBpZiAobWFpbnBhdGg/Lmxlbmd0aCAhPT0gNiB8fCBcclxuICAgICAgICAgICAgICAgICFtYWlucGF0aFsxXS5pbmNsdWRlcyhpc011bHRpTW9kZSA/ICdtbWMtJyA6ICdzbWMtJykgfHwgXHJcbiAgICAgICAgICAgICAgICAhbWFpbnBhdGhbNV0uaW5jbHVkZXMoaXNNdWx0aU1vZGUgPyAnbW1jLScgOiAnc21jLScpKSAge1xyXG4gICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+ivt+ehruS/neato+ehrui/nuaOpeWJjeWvvOWFiee6pCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOaJgOacieajgOafpemAmui/h++8jOabtOaWsOinhuWbvlxyXG4gICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtb2ZwLXNldHRpbmcnKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5aSE55CG5a6a5pe25Zmo5pWI5p6cXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh2aWV3ID09PSAncmVmLWNvcHBlci1zZXR0aW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGxheSgncGFzcycpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jb3BwZXItb2snKTtcclxuICAgICAgICAgICAgICAgIFJlRkNvcHBlclVwZGF0YSgpOyAvL+abtOaWsOeKtuaAgVxyXG4gICAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2aWV3ID09PSAncmVmLWNmcC1zZXR0aW5nJykge1xyXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jZnA0Jyk7XHJcbiAgICAgICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdyZWYtY2ZwLXNldHRyYycpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwLXRyYycpO1xyXG4gICAgICAgICAgICAgICAgUmVGQ0ZQVXBkYXRhKCk7IFxyXG4gICAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2aWV3ID09PSAncmVmLWNmcC1zZXR0cmMtbm81MCcpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwLXRyYycpO1xyXG4gICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCdUUkPplb/luqbkuI3otrM1MGNtLOivt+mHjeaWsOa1i+ivlScpO1xyXG4gICAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDph43nva5zaG93UmV0cnlCdXR0b25z54q25oCBXHJcbiAgICAgICAgaWYgKHZpZXcgIT09ICdyZWYtY2ZwLXNldHRyYy1ubzUwJyAmJiB2aWV3ICE9PSAncmVmLWNmcC10cmMnKSB7XHJcbiAgICAgICAgICAgIHNldFNob3dSZXRyeUJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldyA9PT0gJ3JlZi1vZnAtc2V0dGluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtb2ZwLW9rJyk7XHJcbiAgICAgICAgICAgICAgICBSZUZPRlBVcGRhdGEoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdmlld10pO1xyXG5cclxuICAgIGNvbnN0IFtvZnBCYWNrZ3JvdW5kLCBzZXRPZnBCYWNrZ3JvdW5kXSA9IHVzZVN0YXRlKCdyZWYtb2ZwLnBuZycpO1xyXG5cclxuICAgIC8vIOebkeWQrHZpZXflj5jljJbvvIzlvZPov5vlhaVyZWYtb2Zw6KeG5Zu+5pe26YeN572u6IOM5pmv5Zu+54mHXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh2aWV3ID09PSAncmVmLW9mcCcpIHtcclxuICAgICAgICAgICAgc2V0T2ZwQmFja2dyb3VuZCgncmVmLW9mcC5wbmcnKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbdmlld10pO1xyXG5cclxuICAgIC8vIOWkhOeQhuWNlemAieahhuWIh+aNouS6i+S7tlxyXG4gICAgY29uc3QgaGFuZGxlQ29tcGVuc2F0aW9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgc2V0T2ZwQmFja2dyb3VuZCh2YWx1ZSA9PT0gJ2xlYWQnID8gJ3JlZi1vZnAucG5nJyA6ICdyZWYtb2ZwLWVuZC5wbmcnKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWFpbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBwLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICc4MDAwJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygncmVmLWNvcHBlcicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+6K6+572u5Z+65YeGPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7orr7nva7lj4Lnhac8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdvZnAnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtb2ZwJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7orr7nva7ooaXlgb88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG10LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3RvbmUnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7pn7PpopHlj5HnlJ/lmag8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2U2ZTNlNl0gdG8tWyM3Yjc5N2JdIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbXQtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygndmZsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+5Y+v6KeG5pWF6Zqc5a6a5L2NPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9yZWYtY29wcGVyLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumTnOe8huWPgueFp+iuvue9rlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jb3BwZXItc2V0dGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdGVzdGluZy5naWYnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLmtYvor5XkuK1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyLW9rJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9yZWYtY29wcGVyLW9rLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumTnOe8huWPgueFp+iuvue9ruWujOaIkFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwMic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAzJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDQnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA2JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwOCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvcmVmLWNmcCR7dmlldyA9PT0gJ3JlZi1jZnAnID8gJzEnIDogdmlldy5zbGljZSgtMSl9JHtpc011bHRpTW9kZSA/ICctbW0nIDogJy1zbSd9LnBuZ2ApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuWFiee6pOWPgueFp+iuvue9rlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcC1zZXR0cmMtbm81MCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdGVzdGluZy5naWYnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLmtYvor5XkuK1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwLXRyYyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvcmVmLWNmcC10cmMke2lzTXVsdGlNb2RlID8gJy1tbScgOiAnLXNtJ30ucG5nYCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PXtgVFJD6aqM6K+BIC0gJHtpc011bHRpTW9kZSA/ICflpJrmqKEnIDogJ+WNleaooSd9YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcC1vayc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvcmVmLWNmcC1vayR7aXNNdWx0aU1vZGUgPyAnLW1tJyA6ICctc20nfS5wbmdgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9e2DlhYnnuqTlj4Lnhaforr7nva7lrozmiJAgLSAke2lzTXVsdGlNb2RlID8gJ+WkmuaooScgOiAn5Y2V5qihJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIGZsZXggZmxleC1jb2wgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvJHtvZnBCYWNrZ3JvdW5kfWApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIk9URFLlj4Lnhaforr7nva5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4ICBpdGVtcy1lbmQganVzdGlmeS1lbmQgcHgtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IHNwYWNlLXktMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQteGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29tcGVuc2F0aW9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImxlYWRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDb21wZW5zYXRpb25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMyB3LTUgaC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS7heWJjeWvvFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZhdWx0U2NlbmFyaW8gIT09ICdEYXRhQ2VudGVyJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQteGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29tcGVuc2F0aW9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJib3RoXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDb21wZW5zYXRpb25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTMgdy01IGgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWJjeWvvCvmnKvlsL5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1tIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlhYnnuqTnsbvlnovvvJp7Y3VycmVudENvbmZpZz8ucGFyYW1zPy5jYWJsZVR5cGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1vZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvcmVmZXNldC10ZXN0aW5nLmdpZicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIk9URFLmtYvor5XkuK1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwLW9rJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMzMDMwNDBdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwob2ZwQmFja2dyb3VuZCA9PT0gJ3JlZi1vZnAucG5nJyA/ICcvcmVmLW9mcC1vay5wbmcnIDogJy9yZWYtb2ZwLW9rLWVuZC5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJPVERS5Y+C54Wn6K6+572uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUJhciB0aXRsZT17b2ZwQmFja2dyb3VuZCA9PT0gJ3JlZi1vZnAucG5nJyA/ICfpgInmi6nliY3lr7zkuovku7YnIDogJ+mAieaLqeWJjeWvvOWSjOacq+WwvuS6i+S7tid9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAndG9uZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdG9uZS5naWYnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLpn7PpopHlj5HnlJ/lmahcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZmbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjMzAzMDQwXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKHZmbFN0YXR1cyA/ICcvdmZsLW9uLnBuZycgOiAnL3ZmbC1vZmYucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi5Y+v6KeG5pWF6Zqc5a6a5L2NXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNvcHBlcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e1JlZkNvcHBlckJ1dHRvbkNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjJzogICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjLW5vNTAnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyLXNldHRpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwLXNldHRpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICd0b25lJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3ZmbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtTZXR2ZmxTdGF0dXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDlvIAv5YWzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7IFxyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLWNvcHBlci1vayc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtb2snOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdob21lJywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS4u+mhtVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jZnAyJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZkNzczXSB0by1bI2U3YWEyOV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDkuIvkuIDkuKpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwMic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA0JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDUnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KGByZWYtY2ZwJHtwYXJzZUludCh2aWV3LnNsaWNlKC0xKSkgKyAxfWApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5LiL5LiA5LiqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtdHJjJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dSZXRyeUJ1dHRvbnMgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZkNmcFJlZkJ1dHRvbkNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDph43mlrDpqozor4FcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjNjU2NTY1XSB0by1bIzMxMzQzMV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg6YeN5paw5byA5aeLXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jZnA4Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bIzY1NjU2NV0gdG8tWyMzMTM0MzFdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5LiL5LiA5LiqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAzJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17UmVmQ2ZwQnV0dG9uQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZkNzczXSB0by1bI2U3YWEyOV0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDorr7nva7lj4LnhadcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDcnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtSZWZDZnBSZWZCdXR0b25DbGlja31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSQ+mqjOivgVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwOCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMzMDMwMzBdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jZnAtb2snKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS4i+S4gOS4qlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1vZnAnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVSZWZPRlBUZXN0fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzMwMzAzMF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1vZnAtc2V0dGluZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZDc3M10gdG8tWyNlN2FhMjldIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1vZnAtb2snOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMzAzMDMwXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdob21lJywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmQ3NzNdIHRvLVsjZTdhYTI5XSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS/neWtmFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlbmRlclRpdGxlQmFyID0gKCkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyLXNldHRpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwLXNldHRpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwLXNldHRyYyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjLW5vNTAnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwLXNldHRpbmcnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUaXRsZUJhciB0aXRsZT1cIui/m+eoi1wiIGJhY2tUbz1cInRvb2xzXCIgdmlldz1cIm1haW5cIiAvPjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jb3BwZXItb2snOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUaXRsZUJhciB0aXRsZT1cIuiuvue9ruWfuuWHhlwiICAvPjtcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcC1vayc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi6K6+572u5Y+C54WnXCIgLz47XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8VGl0bGVCYXIgdGl0bGU9XCLorr7nva7ln7rlh4ZcIiBiYWNrVG89XCJ0b29sc1wiIHZpZXc9XCJtYWluXCIgLz47XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDInOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwMyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA0JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDUnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA3JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDgnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwLXRyYyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi6K6+572u5Y+C54WnXCIgYmFja1RvPVwidG9vbHNcIiB2aWV3PVwibWFpblwiIC8+O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FzZSAncmVmLW9mcCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1vZnAtb2snOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUaXRsZUJhciB0aXRsZT1cIuiuvue9ruihpeWBv1wiIGJhY2tUbz1cInRvb2xzXCIgdmlldz1cIm1haW5cIiAvPjtcclxuICAgICAgICAgICAgY2FzZSAndG9uZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi6Z+z6aKR5Y+R55Sf5ZmoXCIgYmFja1RvPVwidG9vbHNcIiB2aWV3PVwibWFpblwiIC8+O1xyXG4gICAgICAgICAgICBjYXNlICd2ZmwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUaXRsZUJhciB0aXRsZT1cIuWPr+inhuaVhemanOWumuS9jVwiIGJhY2tUbz1cInRvb2xzXCIgdmlldz1cIm1haW5cIiAvPjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi5bel5YW3XCIgYmFja1RvPVwiaG9tZVwiIHZpZXc9XCJtYWluXCIgLz47XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XHJcbiAgICAgICAgICAgIHtyZW5kZXJUaXRsZUJhcigpfVxyXG4gICAgICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxyXG4gICAgICAgICAgICB7cmVuZGVyRm9vdGVyKCl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVJlZiIsIkltYWdlIiwiU3RhdHVzQmFyIiwiVGl0bGVCYXIiLCJTdWJUaXRsZUJhciIsInVzZURpc3BsYXlTdG9yZSIsInVzZURldmljZVN0b3JlIiwiQVBJX1VSTFMiLCJnZXRBc3NldFVybCIsInVzZUF1ZGlvIiwiVG9vbHMiLCJ2aWV3IiwiZ2V0U3RhdGUiLCJuYXZpZ2F0aW9uIiwiY3VycmVudCIsIm5hdmlnYXRlVG8iLCJ1cGRhdGVDdXJyZW50VmlldyIsImdldEN1cnJlbnRQcm9qZWN0IiwidXBkYXRhUmVmIiwic2V0VG9hc3RNZXNzYWdlIiwiY3VycmVudFByb2plY3QiLCJjdXJyZW50Q29uZmlnIiwidGVzdENvbmZpZ3MiLCJzZWxlY3RlZEluZGV4ZXMiLCJ0ZXN0Q29uZmlnSW5kZXgiLCJmYXVsdFNjZW5hcmlvIiwiZmF1bHRTY2VuYXJpb3MiLCJjb25uZWN0aW9uU3RhdHVzIiwic2V0VG90YWxUb2FzdE1lc3NhZ2UiLCJtYWluUG9ydFN0YXJ0IiwibWFpblBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInN0YXJ0IiwibWFpblBvcnRFbmQiLCJlbmQiLCJtYWlucGF0aCIsInBhdGgiLCJtYWluVkZMRW5kIiwiY29ubmVjdGlvbk1hcCIsInNldENvbm5lY3Rpb25NYXAiLCJjb25uZWN0aW9uTWFwUmVmIiwiY2FibGVUeXBlIiwicGFyYW1zIiwiaXNNdWx0aU1vZGUiLCJpbmNsdWRlcyIsInBsYXkiLCJ2ZmxTdGF0dXMiLCJzZXRWZmxTdGF0dXMiLCJmZXRjaENvbm5lY3Rpb25NYXAiLCJhcGlVcmwiLCJDT05ORUNUSU9OIiwiTUFQX1dJVEhfU0NFTkUiLCJyZXNwb25zZSIsImZldGNoIiwib2siLCJFcnJvciIsImRhdGEiLCJqc29uIiwiZXJyb3IiLCJjb25zb2xlIiwiaGFuZGxlVmZsIiwibG9nIiwiY29ubmVjdGVkUG9ydCIsInRhcmdldFBvcnRJZCIsImNvbm5lY3RlZFRvIiwiZm91bmRLZXkiLCJmaW5kIiwia2V5IiwidGVzdCIsInJlcGxhY2UiLCJ0YXJnZXRFbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJlZERvdCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsImNzc1RleHQiLCJ0b3AiLCJoZWlnaHQiLCJsZWZ0Iiwid2lkdGgiLCJ0ZXh0Q29udGVudCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImJvZHkiLCJyZW1vdmVDaGlsZCIsIlNldHZmbFN0YXR1cyIsImN1cnJlbnRDb25uZWN0ZWRQb3J0UmVmIiwiY2xlYW51cCIsIlJlZkNvcHBlckJ1dHRvbkNsaWNrIiwiUmVGQ29wcGVyVXBkYXRhIiwic3RhdHVzIiwiUmVmQ2ZwQnV0dG9uQ2xpY2siLCJyZW1vdGVQYXRocyIsIm1haW5PdXRFeGlzdHMiLCJtYWluSW5FeGlzdHMiLCJyZW1vdGVPdXRFeGlzdHMiLCJyZW1vdGVJbkV4aXN0cyIsIm1haW5PdXRFbmQiLCJtYWluSW5FbmQiLCJyZW1vdGVPdXRFbmQiLCJyZW1vdGVJbkVuZCIsImlzQ29ubmVjdGlvbkNvcnJlY3QiLCJzaG93UmV0cnlCdXR0b25zIiwic2V0U2hvd1JldHJ5QnV0dG9ucyIsIlJlZkNmcFJlZkJ1dHRvbkNsaWNrIiwibWFpblRyY0NvdW50IiwiZmlsdGVyIiwicCIsImxlbmd0aCIsInJlbW90ZVRyY0NvdW50IiwiUmVGQ0ZQVXBkYXRhIiwiY29ubmVjdFN0YXR1cyIsIlJlRk9GUFVwZGF0YSIsInN0YXR1c1ZhbHVlIiwib2ZwQmFja2dyb3VuZCIsImhhbmRsZVJlZk9GUFRlc3QiLCJpc0xlYWRPbmx5IiwiZmlyc3RQb3J0IiwiaGFzSW52YWxpZEZpYmVyIiwic29tZSIsInRpbWVyIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInNldE9mcEJhY2tncm91bmQiLCJoYW5kbGVDb21wZW5zYXRpb25DaGFuZ2UiLCJ2YWx1ZSIsInJlbmRlckNvbnRlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJtb2R1bGVUeXBlIiwiYnV0dG9uIiwib25DbGljayIsInNyYyIsImFsdCIsImZpbGwiLCJzaXplcyIsInNsaWNlIiwibGFiZWwiLCJpbnB1dCIsInR5cGUiLCJuYW1lIiwiZGVmYXVsdENoZWNrZWQiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJ0aXRsZSIsInJlbmRlckZvb3RlciIsInBhcnNlSW50IiwicmVuZGVyVGl0bGVCYXIiLCJiYWNrVG8iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/fluke/Tools.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/CableId.js":
/*!***************************************************!*\
!*** ./src/components/dsxpage/general/CableId.js ***!
\***************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CableId)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\nfunction CableId() {\n const [showKeyboard, setShowKeyboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [inputValue2, setInputValue2] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [activeInput, setActiveInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1); // 1 表示第一个输入框,2 表示第二个输入框\n const { getCurrentProject, getCurrentCableId, getCurrentCableId2, updateProject, goBack } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const currentProject = getCurrentProject();\n // 获取当前选中的电缆ID\n const currentCableId = getCurrentCableId().name;\n // 获取当前选中的电缆ID2\n const currentCableId2 = getCurrentCableId2().name;\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.current;\n // 只在cfp视图下初始化第二个输入框\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CableId.useEffect\": ()=>{\n setInputValue(currentCableId);\n if (view === 'cfp') {\n setInputValue2(currentCableId2);\n }\n }\n }[\"CableId.useEffect\"], [\n currentCableId,\n currentCableId2,\n view\n ]);\n // 计算下一个序号的ID\n const getNextId = (currentId)=>{\n if (!currentId) return '';\n // 检查是否以数字结尾\n const numMatch = currentId.match(/^(.*?)(\\d+)$/);\n if (numMatch) {\n const [, prefix, num] = numMatch;\n const nextNum = String(Number(num) + 1).padStart(num.length, '0');\n return prefix + nextNum;\n }\n // 检查是否以字母结尾\n const letterMatch = currentId.match(/^(.*?)([a-zA-Z]+)$/);\n if (letterMatch) {\n const [, prefix, letters] = letterMatch;\n // 将字母转换为数组以便处理\n const letterArray = letters.split('');\n let carry = true;\n // 从右向左处理每个字母\n for(let i = letterArray.length - 1; i >= 0 && carry; i--){\n if (letterArray[i] === 'z') {\n letterArray[i] = 'a';\n carry = true;\n } else if (letterArray[i] === 'Z') {\n letterArray[i] = 'A';\n carry = true;\n } else {\n letterArray[i] = String.fromCharCode(letterArray[i].charCodeAt(0) + 1);\n carry = false;\n }\n }\n // 如果还有进位,说明需要在前面添加一个字母\n if (carry) {\n if (letters[0] >= 'a' && letters[0] <= 'z') {\n letterArray.unshift('a');\n } else {\n letterArray.unshift('A');\n }\n }\n return prefix + letterArray.join('');\n }\n // 如果既不是数字也不是字母结尾,直接返回原值\n return currentId;\n };\n // 只在cfp视图下自动更新第二个输入框\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CableId.useEffect\": ()=>{\n if (view === 'cfp' && inputValue) {\n setInputValue2(getNextId(inputValue));\n }\n }\n }[\"CableId.useEffect\"], [\n inputValue,\n view\n ]);\n const handleComplete = ()=>{\n if (view === 'main' && !inputValue.trim()) return;\n if (view === 'cfp' && (!inputValue.trim() || !inputValue2.trim())) return;\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.projectIndex;\n const currentCableIds = currentProject?.cableIds || [];\n let cableIds;\n if (view === 'main') {\n // 在main视图下,只更新选中的ID,保留其他ID\n const selectedId = getCurrentCableId().id;\n cableIds = currentCableIds.map((cable)=>cable.id === selectedId ? {\n ...cable,\n name: inputValue.trim()\n } : cable);\n } else {\n cableIds = [\n {\n id: '1',\n name: inputValue.trim()\n },\n {\n id: '2',\n name: inputValue2.trim()\n }\n ];\n }\n updateProject(currentIndex, {\n cableIds\n });\n goBack();\n };\n const renderContent = ()=>{\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mb-4 cursor-pointer\",\n onClick: ()=>setShowKeyboard(true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入线缆ID\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n // 保存光标位置\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 131,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 127,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 152,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 126,\n columnNumber: 21\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输出光纤ID1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 171,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue,\n placeholder: \"请输入线缆ID1\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(1);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 173,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 172,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 170,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输入光纤ID2\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 195,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue2,\n placeholder: \"请输入线缆ID2\",\n onChange: (e)=>{\n setInputValue2(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(2);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 197,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 196,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 194,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: activeInput === 1 ? inputValue : inputValue2,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n if (activeInput === 1) {\n setInputValue(newValue);\n } else {\n setInputValue2(newValue);\n }\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 219,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 169,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 245,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \"更改ID\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 246,\n columnNumber: 13\n }, this),\n renderContent(),\n view === 'main' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\",\n children: !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleComplete,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"完成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 254,\n columnNumber: 40\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 253,\n columnNumber: 17\n }, this),\n view === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\",\n children: !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleComplete,\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"完成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 264,\n columnNumber: 40\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 263,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CableId.js\",\n lineNumber: 244,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9DYWJsZUlkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDQztBQUNGO0FBQ0E7QUFDQztBQUVwQyxTQUFTTztJQUNwQixNQUFNLENBQUNDLGNBQWNDLGdCQUFnQixHQUFHUiwrQ0FBUUEsQ0FBQztJQUNqRCxNQUFNLENBQUNTLGdCQUFnQkMsa0JBQWtCLEdBQUdWLCtDQUFRQSxDQUFDO0lBQ3JELE1BQU0sQ0FBQ1csWUFBWUMsY0FBYyxHQUFHWiwrQ0FBUUEsQ0FBQztJQUM3QyxNQUFNLENBQUNhLGFBQWFDLGVBQWUsR0FBR2QsK0NBQVFBLENBQUM7SUFDL0MsTUFBTSxDQUFDZSxhQUFhQyxlQUFlLEdBQUdoQiwrQ0FBUUEsQ0FBQyxJQUFJLHdCQUF3QjtJQUMzRSxNQUFNLEVBQ0ZpQixpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBQ2JDLE1BQU0sRUFDVCxHQUFHaEIsK0RBQWVBO0lBRW5CLE1BQU1pQixpQkFBaUJMO0lBQ3ZCLGNBQWM7SUFDZCxNQUFNTSxpQkFBaUJMLG9CQUFvQk0sSUFBSTtJQUMvQyxlQUFlO0lBQ2YsTUFBTUMsa0JBQWtCTixxQkFBcUJLLElBQUk7SUFFakQsTUFBTSxFQUFFRSxJQUFJLEVBQUUsR0FBR3JCLG9FQUF3QixHQUFHdUIsVUFBVSxDQUFDQyxPQUFPO0lBSS9ELG9CQUFvQjtJQUNuQjVCLGdEQUFTQTs2QkFBQztZQUNOVyxjQUFjVztZQUNkLElBQUlHLFNBQVMsT0FBTztnQkFDaEJaLGVBQWVXO1lBQ25CO1FBQ0o7NEJBQUc7UUFBQ0Y7UUFBZ0JFO1FBQWlCQztLQUFLO0lBRTFDLGFBQWE7SUFDYixNQUFNSSxZQUFZLENBQUNDO1FBQ2YsSUFBSSxDQUFDQSxXQUFXLE9BQU87UUFFdkIsWUFBWTtRQUNaLE1BQU1DLFdBQVdELFVBQVVFLEtBQUssQ0FBQztRQUNqQyxJQUFJRCxVQUFVO1lBQ1YsTUFBTSxHQUFHRSxRQUFRQyxJQUFJLEdBQUdIO1lBQ3hCLE1BQU1JLFVBQVVDLE9BQU9DLE9BQU9ILE9BQU8sR0FBR0ksUUFBUSxDQUFDSixJQUFJSyxNQUFNLEVBQUU7WUFDN0QsT0FBT04sU0FBU0U7UUFDcEI7UUFFQSxZQUFZO1FBQ1osTUFBTUssY0FBY1YsVUFBVUUsS0FBSyxDQUFDO1FBQ3BDLElBQUlRLGFBQWE7WUFDYixNQUFNLEdBQUdQLFFBQVFRLFFBQVEsR0FBR0Q7WUFFNUIsZUFBZTtZQUNmLE1BQU1FLGNBQWNELFFBQVFFLEtBQUssQ0FBQztZQUNsQyxJQUFJQyxRQUFRO1lBRVosYUFBYTtZQUNiLElBQUssSUFBSUMsSUFBSUgsWUFBWUgsTUFBTSxHQUFHLEdBQUdNLEtBQUssS0FBS0QsT0FBT0MsSUFBSztnQkFDdkQsSUFBSUgsV0FBVyxDQUFDRyxFQUFFLEtBQUssS0FBSztvQkFDeEJILFdBQVcsQ0FBQ0csRUFBRSxHQUFHO29CQUNqQkQsUUFBUTtnQkFDWixPQUFPLElBQUlGLFdBQVcsQ0FBQ0csRUFBRSxLQUFLLEtBQUs7b0JBQy9CSCxXQUFXLENBQUNHLEVBQUUsR0FBRztvQkFDakJELFFBQVE7Z0JBQ1osT0FBTztvQkFDSEYsV0FBVyxDQUFDRyxFQUFFLEdBQUdULE9BQU9VLFlBQVksQ0FBQ0osV0FBVyxDQUFDRyxFQUFFLENBQUNFLFVBQVUsQ0FBQyxLQUFLO29CQUNwRUgsUUFBUTtnQkFDWjtZQUNKO1lBRUEsdUJBQXVCO1lBQ3ZCLElBQUlBLE9BQU87Z0JBQ1AsSUFBSUgsT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPQSxPQUFPLENBQUMsRUFBRSxJQUFJLEtBQUs7b0JBQ3hDQyxZQUFZTSxPQUFPLENBQUM7Z0JBQ3hCLE9BQU87b0JBQ0hOLFlBQVlNLE9BQU8sQ0FBQztnQkFDeEI7WUFDSjtZQUVBLE9BQU9mLFNBQVNTLFlBQVlPLElBQUksQ0FBQztRQUNyQztRQUVBLHdCQUF3QjtRQUN4QixPQUFPbkI7SUFDWDtJQUVBLHFCQUFxQjtJQUNyQjlCLGdEQUFTQTs2QkFBQztZQUNOLElBQUl5QixTQUFTLFNBQVNmLFlBQVk7Z0JBQzlCRyxlQUFlZ0IsVUFBVW5CO1lBQzdCO1FBQ0o7NEJBQUc7UUFBQ0E7UUFBWWU7S0FBSztJQUVyQixNQUFNeUIsaUJBQWlCO1FBQ25CLElBQUl6QixTQUFTLFVBQVUsQ0FBQ2YsV0FBV3lDLElBQUksSUFBSTtRQUMzQyxJQUFJMUIsU0FBUyxTQUFVLEVBQUNmLFdBQVd5QyxJQUFJLE1BQU0sQ0FBQ3ZDLFlBQVl1QyxJQUFJLEVBQUMsR0FBSTtRQUVuRSxNQUFNQyxlQUFlaEQsb0VBQXdCLEdBQUdpRCxlQUFlLENBQUNDLFlBQVk7UUFDNUUsTUFBTUMsa0JBQWtCbEMsZ0JBQWdCbUMsWUFBWSxFQUFFO1FBRXRELElBQUlBO1FBQ0osSUFBSS9CLFNBQVMsUUFBUTtZQUNqQiwyQkFBMkI7WUFDM0IsTUFBTWdDLGFBQWF4QyxvQkFBb0J5QyxFQUFFO1lBQ3pDRixXQUFXRCxnQkFBZ0JJLEdBQUcsQ0FBQ0MsQ0FBQUEsUUFDM0JBLE1BQU1GLEVBQUUsS0FBS0QsYUFBYTtvQkFBRSxHQUFHRyxLQUFLO29CQUFFckMsTUFBTWIsV0FBV3lDLElBQUk7Z0JBQUcsSUFBSVM7UUFFMUUsT0FBTztZQUNISixXQUFXO2dCQUNQO29CQUFFRSxJQUFJO29CQUFLbkMsTUFBTWIsV0FBV3lDLElBQUk7Z0JBQUc7Z0JBQ25DO29CQUFFTyxJQUFJO29CQUFLbkMsTUFBTVgsWUFBWXVDLElBQUk7Z0JBQUc7YUFDdkM7UUFDTDtRQUVBaEMsY0FBY2lDLGNBQWM7WUFBRUk7UUFBUztRQUN2Q3BDO0lBQ0o7SUFFQSxNQUFNeUMsZ0JBQWdCO1FBQ2xCLE9BQVFwQztZQUNKLEtBQUs7Z0JBQ0QscUJBQ0ksOERBQUNxQztvQkFBSUMsV0FBVTs7c0NBQ1gsOERBQUNEOzRCQUNHQyxXQUFVOzRCQUNWQyxTQUFTLElBQU16RCxnQkFBZ0I7c0NBRS9CLDRFQUFDMEQ7Z0NBQ0dDLE1BQUs7Z0NBQ0xILFdBQVU7Z0NBQ1ZJLE9BQU96RDtnQ0FDUDBELGFBQVk7Z0NBQ1pDLFVBQVUsQ0FBQ0M7b0NBQ1AzRCxjQUFjMkQsRUFBRUMsTUFBTSxDQUFDSixLQUFLO29DQUM1QjFELGtCQUFrQjZELEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYztnQ0FDN0M7Z0NBQ0FSLFNBQVMsQ0FBQ007b0NBQ04vRCxnQkFBZ0I7b0NBQ2hCRSxrQkFBa0I2RCxFQUFFQyxNQUFNLENBQUNDLGNBQWM7Z0NBQzdDO2dDQUNBQyxTQUFTLENBQUNIO29DQUNOLFNBQVM7b0NBQ1QsTUFBTTlELGlCQUFpQjhELEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYztvQ0FDOUNGLEVBQUVDLE1BQU0sQ0FBQ0csaUJBQWlCLENBQUNsRSxnQkFBZ0JBO2dDQUMvQzs7Ozs7Ozs7Ozs7d0JBR1BGLDhCQUNHLDhEQUFDSCxnRUFBUUE7NEJBQ1RnRSxPQUFPekQ7NEJBQ1BGLGdCQUFnQkE7NEJBQ2hCNkQsVUFBVSxDQUFDTSxVQUFVQztnQ0FDakJqRSxjQUFjZ0U7Z0NBQ2RsRSxrQkFBa0JtRTs0QkFDdEI7NEJBQ0FDLFlBQVk7Z0NBQ1J0RSxnQkFBZ0I7NEJBQ3BCOzs7Ozs7Ozs7Ozs7WUFNaEIsS0FBSztnQkFDRCxxQkFDSSw4REFBQ3VEO29CQUFJQyxXQUFVOztzQ0FDWCw4REFBQ0Q7NEJBQUlDLFdBQVU7OzhDQUNYLDhEQUFDRDtvQ0FBSUMsV0FBVTs4Q0FBMEI7Ozs7Ozs4Q0FDekMsOERBQUNEO29DQUFJQyxXQUFVOzhDQUNYLDRFQUFDRTt3Q0FDR0MsTUFBSzt3Q0FDTEgsV0FBVTt3Q0FDVkksT0FBT3pEO3dDQUNQMEQsYUFBWTt3Q0FDWkMsVUFBVSxDQUFDQzs0Q0FDUDNELGNBQWMyRCxFQUFFQyxNQUFNLENBQUNKLEtBQUs7NENBQzVCMUQsa0JBQWtCNkQsRUFBRUMsTUFBTSxDQUFDQyxjQUFjO3dDQUM3Qzt3Q0FDQVIsU0FBUyxDQUFDTTs0Q0FDTnZELGVBQWU7NENBQ2ZSLGdCQUFnQjs0Q0FDaEJFLGtCQUFrQjZELEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzt3Q0FDN0M7d0NBQ0FDLFNBQVMsQ0FBQ0g7NENBQ04sTUFBTTlELGlCQUFpQjhELEVBQUVDLE1BQU0sQ0FBQ0MsY0FBYzs0Q0FDOUNGLEVBQUVDLE1BQU0sQ0FBQ0csaUJBQWlCLENBQUNsRSxnQkFBZ0JBO3dDQUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBSVosOERBQUNzRDs7OENBQ0csOERBQUNBO29DQUFJQyxXQUFVOzhDQUEwQjs7Ozs7OzhDQUN6Qyw4REFBQ0Q7b0NBQUlDLFdBQVU7OENBQ1gsNEVBQUNFO3dDQUNHQyxNQUFLO3dDQUNMSCxXQUFVO3dDQUNWSSxPQUFPdkQ7d0NBQ1B3RCxhQUFZO3dDQUNaQyxVQUFVLENBQUNDOzRDQUNQekQsZUFBZXlELEVBQUVDLE1BQU0sQ0FBQ0osS0FBSzs0Q0FDN0IxRCxrQkFBa0I2RCxFQUFFQyxNQUFNLENBQUNDLGNBQWM7d0NBQzdDO3dDQUNBUixTQUFTLENBQUNNOzRDQUNOdkQsZUFBZTs0Q0FDZlIsZ0JBQWdCOzRDQUNoQkUsa0JBQWtCNkQsRUFBRUMsTUFBTSxDQUFDQyxjQUFjO3dDQUM3Qzt3Q0FDQUMsU0FBUyxDQUFDSDs0Q0FDTixNQUFNOUQsaUJBQWlCOEQsRUFBRUMsTUFBTSxDQUFDQyxjQUFjOzRDQUM5Q0YsRUFBRUMsTUFBTSxDQUFDRyxpQkFBaUIsQ0FBQ2xFLGdCQUFnQkE7d0NBQy9DOzs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFJWEYsOEJBQ0csOERBQUNILGdFQUFRQTs0QkFDTGdFLE9BQU9yRCxnQkFBZ0IsSUFBSUosYUFBYUU7NEJBQ3hDSixnQkFBZ0JBOzRCQUNoQjZELFVBQVUsQ0FBQ00sVUFBVUM7Z0NBQ2pCLElBQUk5RCxnQkFBZ0IsR0FBRztvQ0FDbkJILGNBQWNnRTtnQ0FDbEIsT0FBTztvQ0FDSDlELGVBQWU4RDtnQ0FDbkI7Z0NBQ0FsRSxrQkFBa0JtRTs0QkFDdEI7NEJBQ0FDLFlBQVk7Z0NBQ1J0RSxnQkFBZ0I7NEJBQ3BCOzs7Ozs7Ozs7Ozs7WUFNcEI7Z0JBQ0ksT0FBTztRQUNmO0lBQ0o7SUFFQSxxQkFDSSw4REFBQ3VEO1FBQUlDLFdBQVU7OzBCQUNYLDhEQUFDOUQsaUVBQVNBOzs7OzswQkFDViw4REFBQ0MsZ0VBQVFBO2dCQUNMNEUsT0FBTTtnQkFDTkMsUUFBUTNFLG9FQUF3QixHQUFHdUIsVUFBVSxDQUFDcUQsUUFBUSxFQUFFekQsUUFBUTtnQkFDaEVFLE1BQU1yQixvRUFBd0IsR0FBR3VCLFVBQVUsQ0FBQ3FELFFBQVEsRUFBRXZELFFBQVE7Ozs7OztZQUVqRW9DO1lBQ0FwQyxTQUFTLHdCQUNOLDhEQUFDcUM7Z0JBQUlDLFdBQVU7MEJBQ1YsQ0FBQ3pELDhCQUFpQiw4REFBQzJFO29CQUNoQmpCLFNBQVNkO29CQUNUYSxXQUFVOzhCQUNiOzs7Ozs7Ozs7OztZQUtSdEMsU0FBUyx1QkFDTiw4REFBQ3FDO2dCQUFJQyxXQUFVOzBCQUNWLENBQUN6RCw4QkFBaUIsOERBQUMyRTtvQkFDaEJqQixTQUFTZDtvQkFDVGEsV0FBVTs4QkFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPckIiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9nZW5lcmFsL0NhYmxlSWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vU3RhdHVzQmFyJztcclxuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1RpdGxlQmFyJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL0tleWJvYXJkJztcclxuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDYWJsZUlkKCkge1xyXG4gICAgY29uc3QgW3Nob3dLZXlib2FyZCwgc2V0U2hvd0tleWJvYXJkXSA9IHVzZVN0YXRlKHRydWUpO1xyXG4gICAgY29uc3QgW2N1cnNvclBvc2l0aW9uLCBzZXRDdXJzb3JQb3NpdGlvbl0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFtpbnB1dFZhbHVlMiwgc2V0SW5wdXRWYWx1ZTJdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW2FjdGl2ZUlucHV0LCBzZXRBY3RpdmVJbnB1dF0gPSB1c2VTdGF0ZSgxKTsgLy8gMSDooajnpLrnrKzkuIDkuKrovpPlhaXmoYbvvIwyIOihqOekuuesrOS6jOS4qui+k+WFpeahhlxyXG4gICAgY29uc3Qge1xyXG4gICAgICAgIGdldEN1cnJlbnRQcm9qZWN0LFxyXG4gICAgICAgIGdldEN1cnJlbnRDYWJsZUlkLFxyXG4gICAgICAgIGdldEN1cnJlbnRDYWJsZUlkMixcclxuICAgICAgICB1cGRhdGVQcm9qZWN0LFxyXG4gICAgICAgIGdvQmFja1xyXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIC8vIOiOt+WPluW9k+WJjemAieS4reeahOeUtee8hklEXHJcbiAgICBjb25zdCBjdXJyZW50Q2FibGVJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCkubmFtZTtcclxuICAgIC8vIOiOt+WPluW9k+WJjemAieS4reeahOeUtee8hklEMlxyXG4gICAgY29uc3QgY3VycmVudENhYmxlSWQyID0gZ2V0Q3VycmVudENhYmxlSWQyKCkubmFtZTtcclxuXHJcbiAgICBjb25zdCB7IHZpZXcgfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24uY3VycmVudDtcclxuXHJcblxyXG5cclxuICAgLy8g5Y+q5ZyoY2Zw6KeG5Zu+5LiL5Yid5aeL5YyW56ys5LqM5Liq6L6T5YWl5qGGXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHNldElucHV0VmFsdWUoY3VycmVudENhYmxlSWQpO1xyXG4gICAgICAgIGlmICh2aWV3ID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlMihjdXJyZW50Q2FibGVJZDIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjdXJyZW50Q2FibGVJZCwgY3VycmVudENhYmxlSWQyLCB2aWV3XSk7XHJcblxyXG4gICAgLy8g6K6h566X5LiL5LiA5Liq5bqP5Y+355qESURcclxuICAgIGNvbnN0IGdldE5leHRJZCA9IChjdXJyZW50SWQpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRJZCkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbku6XmlbDlrZfnu5PlsL5cclxuICAgICAgICBjb25zdCBudW1NYXRjaCA9IGN1cnJlbnRJZC5tYXRjaCgvXiguKj8pKFxcZCspJC8pO1xyXG4gICAgICAgIGlmIChudW1NYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBbLCBwcmVmaXgsIG51bV0gPSBudW1NYXRjaDtcclxuICAgICAgICAgICAgY29uc3QgbmV4dE51bSA9IFN0cmluZyhOdW1iZXIobnVtKSArIDEpLnBhZFN0YXJ0KG51bS5sZW5ndGgsICcwJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBuZXh0TnVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm5Lul5a2X5q+N57uT5bC+XHJcbiAgICAgICAgY29uc3QgbGV0dGVyTWF0Y2ggPSBjdXJyZW50SWQubWF0Y2goL14oLio/KShbYS16QS1aXSspJC8pO1xyXG4gICAgICAgIGlmIChsZXR0ZXJNYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBbLCBwcmVmaXgsIGxldHRlcnNdID0gbGV0dGVyTWF0Y2g7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDlsIblrZfmr43ovazmjaLkuLrmlbDnu4Tku6Xkvr/lpITnkIZcclxuICAgICAgICAgICAgY29uc3QgbGV0dGVyQXJyYXkgPSBsZXR0ZXJzLnNwbGl0KCcnKTtcclxuICAgICAgICAgICAgbGV0IGNhcnJ5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOS7juWPs+WQkeW3puWkhOeQhuavj+S4quWtl+avjVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGV0dGVyQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwICYmIGNhcnJ5OyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJBcnJheVtpXSA9PT0gJ3onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXlbaV0gPSAnYSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZXR0ZXJBcnJheVtpXSA9PT0gJ1onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXlbaV0gPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXR0ZXJBcnJheVtpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUobGV0dGVyQXJyYXlbaV0uY2hhckNvZGVBdCgwKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcnJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOWmguaenOi/mOaciei/m+S9je+8jOivtOaYjumcgOimgeWcqOWJjemdoua3u+WKoOS4gOS4quWtl+avjVxyXG4gICAgICAgICAgICBpZiAoY2FycnkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzWzBdID49ICdhJyAmJiBsZXR0ZXJzWzBdIDw9ICd6Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldHRlckFycmF5LnVuc2hpZnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXkudW5zaGlmdCgnQScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgbGV0dGVyQXJyYXkuam9pbignJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlpoLmnpzml6LkuI3mmK/mlbDlrZfkuZ/kuI3mmK/lrZfmr43nu5PlsL7vvIznm7TmjqXov5Tlm57ljp/lgLxcclxuICAgICAgICByZXR1cm4gY3VycmVudElkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDlj6rlnKhjZnDop4blm77kuIvoh6rliqjmm7TmlrDnrKzkuozkuKrovpPlhaXmoYZcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdjZnAnICYmIGlucHV0VmFsdWUpIHtcclxuICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZTIoZ2V0TmV4dElkKGlucHV0VmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgdmlld10pO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUNvbXBsZXRlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh2aWV3ID09PSAnbWFpbicgJiYgIWlucHV0VmFsdWUudHJpbSgpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdjZnAnICYmICghaW5wdXRWYWx1ZS50cmltKCkgfHwgIWlucHV0VmFsdWUyLnRyaW0oKSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnByb2plY3RJbmRleDtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q2FibGVJZHMgPSBjdXJyZW50UHJvamVjdD8uY2FibGVJZHMgfHwgW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGNhYmxlSWRzO1xyXG4gICAgICAgIGlmICh2aWV3ID09PSAnbWFpbicpIHtcclxuICAgICAgICAgICAgLy8g5ZyobWFpbuinhuWbvuS4i++8jOWPquabtOaWsOmAieS4reeahElE77yM5L+d55WZ5YW25LuWSURcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCkuaWQ7XHJcbiAgICAgICAgICAgIGNhYmxlSWRzID0gY3VycmVudENhYmxlSWRzLm1hcChjYWJsZSA9PiBcclxuICAgICAgICAgICAgICAgIGNhYmxlLmlkID09PSBzZWxlY3RlZElkID8geyAuLi5jYWJsZSwgbmFtZTogaW5wdXRWYWx1ZS50cmltKCkgfSA6IGNhYmxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FibGVJZHMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IGlkOiAnMScsIG5hbWU6IGlucHV0VmFsdWUudHJpbSgpIH0sXHJcbiAgICAgICAgICAgICAgICB7IGlkOiAnMicsIG5hbWU6IGlucHV0VmFsdWUyLnRyaW0oKSB9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwgeyBjYWJsZUlkcyB9KTtcclxuICAgICAgICBnb0JhY2soKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWFpbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBwLTQgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbWItNCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93S2V5Ym9hcmQodHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y5YWJ5qCH5L2N572uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvd0tleWJvYXJkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2NmcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBwLTQgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXdoaXRlIHRleHQtc21cIj7ovpPlh7rlhYnnuqRJRDE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHB4LTQgdGV4dC1ibGFjayBvdmVyZmxvdy14LWF1dG8gd2hpdGVzcGFjZS1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXnur/nvIZJRDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5wdXQoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0xIHRleHQtd2hpdGUgdGV4dC1zbVwiPui+k+WFpeWFiee6pElEMjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcHgtNCB0ZXh0LWJsYWNrIG92ZXJmbG93LXgtYXV0byB3aGl0ZXNwYWNlLW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlMn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXnur/nvIZJRDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUyKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUlucHV0KDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0tleWJvYXJkKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dLZXlib2FyZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8S2V5Ym9hcmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2FjdGl2ZUlucHV0ID09PSAxID8gaW5wdXRWYWx1ZSA6IGlucHV0VmFsdWUyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uPXtjdXJzb3JQb3NpdGlvbn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG5ld1ZhbHVlLCBuZXdQb3NpdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlSW5wdXQgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZTIobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKG5ld1Bvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0tleWJvYXJkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XHJcbiAgICAgICAgICAgIDxUaXRsZUJhciBcclxuICAgICAgICAgICAgICAgIHRpdGxlPVwi5pu05pS5SURcIiBcclxuICAgICAgICAgICAgICAgIGJhY2tUbz17dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5wcmV2aW91cz8ubmFtZSB8fCAnaG9tZSd9IFxyXG4gICAgICAgICAgICAgICAgdmlldz17dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5wcmV2aW91cz8udmlldyB8fCAnbWFpbid9IFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxyXG4gICAgICAgICAgICB7dmlldyA9PT0gJ21haW4nICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LThcIj5cclxuICAgICAgICAgICAgICAgICAgICB7IXNob3dLZXlib2FyZCAmJiAoPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29tcGxldGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSAgYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjZkYWU3XSB0by1bIzY1ZGZmZl0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAg5a6M5oiQXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+KX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICB7dmlldyA9PT0gJ2NmcCcgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHshc2hvd0tleWJvYXJkICYmICg8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb21wbGV0ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDlrozmiJBcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4pfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiU3RhdHVzQmFyIiwiVGl0bGVCYXIiLCJLZXlib2FyZCIsInVzZURpc3BsYXlTdG9yZSIsIkNhYmxlSWQiLCJzaG93S2V5Ym9hcmQiLCJzZXRTaG93S2V5Ym9hcmQiLCJjdXJzb3JQb3NpdGlvbiIsInNldEN1cnNvclBvc2l0aW9uIiwiaW5wdXRWYWx1ZSIsInNldElucHV0VmFsdWUiLCJpbnB1dFZhbHVlMiIsInNldElucHV0VmFsdWUyIiwiYWN0aXZlSW5wdXQiLCJzZXRBY3RpdmVJbnB1dCIsImdldEN1cnJlbnRQcm9qZWN0IiwiZ2V0Q3VycmVudENhYmxlSWQiLCJnZXRDdXJyZW50Q2FibGVJZDIiLCJ1cGRhdGVQcm9qZWN0IiwiZ29CYWNrIiwiY3VycmVudFByb2plY3QiLCJjdXJyZW50Q2FibGVJZCIsIm5hbWUiLCJjdXJyZW50Q2FibGVJZDIiLCJ2aWV3IiwiZ2V0U3RhdGUiLCJuYXZpZ2F0aW9uIiwiY3VycmVudCIsImdldE5leHRJZCIsImN1cnJlbnRJZCIsIm51bU1hdGNoIiwibWF0Y2giLCJwcmVmaXgiLCJudW0iLCJuZXh0TnVtIiwiU3RyaW5nIiwiTnVtYmVyIiwicGFkU3RhcnQiLCJsZW5ndGgiLCJsZXR0ZXJNYXRjaCIsImxldHRlcnMiLCJsZXR0ZXJBcnJheSIsInNwbGl0IiwiY2FycnkiLCJpIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsInVuc2hpZnQiLCJqb2luIiwiaGFuZGxlQ29tcGxldGUiLCJ0cmltIiwiY3VycmVudEluZGV4Iiwic2VsZWN0ZWRJbmRleGVzIiwicHJvamVjdEluZGV4IiwiY3VycmVudENhYmxlSWRzIiwiY2FibGVJZHMiLCJzZWxlY3RlZElkIiwiaWQiLCJtYXAiLCJjYWJsZSIsInJlbmRlckNvbnRlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiaW5wdXQiLCJ0eXBlIiwidmFsdWUiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInNlbGVjdGlvblN0YXJ0Iiwib25Gb2N1cyIsInNldFNlbGVjdGlvblJhbmdlIiwibmV3VmFsdWUiLCJuZXdQb3NpdGlvbiIsIm9uQ29tcGxldGUiLCJ0aXRsZSIsImJhY2tUbyIsInByZXZpb3VzIiwiYnV0dG9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/CableId.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/CopperPerformance.js":
/*!*************************************************************!*\
!*** ./src/components/dsxpage/general/CopperPerformance.js ***!
\*************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CopperPerformance)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//ResultTitleBar */ \"(pages-dir-node)/./src/components/lib/ResultTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib//FrequencyChart */ \"(pages-dir-node)/./src/components/lib/FrequencyChart.js\");\n/* harmony import */ var _components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/lib//HDTDChart */ \"(pages-dir-node)/./src/components/lib/HDTDChart.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__, _components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__, _components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\nfunction CopperPerformance() {\n const { navigation, navigateTo, goBack } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n const { view } = navigation.current;\n const curtitle = navigation.current.params.curtitle;\n const testResult = navigation.current.params.testResult;\n const limitValue = testResult.testconfig.params.limitValue;\n const [limitdata, setLimitdata] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const wireOrder = testResult?.testconfig?.params?.wireOrder;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CopperPerformance.useEffect\": ()=>{\n // 异步加载限制数据\n const loadLimitData = {\n \"CopperPerformance.useEffect.loadLimitData\": async ()=>{\n if (limitValue) {\n try {\n // 从limitValue中提取基础名称(移除+PoE和+ALL后缀)\n const baseName = limitValue.split(' (+')[0];\n // 使用基础名称加载带有(+ALL)后缀的文件\n const data = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.* \\\\(\\\\+ALL\\\\)\\\\.json$\")(`./${baseName} (+ALL).json`);\n setLimitdata(data);\n } catch (error) {\n console.error('Error loading limit data:', error);\n }\n }\n }\n }[\"CopperPerformance.useEffect.loadLimitData\"];\n loadLimitData();\n }\n }[\"CopperPerformance.useEffect\"], [\n limitValue\n ]);\n const [poeTab, setPoeTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('回路');\n const renderResultTitleBar = ()=>{\n const handleBack = ()=>{\n goBack();\n };\n let title = '';\n switch(view){\n case 'LENGTH':\n title = '长度';\n break;\n case 'OHM':\n title = '电阻';\n break;\n case 'PoE':\n title = 'PoE';\n break;\n case 'DRAW':\n title = '图表';\n break;\n }\n ;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: curtitle,\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 59,\n columnNumber: 16\n }, this);\n };\n const renderContent = ()=>{\n switch(view){\n case 'LENGTH':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-4 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-4 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 71,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 70,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\",\n children: \"传输延迟\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 74,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: \"(ns)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 75,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 73,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\",\n children: \"延迟时差\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 78,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: \"(ns)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 79,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 77,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-blue-600 text-lg\",\n children: \"长度\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 82,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500\",\n children: \"(m)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 83,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 81,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 69,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR12,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR12,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR36,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR36,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR45,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR45,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n delay: testResult?.resultdata?.performance?.DELAY?.PAIR78,\n delaySkew: testResult?.resultdata?.performance?.DELAYSKEW?.PAIR78,\n length: testResult?.resultdata?.performance?.LENGTH?.PAIR78\n }\n ] : []\n ].map(({ pair, color, delay, delaySkew, length })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `grid grid-cols-4 text-center border-gray-300 pt-2 ${color}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 97,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: limitdata && delay > limitdata.DELAY ? 'bg-red-100 rounded-md' : '',\n children: delay\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 98,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: limitdata && delaySkew > limitdata.DELAYSKEW ? 'bg-red-100 rounded-md' : '',\n children: delaySkew\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 99,\n columnNumber: 46\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `text-center ${limitdata && length > limitdata.LENGTH && !(limitValue?.includes('ISO') || limitValue?.includes('Profinet')) ? 'bg-red-200 rounded-md' : ''}`,\n children: length\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 100,\n columnNumber: 46\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 96,\n columnNumber: 41\n }, this)),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-4 text-center border-t border-gray-300 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \"极限\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 105,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.DELAY\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 107,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.DELAYSKEW\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 108,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.LENGTH\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 109,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 104,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 86,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 68,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 67,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 66,\n columnNumber: 21\n }, this);\n case 'OHM':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-0 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex mb-4\",\n children: [\n '回路'\n ].map((tab)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setPoeTab(tab),\n className: `flex-1 py-2 text-center text-xl font-bold ${poeTab === tab ? 'bg-gradient-to-b from-[#b0b0b0] via-[#e0e4e0] to-[#fff] text-black' : 'bg-[#132843] text-[#fffe92]'}`,\n children: tab\n }, tab, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 125,\n columnNumber: 41\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 123,\n columnNumber: 33\n }, this),\n poeTab === '回路' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 139,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 141,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 140,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 138,\n columnNumber: 41\n }, this),\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR78\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 154,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 155,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 153,\n columnNumber: 45\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-t border-gray-300 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \"极限\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 160,\n columnNumber: 41\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.LOOP\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 162,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 159,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 137,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 121,\n columnNumber: 30\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 120,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 119,\n columnNumber: 21\n }, this);\n case 'PoE':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] bg-[#6b6d6b] \",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-0 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex mb-4\",\n children: [\n '回路',\n '线对UBL',\n 'P2P UBL'\n ].map((tab)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setPoeTab(tab),\n className: `flex-1 py-1 text-center text-lg font-bold ${poeTab === tab ? 'bg-gradient-to-b from-[#b0b0b0] via-[#e0e4e0] to-[#fff] text-black' : 'bg-[#132843] text-[#fffe92]'}`,\n children: tab\n }, tab, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 180,\n columnNumber: 41\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 178,\n columnNumber: 33\n }, this),\n poeTab === '回路' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 194,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 196,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 195,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 193,\n columnNumber: 41\n }, this),\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.LOOP?.PAIR78\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 210,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${value > limitdata?.LOOP ? 'bg-red-100' : ''}`,\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 211,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 209,\n columnNumber: 45\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 text-center border-t border-gray-300 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \"极限\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 218,\n columnNumber: 41\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.LOOP\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 220,\n columnNumber: 49\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 217,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 192,\n columnNumber: 37\n }, this),\n poeTab === '线对UBL' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 229,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 231,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 230,\n columnNumber: 46\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"极限(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 234,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 233,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 228,\n columnNumber: 41\n }, this),\n [\n {\n pair: '1,2',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR12\n },\n {\n pair: '3,6',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR36\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '4,5',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR45\n },\n {\n pair: '7,8',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.PAIRUBL?.PAIR78\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 248,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${value > limitdata?.PAIRUBL ? 'bg-red-100' : ''}`,\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 249,\n columnNumber: 49\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.PAIRUBL\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 253,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 247,\n columnNumber: 45\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 227,\n columnNumber: 37\n }, this),\n poeTab === 'P2P UBL' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center border-b border-gray-300 pb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: \" \"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 264,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"值(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 266,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 265,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-lg\",\n children: \"极限(Ω)\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 269,\n columnNumber: 49\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 268,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 263,\n columnNumber: 41\n }, this),\n [\n {\n pair: '12-36',\n color: 'text-orange-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR1236\n },\n ...wireOrder !== 'Ethernet Two-Pair' && wireOrder !== 'M12-D Two-Pair' ? [\n {\n pair: '12-45',\n color: 'text-green-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR1245\n },\n {\n pair: '12-78',\n color: 'text-blue-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR1278\n },\n {\n pair: '36-45',\n color: 'text-yellow-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR3645\n },\n {\n pair: '36-78',\n color: 'text-purple-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR3678\n },\n {\n pair: '45-78',\n color: 'text-pink-500',\n value: testResult?.resultdata?.performance?.OHM?.P2PUBL?.PAIR4578\n }\n ] : []\n ].map(({ pair, color, value })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-3 text-center py-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `font-bold ${color}`,\n children: pair\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 284,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${value > limitdata?.P2PUBL ? 'bg-red-100' : ''}`,\n children: value || 'N/A'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 285,\n columnNumber: 49\n }, this),\n limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: limitdata.P2PUBL\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 289,\n columnNumber: 49\n }, this)\n ]\n }, pair, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 283,\n columnNumber: 45\n }, this))\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 262,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 176,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 175,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 174,\n columnNumber: 21\n }, this);\n case 'DRAW':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[full] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-4 rounded-md\",\n children: limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_FrequencyChart__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n curtitle: curtitle,\n limitValue: limitValue,\n limitdata: limitdata,\n wireOrder: wireOrder,\n data: testResult?.resultdata?.performance?.data\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 304,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 302,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 301,\n columnNumber: 21\n }, this);\n case 'HDTD':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[full] bg-[#6b6d6b]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full bg-white p-4 rounded-md\",\n children: limitdata && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_HDTDChart__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n curtitle: curtitle,\n HDTD: testResult?.resultdata?.HDTD\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 320,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 318,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 317,\n columnNumber: 25\n }, this);\n default:\n return null;\n }\n };\n const renderFooter = ()=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 335,\n columnNumber: 13\n }, this);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 343,\n columnNumber: 13\n }, this),\n renderResultTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/CopperPerformance.js\",\n lineNumber: 342,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9Db3BwZXJQZXJmb3JtYW5jZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFtRDtBQUNDO0FBQ1U7QUFDWDtBQUNXO0FBQ1Y7QUFFckMsU0FBU1E7SUFDcEIsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBQ0MsTUFBTSxFQUFFLEdBQUdOLCtEQUFlQTtJQUN6RCxNQUFNLEVBQUVPLElBQUksRUFBRSxHQUFHSCxXQUFXSSxPQUFPO0lBQ25DLE1BQU1DLFdBQVdMLFdBQVdJLE9BQU8sQ0FBQ0UsTUFBTSxDQUFDRCxRQUFRO0lBQ25ELE1BQU1FLGFBQWFQLFdBQVdJLE9BQU8sQ0FBQ0UsTUFBTSxDQUFDQyxVQUFVO0lBQ3ZELE1BQU1DLGFBQWFELFdBQVdFLFVBQVUsQ0FBQ0gsTUFBTSxDQUFDRSxVQUFVO0lBQzFELE1BQU0sQ0FBQ0UsV0FBV0MsYUFBYSxHQUFHbkIsK0NBQVFBLENBQUM7SUFDM0MsTUFBTW9CLFlBQVlMLFlBQVlFLFlBQVlILFFBQVFNO0lBRWxEbkIsZ0RBQVNBO3VDQUFDO1lBQ04sV0FBVztZQUNYLE1BQU1vQjs2REFBZ0I7b0JBQ2xCLElBQUlMLFlBQVk7d0JBQ1osSUFBSTs0QkFDQSxvQ0FBb0M7NEJBQ3BDLE1BQU1NLFdBQVdOLFdBQVdPLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDM0Msd0JBQXdCOzRCQUN4QixNQUFNQyxPQUFPLE1BQU0seUdBQU8sR0FBZ0IsRUFBRUYsU0FBUyxhQUFhLENBQUM7NEJBQ25FSCxhQUFhSzt3QkFDakIsRUFBRSxPQUFPQyxPQUFPOzRCQUNaQyxRQUFRRCxLQUFLLENBQUMsNkJBQTZCQTt3QkFDL0M7b0JBQ0o7Z0JBQ0o7O1lBQ0FKO1FBQ0o7c0NBQUc7UUFBQ0w7S0FBVztJQUtmLE1BQU0sQ0FBQ1csUUFBUUMsVUFBVSxHQUFHNUIsK0NBQVFBLENBQUM7SUFFckMsTUFBTTZCLHVCQUF1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IjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9nZW5lcmFsL0NvcHBlclBlcmZvcm1hbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N0YXR1c0Jhcic7XHJcbmltcG9ydCBSZXN1bHRUaXRsZUJhciBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9SZXN1bHRUaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgRnJlcXVlbmN5Q2hhcnQgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vRnJlcXVlbmN5Q2hhcnQnO1xyXG5pbXBvcnQgSERURENoYXJ0IGZyb20gJ0AvY29tcG9uZW50cy9saWIvL0hEVERDaGFydCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb3BwZXJQZXJmb3JtYW5jZSggKSB7XHJcbiAgICBjb25zdCB7IG5hdmlnYXRpb24sIG5hdmlnYXRlVG8sZ29CYWNrIH0gPSB1c2VEaXNwbGF5U3RvcmUoKTtcclxuICAgIGNvbnN0IHsgdmlldyB9ID0gbmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgY29uc3QgY3VydGl0bGUgPSBuYXZpZ2F0aW9uLmN1cnJlbnQucGFyYW1zLmN1cnRpdGxlO1xyXG4gICAgY29uc3QgdGVzdFJlc3VsdCA9IG5hdmlnYXRpb24uY3VycmVudC5wYXJhbXMudGVzdFJlc3VsdDtcclxuICAgIGNvbnN0IGxpbWl0VmFsdWUgPSB0ZXN0UmVzdWx0LnRlc3Rjb25maWcucGFyYW1zLmxpbWl0VmFsdWU7XHJcbiAgICBjb25zdCBbbGltaXRkYXRhLCBzZXRMaW1pdGRhdGFdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCB3aXJlT3JkZXIgPSB0ZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5wYXJhbXM/LndpcmVPcmRlcjtcclxuXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIC8vIOW8guatpeWKoOi9vemZkOWItuaVsOaNrlxyXG4gICAgICAgIGNvbnN0IGxvYWRMaW1pdERhdGEgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChsaW1pdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS7jmxpbWl0VmFsdWXkuK3mj5Dlj5bln7rnoYDlkI3np7Ao56e76ZmkK1BvReWSjCtBTEzlkI7nvIApXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBsaW1pdFZhbHVlLnNwbGl0KCcgKCsnKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDkvb/nlKjln7rnoYDlkI3np7DliqDovb3luKbmnIkoK0FMTCnlkI7nvIDnmoTmlofku7ZcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0NPUFBFUi8ke2Jhc2VOYW1lfSAoK0FMTCkuanNvbmApO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldExpbWl0ZGF0YShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBsaW1pdCBkYXRhOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbG9hZExpbWl0RGF0YSgpO1xyXG4gICAgfSwgW2xpbWl0VmFsdWVdKTsgXHJcblxyXG5cclxuXHJcblxyXG4gICAgY29uc3QgW3BvZVRhYiwgc2V0UG9lVGFiXSA9IHVzZVN0YXRlKCflm57ot68nKTtcclxuXHJcbiAgICBjb25zdCByZW5kZXJSZXN1bHRUaXRsZUJhciA9ICgpID0+IHsgICAgICBcclxuICAgICAgICBjb25zdCBoYW5kbGVCYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZ29CYWNrKCk7XHJcbiAgICAgICAgICB9OyAgXHJcbiAgICAgICAgbGV0IHRpdGxlID0gJyc7XHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0xFTkdUSCc6XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9ICfplb/luqYnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ09ITSc6XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9ICfnlLXpmLsnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BvRSc6XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9ICdQb0UnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0RSQVcnOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSAn5Zu+6KGoJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIDxSZXN1bHRUaXRsZUJhciB0aXRsZT17Y3VydGl0bGV9IG9uQmFjaz17aGFuZGxlQmFja30gLz47XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4geyAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0xFTkdUSCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzQ5MHB4XSBiZy1bIzZiNmQ2Yl1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGJnLXdoaXRlIHAtNCByb3VuZGVkLW1kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNCB0ZXh0LWNlbnRlciBib3JkZXItYiBib3JkZXItZ3JheS0zMDAgcGItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJsdWUtNjAwIHRleHQtbGdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJsdWUtNjAwIHRleHQtbGdcIj7kvKDovpPlu7bov588L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+KG5zKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYmx1ZS02MDAgdGV4dC1sZ1wiPuW7tui/n+aXtuW3rjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj4obnMpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ibHVlLTYwMCB0ZXh0LWxnXCI+6ZW/5bqmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMFwiPihtKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnMSwyJywgY29sb3I6ICd0ZXh0LW9yYW5nZS01MDAnLCBkZWxheTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkRFTEFZPy5QQUlSMTIsIGRlbGF5U2tldzogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkRFTEFZU0tFVz8uUEFJUjEyLCBsZW5ndGg6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5MRU5HVEg/LlBBSVIxMiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnMyw2JywgY29sb3I6ICd0ZXh0LWdyZWVuLTUwMCcsIGRlbGF5OiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uREVMQVk/LlBBSVIzNiwgZGVsYXlTa2V3OiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uREVMQVlTS0VXPy5QQUlSMzYsIGxlbmd0aDogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkxFTkdUSD8uUEFJUjM2IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4od2lyZU9yZGVyICE9PSAnRXRoZXJuZXQgVHdvLVBhaXInICYmIHdpcmVPcmRlciAhPT0gJ00xMi1EIFR3by1QYWlyJyA/IFtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnNCw1JywgY29sb3I6ICd0ZXh0LWJsdWUtNTAwJywgZGVsYXk6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5ERUxBWT8uUEFJUjQ1LCBkZWxheVNrZXc6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5ERUxBWVNLRVc/LlBBSVI0NSwgbGVuZ3RoOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uTEVOR1RIPy5QQUlSNDUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc3LDgnLCBjb2xvcjogJ3RleHQteWVsbG93LTUwMCcsIGRlbGF5OiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uREVMQVk/LlBBSVI3OCwgZGVsYXlTa2V3OiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uREVMQVlTS0VXPy5QQUlSNzgsIGxlbmd0aDogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/LkxFTkdUSD8uUEFJUjc4IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gOiBbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tYXAoKHsgcGFpciwgY29sb3IsIGRlbGF5LCBkZWxheVNrZXcsIGxlbmd0aCB9KSA9PiAoICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwYWlyfSBjbGFzc05hbWU9e2BncmlkIGdyaWQtY29scy00IHRleHQtY2VudGVyIGJvcmRlci1ncmF5LTMwMCBwdC0yICR7Y29sb3J9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LWJvbGRcIj57cGFpcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bGltaXRkYXRhICYmIGRlbGF5ID4gbGltaXRkYXRhLkRFTEFZID8gJ2JnLXJlZC0xMDAgcm91bmRlZC1tZCcgOiAnJ30+e2RlbGF5fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bGltaXRkYXRhICYmIGRlbGF5U2tldyA+IGxpbWl0ZGF0YS5ERUxBWVNLRVcgPyAnYmctcmVkLTEwMCByb3VuZGVkLW1kJyA6ICcnfT57ZGVsYXlTa2V3fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHRleHQtY2VudGVyICR7KGxpbWl0ZGF0YSAmJiBsZW5ndGggPiBsaW1pdGRhdGEuTEVOR1RIKSAmJiAhKGxpbWl0VmFsdWU/LmluY2x1ZGVzKCdJU08nKSB8fCBsaW1pdFZhbHVlPy5pbmNsdWRlcygnUHJvZmluZXQnKSkgPyAnYmctcmVkLTIwMCByb3VuZGVkLW1kJyA6ICcnfWB9PntsZW5ndGh9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW1pdGRhdGEgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTQgdGV4dC1jZW50ZXIgYm9yZGVyLXQgYm9yZGVyLWdyYXktMzAwIHB0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+5p6B6ZmQPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e2xpbWl0ZGF0YS5ERUxBWX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e2xpbWl0ZGF0YS5ERUxBWVNLRVd9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuTEVOR1RIfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ09ITSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzQ5MHB4XSBiZy1bIzZiNmQ2Yl1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGJnLXdoaXRlIHAtMCByb3VuZGVkLW1kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Lyog6YCJ6aG55Y2hICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbJ+Wbnui3ryddLm1hcCgodGFiKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXt0YWJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0UG9lVGFiKHRhYil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHB5LTIgdGV4dC1jZW50ZXIgdGV4dC14bCBmb250LWJvbGQgJHtwb2VUYWIgPT09IHRhYiA/ICdiZy1ncmFkaWVudC10by1iIGZyb20tWyNiMGIwYjBdIHZpYS1bI2UwZTRlMF0gdG8tWyNmZmZdIHRleHQtYmxhY2snIDogJ2JnLVsjMTMyODQzXSB0ZXh0LVsjZmZmZTkyXSd9YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGFifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Lyog5pWw5o2u5bGV56S65Yy65Z+fICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwb2VUYWIgPT09ICflm57ot68nICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIHRleHQtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBwYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+ICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1sZ1wiPuWAvCjOqSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzEsMicsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVIxMiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzMsNicsIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uTE9PUD8uUEFJUjM2IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHdpcmVPcmRlciAhPT0gJ0V0aGVybmV0IFR3by1QYWlyJyAmJiB3aXJlT3JkZXIgIT09ICdNMTItRCBUd28tUGFpcicgPyBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzQsNScsIGNvbG9yOiAndGV4dC1ibHVlLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5MT09QPy5QQUlSNDUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnNyw4JywgY29sb3I6ICd0ZXh0LXllbGxvdy01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uTE9PUD8uUEFJUjc4IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDogW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLm1hcCgoeyBwYWlyLCBjb2xvciwgdmFsdWUgfSkgPT4gKFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cGFpcn0gY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiB0ZXh0LWNlbnRlciBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgZm9udC1ib2xkICR7Y29sb3J9YH0+e3BhaXJ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3ZhbHVlIHx8ICdOL0EnfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIHRleHQtY2VudGVyIGJvcmRlci10IGJvcmRlci1ncmF5LTMwMCBwdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPuaegemZkDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW1pdGRhdGEgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuTE9PUH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ1BvRSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzQ5MHB4XSBiZy1bIzZiNmQ2Yl0gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBiZy13aGl0ZSBwLTAgcm91bmRlZC1tZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Lyog6YCJ6aG55Y2hICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbJ+Wbnui3rycsICfnur/lr7lVQkwnLCAnUDJQIFVCTCddLm1hcCgodGFiKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXt0YWJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0UG9lVGFiKHRhYil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIHB5LTEgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LWJvbGQgJHtwb2VUYWIgPT09IHRhYiA/ICdiZy1ncmFkaWVudC10by1iIGZyb20tWyNiMGIwYjBdIHZpYS1bI2UwZTRlMF0gdG8tWyNmZmZdIHRleHQtYmxhY2snIDogJ2JnLVsjMTMyODQzXSB0ZXh0LVsjZmZmZTkyXSd9YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGFifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Lyog5pWw5o2u5bGV56S65Yy65Z+fICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwb2VUYWIgPT09ICflm57ot68nICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIHRleHQtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBwYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+ICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1sZ1wiPuWAvCjOqSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzEsMicsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVIxMiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzMsNicsIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uTE9PUD8uUEFJUjM2IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHdpcmVPcmRlciAhPT0gJ0V0aGVybmV0IFR3by1QYWlyJyAmJiB3aXJlT3JkZXIgIT09ICdNMTItRCBUd28tUGFpcicgPyBbXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc0LDUnLCBjb2xvcjogJ3RleHQtYmx1ZS01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uTE9PUD8uUEFJUjQ1IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzcsOCcsIGNvbG9yOiAndGV4dC15ZWxsb3ctNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LkxPT1A/LlBBSVI3OCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA6IFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tYXAoKHsgcGFpciwgY29sb3IsIHZhbHVlIH0pID0+IChcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3BhaXJ9IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgdGV4dC1jZW50ZXIgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGZvbnQtYm9sZCAke2NvbG9yfWB9PntwYWlyfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7dmFsdWUgPiBsaW1pdGRhdGE/LkxPT1AgPyAnYmctcmVkLTEwMCcgOiAnJ31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZSB8fCAnTi9BJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgdGV4dC1jZW50ZXIgYm9yZGVyLXQgYm9yZGVyLWdyYXktMzAwIHB0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+5p6B6ZmQPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbWl0ZGF0YSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e2xpbWl0ZGF0YS5MT09QfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwb2VUYWIgPT09ICfnur/lr7lVQkwnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0zIHRleHQtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ncmF5LTMwMCBwYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LWJvbGRcIj4gIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDAgdGV4dC1sZ1wiPuWAvCjOqSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtbGdcIj7mnoHpmZAozqkpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzEsMicsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlBBSVJVQkw/LlBBSVIxMiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzMsNicsIGNvbG9yOiAndGV4dC1ncmVlbi01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uUEFJUlVCTD8uUEFJUjM2IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHdpcmVPcmRlciAhPT0gJ0V0aGVybmV0IFR3by1QYWlyJyAmJiB3aXJlT3JkZXIgIT09ICdNMTItRCBUd28tUGFpcicgPyBbXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc0LDUnLCBjb2xvcjogJ3RleHQtYmx1ZS01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uUEFJUlVCTD8uUEFJUjQ1IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzcsOCcsIGNvbG9yOiAndGV4dC15ZWxsb3ctNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlBBSVJVQkw/LlBBSVI3OCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA6IFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5tYXAoKHsgcGFpciwgY29sb3IsIHZhbHVlIH0pID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cGFpcn0gY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMyB0ZXh0LWNlbnRlciBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgZm9udC1ib2xkICR7Y29sb3J9YH0+e3BhaXJ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt2YWx1ZSA+IGxpbWl0ZGF0YT8uUEFJUlVCTCA/ICdiZy1yZWQtMTAwJyA6ICcnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlIHx8ICdOL0EnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbWl0ZGF0YSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e2xpbWl0ZGF0YS5QQUlSVUJMfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cG9lVGFiID09PSAnUDJQIFVCTCcgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTMgdGV4dC1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWdyYXktMzAwIHBiLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtYm9sZFwiPiAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIHRleHQtbGdcIj7lgLwozqkpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCB0ZXh0LWxnXCI+5p6B6ZmQKM6pKTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICcxMi0zNicsIGNvbG9yOiAndGV4dC1vcmFuZ2UtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlAyUFVCTD8uUEFJUjEyMzYgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4od2lyZU9yZGVyICE9PSAnRXRoZXJuZXQgVHdvLVBhaXInICYmIHdpcmVPcmRlciAhPT0gJ00xMi1EIFR3by1QYWlyJyA/IFtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzEyLTQ1JywgY29sb3I6ICd0ZXh0LWdyZWVuLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QMlBVQkw/LlBBSVIxMjQ1IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzEyLTc4JywgY29sb3I6ICd0ZXh0LWJsdWUtNTAwJywgdmFsdWU6IHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnBlcmZvcm1hbmNlPy5PSE0/LlAyUFVCTD8uUEFJUjEyNzggfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwYWlyOiAnMzYtNDUnLCBjb2xvcjogJ3RleHQteWVsbG93LTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QMlBVQkw/LlBBSVIzNjQ1IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcGFpcjogJzM2LTc4JywgY29sb3I6ICd0ZXh0LXB1cnBsZS01MDAnLCB2YWx1ZTogdGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8ucGVyZm9ybWFuY2U/Lk9ITT8uUDJQVUJMPy5QQUlSMzY3OCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHBhaXI6ICc0NS03OCcsIGNvbG9yOiAndGV4dC1waW5rLTUwMCcsIHZhbHVlOiB0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uT0hNPy5QMlBVQkw/LlBBSVI0NTc4IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDogW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLm1hcCgoeyBwYWlyLCBjb2xvciwgdmFsdWUgfSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwYWlyfSBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0zIHRleHQtY2VudGVyIHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Bmb250LWJvbGQgJHtjb2xvcn1gfT57cGFpcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ZhbHVlID4gbGltaXRkYXRhPy5QMlBVQkwgPyAnYmctcmVkLTEwMCcgOiAnJ31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZSB8fCAnTi9BJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW1pdGRhdGEgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PntsaW1pdGRhdGEuUDJQVUJMfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdEUkFXJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bZnVsbF0gYmctWyM2YjZkNmJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBiZy13aGl0ZSBwLTQgcm91bmRlZC1tZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbWl0ZGF0YSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZyZXF1ZW5jeUNoYXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnRpdGxlPXtjdXJ0aXRsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRWYWx1ZT17bGltaXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRkYXRhPXtsaW1pdGRhdGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlcj17d2lyZU9yZGVyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXt0ZXN0UmVzdWx0Py5yZXN1bHRkYXRhPy5wZXJmb3JtYW5jZT8uZGF0YX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnSERURCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bZnVsbF0gYmctWyM2YjZkNmJdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgYmctd2hpdGUgcC00IHJvdW5kZWQtbWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGltaXRkYXRhICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhEVERDaGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydGl0bGU9e2N1cnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSERURD17dGVzdFJlc3VsdD8ucmVzdWx0ZGF0YT8uSERURH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC04XCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAge3JlbmRlclJlc3VsdFRpdGxlQmFyKCl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJGb290ZXIoKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIlN0YXR1c0JhciIsIlJlc3VsdFRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwiRnJlcXVlbmN5Q2hhcnQiLCJIRFREQ2hhcnQiLCJDb3BwZXJQZXJmb3JtYW5jZSIsIm5hdmlnYXRpb24iLCJuYXZpZ2F0ZVRvIiwiZ29CYWNrIiwidmlldyIsImN1cnJlbnQiLCJjdXJ0aXRsZSIsInBhcmFtcyIsInRlc3RSZXN1bHQiLCJsaW1pdFZhbHVlIiwidGVzdGNvbmZpZyIsImxpbWl0ZGF0YSIsInNldExpbWl0ZGF0YSIsIndpcmVPcmRlciIsImxvYWRMaW1pdERhdGEiLCJiYXNlTmFtZSIsInNwbGl0IiwiZGF0YSIsImVycm9yIiwiY29uc29sZSIsInBvZVRhYiIsInNldFBvZVRhYiIsInJlbmRlclJlc3VsdFRpdGxlQmFyIiwiaGFuZGxlQmFjayIsInRpdGxlIiwib25CYWNrIiwicmVuZGVyQ29udGVudCIsImRpdiIsImNsYXNzTmFtZSIsInNwYW4iLCJwYWlyIiwiY29sb3IiLCJkZWxheSIsInJlc3VsdGRhdGEiLCJwZXJmb3JtYW5jZSIsIkRFTEFZIiwiUEFJUjEyIiwiZGVsYXlTa2V3IiwiREVMQVlTS0VXIiwibGVuZ3RoIiwiTEVOR1RIIiwiUEFJUjM2IiwiUEFJUjQ1IiwiUEFJUjc4IiwibWFwIiwiaW5jbHVkZXMiLCJ0YWIiLCJidXR0b24iLCJvbkNsaWNrIiwidmFsdWUiLCJPSE0iLCJMT09QIiwiUEFJUlVCTCIsIlAyUFVCTCIsIlBBSVIxMjM2IiwiUEFJUjEyNDUiLCJQQUlSMTI3OCIsIlBBSVIzNjQ1IiwiUEFJUjM2NzgiLCJQQUlSNDU3OCIsIkhEVEQiLCJyZW5kZXJGb290ZXIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/CopperPerformance.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/HomePage.js":
/*!****************************************************!*\
!*** ./src/components/dsxpage/general/HomePage.js ***!
\****************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HomePage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__, _utils_asset__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\nfunction HomePage() {\n const { getCurrentProject, getCurrentTestConfig, getCurrentOperator, getCurrentCableId, getCurrentCableId2, navigateTo, hasPlayedSound, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const { ref } = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HomePage.useEffect\": ()=>{\n if (hasPlayedSound) {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].setState({\n hasPlayedSound: false\n });\n }\n }\n }[\"HomePage.useEffect\"], [\n hasPlayedSound\n ]);\n const { connectionStatus, mainUnitAdapter, remoteUnitAdapter, mainUnitModules, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n // 获取当前项目数据\n const currentProject = getCurrentProject();\n // 获取当前选中的测试配置\n const currentConfig = getCurrentTestConfig();\n // 获取当前选中的操作员\n const currentOperator = getCurrentOperator();\n // 获取当前选中的电缆ID\n const currentCableId = getCurrentCableId();\n // 获取当前选中的电缆ID2\n const currentCableId2 = getCurrentCableId2();\n const passCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }).length;\n const failCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }).length;\n const ConnectStatus = connectionStatus?.CFPConnectStatus ?? connectionStatus?.['8000ConnectStatus'];\n // 计算下一个线缆ID\n const getNextCableId = (currentId)=>{\n const match = currentId.match(/^(.*?)(\\d+)$/);\n if (match) {\n const prefix = match[1];\n const number = parseInt(match[2]) + 1;\n return `${prefix}${number.toString().padStart(match[2].length, '0')}`;\n }\n return currentId;\n };\n const handleProjectClick = ()=>{\n navigateTo('project', 'main');\n };\n const handleOperatorsClick = ()=>{\n navigateTo('operators', 'main');\n };\n // 渲染测试配置区域的内容\n const renderTestConfigContent = ()=>{\n if (!currentConfig) return null;\n switch(currentConfig.moduleType){\n case '8000':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 109,\n columnNumber: 26\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 110,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.wireOrder\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 111,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 108,\n columnNumber: 21\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 117,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 118,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 119,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n currentConfig.params.refJumper,\n \" 跳线参照\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 120,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 116,\n columnNumber: 21\n }, this);\n case 'ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col justify-center h-full space-y-0.2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 126,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 127,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: currentConfig.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 128,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 125,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden bg-[#132843]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 140,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"主页\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 141,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[490px] bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[40px]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] text-2xl font-bold mb-1 flex items-center justify-center\",\n children: \"EST 仿真线缆测试仪\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 145,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 144,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \" bg-[#D5DFEB] rounded-lg p-4 shadow-xl flex flex-col gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#F8F6F7] rounded-lg p-4 shadow-md hover:shadow-lg transition-shadow duration-200 \",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-start\",\n children: mainUnitModules?.[0]?.id === '8000' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-bold text-[#132843] \",\n children: \"当前安装模块:铜缆分析模块\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 155,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 154,\n columnNumber: 33\n }, this) : mainUnitModules?.[0]?.id === 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-bold text-[#132843]\",\n children: \"当前安装模块:光纤损耗模块\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 159,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 158,\n columnNumber: 33\n }, this) : mainUnitModules?.[0]?.id === 'ofp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-bold text-[#132843]\",\n children: \"当前安装模块:光时域反射模块\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 163,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 162,\n columnNumber: 33\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg font-bold text-[#132843]\",\n children: \"请安装模块\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 167,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 166,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 152,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 151,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#F8F6F7] rounded-lg p-4 shadow-md hover:shadow-lg transition-shadow duration-200 cursor-pointer\",\n onClick: handleProjectClick,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] font-bold mb-1\",\n children: \"项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 177,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-start\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] text-sm pt-2\",\n children: currentProject?.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 180,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 179,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 bg-[#D5DFEB] px-3 py-1 rounded-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-green-600 font-medium\",\n children: passCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 185,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-4 h-4 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/pass.png'),\n alt: \"通过\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 187,\n columnNumber: 45\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 186,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 184,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 bg-[#D5DFEB] px-3 py-1 rounded-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-600 font-medium\",\n children: failCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 197,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-4 h-4 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_7__.getAssetUrl)('/fail.png'),\n alt: \"失败\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 199,\n columnNumber: 45\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 198,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 196,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 183,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 178,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 174,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#F8F6F7] rounded-lg p-4 shadow-md hover:shadow-lg transition-shadow duration-200 cursor-pointer h-[120px] flex justify-between items-center\",\n onClick: ()=>navigateTo('testConfig', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] font-bold mb-1\",\n children: \"测试极限值\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 227,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: renderTestConfigContent()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 229,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 226,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[#3965A2] text-sm font-medium\",\n children: currentConfig?.modulelable\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 232,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 231,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 222,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#F8F6F7] rounded-lg p-4 shadow-md hover:shadow-lg transition-shadow duration-200 cursor-pointer\",\n onClick: ()=>navigateTo('cableId', currentConfig?.moduleType === 'cfp' ? 'cfp' : 'main'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-start\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] font-bold mb-1\",\n children: \"下一条记录\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 255,\n columnNumber: 37\n }, this),\n currentConfig?.moduleType === 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] text-sm\",\n children: [\n \"输入:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: currentCableId?.name || ''\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 258,\n columnNumber: 88\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 258,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] text-sm\",\n children: [\n \"输出:\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: currentCableId2?.name || ''\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 259,\n columnNumber: 88\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 259,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] text-sm\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: currentCableId?.name || ''\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 263,\n columnNumber: 45\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 262,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 254,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 253,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 249,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#F8F6F7] rounded-lg p-4 shadow-md hover:shadow-lg transition-shadow duration-200 cursor-pointer\",\n onClick: handleOperatorsClick,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-start\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] font-bold mb-1\",\n children: \"操作员\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 286,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-[#132843] text-sm\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: currentOperator?.name || ''\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 288,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 287,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 285,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 284,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 280,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 247,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 148,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 143,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] bg-opacity-30 backdrop-blur-sm flex items-center justify-between px-5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-1/4 flex-1 flex justify-start\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100%] h-[60px] hover:bg-[#163154] transition-colors duration-200 rounded-lg flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>navigateTo('tools', 'main'),\n children: \"工具\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 313,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 312,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-1/4 flex-1 flex justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100%] h-[60px] hover:bg-[#163154] transition-colors duration-200 rounded-lg flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>navigateTo('result', 'main'),\n children: \"结果\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 322,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 321,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-1/4 flex-1 flex justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100%] h-[60px] hover:bg-[#163154] transition-colors duration-200 rounded-lg flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n // 根据模块类型设置不同的参照逻辑\n if (currentConfig?.moduleType === '8000') {\n navigateTo('tools', 'ref-copper');\n } else if (currentConfig?.moduleType === 'cfp') {\n navigateTo('tools', 'ref-cfp');\n } else if (currentConfig?.moduleType === 'ofp') {\n navigateTo('tools', 'ref-ofp');\n }\n },\n children: currentConfig?.moduleType === '8000' ? '设置基准' : currentConfig?.moduleType === 'cfp' ? '设置参照' : currentConfig?.moduleType === 'ofp' ? '设置补偿' : '设置参照'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 331,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 330,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-1/4 flex-1 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100%] h-[60px] hover:bg-[#163154] transition-colors duration-200 rounded-lg flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n if (currentConfig?.moduleType === '8000' || currentConfig?.moduleType === 'cfp') {\n if (!ConnectStatus) {\n setToastMessage('未连接,请检查连接状态');\n return;\n }\n }\n if (currentConfig?.moduleType === '8000') {\n if (mainUnitModules?.[0]?.id !== '8000') {\n setToastMessage('当前模块与所选标准不兼容');\n return;\n }\n const limitValue = currentConfig.params.limitValue;\n if (limitValue.includes('Channel') || limitValue.includes('Ch')) {\n if (!mainUnitAdapter.id.includes('channel') || !remoteUnitAdapter.id.includes('channel')) {\n setToastMessage('当前适配器与所选标准不兼容');\n return;\n }\n } else if (limitValue.includes('Perm') || limitValue.includes('PL')) {\n if (!mainUnitAdapter.id.includes('permanent') || !remoteUnitAdapter.id.includes('permanent')) {\n setToastMessage('当前适配器与所选标准不兼容');\n return;\n }\n } else if (limitValue.includes('MPTL')) {\n const hasPermanent = mainUnitAdapter.id.includes('permanent') || remoteUnitAdapter.id.includes('permanent');\n const hasPatchcode = mainUnitAdapter.id.includes('patchcode') || remoteUnitAdapter.id.includes('patchcode');\n if (!(hasPermanent && hasPatchcode)) {\n setToastMessage('当前适配器与所选标准不兼容');\n return;\n }\n }\n }\n if (currentConfig?.moduleType === 'cfp') {\n if (mainUnitModules?.[0]?.id !== 'cfp') {\n setToastMessage('当前模块与所选标准不兼容');\n return;\n }\n // 检查光纤类型\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n // 根据单/多模获取对应的路径\n let mainOutPath, mainInPath, remoteOutPath, remoteInPath;\n if (isMultiMode) {\n // 多模光纤路径\n mainOutPath = connectionStatus?.mainPaths?.['main-cfp-mm-out']?.path || [];\n mainInPath = connectionStatus?.mainPaths?.['main-cfp-in']?.path || [];\n remoteOutPath = connectionStatus?.remotePaths?.['remote-cfp-mm-out']?.path || [];\n remoteInPath = connectionStatus?.remotePaths?.['remote-cfp-in']?.path || [];\n // 检查是否所有端口都已连接\n if (!mainOutPath.length || !mainInPath.length || !remoteOutPath.length || !remoteInPath.length) {\n setTotalToastMessage('请确保所有光纤端口都已正确连接');\n return;\n }\n // 检查是否存在单模跳线\n const hasInvalidConnector = [\n ...mainOutPath,\n ...mainInPath,\n ...remoteOutPath,\n ...remoteInPath\n ].some((item)=>{\n return item.includes('sm');\n });\n if (hasInvalidConnector) {\n setTotalToastMessage('多模光纤链路中存在单模跳线,请检查连接');\n return;\n }\n } else {\n // 单模光纤路径\n mainOutPath = connectionStatus?.mainPaths?.['main-cfp-sm-out']?.path || [];\n mainInPath = connectionStatus?.mainPaths?.['main-cfp-in']?.path || [];\n remoteOutPath = connectionStatus?.remotePaths?.['remote-cfp-sm-out']?.path || [];\n remoteInPath = connectionStatus?.remotePaths?.['remote-cfp-in']?.path || [];\n // 检查是否所有端口都已连接\n if (!mainOutPath.length || !mainInPath.length || !remoteOutPath.length || !remoteInPath.length) {\n setTotalToastMessage('请确保所有光纤端口都已正确连接');\n return;\n }\n // 检查是否存在多模跳线\n const hasInvalidConnector = [\n ...mainOutPath,\n ...mainInPath,\n ...remoteOutPath,\n ...remoteInPath\n ].some((item)=>{\n return item.includes('mm');\n });\n if (hasInvalidConnector) {\n setTotalToastMessage('单模光纤链路中存在多模跳线,请检查连接');\n return;\n }\n }\n }\n if (currentConfig?.moduleType === 'ofp') {\n if (mainUnitModules?.[0]?.id !== 'ofp') {\n setToastMessage('当前模块与所选标准不兼容');\n return;\n }\n // 检查光纤类型是否匹配\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n const portType = Object.values(connectionStatus?.mainPaths || {})[0]?.start;\n if (isMultiMode && portType !== 'main-ofp-mm-out') {\n setTotalToastMessage('当前光纤类型必须使用多模端口测试');\n return;\n }\n if (!isMultiMode && portType !== 'main-ofp-sm-out') {\n setTotalToastMessage('当前光纤类型必须使用单模端口测试');\n return;\n }\n // 检查光纤连接器类型是否匹配\n const path = Object.values(connectionStatus?.mainPaths || {})[0]?.path || [];\n const hasInvalidConnector = path.some((item)=>{\n if (isMultiMode) {\n return item.includes('sm-') || item.includes('smc-');\n } else {\n return item.includes('mm-') || item.includes('mmc-');\n }\n });\n if (hasInvalidConnector) {\n setTotalToastMessage(isMultiMode ? '未检测到多模光纤,请检查光纤连接' : '未检测到单模光纤,请检查光纤连接');\n return;\n }\n if (!connectionStatus?.OFPStatus) {\n setTotalToastMessage('请接入实际被测链路,进行测试');\n return;\n }\n // 检查光纤连接数量\n const fiberConnectorCount = path.filter((item)=>{\n return item.includes('sm-') || item.includes('mm-') || item.includes('smc-') || item.includes('mmc-');\n }).length;\n if (fiberConnectorCount > 3) {\n setTotalToastMessage('该场景仅支持使用一段光纤连接测试仪与链路');\n return;\n }\n }\n navigateTo('testing', 'nosave');\n },\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 351,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 350,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 310,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/HomePage.js\",\n lineNumber: 139,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9Ib21lUGFnZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXlDO0FBQ1Y7QUFDcUI7QUFDRjtBQUNDO0FBQ0Y7QUFDTDtBQUU3QixTQUFTUTtJQUNwQixNQUFNLEVBQ0ZDLGlCQUFpQixFQUNqQkMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUNsQixHQUFHWCwrREFBZUE7SUFFbkIsTUFBTSxFQUFFWSxHQUFHLEVBQUUsR0FBR1osb0VBQXdCO0lBRXhDSixnREFBU0E7OEJBQUM7WUFDTixJQUFJYyxnQkFBZ0I7Z0JBQ2hCVixvRUFBd0IsQ0FBQztvQkFBRVUsZ0JBQWdCO2dCQUFNO1lBQ3JEO1FBQ0o7NkJBQUc7UUFBQ0E7S0FBZTtJQUVuQixNQUFNLEVBQUVLLGdCQUFnQixFQUFFQyxlQUFlLEVBQUVDLGlCQUFpQixFQUFDQyxlQUFlLEVBQUNDLG9CQUFvQixFQUFFLEdBQUdsQiw4REFBY0E7SUFHcEgsV0FBVztJQUNYLE1BQU1tQixpQkFBaUJoQjtJQUV2QixjQUFjO0lBQ2QsTUFBTWlCLGdCQUFnQmhCO0lBRXRCLGFBQWE7SUFDYixNQUFNaUIsa0JBQWtCaEI7SUFFeEIsY0FBYztJQUNkLE1BQU1pQixpQkFBaUJoQjtJQUN2QixlQUFlO0lBQ2YsTUFBTWlCLGtCQUFrQmhCO0lBRXhCLE1BQU1pQixZQUFZTCxnQkFBZ0JNLFlBQVlDLE9BQU9DLENBQUFBO1FBQ2pELE1BQU1DLGVBQWVELE9BQU9FLGtCQUFrQjtRQUM5QyxNQUFNQyxZQUFZSCxPQUFPSSxlQUFlO1FBQ3hDLE1BQU1DLFlBQVlMLE9BQU9NLGVBQWU7UUFFeEMsSUFBSUwsY0FBYztZQUNkLE9BQU9BLGlCQUFpQjtRQUM1QixPQUFPLElBQUlFLFdBQVc7WUFDbEIsT0FBT0EsY0FB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Z0JBQWdCO29DQUNoQixNQUFNMkQsT0FBT00sT0FBT0MsTUFBTSxDQUFDdEUsa0JBQWtCOEQsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUVDLFFBQVEsRUFBRTtvQ0FDNUUsTUFBTUUsc0JBQXNCRixLQUFLRyxJQUFJLENBQUNDLENBQUFBO3dDQUNsQyxJQUFJVixhQUFhOzRDQUNiLE9BQU9VLEtBQUtiLFFBQVEsQ0FBQyxVQUFVYSxLQUFLYixRQUFRLENBQUM7d0NBQ2pELE9BQU87NENBQ0gsT0FBT2EsS0FBS2IsUUFBUSxDQUFDLFVBQVVhLEtBQUtiLFFBQVEsQ0FBQzt3Q0FDakQ7b0NBQ0o7b0NBRUEsSUFBSVcscUJBQXFCO3dDQUNyQjdELHFCQUFxQnFELGNBQWMscUJBQXFCO3dDQUN4RDtvQ0FDSjtvQ0FFQSxJQUFJLENBQUN6RCxrQkFBa0J3RSxXQUFXO3dDQUM5QnBFLHFCQUFxQjt3Q0FDckI7b0NBQ0o7b0NBRUEsV0FBVztvQ0FDWCxNQUFNcUUsc0JBQXNCVixLQUFLbkQsTUFBTSxDQUFDdUQsQ0FBQUE7d0NBQ3BDLE9BQU9BLEtBQUtiLFFBQVEsQ0FBQyxVQUFVYSxLQUFLYixRQUFRLENBQUMsVUFDdENhLEtBQUtiLFFBQVEsQ0FBQyxXQUFXYSxLQUFLYixRQUFRLENBQUM7b0NBQ2xELEdBQUdsQyxNQUFNO29DQUVULElBQUlxRCxzQkFBc0IsR0FBRzt3Q0FDekJyRSxxQkFBcUI7d0NBQ3JCO29DQUNKO2dDQUNKO2dDQUVBVixXQUFXLFdBQVU7NEJBQ3pCO3NDQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVE3QiIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2dlbmVyYWwvSG9tZVBhZ2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IEltYWdlIGZyb20gJ25leHQvaW1hZ2UnO1xyXG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N0YXR1c0Jhcic7XHJcbmltcG9ydCBUaXRsZUJhciBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9UaXRsZUJhcic7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcbmltcG9ydCB7IGdldEFzc2V0VXJsIH0gZnJvbSAnQC91dGlscy9hc3NldCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb21lUGFnZSgpIHtcclxuICAgIGNvbnN0IHsgXHJcbiAgICAgICAgZ2V0Q3VycmVudFByb2plY3QsXHJcbiAgICAgICAgZ2V0Q3VycmVudFRlc3RDb25maWcsXHJcbiAgICAgICAgZ2V0Q3VycmVudE9wZXJhdG9yLFxyXG4gICAgICAgIGdldEN1cnJlbnRDYWJsZUlkLFxyXG4gICAgICAgIGdldEN1cnJlbnRDYWJsZUlkMixcclxuICAgICAgICBuYXZpZ2F0ZVRvLFxyXG4gICAgICAgIGhhc1BsYXllZFNvdW5kLFxyXG4gICAgICAgIHNldFRvYXN0TWVzc2FnZVxyXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG4gICAgXHJcbiAgICBjb25zdCB7IHJlZiB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaGFzUGxheWVkU291bmQpIHtcclxuICAgICAgICAgICAgdXNlRGlzcGxheVN0b3JlLnNldFN0YXRlKHsgaGFzUGxheWVkU291bmQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtoYXNQbGF5ZWRTb3VuZF0pO1xyXG5cclxuICAgIGNvbnN0IHsgY29ubmVjdGlvblN0YXR1cywgbWFpblVuaXRBZGFwdGVyLCByZW1vdGVVbml0QWRhcHRlcixtYWluVW5pdE1vZHVsZXMsc2V0VG90YWxUb2FzdE1lc3NhZ2UgfSA9IHVzZURldmljZVN0b3JlKCk7XHJcbiAgICBcclxuXHJcbiAgICAvLyDojrflj5blvZPliY3pobnnm67mlbDmja5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIFxyXG4gICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE5rWL6K+V6YWN572uXHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFRlc3RDb25maWcoKTtcclxuXHJcbiAgICAvLyDojrflj5blvZPliY3pgInkuK3nmoTmk43kvZzlkZhcclxuICAgIGNvbnN0IGN1cnJlbnRPcGVyYXRvciA9IGdldEN1cnJlbnRPcGVyYXRvcigpO1xyXG5cclxuICAgIC8vIOiOt+WPluW9k+WJjemAieS4reeahOeUtee8hklEXHJcbiAgICBjb25zdCBjdXJyZW50Q2FibGVJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCk7XHJcbiAgICAvLyDojrflj5blvZPliY3pgInkuK3nmoTnlLXnvIZJRDJcclxuICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkMiA9IGdldEN1cnJlbnRDYWJsZUlkMigpO1xyXG5cclxuICAgIGNvbnN0IHBhc3NDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBjb25zdCBjb3BwZXJTdGF0dXMgPSByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdwYXNzJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNmcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAncGFzcyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mcFN0YXR1cyA9PT0gJ3Bhc3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5sZW5ndGg7XHJcbiAgICBcclxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBjb25zdCBjb3BwZXJTdGF0dXMgPSByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdmYWlsJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNmcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAnZmFpbCc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mcFN0YXR1cyA9PT0gJ2ZhaWwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5sZW5ndGg7XHJcblxyXG5cclxuICAgIGNvbnN0IENvbm5lY3RTdGF0dXMgPSBjb25uZWN0aW9uU3RhdHVzPy5DRlBDb25uZWN0U3RhdHVzID8/IGNvbm5lY3Rpb25TdGF0dXM/LlsnODAwMENvbm5lY3RTdGF0dXMnXTtcclxuICAgIFxyXG5cclxuXHJcblxyXG4gICAgLy8g6K6h566X5LiL5LiA5Liq57q/57yGSURcclxuICAgIGNvbnN0IGdldE5leHRDYWJsZUlkID0gKGN1cnJlbnRJZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gY3VycmVudElkLm1hdGNoKC9eKC4qPykoXFxkKykkLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChtYXRjaFsyXSkgKyAxO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bnVtYmVyLnRvU3RyaW5nKCkucGFkU3RhcnQobWF0Y2hbMl0ubGVuZ3RoLCAnMCcpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50SWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVByb2plY3RDbGljayA9ICgpID0+IHtcclxuICAgICAgICBuYXZpZ2F0ZVRvKCdwcm9qZWN0JywgJ21haW4nKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlT3BlcmF0b3JzQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgbmF2aWdhdGVUbygnb3BlcmF0b3JzJywgJ21haW4nKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5rWL6K+V6YWN572u5Yy65Z+f55qE5YaF5a65XHJcbiAgICBjb25zdCByZW5kZXJUZXN0Q29uZmlnQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRDb25maWcubW9kdWxlVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICc4MDAwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGgtZnVsbCBzcGFjZS15LTAuMiB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjdXJyZW50Q29uZmlnLnBhcmFtcy5saW1pdFZhbHVlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLndpcmVPcmRlcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NmcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBoLWZ1bGwgc3BhY2UteS0wLjIgdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPuaZuuiDvei/nOerrzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjdXJyZW50Q29uZmlnLnBhcmFtcy5saW1pdFZhbHVlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLnJlZkp1bXBlcn0g6Lez57q/5Y+C54WnPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdvZnAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgaC1mdWxsIHNwYWNlLXktMC4yIHRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7oh6rliqhPVERSPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2N1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW4gYmctWyMxMzI4NDNdXCI+XHJcbiAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAgPFRpdGxlQmFyIHRpdGxlPVwi5Li76aG1XCIgLz5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNDkwcHhdIGJnLVsjRDVERkVCXSBwLTQgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNDBweF1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWyMxMzI4NDNdIHRleHQtMnhsIGZvbnQtYm9sZCBtYi0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+RVNUIOS7v+ecn+e6v+e8hua1i+ivleS7qjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgey8qIOS4iuaWueS/oeaBr+WMuuWfnyAqL31cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiIGJnLVsjRDVERkVCXSByb3VuZGVkLWxnIHAtNCBzaGFkb3cteGwgZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICB7Lyog5qih5Z2X6KOF6L29ICovfVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctWyNGOEY2RjddIHJvdW5kZWQtbGcgcC00IHNoYWRvdy1tZCBob3ZlcjpzaGFkb3ctbGcgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwIFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge21haW5Vbml0TW9kdWxlcz8uWzBdPy5pZCA9PT0gJzgwMDAnID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LWJvbGQgdGV4dC1bIzEzMjg0M10gIFwiPuW9k+WJjeWuieijheaooeWdl++8mumTnOe8huWIhuaekOaooeWdlzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG1haW5Vbml0TW9kdWxlcz8uWzBdPy5pZCAgPT09ICdjZnAnID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LWJvbGQgdGV4dC1bIzEzMjg0M11cIj7lvZPliY3lronoo4XmqKHlnZfvvJrlhYnnuqTmjZ/ogJfmqKHlnZc8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBtYWluVW5pdE1vZHVsZXM/LlswXT8uaWQgID09PSAnb2ZwJyA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1ib2xkIHRleHQtWyMxMzI4NDNdXCI+5b2T5YmN5a6J6KOF5qih5Z2X77ya5YWJ5pe25Z+f5Y+N5bCE5qih5Z2XPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LWJvbGQgdGV4dC1bIzEzMjg0M11cIj7or7flronoo4XmqKHlnZc8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICB7Lyog6aG555uu6YWN572u6YOo5YiGICovfVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctWyNGOEY2RjddIHJvdW5kZWQtbGcgcC00IHNoYWRvdy1tZCBob3ZlcjpzaGFkb3ctbGcgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwIGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQcm9qZWN0Q2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bIzEzMjg0M10gZm9udC1ib2xkIG1iLTFcIj7pobnnm648L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWyMxMzI4NDNdIHRleHQtc20gcHQtMlwiPntjdXJyZW50UHJvamVjdD8ubmFtZX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJnLVsjRDVERkVCXSBweC0zIHB5LTEgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTYwMCBmb250LW1lZGl1bVwiPntwYXNzQ291bnR8fCAwfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00IGgtNCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvcGFzcy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi6YCa6L+HXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJnLVsjRDVERkVCXSBweC0zIHB5LTEgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgZm9udC1tZWRpdW1cIj57ZmFpbENvdW50fHwgMH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNCBoLTQgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2ZhaWwucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuWksei0pVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiA8ZGl2IGNsYXNzTmFtZT1cInctNiBoLTYgcmVsYXRpdmUgdGV4dC1bIzM5NjVBMl1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz17XCJhdXRvXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW4gb3BhY2l0eS03MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHsvKiDmtYvor5XphY3nva7ljLrln58gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctWyNGOEY2RjddIHJvdW5kZWQtbGcgcC00IHNoYWRvdy1tZCBob3ZlcjpzaGFkb3ctbGcgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwIGN1cnNvci1wb2ludGVyIGgtWzEyMHB4XSBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCd0ZXN0Q29uZmlnJywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWyMxMzI4NDNdIGZvbnQtYm9sZCBtYi0xXCI+5rWL6K+V5p6B6ZmQ5YC8PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPntyZW5kZXJUZXN0Q29uZmlnQ29udGVudCgpfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bIzM5NjVBMl0gdGV4dC1zbSBmb250LW1lZGl1bVwiPntjdXJyZW50Q29uZmlnPy5tb2R1bGVsYWJsZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogPGRpdiBjbGFzc05hbWU9XCJ3LTQgaC00IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluIG9wYWNpdHktNzBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgey8qIElE5ZKM5pON5L2c5ZGY5L+h5oGv6KGMICovfVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Lyog57q/57yGSUTljLrln58gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1bI0Y4RjZGN10gcm91bmRlZC1sZyBwLTQgc2hhZG93LW1kIGhvdmVyOnNoYWRvdy1sZyB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnY2FibGVJZCcsIGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnID8gJ2NmcCcgOiAnbWFpbicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bIzEzMjg0M10gZm9udC1ib2xkIG1iLTFcIj7kuIvkuIDmnaHorrDlvZU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWyMxMzI4NDNdIHRleHQtc21cIj7ovpPlhaXvvJo8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50Q2FibGVJZD8ubmFtZSB8fCAnJ308L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVsjMTMyODQzXSB0ZXh0LXNtXCI+6L6T5Ye677yaPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57Y3VycmVudENhYmxlSWQyPy5uYW1lIHx8ICcnfTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LVsjMTMyODQzXSB0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57Y3VycmVudENhYmxlSWQ/Lm5hbWUgfHwgJyd9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIDxkaXYgY2xhc3NOYW1lPVwidy00IGgtNCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz17XCJhdXRvXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpbiBvcGFjaXR5LTcwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Lyog5pON5L2c5ZGY5Yy65Z+fICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctWyNGOEY2RjddIHJvdW5kZWQtbGcgcC00IHNoYWRvdy1tZCBob3ZlcjpzaGFkb3ctbGcgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwIGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVyYXRvcnNDbGlja31cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWyMxMzI4NDNdIGZvbnQtYm9sZCBtYi0xXCI+5pON5L2c5ZGYPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1bIzEzMjg0M10gdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57Y3VycmVudE9wZXJhdG9yPy5uYW1lIHx8ICcnfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey8qIDxkaXYgY2xhc3NOYW1lPVwidy00IGgtNCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz17XCJhdXRvXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpbiBvcGFjaXR5LTcwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICB7Lyog5bqV6YOo5oyJ6ZKu5Yy65Z+fICovfVxyXG4gICAgICAgICAgICAgICAgey8qIOenu+mZpOWOn+acieeahOW3peWFt+WSjOe7k+aenOaMiemSriAqL31cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB7Lyog5bqV6YOo5qCPICovfVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBiZy1vcGFjaXR5LTMwIGJhY2tkcm9wLWJsdXItc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgey8qIOW3peWFt+aMiemSriAqL31cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTEvNCBmbGV4LTEgZmxleCBqdXN0aWZ5LXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMCVdIGgtWzYwcHhdIGhvdmVyOmJnLVsjMTYzMTU0XSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlICBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCd0b29scycsICdtYWluJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5bel5YW3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiDnu5PmnpzmjInpkq4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xLzQgZmxleC0xIGZsZXgganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwJV0gaC1bNjBweF0gaG92ZXI6YmctWyMxNjMxNTRdIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCByb3VuZGVkLWxnIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ3Jlc3VsdCcsICdtYWluJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg57uT5p6cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiDorr7nva7lj4LnhafmjInpkq4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xLzQgZmxleC0xIGZsZXgganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMCVdIGgtWzYwcHhdIGhvdmVyOmJnLVsjMTYzMTU0XSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlICBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qC55o2u5qih5Z2X57G75Z6L6K6+572u5LiN5ZCM55qE5Y+C54Wn6YC76L6RXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJzgwMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygndG9vbHMnLCAncmVmLWNvcHBlcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlVG8oJ3Rvb2xzJywgJ3JlZi1jZnAnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJ29mcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZVRvKCd0b29scycsICdyZWYtb2ZwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJzgwMDAnID8gJ+iuvue9ruWfuuWHhicgOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnID8gJ+iuvue9ruWPgueFpycgOiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdvZnAnID8gJ+iuvue9ruihpeWBvycgOiAn6K6+572u5Y+C54WnJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Lyog5rWL6K+V5oyJ6ZKuICovfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMS80IGZsZXgtMSBmbGV4IGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDAlXSBoLVs2MHB4XSBob3ZlcjpiZy1bIzE2MzE1NF0gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwIHJvdW5kZWQtbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSAgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICc4MDAwJyB8fCBjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDb25uZWN0U3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfmnKrov57mjqXvvIzor7fmo4Dmn6Xov57mjqXnirbmgIEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnODAwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWluVW5pdE1vZHVsZXM/LlswXT8uaWQgIT09ICc4MDAwJykgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+W9k+WJjeaooeWdl+S4juaJgOmAieagh+WHhuS4jeWFvOWuuScpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGN1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbWl0VmFsdWUuaW5jbHVkZXMoJ0NoYW5uZWwnKSB8fCBsaW1pdFZhbHVlLmluY2x1ZGVzKCdDaCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWluVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ2NoYW5uZWwnKSB8fCAhcmVtb3RlVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ2NoYW5uZWwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+W9k+WJjemAgumFjeWZqOS4juaJgOmAieagh+WHhuS4jeWFvOWuuScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW1pdFZhbHVlLmluY2x1ZGVzKCdQZXJtJykgfHwgbGltaXRWYWx1ZS5pbmNsdWRlcygnUEwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFpblVuaXRBZGFwdGVyLmlkLmluY2x1ZGVzKCdwZXJtYW5lbnQnKSB8fCAhcmVtb3RlVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ3Blcm1hbmVudCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn5b2T5YmN6YCC6YWN5Zmo5LiO5omA6YCJ5qCH5YeG5LiN5YW85a65Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbWl0VmFsdWUuaW5jbHVkZXMoJ01QVEwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Blcm1hbmVudCA9IG1haW5Vbml0QWRhcHRlci5pZC5pbmNsdWRlcygncGVybWFuZW50JykgfHwgcmVtb3RlVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ3Blcm1hbmVudCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BhdGNoY29kZSA9IG1haW5Vbml0QWRhcHRlci5pZC5pbmNsdWRlcygncGF0Y2hjb2RlJykgfHwgcmVtb3RlVW5pdEFkYXB0ZXIuaWQuaW5jbHVkZXMoJ3BhdGNoY29kZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGhhc1Blcm1hbmVudCAmJiBoYXNQYXRjaGNvZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn5b2T5YmN6YCC6YWN5Zmo5LiO5omA6YCJ5qCH5YeG5LiN5YW85a65Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFpblVuaXRNb2R1bGVzPy5bMF0/LmlkICE9PSAnY2ZwJykgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+W9k+WJjeaooeWdl+S4juaJgOmAieagh+WHhuS4jeWFvOWuuScpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeWFiee6pOexu+Wei1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FibGVUeXBlID0gY3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNdWx0aU1vZGUgPSBjYWJsZVR5cGUuaW5jbHVkZXMoJ09NJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOagueaNruWNlS/lpJrmqKHojrflj5blr7nlupTnmoTot6/lvoRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYWluT3V0UGF0aCwgbWFpbkluUGF0aCwgcmVtb3RlT3V0UGF0aCwgcmVtb3RlSW5QYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNdWx0aU1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpJrmqKHlhYnnuqTot6/lvoRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluT3V0UGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uWydtYWluLWNmcC1tbS1vdXQnXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluSW5QYXRoID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bJ21haW4tY2ZwLWluJ10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlT3V0UGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/LnJlbW90ZVBhdGhzPy5bJ3JlbW90ZS1jZnAtbW0tb3V0J10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSW5QYXRoID0gY29ubmVjdGlvblN0YXR1cz8ucmVtb3RlUGF0aHM/LlsncmVtb3RlLWNmcC1pbiddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeaYr+WQpuaJgOacieerr+WPo+mDveW3sui/nuaOpVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFpbk91dFBhdGgubGVuZ3RoIHx8ICFtYWluSW5QYXRoLmxlbmd0aCB8fCAhcmVtb3RlT3V0UGF0aC5sZW5ndGggfHwgIXJlbW90ZUluUGF0aC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+ivt+ehruS/neaJgOacieWFiee6pOerr+WPo+mDveW3suato+ehrui/nuaOpScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblrZjlnKjljZXmqKHot7Pnur9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNJbnZhbGlkQ29ubmVjdG9yID0gWy4uLm1haW5PdXRQYXRoLCAuLi5tYWluSW5QYXRoLCAuLi5yZW1vdGVPdXRQYXRoLCAuLi5yZW1vdGVJblBhdGhdLnNvbWUoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmluY2x1ZGVzKCdzbScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnZhbGlkQ29ubmVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCflpJrmqKHlhYnnuqTpk77ot6/kuK3lrZjlnKjljZXmqKHot7Pnur/vvIzor7fmo4Dmn6Xov57mjqUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Y2V5qih5YWJ57qk6Lev5b6EXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbk91dFBhdGggPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LlsnbWFpbi1jZnAtc20tb3V0J10/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkluUGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uWydtYWluLWNmcC1pbiddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZU91dFBhdGggPSBjb25uZWN0aW9uU3RhdHVzPy5yZW1vdGVQYXRocz8uWydyZW1vdGUtY2ZwLXNtLW91dCddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUluUGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/LnJlbW90ZVBhdGhzPy5bJ3JlbW90ZS1jZnAtaW4nXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmiYDmnInnq6/lj6Ppg73lt7Lov57mjqVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1haW5PdXRQYXRoLmxlbmd0aCB8fCAhbWFpbkluUGF0aC5sZW5ndGggfHwgIXJlbW90ZU91dFBhdGgubGVuZ3RoIHx8ICFyZW1vdGVJblBhdGgubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCfor7fnoa7kv53miYDmnInlhYnnuqTnq6/lj6Ppg73lt7LmraPnoa7ov57mjqUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5a2Y5Zyo5aSa5qih6Lez57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzSW52YWxpZENvbm5lY3RvciA9IFsuLi5tYWluT3V0UGF0aCwgLi4ubWFpbkluUGF0aCwgLi4ucmVtb3RlT3V0UGF0aCwgLi4ucmVtb3RlSW5QYXRoXS5zb21lKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbmNsdWRlcygnbW0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW52YWxpZENvbm5lY3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZSgn5Y2V5qih5YWJ57qk6ZO+6Lev5Lit5a2Y5Zyo5aSa5qih6Lez57q/77yM6K+35qOA5p+l6L+e5o6lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnb2ZwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1haW5Vbml0TW9kdWxlcz8uWzBdPy5pZCAhPT0gJ29mcCcpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCflvZPliY3mqKHlnZfkuI7miYDpgInmoIflh4bkuI3lhbzlrrknKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XlhYnnuqTnsbvlnovmmK/lkKbljLnphY1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhYmxlVHlwZSA9IGN1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlNb2RlID0gY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9ydFR5cGUgPSBPYmplY3QudmFsdWVzKGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocyB8fCB7fSlbMF0/LnN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc011bHRpTW9kZSAmJiBwb3J0VHlwZSAhPT0gJ21haW4tb2ZwLW1tLW91dCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZSgn5b2T5YmN5YWJ57qk57G75Z6L5b+F6aG75L2/55So5aSa5qih56uv5Y+j5rWL6K+VJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNdWx0aU1vZGUgJiYgcG9ydFR5cGUgIT09ICdtYWluLW9mcC1zbS1vdXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+W9k+WJjeWFiee6pOexu+Wei+W/hemhu+S9v+eUqOWNleaooeerr+WPo+a1i+ivlScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XlhYnnuqTov57mjqXlmajnsbvlnovmmK/lkKbljLnphY1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBPYmplY3QudmFsdWVzKGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocyB8fCB7fSlbMF0/LnBhdGggfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNJbnZhbGlkQ29ubmVjdG9yID0gcGF0aC5zb21lKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc011bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbmNsdWRlcygnc20tJykgfHwgaXRlbS5pbmNsdWRlcygnc21jLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmluY2x1ZGVzKCdtbS0nKSB8fCBpdGVtLmluY2x1ZGVzKCdtbWMtJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludmFsaWRDb25uZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZShpc011bHRpTW9kZSA/ICfmnKrmo4DmtYvliLDlpJrmqKHlhYnnuqTvvIzor7fmo4Dmn6XlhYnnuqTov57mjqUnIDogJ+acquajgOa1i+WIsOWNleaooeWFiee6pO+8jOivt+ajgOafpeWFiee6pOi/nuaOpScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0aW9uU3RhdHVzPy5PRlBTdGF0dXMpIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxUb2FzdE1lc3NhZ2UoJ+ivt+aOpeWFpeWunumZheiiq+a1i+mTvui3r++8jOi/m+ihjOa1i+ivlScpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeWFiee6pOi/nuaOpeaVsOmHj1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmliZXJDb25uZWN0b3JDb3VudCA9IHBhdGguZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmluY2x1ZGVzKCdzbS0nKSB8fCBpdGVtLmluY2x1ZGVzKCdtbS0nKSB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pbmNsdWRlcygnc21jLScpIHx8IGl0ZW0uaW5jbHVkZXMoJ21tYy0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmliZXJDb25uZWN0b3JDb3VudCA+IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZSgn6K+l5Zy65pmv5LuF5pSv5oyB5L2/55So5LiA5q615YWJ57qk6L+e5o6l5rWL6K+V5Luq5LiO6ZO+6LevJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZVRvKCd0ZXN0aW5nJywnbm9zYXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDmtYvor5VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsIkltYWdlIiwiU3RhdHVzQmFyIiwiVGl0bGVCYXIiLCJ1c2VEaXNwbGF5U3RvcmUiLCJ1c2VEZXZpY2VTdG9yZSIsImdldEFzc2V0VXJsIiwiSG9tZVBhZ2UiLCJnZXRDdXJyZW50UHJvamVjdCIsImdldEN1cnJlbnRUZXN0Q29uZmlnIiwiZ2V0Q3VycmVudE9wZXJhdG9yIiwiZ2V0Q3VycmVudENhYmxlSWQiLCJnZXRDdXJyZW50Q2FibGVJZDIiLCJuYXZpZ2F0ZVRvIiwiaGFzUGxheWVkU291bmQiLCJzZXRUb2FzdE1lc3NhZ2UiLCJyZWYiLCJnZXRTdGF0ZSIsInNldFN0YXRlIiwiY29ubmVjdGlvblN0YXR1cyIsIm1haW5Vbml0QWRhcHRlciIsInJlbW90ZVVuaXRBZGFwdGVyIiwibWFpblVuaXRNb2R1bGVzIiwic2V0VG90YWxUb2FzdE1lc3NhZ2UiLCJjdXJyZW50UHJvamVjdCIsImN1cnJlbnRDb25maWciLCJjdXJyZW50T3BlcmF0b3IiLCJjdXJyZW50Q2FibGVJZCIsImN1cnJlbnRDYWJsZUlkMiIsInBhc3NDb3VudCIsInRlc3RSZXN1bHRzIiwiZmlsdGVyIiwicmVzdWx0IiwiY29wcGVyU3RhdHVzIiwiQ29wcGVyUmVzdWx0U3RhdHVzIiwiY2ZwU3RhdHVzIiwiQ0ZQUmVzdWx0U3RhdHVzIiwib2ZwU3RhdHVzIiwib2ZwUmVzdWx0U3RhdHVzIiwibGVuZ3RoIiwiZmFpbENvdW50IiwiQ29ubmVjdFN0YXR1cyIsIkNGUENvbm5lY3RTdGF0dXMiLCJnZXROZXh0Q2FibGVJZCIsImN1cnJlbnRJZCIsIm1hdGNoIiwicHJlZml4IiwibnVtYmVyIiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiaGFuZGxlUHJvamVjdENsaWNrIiwiaGFuZGxlT3BlcmF0b3JzQ2xpY2siLCJyZW5kZXJUZXN0Q29uZmlnQ29udGVudCIsIm1vZHVsZVR5cGUiLCJkaXYiLCJjbGFzc05hbWUiLCJwYXJhbXMiLCJsaW1pdFZhbHVlIiwiY2FibGVUeXBlIiwid2lyZU9yZGVyIiwicmVmSnVtcGVyIiwidGl0bGUiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwic3BhbiIsInNyYyIsImFsdCIsInNpemVzIiwiZmlsbCIsIm1vZHVsZWxhYmxlIiwiYnV0dG9uIiwiaW5jbHVkZXMiLCJoYXNQZXJtYW5lbnQiLCJoYXNQYXRjaGNvZGUiLCJpc011bHRpTW9kZSIsIm1haW5PdXRQYXRoIiwibWFpbkluUGF0aCIsInJlbW90ZU91dFBhdGgiLCJyZW1vdGVJblBhdGgiLCJtYWluUGF0aHMiLCJwYXRoIiwicmVtb3RlUGF0aHMiLCJoYXNJbnZhbGlkQ29ubmVjdG9yIiwic29tZSIsIml0ZW0iLCJwb3J0VHlwZSIsIk9iamVjdCIsInZhbHVlcyIsInN0YXJ0IiwiT0ZQU3RhdHVzIiwiZmliZXJDb25uZWN0b3JDb3VudCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/HomePage.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/MenuList.js":
/*!****************************************************!*\
!*** ./src/components/dsxpage/general/MenuList.js ***!
\****************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MenuList)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n// 菜单数据定义\nconst menuData = {\n MODULE: {\n title: '模块',\n items: [\n {\n value: '8000',\n label: '铜缆测试仪'\n },\n {\n value: 'cfp',\n label: '光损耗测试仪'\n },\n {\n value: 'ofp',\n label: 'OTDR测试仪'\n }\n ]\n },\n CABLE_TYPE: {\n title: '电缆类型',\n subTitle: '电缆类型',\n items: [\n {\n value: 'custom',\n label: '定制',\n disabled: true\n },\n {\n value: 'general',\n label: '通用',\n children: [\n // { value: 'Cat8 S/FTP', label: 'Cat8 S/FTP' },\n // { value: 'Cat7A S/FTP', label: 'Cat7A S/FTP' },\n // { value: 'Cat7 S/FTP', label: 'Cat7 S/FTP' },\n // { value: 'Cat6A S/FTP', label: 'Cat6A S/FTP' },\n {\n value: 'Cat6A U/UTP',\n label: 'Cat6A U/UTP'\n },\n {\n value: 'Cat6A F/UTP',\n label: 'Cat6A F/UTP'\n },\n {\n value: 'Cat6 U/UTP',\n label: 'Cat6 U/UTP'\n },\n {\n value: 'Cat6 F/UTP',\n label: 'Cat6 F/UTP'\n },\n // { value: 'Cat6 U/FTP', label: 'Cat6 U/FTP' },\n {\n value: 'Cat5e U/UTP',\n label: 'Cat5e U/UTP'\n },\n {\n value: 'Cat5e F/UTP',\n label: 'Cat5e F/UTP'\n }\n ]\n },\n {\n value: 'coaxial',\n label: '通用同轴电缆',\n disabled: true\n },\n {\n value: 'manufacturer',\n label: '制造商',\n disabled: true\n }\n ]\n },\n LIMIT_VALUE: {\n title: '测试极限值',\n subTitle: '极限值组',\n items: [\n {\n value: 'TIA',\n label: 'TIA',\n children: {\n // Cat8: {\n // label: 'Cat8',\n // children: [\n // { value: 'TIA Cat 8 Perm.Link', label: 'TIA Cat 8 Perm.Link' },\n // { value: 'TIA Cat 8 Perm.Link (+ALL)', label: 'TIA Cat 8 Perm.Link (+ALL)' },\n // { value: 'TIA Cat 8 Perm.Link (+PoE)', label: 'TIA Cat 8 Perm.Link (+PoE)' },\n // { value: 'TIA Cat 8 Channel', label: 'TIA Cat 8 Channel' },\n // { value: 'TIA Cat 8 Channel (+ALL)', label: 'TIA Cat 8 Channel (+ALL)' },\n // { value: 'TIA Cat 8 Channel (+PoE)', label: 'TIA Cat 8 Channel (+PoE)' }\n // ]\n // },\n Cat6A: {\n label: 'Cat6A',\n children: [\n {\n value: 'TIA Cat 6A Perm.Link',\n label: 'TIA Cat 6A Perm.Link'\n },\n {\n value: 'TIA Cat 6A Perm.Link (+ALL)',\n label: 'TIA Cat 6A Perm.Link (+ALL)'\n },\n {\n value: 'TIA Cat 6A Perm.Link (+PoE)',\n label: 'TIA Cat 6A Perm.Link (+PoE)'\n },\n {\n value: 'TIA Cat 6A Channel',\n label: 'TIA Cat 6A Channel'\n },\n {\n value: 'TIA Cat 6A Channel (+ALL)',\n label: 'TIA Cat 6A Channel (+ALL)'\n },\n {\n value: 'TIA Cat 6A Channel (+PoE)',\n label: 'TIA Cat 6A Channel (+PoE)'\n },\n {\n value: 'TIA Cat 6A MPTL',\n label: 'TIA Cat 6A MPTL'\n },\n {\n value: 'TIA Cat 6A MPTL (+PoE)',\n label: 'TIA Cat 6A MPTL (+PoE)'\n },\n // { value: 'TIA 1005 Cat 6A Perm.Link', label: 'TIA 1005 Cat 6A Perm.Link' },\n // { value: 'TIA 1005 Cat 6A Channel', label: 'TIA 1005 Cat 6A Channel' },\n {\n value: 'TIA 1005 Cat 6A Channel E1 (+ALL)',\n label: 'TIA 1005 Cat 6A Channel E1 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6A Channel E1 (+PoE)', label: 'TIA 1005 Cat 6A Channel E1 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6A Channel E2 (+ALL)',\n label: 'TIA 1005 Cat 6A Channel E2 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6A Channel E2 (+PoE)', label: 'TIA 1005 Cat 6A Channel E2 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6A Channel E3 (+ALL)',\n label: 'TIA 1005 Cat 6A Channel E3 (+ALL)'\n }\n ]\n },\n Cat6: {\n label: 'Cat6',\n children: [\n {\n value: 'TIA Cat 6 Perm.Link',\n label: 'TIA Cat 6 Perm.Link'\n },\n {\n value: 'TIA Cat 6 Perm.Link (+ALL)',\n label: 'TIA Cat 6 Perm.Link (+ALL)'\n },\n {\n value: 'TIA Cat 6 Perm.Link (+PoE)',\n label: 'TIA Cat 6 Perm.Link (+PoE)'\n },\n {\n value: 'TIA Cat 6 Channel',\n label: 'TIA Cat 6 Channel'\n },\n {\n value: 'TIA Cat 6 Channel (+ALL)',\n label: 'TIA Cat 6 Channel (+ALL)'\n },\n {\n value: 'TIA Cat 6 Channel (+PoE)',\n label: 'TIA Cat 6 Channel (+PoE)'\n },\n {\n value: 'TIA Cat 6 MPTL',\n label: 'TIA Cat 6 MPTL'\n },\n {\n value: 'TIA Cat 6 MPTL (+PoE)',\n label: 'TIA Cat 6 MPTL (+PoE)'\n },\n // { value: 'TIA 1005 Cat 6 Perm.Link', label: 'TIA 1005 Cat 6 Perm.Link' },\n // { value: 'TIA 1005 Cat 6 Channel', label: 'TIA 1005 Cat 6 Channel' },\n // { value: 'TIA 1005 Cat 6 Channel (+ALL)', label: 'TIA 1005 Cat 6 Channel (+ALL)' },\n // { value: 'TIA 1005 Cat 6 Channel (+PoE)', label: 'TIA 1005 Cat 6 Channel (+PoE)' },\n {\n value: 'TIA 1005 Cat 6 Channel E1 (+ALL)',\n label: 'TIA 1005 Cat 6 Channel E1 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6 Channel E1 (+PoE)', label: 'TIA 1005 Cat 6 Channel E1 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6 Channel E2 (+ALL)',\n label: 'TIA 1005 Cat 6 Channel E2 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 6 Channel E2 (+PoE)', label: 'TIA 1005 Cat 6 Channel E2 (+PoE)' },\n {\n value: 'TIA 1005 Cat 6 Channel E3 (+ALL)',\n label: 'TIA 1005 Cat 6 Channel E3 (+ALL)'\n }\n ]\n },\n Cat5e: {\n label: 'Cat5e',\n children: [\n {\n value: 'TIA Cat 5e Perm.Link',\n label: 'TIA Cat 5e Perm.Link'\n },\n {\n value: 'TIA Cat 5e Perm.Link (+ALL)',\n label: 'TIA Cat 5e Perm.Link (+ALL)'\n },\n {\n value: 'TIA Cat 5e Perm.Link (+PoE)',\n label: 'TIA Cat 5e Perm.Link (+PoE)'\n },\n {\n value: 'TIA Cat 5e Channel',\n label: 'TIA Cat 5e Channel'\n },\n {\n value: 'TIA Cat 5e Channel (+ALL)',\n label: 'TIA Cat 5e Channel (+ALL)'\n },\n {\n value: 'TIA Cat 5e Channel (+PoE)',\n label: 'TIA Cat 5e Channel (+PoE)'\n },\n {\n value: 'TIA Cat 5e MPTL',\n label: 'TIA Cat 5e MPTL'\n },\n {\n value: 'TIA Cat 5e MPTL (+PoE)',\n label: 'TIA Cat 5e MPTL (+PoE)'\n },\n // { value: 'TIA 1005 Cat 5e Perm.Link', label: 'TIA 1005 Cat 5e Perm.Link' },\n // { value: 'TIA 1005 Cat 5e Channel', label: 'TIA 1005 Cat 5e Channel' },\n // { value: 'TIA 1005 Cat 5e Channel (+ALL)', label: 'TIA 1005 Cat 5e Channel (+ALL)' },\n // { value: 'TIA 1005 Cat 5e Channel (+PoE)', label: 'TIA 1005 Cat 5e Channel (+PoE)' },\n {\n value: 'TIA 1005 Cat 5e Channel E1 (+ALL)',\n label: 'TIA 1005 Cat 5e Channel E1 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 5e Channel E1 (+PoE)', label: 'TIA 1005 Cat 5e Channel E1 (+PoE)' },\n {\n value: 'TIA 1005 Cat 5e Channel E2 (+ALL)',\n label: 'TIA 1005 Cat 5e Channel E2 (+ALL)'\n },\n // { value: 'TIA 1005 Cat 5e Channel E2 (+PoE)', label: 'TIA 1005 Cat 5e Channel E2 (+PoE)' },\n {\n value: 'TIA 1005 Cat 5e Channel E3 (+ALL)',\n label: 'TIA 1005 Cat 5e Channel E3 (+ALL)'\n }\n ]\n }\n }\n },\n {\n value: 'ISO',\n label: 'ISO',\n children: {\n // 'Class Ⅱ': {\n // label: 'Class Ⅱ',\n // children: [\n // { value: 'ISO11801 PL Class Ⅱ', label: 'ISO11801 PL Class Ⅱ' },\n // { value: 'ISO11801 PL Class Ⅱ (+ALL)', label: 'ISO11801 PL Class Ⅱ (+ALL)' },\n // { value: 'ISO11801 PL Class Ⅱ (+PoE)', label: 'ISO11801 PL Class Ⅱ (+PoE)' },\n // { value: 'ISO11801 Channel Class Ⅱ', label: 'ISO11801 Channel Class Ⅱ' },\n // { value: 'ISO11801 Channel Class Ⅱ (+ALL)', label: 'ISO11801 Channel Class Ⅱ (+ALL)' },\n // { value: 'ISO11801 Channel Class Ⅱ (+PoE)', label: 'ISO11801 Channel Class Ⅱ (+PoE)' }\n // ],\n // disabled: true \n // },\n // 'Class Ⅰ': {\n // label: 'Class Ⅰ',\n // children: [\n // { value: 'ISO11801 PL Class Ⅰ', label: 'ISO11801 PL Class Ⅰ' },\n // { value: 'ISO11801 PL Class Ⅰ (+ALL)', label: 'ISO11801 PL Class Ⅰ (+ALL)' },\n // { value: 'ISO11801 PL Class Ⅰ (+PoE)', label: 'ISO11801 PL Class Ⅰ (+PoE)' },\n // { value: 'ISO11801 Channel Class Ⅰ', label: 'ISO11801 Channel Class Ⅰ' },\n // { value: 'ISO11801 Channel Class Ⅰ (+ALL)', label: 'ISO11801 Channel Class Ⅰ (+ALL)' },\n // { value: 'ISO11801 Channel Class Ⅰ (+PoE)', label: 'ISO11801 Channel Class Ⅰ (+PoE)' }\n // ],\n // disabled: true \n // },\n // 'Class Fa': {\n // label: 'Class Fa',\n // children: [\n // { value: 'ISO11801 PL2 Class Fa', label: 'ISO11801 PL2 Class Fa' },\n // { value: 'ISO11801 PL2 Class Fa (+ALL)', label: 'ISO11801 PL2 Class Fa (+ALL)' },\n // { value: 'ISO11801 PL2 Class Fa (+PoE)', label: 'ISO11801 PL2 Class Fa (+PoE)' },\n // { value: 'ISO11801 PL3 Class Fa', label: 'ISO11801 PL3 Class Fa' },\n // { value: 'ISO11801 PL3 Class Fa (+ALL)', label: 'ISO11801 PL3 Class Fa (+ALL)' },\n // { value: 'ISO11801 PL3 Class Fa (+PoE)', label: 'ISO11801 PL3 Class Fa (+PoE)' },\n // { value: 'ISO11801 Channel Class Fa', label: 'ISO11801 Channel Class Fa' },\n // { value: 'ISO11801 Channel Class Fa (+ALL)', label: 'ISO11801 Channel Class Fa (+ALL)' },\n // { value: 'ISO11801 Channel Class Fa (+PoE)', label: 'ISO11801 Channel Class Fa (+PoE)' }\n // ],\n // disabled: true \n // },\n // 'Class F': {\n // label: 'Class F',\n // children: [\n // { value: 'ISO11801 PL Class F', label: 'ISO11801 PL Class F' },\n // { value: 'ISO11801 PL Class F (+ALL)', label: 'ISO11801 PL Class F (+ALL)' },\n // { value: 'ISO11801 PL Class F (+PoE)', label: 'ISO11801 PL Class F (+PoE)' },\n // { value: 'ISO11801 Channel Class F', label: 'ISO11801 Channel Class F' },\n // { value: 'ISO11801 Channel Class F (+ALL)', label: 'ISO11801 Channel Class F (+ALL)' },\n // { value: 'ISO11801 Channel Class F (+PoE)', label: 'ISO11801 Channel Class F (+PoE)' }\n // ],\n // disabled: true \n // },\n 'Class Ea': {\n label: 'Class Ea',\n children: [\n {\n value: 'ISO11801 PL2 Class Ea',\n label: 'ISO11801 PL2 Class Ea'\n },\n {\n value: 'ISO11801 PL2 Class Ea (+ALL)',\n label: 'ISO11801 PL2 Class Ea (+ALL)'\n },\n {\n value: 'ISO11801 PL2 Class Ea (+PoE)',\n label: 'ISO11801 PL2 Class Ea (+PoE)'\n },\n {\n value: 'ISO11801 PL3 Class Ea',\n label: 'ISO11801 PL3 Class Ea'\n },\n {\n value: 'ISO11801 PL3 Class Ea (+ALL)',\n label: 'ISO11801 PL3 Class Ea (+ALL)'\n },\n {\n value: 'ISO11801 PL3 Class Ea (+PoE)',\n label: 'ISO11801 PL3 Class Ea (+PoE)'\n },\n {\n value: 'ISO11801 Channel Class Ea',\n label: 'ISO11801 Channel Class Ea'\n },\n {\n value: 'ISO11801 Channel Class Ea (+ALL)',\n label: 'ISO11801 Channel Class Ea (+ALL)'\n },\n {\n value: 'ISO11801 Channel Class Ea (+PoE)',\n label: 'ISO11801 Channel Class Ea (+PoE)'\n },\n {\n value: 'ISO MPTL Class Ea',\n label: 'ISO MPTL Class Ea'\n },\n {\n value: 'ISO MPTL Class Ea (+PoE)',\n label: 'ISO MPTL Class Ea (+PoE)'\n }\n ]\n },\n 'Class E': {\n label: 'Class E',\n children: [\n {\n value: 'ISO11801 PL Class E',\n label: 'ISO11801 PL Class E'\n },\n {\n value: 'ISO11801 PL Class E (+ALL)',\n label: 'ISO11801 PL Class E (+ALL)'\n },\n {\n value: 'ISO11801 PL Class E (+PoE)',\n label: 'ISO11801 PL Class E (+PoE)'\n },\n {\n value: 'ISO11801 Channel Class E',\n label: 'ISO11801 Channel Class E'\n },\n {\n value: 'ISO11801 Channel Class E (+ALL)',\n label: 'ISO11801 Channel Class E (+ALL)'\n },\n {\n value: 'ISO11801 Channel Class E (+PoE)',\n label: 'ISO11801 Channel Class E (+PoE)'\n },\n {\n value: 'ISO MPTL Class E',\n label: 'ISO MPTL Class E'\n },\n {\n value: 'ISO MPTL Class E (+PoE)',\n label: 'ISO MPTL Class E (+PoE)'\n }\n ]\n },\n 'Class D': {\n label: 'Class D',\n children: [\n {\n value: 'ISO11801 PL Class D',\n label: 'ISO11801 PL Class D'\n },\n {\n value: 'ISO11801 PL Class D (+ALL)',\n label: 'ISO11801 PL Class D (+ALL)'\n },\n {\n value: 'ISO11801 PL Class D (+PoE)',\n label: 'ISO11801 PL Class D (+PoE)'\n },\n {\n value: 'ISO11801 Channel Class D',\n label: 'ISO11801 Channel Class D'\n },\n {\n value: 'ISO11801 Channel Class D (+ALL)',\n label: 'ISO11801 Channel Class D (+ALL)'\n },\n {\n value: 'ISO11801 Channel Class D (+PoE)',\n label: 'ISO11801 Channel Class D (+PoE)'\n },\n {\n value: 'ISO MPTL Class D',\n label: 'ISO MPTL Class D'\n },\n {\n value: 'ISO MPTL Class D (+PoE)',\n label: 'ISO MPTL Class D (+PoE)'\n }\n ]\n }\n }\n },\n {\n value: '区域',\n label: '区域',\n children: {\n '中国': {\n label: '中国',\n children: [\n // { value: 'GBT 50312-2016 Cat 7A PL no CP', label: 'GB/T 50312-2016 Cat 7A PL no CP' },\n // { value: 'GBT 50312-2016 Cat 7A PL no CP (+ALL)', label: 'GB/T 50312-2016 Cat 7A PL no CP (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7A PL no CP (+PoE)', label: 'GB/T 50312-2016 Cat 7A PL no CP (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7A PL with CP', label: 'GB/T 50312-2016 Cat 7A PL with CP' },\n // { value: 'GBT 50312-2016 Cat 7A PL with CP (+ALL)', label: 'GB/T 50312-2016 Cat 7A PL with CP (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7A PL with CP (+PoE)', label: 'GB/T 50312-2016 Cat 7A PL with CP (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7A Ch', label: 'GB/T 50312-2016 Cat 7A Ch' },\n // { value: 'GBT 50312-2016 Cat 7A Ch (+ALL)', label: 'GB/T 50312-2016 Cat 7A Ch (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7A Ch (+PoE)', label: 'GB/T 50312-2016 Cat 7A Ch (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7 PL', label: 'GB/T 50312-2016 Cat 7 PL' },\n // { value: 'GBT 50312-2016 Cat 7 PL (+ALL)', label: 'GB/T 50312-2016 Cat 7 PL (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7 PL (+PoE)', label: 'GB/T 50312-2016 Cat 7 PL (+PoE)' },\n // { value: 'GBT 50312-2016 Cat 7 Ch', label: 'GB/T 50312-2016 Cat 7 Ch' },\n // { value: 'GBT 50312-2016 Cat 7 Ch (+ALL)', label: 'GB/T 50312-2016 Cat 7 Ch (+ALL)' },\n // { value: 'GBT 50312-2016 Cat 7 Ch (+PoE)', label: 'GB/T 50312-2016 Cat 7 Ch (+PoE)' },\n {\n value: 'GBT 50312-2016 Cat 6A PL no CP',\n label: 'GB/T 50312-2016 Cat 6A PL no CP'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL no CP (+ALL)',\n label: 'GB/T 50312-2016 Cat 6A PL no CP (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL no CP (+PoE)',\n label: 'GB/T 50312-2016 Cat 6A PL no CP (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL with CP',\n label: 'GB/T 50312-2016 Cat 6A PL with CP'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL with CP (+ALL)',\n label: 'GB/T 50312-2016 Cat 6A PL with CP (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A PL with CP (+PoE)',\n label: 'GB/T 50312-2016 Cat 6A PL with CP (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A Ch',\n label: 'GB/T 50312-2016 Cat 6A Ch'\n },\n {\n value: 'GBT 50312-2016 Cat 6A Ch (+ALL)',\n label: 'GB/T 50312-2016 Cat 6A Ch (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6A Ch (+PoE)',\n label: 'GB/T 50312-2016 Cat 6A Ch (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 PL',\n label: 'GB/T 50312-2016 Cat 6 PL'\n },\n {\n value: 'GBT 50312-2016 Cat 6 PL (+ALL)',\n label: 'GB/T 50312-2016 Cat 6 PL (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 PL (+PoE)',\n label: 'GB/T 50312-2016 Cat 6 PL (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 Ch',\n label: 'GB/T 50312-2016 Cat 6 Ch'\n },\n {\n value: 'GBT 50312-2016 Cat 6 Ch (+ALL)',\n label: 'GB/T 50312-2016 Cat 6 Ch (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 6 Ch (+PoE)',\n label: 'GB/T 50312-2016 Cat 6 Ch (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e PL',\n label: 'GB/T 50312-2016 Cat 5e PL'\n },\n {\n value: 'GBT 50312-2016 Cat 5e PL (+ALL)',\n label: 'GB/T 50312-2016 Cat 5e PL (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e PL (+PoE)',\n label: 'GB/T 50312-2016 Cat 5e PL (+PoE)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e Ch',\n label: 'GB/T 50312-2016 Cat 5e Ch'\n },\n {\n value: 'GBT 50312-2016 Cat 5e Ch (+ALL)',\n label: 'GB/T 50312-2016 Cat 5e Ch (+ALL)'\n },\n {\n value: 'GBT 50312-2016 Cat 5e Ch (+PoE)',\n label: 'GB/T 50312-2016 Cat 5e Ch (+PoE)'\n }\n ]\n }\n }\n },\n {\n value: '跳线',\n label: '跳线',\n disabled: true,\n children: {\n 'Cat6A Patch Cords': {\n label: 'Cat6A Patch Cords',\n disabled: true,\n children: []\n },\n 'Cat6 Patch Cords': {\n label: 'Cat6 Patch Cords',\n disabled: true,\n children: []\n },\n 'Cat5e Patch Cords': {\n label: 'Cat5e Patch Cords',\n disabled: true,\n children: []\n },\n 'M12 Patch Cords': {\n label: 'M12 Patch Cords',\n disabled: true,\n children: []\n }\n }\n },\n {\n value: '应用',\n label: '应用',\n disabled: false,\n children: [\n {\n value: 'Profinet',\n label: 'Profinet'\n }\n ]\n }\n ]\n },\n WIRE_ORDER: {\n title: '插座配置',\n items: [\n {\n value: 'T568A',\n label: 'T568A',\n disabled: true\n },\n {\n value: 'T568B',\n label: 'T568B'\n },\n {\n value: 'Ethernet Two-Pair',\n label: 'Ethernet Two-Pair'\n },\n {\n value: 'M12-D Two-Pair',\n label: 'M12-D Two-Pair'\n }\n ]\n },\n FIBER_TYPE: {\n title: '光纤类型',\n subTitle: '电缆组',\n items: [\n {\n value: '定制',\n label: '定制',\n disabled: true,\n children: {}\n },\n {\n value: 'general',\n label: '通用',\n children: [\n {\n value: 'OM1 Mulitmode 62.5',\n label: 'OM1 Mulitmode 62.5'\n },\n {\n value: 'OM2 Mulitmode 50',\n label: 'OM2 Mulitmode 50'\n },\n {\n value: 'OM3 Mulitmode 50',\n label: 'OM3 Mulitmode 50'\n },\n {\n value: 'OM4 Mulitmode 50',\n label: 'OM4 Mulitmode 50'\n },\n {\n value: 'OM5 Mulitmode 50',\n label: 'OM5 Mulitmode 50'\n },\n {\n value: 'OS1 Singlemode',\n label: 'OS1 Singlemode'\n },\n {\n value: 'OS2 Singlemode',\n label: 'OS2 Singlemode'\n }\n ]\n },\n {\n value: '制造商',\n label: '制造商',\n disabled: true,\n children: {}\n }\n ]\n },\n CFP_LIMIT: {\n title: '测试极限值',\n subTitle: '极限值组',\n items: [\n {\n value: 'TIA',\n label: 'TIA',\n children: [\n {\n value: 'TIA-568.3-E Multimode (STD)',\n label: 'TIA-568.3-E Multimode (STD)'\n },\n {\n value: 'TIA-568.3-E Multimode (REF)',\n label: 'TIA-568.3-E Multimode (REF)'\n },\n {\n value: 'TIA-568.3-E Singlemode ISP (STD)',\n label: 'TIA-568.3-E Singlemode ISP (STD)'\n },\n {\n value: 'TIA-568.3-E Singlemode OSP (STD)',\n label: 'TIA-568.3-E Singlemode OSP (STD)'\n },\n {\n value: 'TIA-568.3-E Singlemode ISP (REF)',\n label: 'TIA-568.3-E Singlemode ISP (REF)'\n },\n {\n value: 'TIA-568.3-E Singlemode OSP (REF)',\n label: 'TIA-568.3-E Singlemode OSP (REF)'\n }\n ]\n },\n {\n value: 'China',\n label: '中国',\n children: [\n {\n value: 'GB/T 50312-2016 Fiber Link',\n label: 'GB/T 50312-2016 Fiber Link'\n },\n {\n value: 'GB/T 50312-2016 OF-300 Ch',\n label: 'GB/T 50312-2016 OF-300 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-500 Ch',\n label: 'GB/T 50312-2016 OF-500 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-2000 Ch',\n label: 'GB/T 50312-2016 OF-2000 Ch'\n }\n ]\n },\n {\n value: 'ISO',\n label: 'ISO',\n children: [\n {\n value: 'ISO/IEC 11801-2002 Fibre Link',\n label: 'ISO/IEC 11801-2002 Fibre Link'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-300 CH',\n label: 'ISO/IEC 11801-2002 OF-300 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-500 CH',\n label: 'ISO/IEC 11801-2002 OF-500 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-2000 CH',\n label: 'ISO/IEC 11801-2002 OF-2000 CH'\n },\n {\n value: 'ISO/IEC 14763-3:2024 (Draft)',\n label: 'ISO/IEC 14763-3:2024 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2014',\n label: 'ISO/IEC 14763-3:2014'\n },\n {\n value: 'ISO/IEC 14763-3',\n label: 'ISO/IEC 14763-3'\n }\n ]\n }\n ]\n },\n OFP_LIMIT: {\n title: 'OFP极限值',\n items: [\n {\n value: 'TIA',\n label: 'TIA',\n children: [\n {\n value: 'ANSI/TIA-568.3-E',\n label: 'ANSI/TIA-568.3-E'\n },\n {\n value: 'ANSI/TIA-568.3-E RL = 20 dB',\n label: 'ANSI/TIA-568.3-E RL = 20 dB'\n },\n {\n value: 'ANSI/TIA-568.3-E RL = 35 dB',\n label: 'ANSI/TIA-568.3-E RL = 35 dB'\n },\n {\n value: 'ANSI/TIA-568.3-E RL = 55 dB',\n label: 'ANSI/TIA-568.3-E RL = 55 dB'\n }\n ]\n },\n {\n value: 'China',\n label: '中国',\n children: [\n {\n value: 'GB/T 50312-2016 Fiber Link',\n label: 'GB/T 50312-2016 Fiber Link'\n },\n {\n value: 'GB/T 50312-2016 OF-300 Ch',\n label: 'GB/T 50312-2016 OF-300 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-500 Ch',\n label: 'GB/T 50312-2016 OF-500 Ch'\n },\n {\n value: 'GB/T 50312-2016 OF-2000 Ch',\n label: 'GB/T 50312-2016 OF-2000 Ch'\n }\n ]\n },\n {\n value: 'ISO',\n label: 'ISO',\n children: [\n {\n value: 'ISO/IEC 11801-2002 Fibre Link',\n label: 'ISO/IEC 11801-2002 Fibre Link'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-300 CH',\n label: 'ISO/IEC 11801-2002 OF-300 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-500 CH',\n label: 'ISO/IEC 11801-2002 OF-500 CH'\n },\n {\n value: 'ISO/IEC 11801-2002 OF-2000 CH',\n label: 'ISO/IEC 11801-2002 OF-2000 CH'\n },\n {\n value: 'ISO/IEC 14763-3:2024 (Draft)',\n label: 'ISO/IEC 14763-3:2024 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2024 RL = 20 (Draft)',\n label: 'ISO/IEC 14763-3:2024 RL = 20 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2024 RL = 35 (Draft)',\n label: 'ISO/IEC 14763-3:2024 RL = 35 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2024 RL = 60 (Draft)',\n label: 'ISO/IEC 14763-3:2024 RL = 60 (Draft)'\n },\n {\n value: 'ISO/IEC 14763-3:2014',\n label: 'ISO/IEC 14763-3:2014'\n },\n {\n value: 'ISO/IEC 14763-3',\n label: 'ISO/IEC 14763-3'\n }\n ]\n }\n ]\n }\n};\nfunction MenuList() {\n const { navigation, getCurrentProject, updateProject, navigateTo, goBack } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const currentProject = getCurrentProject();\n const { menuType, selectedConfigId } = navigation.current.params;\n const [selectedPath, setSelectedPath] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [currentMenu, setCurrentMenu] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(menuData[menuType]);\n // 获取当前选中的配置\n const currentConfig = currentProject.testConfigs.find((config)=>config.id === selectedConfigId);\n // 处理菜单选项选择\n const handleMenuSelect = (item)=>{\n if (item.disabled) return;\n if (item.children) {\n // 如果有子菜单,更新路径和当前菜单\n setSelectedPath([\n ...selectedPath,\n item\n ]);\n setCurrentMenu(item.children);\n return;\n }\n // 如果是最终选项,更新配置并返回\n let updatedConfig = {\n ...currentConfig\n };\n switch(menuType){\n case 'CABLE_TYPE':\n updatedConfig.params.cableType = item.value;\n break;\n case 'LIMIT_VALUE':\n updatedConfig.params.limitValue = item.value;\n break;\n case 'WIRE_ORDER':\n updatedConfig.params.wireOrder = item.value;\n break;\n case 'FIBER_TYPE':\n updatedConfig.params.cableType = item.value;\n if (updatedConfig.moduleType === 'cfp') {\n if (item.value.includes('OM')) {\n updatedConfig.params.limitValue = 'TIA-568.3-E Multimode (STD)';\n } else {\n updatedConfig.params.limitValue = 'TIA-568.3-E Singlemode ISP (STD)';\n }\n }\n break;\n case 'CFP_LIMIT':\n updatedConfig.params.limitValue = item.value;\n break;\n case 'OFP_LIMIT':\n updatedConfig.params.limitValue = item.value;\n break;\n case 'MODULE':\n // 如果模块类型发生变化,完全替换配置对象\n if (currentConfig.moduleType !== item.value) {\n switch(item.value){\n case '8000':\n updatedConfig = {\n id: currentConfig.id,\n moduleType: '8000',\n modulelable: '铜缆测试仪',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B'\n }\n };\n break;\n case 'cfp':\n updatedConfig = {\n id: currentConfig.id,\n moduleType: 'cfp',\n modulelable: '光损耗测试仪',\n params: {\n limitValue: 'TIA-568.3-E Multimode (STD)',\n cableType: 'OM3 Multimode 50',\n refJumper: '1',\n spliceCount: '0',\n connectorCount: '2'\n }\n };\n break;\n case 'ofp':\n updatedConfig = {\n id: currentConfig.id,\n moduleType: 'ofp',\n modulelable: 'OTDR测试仪',\n params: {\n limitValue: 'General Fiber RL = 35 dB',\n cableType: 'OM3 Multimode 50'\n }\n };\n break;\n }\n } else {\n updatedConfig.moduleType = item.value;\n updatedConfig.modulelable = item.label;\n }\n break;\n }\n // 更新项目数据\n const updatedConfigs = currentProject.testConfigs.map((config)=>{\n if (config.id === selectedConfigId) {\n return updatedConfig;\n }\n return config;\n });\n const projectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.projectIndex;\n updateProject(projectIndex, {\n testConfigs: updatedConfigs\n });\n // 返回上一页\n goBack();\n };\n // 处理返回上一级\n const handleBack = ()=>{\n if (selectedPath.length > 0) {\n const newPath = selectedPath.slice(0, -1);\n setSelectedPath(newPath);\n if (newPath.length === 0) {\n setCurrentMenu(menuData[menuType]);\n } else {\n let current = menuData[menuType];\n for (const item of newPath){\n current = current.items.find((i)=>i.value === item.value).children;\n }\n setCurrentMenu(current);\n }\n } else {\n goBack();\n }\n };\n // 渲染菜单选项\n const renderMenuOptions = ()=>{\n if (!currentMenu) return null;\n // 如果是子菜单,直接渲染子菜单项\n if (Array.isArray(currentMenu)) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px]\",\n children: currentMenu.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[60px] w-full bg-[#F8F6F7] p-4 shadow-lg flex items-center ${item.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'} ${currentConfig.params.cableType === item.value ? 'bg-blue-500' : ''}`,\n onClick: ()=>handleMenuSelect(item),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: item.label\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 606,\n columnNumber: 29\n }, this)\n }, item.value, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 597,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 595,\n columnNumber: 17\n }, this);\n }\n // 如果是对象形式的子菜单(如 LIMIT_VALUE 的二级菜单)\n if (typeof currentMenu === 'object' && !currentMenu.items) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px]\",\n children: Object.entries(currentMenu).map(([key, item])=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[60px] w-full bg-[#F8F6F7] p-4 shadow-lg flex items-center cursor-pointer ${currentConfig.params.cableType === item.value ? 'bg-blue-500' : ''}`,\n onClick: ()=>handleMenuSelect(item),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: item.label\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 625,\n columnNumber: 29\n }, this)\n }, key, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 618,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 616,\n columnNumber: 17\n }, this);\n }\n // 如果是主菜单,渲染主菜单项\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px]\",\n children: currentMenu.items.map((item)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[60px] w-full bg-[#F8F6F7] p-4 shadow-lg flex items-center ${item.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'} ${currentConfig.params.cableType === item.value ? 'bg-blue-500' : ''}`,\n onClick: ()=>handleMenuSelect(item),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: item.label\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 645,\n columnNumber: 25\n }, this)\n }, item.value, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 636,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 634,\n columnNumber: 13\n }, this);\n };\n // 获取当前菜单标题(返回 null 表示不显示)\n const getCurrentTitle = ()=>{\n if (selectedPath.length === 0) {\n const subTitle = menuData[menuType]?.subTitle;\n return subTitle ? subTitle : null; // 如果 subTitle 为空则返回 null\n }\n return selectedPath[selectedPath.length - 1].label;\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 663,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: menuData[menuType].title,\n backTo: selectedPath.length > 0 ? 'menulist' : navigation.previous?.name,\n view: selectedPath.length > 0 ? 'setup' : navigation.previous?.view,\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 664,\n columnNumber: 9\n }, this),\n getCurrentTitle() !== null && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: getCurrentTitle()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 672,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB]\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full overflow-y-auto [&::-webkit-scrollbar]:hidden\",\n children: renderMenuOptions()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 675,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 674,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/MenuList.js\",\n lineNumber: 662,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9NZW51TGlzdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQWtEO0FBQ0U7QUFDRjtBQUNNO0FBQ0w7QUFFbkQsU0FBUztBQUNULE1BQU1PLFdBQVc7SUFDVEMsUUFBUTtRQUNKQyxPQUFPO1FBQ1BDLE9BQU87WUFDSDtnQkFBRUMsT0FBTztnQkFBUUMsT0FBTztZQUFRO1lBQ2hDO2dCQUFFRCxPQUFPO2dCQUFPQyxPQUFPO1lBQVM7WUFDaEM7Z0JBQUVELE9BQU87Z0JBQU9DLE9BQU87WUFBVTtTQUNwQztJQUNMO0lBQ0FDLFlBQVk7UUFDUkosT0FBTztRQUNQSyxVQUFVO1FBQ1ZKLE9BQU87WUFDSDtnQkFBRUMsT0FBTztnQkFBVUMsT0FBTztnQkFBTUcsVUFBVTtZQUFLO1lBQy9DO2dCQUNJSixPQUFPO2dCQUNQQyxPQUFPO2dCQUNQSSxVQUFVO29CQUNOLGdEQUFnRDtvQkFDaEQsa0RBQWtEO29CQUNsRCxnREFBZ0Q7b0JBQ2hELGtEQUFrRDtvQkFDbEQ7d0JBQUVMLE9BQU87d0JBQWVDLE9BQU87b0JBQWM7b0JBQzdDO3dCQUFFRCxPQUFPO3dCQUFlQyxPQUFPO29CQUFjO29CQUM3Qzt3QkFBRUQsT0FBTzt3QkFBY0MsT0FBTztvQkFBYTtvQkFDM0M7d0JBQUVELE9BQU87d0JBQWNDLE9BQU87b0JBQWE7b0JBQzNDLGdEQUFnRDtvQkFDaEQ7d0JBQUVELE9BQU87d0JBQWVDLE9BQU87b0JBQWM7b0JBQzdDO3dCQUFFRCxPQUFPO3dCQUFlQyxPQUFPO29CQUFjO2lCQUdoRDtZQUNMO1lBQ0E7Z0JBQUVELE9BQU87Z0JBQVdDLE9BQU87Z0JBQVVHLFVBQVU7WUFBSztZQUNwRDtnQkFBRUosT0FBTztnQkFBZ0JDLE9BQU87Z0JBQU9HLFVBQVU7WUFBSztTQUN6RDtJQUNMO0lBQ0FFLGFBQWE7UUFDVFIsT0FBTztRQUNQSyxVQUFVO1FBQ1ZKLE9BQU87WUFD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REFBQzBEO1FBQUlDLFdBQVU7OzBCQUNmLDhEQUFDcEUsaUVBQVNBOzs7OzswQkFDViw4REFBQ0MsZ0VBQVFBO2dCQUNMSyxPQUFPRixRQUFRLENBQUN5QixTQUFTLENBQUN2QixLQUFLO2dCQUMvQm9FLFFBQVF6QyxhQUFhMkIsTUFBTSxHQUFHLElBQUksYUFBYXJDLFdBQVdvRCxRQUFRLEVBQUVDO2dCQUNwRUMsTUFBTTVDLGFBQWEyQixNQUFNLEdBQUcsSUFBSSxVQUFVckMsV0FBV29ELFFBQVEsRUFBRUU7Z0JBQy9EQyxRQUFRbkI7Ozs7OztZQUdYYyxzQkFBc0Isc0JBQ25CLDhEQUFDdkUsbUVBQVdBO2dCQUFDSSxPQUFPbUU7Ozs7OzswQkFFeEIsOERBQUNOO2dCQUFJQyxXQUFVOzBCQUNYLDRFQUFDRDtvQkFBSUMsV0FBVTs4QkFDZEo7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS2IiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9nZW5lcmFsL01lbnVMaXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSx1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N0YXR1c0Jhcic7XG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vVGl0bGVCYXInO1xuaW1wb3J0IFN1YlRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N1YlRpdGxlQmFyJztcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xuXG4vLyDoj5zljZXmlbDmja7lrprkuYlcbmNvbnN0IG1lbnVEYXRhID0ge1xuICAgICAgICBNT0RVTEU6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5qih5Z2XJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogJzgwMDAnLCBsYWJlbDogJ+mTnOe8hua1i+ivleS7qicgfSxcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiAnY2ZwJywgbGFiZWw6ICflhYnmjZ/ogJfmtYvor5Xku6onIH0sXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogJ29mcCcsIGxhYmVsOiAnT1REUua1i+ivleS7qicgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBDQUJMRV9UWVBFOiB7XG4gICAgICAgICAgICB0aXRsZTogJ+eUtee8huexu+WeiycsXG4gICAgICAgICAgICBzdWJUaXRsZTogJ+eUtee8huexu+WeiycsXG4gICAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdjdXN0b20nLCBsYWJlbDogJ+WumuWIticsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdnZW5lcmFsJywgXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAn6YCa55SoJyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ4IFMvRlRQJywgbGFiZWw6ICdDYXQ4IFMvRlRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0NhdDdBIFMvRlRQJywgbGFiZWw6ICdDYXQ3QSBTL0ZUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ3IFMvRlRQJywgbGFiZWw6ICdDYXQ3IFMvRlRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0NhdDZBIFMvRlRQJywgbGFiZWw6ICdDYXQ2QSBTL0ZUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdDYXQ2QSBVL1VUUCcsIGxhYmVsOiAnQ2F0NkEgVS9VVFAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnQ2F0NkEgRi9VVFAnLCBsYWJlbDogJ0NhdDZBIEYvVVRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0NhdDYgVS9VVFAnLCBsYWJlbDogJ0NhdDYgVS9VVFAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnQ2F0NiBGL1VUUCcsIGxhYmVsOiAnQ2F0NiBGL1VUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ2IFUvRlRQJywgbGFiZWw6ICdDYXQ2IFUvRlRQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0NhdDVlIFUvVVRQJywgbGFiZWw6ICdDYXQ1ZSBVL1VUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdDYXQ1ZSBGL1VUUCcsIGxhYmVsOiAnQ2F0NWUgRi9VVFAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnQ2F0NSBVL1VUUCcsIGxhYmVsOiAnQ2F0NSBVL1VUUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdDYXQ1IEYvVVRQJywgbGFiZWw6ICdDYXQ1IEYvVVRQJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdjb2F4aWFsJywgbGFiZWw6ICfpgJrnlKjlkIzovbTnlLXnvIYnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdtYW51ZmFjdHVyZXInLCBsYWJlbDogJ+WItumAoOWVhicsIGRpc2FibGVkOiB0cnVlIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgTElNSVRfVkFMVUU6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5rWL6K+V5p6B6ZmQ5YC8JyxcbiAgICAgICAgICAgIHN1YlRpdGxlOiAn5p6B6ZmQ5YC857uEJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1RJQScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUSUEnLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgICAvLyBDYXQ4OiB7XG4gICAgICAgICAgICAgICAgICAvLyAgIGxhYmVsOiAnQ2F0OCcsXG4gICAgICAgICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgOCBQZXJtLkxpbmsnLCBsYWJlbDogJ1RJQSBDYXQgOCBQZXJtLkxpbmsnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgOCBQZXJtLkxpbmsgKCtBTEwpJywgbGFiZWw6ICdUSUEgQ2F0IDggUGVybS5MaW5rICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnVElBIENhdCA4IFBlcm0uTGluayAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgOCBQZXJtLkxpbmsgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDggQ2hhbm5lbCcsIGxhYmVsOiAnVElBIENhdCA4IENoYW5uZWwnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgOCBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA4IENoYW5uZWwgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDggQ2hhbm5lbCAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgOCBDaGFubmVsICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgLy8gICBdXG4gICAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgICAgQ2F0NkE6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDYXQ2QScsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNkEgUGVybS5MaW5rJywgbGFiZWw6ICdUSUEgQ2F0IDZBIFBlcm0uTGluaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBQZXJtLkxpbmsgKCtBTEwpJywgbGFiZWw6ICdUSUEgQ2F0IDZBIFBlcm0uTGluayAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNkEgUGVybS5MaW5rICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA2QSBQZXJtLkxpbmsgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDZBIENoYW5uZWwnLCBsYWJlbDogJ1RJQSBDYXQgNkEgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA2QSBDaGFubmVsICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBDaGFubmVsICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA2QSBDaGFubmVsICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2QSBNUFRMJywgbGFiZWw6ICdUSUEgQ2F0IDZBIE1QVEwnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNkEgTVBUTCAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgNkEgTVBUTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBQZXJtLkxpbmsnLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2QSBQZXJtLkxpbmsnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTEgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUxICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTEgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMiAoK0FMTCknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUyICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTIgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMiAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUzICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDZBIENoYW5uZWwgRTMgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNkEgQ2hhbm5lbCBFMyAoK1BvRSknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2QSBDaGFubmVsIEUzICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgQ2F0Njoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDYnLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDYgUGVybS5MaW5rJywgbGFiZWw6ICdUSUEgQ2F0IDYgUGVybS5MaW5rJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDYgUGVybS5MaW5rICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA2IFBlcm0uTGluayAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNiBQZXJtLkxpbmsgKCtQb0UpJywgbGFiZWw6ICdUSUEgQ2F0IDYgUGVybS5MaW5rICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwnLCBsYWJlbDogJ1RJQSBDYXQgNiBDaGFubmVsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDYgQ2hhbm5lbCAoK0FMTCknLCBsYWJlbDogJ1RJQSBDYXQgNiBDaGFubmVsICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwgKCtQb0UpJywgbGFiZWw6ICdUSUEgQ2F0IDYgQ2hhbm5lbCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNiBNUFRMJywgbGFiZWw6ICdUSUEgQ2F0IDYgTVBUTCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA2IE1QVEwgKCtQb0UpJywgbGFiZWw6ICdUSUEgQ2F0IDYgTVBUTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IFBlcm0uTGluaycsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgUGVybS5MaW5rJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMSAoK0FMTCknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUxICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTIgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUyICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMiAoK1BvRSknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTIgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUzICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDYgQ2hhbm5lbCBFMyAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA2IENoYW5uZWwgRTMgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNiBDaGFubmVsIEUzICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgQ2F0NWU6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDYXQ1ZScsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNWUgUGVybS5MaW5rJywgbGFiZWw6ICdUSUEgQ2F0IDVlIFBlcm0uTGluaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBQZXJtLkxpbmsgKCtBTEwpJywgbGFiZWw6ICdUSUEgQ2F0IDVlIFBlcm0uTGluayAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNWUgUGVybS5MaW5rICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA1ZSBQZXJtLkxpbmsgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgQ2F0IDVlIENoYW5uZWwnLCBsYWJlbDogJ1RJQSBDYXQgNWUgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBDaGFubmVsICgrQUxMKScsIGxhYmVsOiAnVElBIENhdCA1ZSBDaGFubmVsICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBDaGFubmVsICgrUG9FKScsIGxhYmVsOiAnVElBIENhdCA1ZSBDaGFubmVsICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIENhdCA1ZSBNUFRMJywgbGFiZWw6ICdUSUEgQ2F0IDVlIE1QVEwnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSBDYXQgNWUgTVBUTCAoK1BvRSknLCBsYWJlbDogJ1RJQSBDYXQgNWUgTVBUTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBQZXJtLkxpbmsnLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA1ZSBQZXJtLkxpbmsnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMSAoK0FMTCknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUxICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTEgKCtQb0UpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUyICgrQUxMKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTIgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMiAoK1BvRSknLCBsYWJlbDogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUyICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTMgKCtBTEwpJywgbGFiZWw6ICdUSUEgMTAwNSBDYXQgNWUgQ2hhbm5lbCBFMyAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ1RJQSAxMDA1IENhdCA1ZSBDaGFubmVsIEUzICgrUG9FKScsIGxhYmVsOiAnVElBIDEwMDUgQ2F0IDVlIENoYW5uZWwgRTMgKCtQb0UpJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ0lTTycsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdJU08nLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgICAvLyAnQ2xhc3Mg4oWhJzoge1xuICAgICAgICAgICAgICAgICAgLy8gICBsYWJlbDogJ0NsYXNzIOKFoScsXG4gICAgICAgICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIOKFoScsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3Mg4oWhJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaEgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaEnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWhICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWhICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgLy8gICBdLFxuICAgICAgICAgICAgICAgICAgLy8gICBkaXNhYmxlZDogdHJ1ZSBcbiAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICAvLyAnQ2xhc3Mg4oWgJzoge1xuICAgICAgICAgICAgICAgICAgLy8gICBsYWJlbDogJ0NsYXNzIOKFoCcsXG4gICAgICAgICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIOKFoCcsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3Mg4oWgJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyDihaAgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoCcsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaAnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWgICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyDihaAgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIOKFoCAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3Mg4oWgICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgLy8gICBdLFxuICAgICAgICAgICAgICAgICAgLy8gICBkaXNhYmxlZDogdHJ1ZSBcbiAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICAvLyAnQ2xhc3MgRmEnOiB7XG4gICAgICAgICAgICAgICAgICAvLyAgIGxhYmVsOiAnQ2xhc3MgRmEnLFxuICAgICAgICAgICAgICAgICAgLy8gICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTDIgQ2xhc3MgRmEnLCBsYWJlbDogJ0lTTzExODAxIFBMMiBDbGFzcyBGYScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrUG9FKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwyIENsYXNzIEZhICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwzIENsYXNzIEZhJywgbGFiZWw6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRmEnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIFBMMyBDbGFzcyBGYSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEnLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEZhICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBGYSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRmEgKCtQb0UpJyB9XG4gICAgICAgICAgICAgICAgICAvLyAgIF0sXG4gICAgICAgICAgICAgICAgICAvLyAgIGRpc2FibGVkOiB0cnVlIFxuICAgICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAgIC8vICdDbGFzcyBGJzoge1xuICAgICAgICAgICAgICAgICAgLy8gICBsYWJlbDogJ0NsYXNzIEYnLFxuICAgICAgICAgICAgICAgICAgLy8gICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyBGJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyBGJyB9LFxuICAgICAgICAgICAgICAgICAgLy8gICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyBGICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRiAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIEYgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyBGICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgIC8vICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBGJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEYnIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAvLyAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRiAoK1BvRSknIH1cbiAgICAgICAgICAgICAgICAgIC8vICAgXSxcbiAgICAgICAgICAgICAgICAgIC8vICAgZGlzYWJsZWQ6IHRydWUgXG4gICAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgICAgJ0NsYXNzIEVhJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NsYXNzIEVhJyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwyIENsYXNzIEVhJywgbGFiZWw6ICdJU08xMTgwMSBQTDIgQ2xhc3MgRWEnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIFBMMiBDbGFzcyBFYSAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMMyBDbGFzcyBFYScsIGxhYmVsOiAnSVNPMTE4MDEgUEwzIENsYXNzIEVhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBQTDMgQ2xhc3MgRWEgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFYSAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRWEgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEVhICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPIE1QVEwgQ2xhc3MgRWEnLCBsYWJlbDogJ0lTTyBNUFRMIENsYXNzIEVhJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08gTVBUTCBDbGFzcyBFYSAoK1BvRSknLCBsYWJlbDogJ0lTTyBNUFRMIENsYXNzIEVhICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJ0NsYXNzIEUnOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2xhc3MgRScsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIEUnLCBsYWJlbDogJ0lTTzExODAxIFBMIENsYXNzIEUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIFBMIENsYXNzIEUgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBQTCBDbGFzcyBFICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRSAoK1BvRSknLCBsYWJlbDogJ0lTTzExODAxIFBMIENsYXNzIEUgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEUnLCBsYWJlbDogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrQUxMKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrUG9FKScsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBFICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPIE1QVEwgQ2xhc3MgRScsIGxhYmVsOiAnSVNPIE1QVEwgQ2xhc3MgRScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPIE1QVEwgQ2xhc3MgRSAoK1BvRSknLCBsYWJlbDogJ0lTTyBNUFRMIENsYXNzIEUgKCtQb0UpJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAnQ2xhc3MgRCc6IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDbGFzcyBEJyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCcsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCAoK0FMTCknLCBsYWJlbDogJ0lTTzExODAxIFBMIENsYXNzIEQgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBQTCBDbGFzcyBEICgrUG9FKScsIGxhYmVsOiAnSVNPMTE4MDEgUEwgQ2xhc3MgRCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTzExODAxIENoYW5uZWwgQ2xhc3MgRCcsIGxhYmVsOiAnSVNPMTE4MDEgQ2hhbm5lbCBDbGFzcyBEJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtBTEwpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtQb0UpJywgbGFiZWw6ICdJU08xMTgwMSBDaGFubmVsIENsYXNzIEQgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08gTVBUTCBDbGFzcyBEJywgbGFiZWw6ICdJU08gTVBUTCBDbGFzcyBEJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08gTVBUTCBDbGFzcyBEICgrUG9FKScsIGxhYmVsOiAnSVNPIE1QVEwgQ2xhc3MgRCAoK1BvRSknIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAn5Yy65Z+fJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ+WMuuWfnycsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICAgICfkuK3lm70nOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAn5Lit5Zu9JyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgN0EgUEwgbm8gQ1AgKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIG5vIENQICgrUG9FKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA3QSBQTCBubyBDUCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3QSBQTCB3aXRoIENQJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIHdpdGggQ1AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3QSBQTCB3aXRoIENQICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA3QSBQTCB3aXRoIENQICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIHdpdGggQ1AgKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIFBMIHdpdGggQ1AgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgN0EgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgN0EgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3QSBDaCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgN0EgQ2ggKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgN0EgQ2ggKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDdBIENoICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDcgUEwnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNyBQTCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDcgUEwgKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDcgUEwgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNyBQTCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNyBQTCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3IENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDcgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgLy8geyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA3IENoICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA3IENoICgrQUxMKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDcgQ2ggKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDcgQ2ggKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2QSBQTCBubyBDUCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNkEgUEwgbm8gQ1AgKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIG5vIENQICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIHdpdGggQ1AnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgd2l0aCBDUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIHdpdGggQ1AgKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDZBIFBMIHdpdGggQ1AgKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNkEgUEwgd2l0aCBDUCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgUEwgd2l0aCBDUCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2QSBDaCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2QSBDaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDZBIENoICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2QSBDaCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2QSBDaCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNkEgQ2ggKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNiBQTCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2IFBMJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNiBQTCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNiBQTCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA2IFBMICgrUG9FKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA2IFBMICgrUG9FKScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDYgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNiBDaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDYgQ2ggKCtBTEwpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDYgQ2ggKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNiBDaCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNiBDaCAoK1BvRSknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0JUIDUwMzEyLTIwMTYgQ2F0IDVlIFBMICgrQUxMKScsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCAoK0FMTCknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA1ZSBQTCAoK1BvRSknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNWUgUEwgKCtQb0UpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNWUgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNWUgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCVCA1MDMxMi0yMDE2IENhdCA1ZSBDaCAoK0FMTCknLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBDYXQgNWUgQ2ggKCtBTEwpJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQlQgNTAzMTItMjAxNiBDYXQgNWUgQ2ggKCtQb0UpJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgQ2F0IDVlIENoICgrUG9FKScgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICfot7Pnur8nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAn6Lez57q/JyxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgICAgJ0NhdDZBIFBhdGNoIENvcmRzJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDZBIFBhdGNoIENvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICdDYXQ2IFBhdGNoIENvcmRzJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDYgUGF0Y2ggQ29yZHMnLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgJ0NhdDVlIFBhdGNoIENvcmRzJzoge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NhdDVlIFBhdGNoIENvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICdNMTIgUGF0Y2ggQ29yZHMnOiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTTEyIFBhdGNoIENvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAn5bqU55SoJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ+W6lOeUqCcsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnUHJvZmluZXQnLCBsYWJlbDogJ1Byb2ZpbmV0JyB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgIFdJUkVfT1JERVI6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5o+S5bqn6YWN572uJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1Q1NjhBJywgbGFiZWw6ICdUNTY4QScgLCBkaXNhYmxlZDogdHJ1ZX0sXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1Q1NjhCJywgbGFiZWw6ICdUNTY4QicgfSxcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiAnRXRoZXJuZXQgVHdvLVBhaXInLCBsYWJlbDogJ0V0aGVybmV0IFR3by1QYWlyJyB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdNMTItRCBUd28tUGFpcicsIGxhYmVsOiAnTTEyLUQgVHdvLVBhaXInIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIEZJQkVSX1RZUEU6IHtcbiAgICAgICAgICAgIHRpdGxlOiAn5YWJ57qk57G75Z6LJyxcbiAgICAgICAgICAgIHN1YlRpdGxlOiAn55S157yG57uEJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ+WumuWIticsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAn5a6a5Yi2JyxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB7fVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2dlbmVyYWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ+mAmueUqCcsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT00xIE11bGl0bW9kZSA2Mi41JywgbGFiZWw6ICdPTTEgTXVsaXRtb2RlIDYyLjUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT00yIE11bGl0bW9kZSA1MCcsIGxhYmVsOiAnT00yIE11bGl0bW9kZSA1MCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdPTTMgTXVsaXRtb2RlIDUwJywgbGFiZWw6ICdPTTMgTXVsaXRtb2RlIDUwJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ09NNCBNdWxpdG1vZGUgNTAnLCBsYWJlbDogJ09NNCBNdWxpdG1vZGUgNTAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT001IE11bGl0bW9kZSA1MCcsIGxhYmVsOiAnT001IE11bGl0bW9kZSA1MCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdPUzEgU2luZ2xlbW9kZScsIGxhYmVsOiAnT1MxIFNpbmdsZW1vZGUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnT1MyIFNpbmdsZW1vZGUnLCBsYWJlbDogJ09TMiBTaW5nbGVtb2RlJyB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICfliLbpgKDllYYnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ+WItumAoOWVhicsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjoge31cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIENGUF9MSU1JVDoge1xuICAgICAgICAgICAgdGl0bGU6ICfmtYvor5XmnoHpmZDlgLwnLFxuICAgICAgICAgICAgc3ViVGl0bGU6ICfmnoHpmZDlgLznu4QnLFxuICAgICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnVElBJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1RJQScsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ1RJQS01NjguMy1FIE11bHRpbW9kZSAoU1REKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChTVEQpJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChSRUYpJywgbGFiZWw6ICdUSUEtNTY4LjMtRSBNdWx0aW1vZGUgKFJFRiknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIElTUCAoU1REKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBJU1AgKFNURCknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIE9TUCAoU1REKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBPU1AgKFNURCknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIElTUCAoUkVGKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBJU1AgKFJFRiknIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdUSUEtNTY4LjMtRSBTaW5nbGVtb2RlIE9TUCAoUkVGKScsIGxhYmVsOiAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBPU1AgKFJFRiknIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ0NoaW5hJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ+S4reWbvScsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQi9UIDUwMzEyLTIwMTYgRmliZXIgTGluaycsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IEZpYmVyIExpbmsnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0IvVCA1MDMxMi0yMDE2IE9GLTMwMCBDaCcsIGxhYmVsOiAnR0IvVCA1MDMxMi0yMDE2IE9GLTMwMCBDaCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQi9UIDUwMzEyLTIwMTYgT0YtNTAwIENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgT0YtNTAwIENoJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCL1QgNTAzMTItMjAxNiBPRi0yMDAwIENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgT0YtMjAwMCBDaCcgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnSVNPJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0lTTycsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDExODAxLTIwMDIgRmlicmUgTGluaycsIGxhYmVsOiAnSVNPL0lFQyAxMTgwMS0yMDAyIEZpYnJlIExpbmsnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxMTgwMS0yMDAyIE9GLTMwMCBDSCcsIGxhYmVsOiAnSVNPL0lFQyAxMTgwMS0yMDAyIE9GLTMwMCBDSCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtNTAwIENIJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtNTAwIENIJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi0yMDAwIENIJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtMjAwMCBDSCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCAoRHJhZnQpJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTQ3NjMtMzoyMDE0JywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAxNCcgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDE0NzYzLTMnLCBsYWJlbDogJ0lTTy9JRUMgMTQ3NjMtMycgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBPRlBfTElNSVQ6IHtcbiAgICAgICAgICAgIHRpdGxlOiAnT0ZQ5p6B6ZmQ5YC8JyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1RJQScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUSUEnLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnQU5TSS9USUEtNTY4LjMtRScsIGxhYmVsOiAnQU5TSS9USUEtNTY4LjMtRScgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdBTlNJL1RJQS01NjguMy1FIFJMID0gMjAgZEInLCBsYWJlbDogJ0FOU0kvVElBLTU2OC4zLUUgUkwgPSAyMCBkQicgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdBTlNJL1RJQS01NjguMy1FIFJMID0gMzUgZEInLCBsYWJlbDogJ0FOU0kvVElBLTU2OC4zLUUgUkwgPSAzNSBkQicgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdBTlNJL1RJQS01NjguMy1FIFJMID0gNTUgZEInLCBsYWJlbDogJ0FOU0kvVElBLTU2OC4zLUUgUkwgPSA1NSBkQicgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnQ2hpbmEnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAn5Lit5Zu9JyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCL1QgNTAzMTItMjAxNiBGaWJlciBMaW5rJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgRmliZXIgTGluaycgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdHQi9UIDUwMzEyLTIwMTYgT0YtMzAwIENoJywgbGFiZWw6ICdHQi9UIDUwMzEyLTIwMTYgT0YtMzAwIENoJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0dCL1QgNTAzMTItMjAxNiBPRi01MDAgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBPRi01MDAgQ2gnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnR0IvVCA1MDMxMi0yMDE2IE9GLTIwMDAgQ2gnLCBsYWJlbDogJ0dCL1QgNTAzMTItMjAxNiBPRi0yMDAwIENoJyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICdJU08nLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnSVNPJyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTE4MDEtMjAwMiBGaWJyZSBMaW5rJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgRmlicmUgTGluaycgfSxcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtMzAwIENIJywgbGFiZWw6ICdJU08vSUVDIDExODAxLTIwMDIgT0YtMzAwIENIJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi01MDAgQ0gnLCBsYWJlbDogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi01MDAgQ0gnIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxMTgwMS0yMDAyIE9GLTIwMDAgQ0gnLCBsYWJlbDogJ0lTTy9JRUMgMTE4MDEtMjAwMiBPRi0yMDAwIENIJyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTQ3NjMtMzoyMDI0IChEcmFmdCknLCBsYWJlbDogJ0lTTy9JRUMgMTQ3NjMtMzoyMDI0IChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMjQgUkwgPSAyMCAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCBSTCA9IDIwIChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMjQgUkwgPSAzNSAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCBSTCA9IDM1IChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMjQgUkwgPSA2MCAoRHJhZnQpJywgbGFiZWw6ICdJU08vSUVDIDE0NzYzLTM6MjAyNCBSTCA9IDYwIChEcmFmdCknIH0sXG4gICAgICAgICAgICAgICAgICB7IHZhbHVlOiAnSVNPL0lFQyAxNDc2My0zOjIwMTQnLCBsYWJlbDogJ0lTTy9JRUMgMTQ3NjMtMzoyMDE0JyB9LFxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogJ0lTTy9JRUMgMTQ3NjMtMycsIGxhYmVsOiAnSVNPL0lFQyAxNDc2My0zJyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZW51TGlzdCgpIHtcbiAgICBjb25zdCB7IFxuICAgICAgICBuYXZpZ2F0aW9uLFxuICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcbiAgICAgICAgdXBkYXRlUHJvamVjdCxcbiAgICAgICAgbmF2aWdhdGVUbyxcbiAgICAgICAgZ29CYWNrXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xuXG5cblxuXG4gICAgY29uc3QgY3VycmVudFByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdCgpO1xuICAgIGNvbnN0IHsgbWVudVR5cGUsIHNlbGVjdGVkQ29uZmlnSWQgfSA9IG5hdmlnYXRpb24uY3VycmVudC5wYXJhbXM7XG4gICAgY29uc3QgW3NlbGVjdGVkUGF0aCwgc2V0U2VsZWN0ZWRQYXRoXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbY3VycmVudE1lbnUsIHNldEN1cnJlbnRNZW51XSA9IHVzZVN0YXRlKG1lbnVEYXRhW21lbnVUeXBlXSk7XG5cbiAgIFxuXG4gICAgLy8g6I635Y+W5b2T5YmN6YCJ5Lit55qE6YWN572uXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IGN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzLmZpbmQoXG4gICAgICAgIGNvbmZpZyA9PiBjb25maWcuaWQgPT09IHNlbGVjdGVkQ29uZmlnSWRcbiAgICApO1xuXG5cblxuICAgIC8vIOWkhOeQhuiPnOWNlemAiemhuemAieaLqVxuICAgIGNvbnN0IGhhbmRsZU1lbnVTZWxlY3QgPSAoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAvLyDlpoLmnpzmnInlrZDoj5zljZXvvIzmm7TmlrDot6/lvoTlkozlvZPliY3oj5zljZVcbiAgICAgICAgICAgIHNldFNlbGVjdGVkUGF0aChbLi4uc2VsZWN0ZWRQYXRoLCBpdGVtXSk7XG4gICAgICAgICAgICBzZXRDdXJyZW50TWVudShpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOaYr+acgOe7iOmAiemhue+8jOabtOaWsOmFjee9ruW5tui/lOWbnlxuICAgICAgICBsZXQgdXBkYXRlZENvbmZpZyA9IHsgLi4uY3VycmVudENvbmZpZyB9O1xuICAgICAgICBzd2l0Y2ggKG1lbnVUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdDQUJMRV9UWVBFJzpcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnBhcmFtcy5jYWJsZVR5cGUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTElNSVRfVkFMVUUnOlxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmxpbWl0VmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnV0lSRV9PUkRFUic6XG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5wYXJhbXMud2lyZU9yZGVyID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ZJQkVSX1RZUEUnOlxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmNhYmxlVHlwZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRDb25maWcubW9kdWxlVHlwZSA9PT0gJ2NmcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUuaW5jbHVkZXMoJ09NJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmxpbWl0VmFsdWUgPSAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChTVEQpJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcucGFyYW1zLmxpbWl0VmFsdWUgPSAnVElBLTU2OC4zLUUgU2luZ2xlbW9kZSBJU1AgKFNURCknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ0ZQX0xJTUlUJzpcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnBhcmFtcy5saW1pdFZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ09GUF9MSU1JVCc6XG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5wYXJhbXMubGltaXRWYWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNT0RVTEUnOlxuICAgICAgICAgICAgICAgIC8vIOWmguaenOaooeWdl+exu+Wei+WPkeeUn+WPmOWMlu+8jOWujOWFqOabv+aNoumFjee9ruWvueixoVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29uZmlnLm1vZHVsZVR5cGUgIT09IGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4MDAwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogY3VycmVudENvbmZpZy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlVHlwZTogJzgwMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVsYWJsZTogJ+mTnOe8hua1i+ivleS7qicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRWYWx1ZTogJ1RJQSBDYXQgNiBDaGFubmVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlVHlwZTogJ0NhdDYgVS9VVFAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lyZU9yZGVyOiAnVDU2OEInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogY3VycmVudENvbmZpZy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlVHlwZTogJ2NmcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZWxhYmxlOiAn5YWJ5o2f6ICX5rWL6K+V5LuqJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFZhbHVlOiAnVElBLTU2OC4zLUUgTXVsdGltb2RlIChTVEQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlVHlwZTogJ09NMyBNdWx0aW1vZGUgNTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmSnVtcGVyOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VDb3VudDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yQ291bnQ6ICcyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29mcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGN1cnJlbnRDb25maWcuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZVR5cGU6ICdvZnAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVsYWJsZTogJ09URFLmtYvor5Xku6onLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0VmFsdWU6ICdHZW5lcmFsIEZpYmVyIFJMID0gMzUgZEInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVUeXBlOiAnT00zIE11bHRpbW9kZSA1MCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLm1vZHVsZVR5cGUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLm1vZHVsZWxhYmxlID0gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDmm7TmlrDpobnnm67mlbDmja5cbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3MgPSBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncy5tYXAoY29uZmlnID0+IHtcbiAgICAgICAgICAgIGlmIChjb25maWcuaWQgPT09IHNlbGVjdGVkQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5wcm9qZWN0SW5kZXg7XG4gICAgICAgIHVwZGF0ZVByb2plY3QocHJvamVjdEluZGV4LCB7IHRlc3RDb25maWdzOiB1cGRhdGVkQ29uZmlncyB9KTtcblxuICAgICAgICAvLyDov5Tlm57kuIrkuIDpobVcbiAgICAgICAgZ29CYWNrKCk7XG4gICAgfTtcblxuICAgIC8vIOWkhOeQhui/lOWbnuS4iuS4gOe6p1xuICAgIGNvbnN0IGhhbmRsZUJhY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZFBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IHNlbGVjdGVkUGF0aC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZFBhdGgobmV3UGF0aCk7XG4gICAgICAgICAgICBpZiAobmV3UGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRDdXJyZW50TWVudShtZW51RGF0YVttZW51VHlwZV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IG1lbnVEYXRhW21lbnVUeXBlXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV3UGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5pdGVtcy5maW5kKGkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSkuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldEN1cnJlbnRNZW51KGN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ29CYWNrKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8g5riy5p+T6I+c5Y2V6YCJ6aG5XG4gICAgY29uc3QgcmVuZGVyTWVudU9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGlmICghY3VycmVudE1lbnUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIC8vIOWmguaenOaYr+WtkOiPnOWNle+8jOebtOaOpea4suafk+WtkOiPnOWNlemhuVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50TWVudSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNDkwcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50TWVudS5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaC1bNjBweF0gdy1mdWxsIGJnLVsjRjhGNkY3XSBwLTQgc2hhZG93LWxnIGZsZXggaXRlbXMtY2VudGVyICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlID09PSBpdGVtLnZhbHVlID8gJ2JnLWJsdWUtNTAwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTWVudVNlbGVjdChpdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntpdGVtLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOaYr+WvueixoeW9ouW8j+eahOWtkOiPnOWNle+8iOWmgiBMSU1JVF9WQUxVRSDnmoTkuoznuqfoj5zljZXvvIlcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50TWVudSA9PT0gJ29iamVjdCcgJiYgIWN1cnJlbnRNZW51Lml0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzQ5MHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICB7T2JqZWN0LmVudHJpZXMoY3VycmVudE1lbnUpLm1hcCgoW2tleSwgaXRlbV0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BoLVs2MHB4XSB3LWZ1bGwgYmctWyNGOEY2RjddIHAtNCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlID09PSBpdGVtLnZhbHVlID8gJ2JnLWJsdWUtNTAwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTWVudVNlbGVjdChpdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntpdGVtLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOaYr+S4u+iPnOWNle+8jOa4suafk+S4u+iPnOWNlemhuVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNDkwcHhdXCI+XG4gICAgICAgICAgICAgICAge2N1cnJlbnRNZW51Lml0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BoLVs2MHB4XSB3LWZ1bGwgYmctWyNGOEY2RjddIHAtNCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVkID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGUgPT09IGl0ZW0udmFsdWUgPyAnYmctYmx1ZS01MDAnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTWVudVNlbGVjdChpdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57aXRlbS5sYWJlbH08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8g6I635Y+W5b2T5YmN6I+c5Y2V5qCH6aKY77yI6L+U5ZueIG51bGwg6KGo56S65LiN5pi+56S677yJXG4gICAgY29uc3QgZ2V0Q3VycmVudFRpdGxlID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBzdWJUaXRsZSA9IG1lbnVEYXRhW21lbnVUeXBlXT8uc3ViVGl0bGU7XG4gICAgICAgIHJldHVybiBzdWJUaXRsZSA/IHN1YlRpdGxlIDogbnVsbDsgLy8g5aaC5p6cIHN1YlRpdGxlIOS4uuepuuWImei/lOWbniBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkUGF0aFtzZWxlY3RlZFBhdGgubGVuZ3RoIC0gMV0ubGFiZWw7XG4gICAgfTtcbiAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgPFN0YXR1c0JhciAvPlxuICAgICAgICA8VGl0bGVCYXIgXG4gICAgICAgICAgICB0aXRsZT17bWVudURhdGFbbWVudVR5cGVdLnRpdGxlfVxuICAgICAgICAgICAgYmFja1RvPXtzZWxlY3RlZFBhdGgubGVuZ3RoID4gMCA/ICdtZW51bGlzdCcgOiBuYXZpZ2F0aW9uLnByZXZpb3VzPy5uYW1lfSBcbiAgICAgICAgICAgIHZpZXc9e3NlbGVjdGVkUGF0aC5sZW5ndGggPiAwID8gJ3NldHVwJyA6IG5hdmlnYXRpb24ucHJldmlvdXM/LnZpZXd9XG4gICAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XG4gICAgICAgIC8+XG4gICAgICAgIHsvKiDlj6rmnInlvZMgZ2V0Q3VycmVudFRpdGxlKCkg6L+U5Zue5YC85LiN5Li6IG51bGwg5pe25omN5riy5p+TIFN1YlRpdGxlQmFyICovfVxuICAgICAgICB7Z2V0Q3VycmVudFRpdGxlKCkgIT09IG51bGwgJiYgKFxuICAgICAgICAgICAgPFN1YlRpdGxlQmFyIHRpdGxlPXtnZXRDdXJyZW50VGl0bGUoKX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBvdmVyZmxvdy15LWF1dG8gWyY6Oi13ZWJraXQtc2Nyb2xsYmFyXTpoaWRkZW5cIj5cbiAgICAgICAgICAgIHtyZW5kZXJNZW51T3B0aW9ucygpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiU3RhdHVzQmFyIiwiVGl0bGVCYXIiLCJTdWJUaXRsZUJhciIsInVzZURpc3BsYXlTdG9yZSIsIm1lbnVEYXRhIiwiTU9EVUxFIiwidGl0bGUiLCJpdGVtcyIsInZhbHVlIiwibGFiZWwiLCJDQUJMRV9UWVBFIiwic3ViVGl0bGUiLCJkaXNhYmxlZCIsImNoaWxkcmVuIiwiTElNSVRfVkFMVUUiLCJDYXQ2QSIsIkNhdDYiLCJDYXQ1ZSIsIldJUkVfT1JERVIiLCJGSUJFUl9UWVBFIiwiQ0ZQX0xJTUlUIiwiT0ZQX0xJTUlUIiwiTWVudUxpc3QiLCJuYXZpZ2F0aW9uIiwiZ2V0Q3VycmVudFByb2plY3QiLCJ1cGRhdGVQcm9qZWN0IiwibmF2aWdhdGVUbyIsImdvQmFjayIsImN1cnJlbnRQcm9qZWN0IiwibWVudVR5cGUiLCJzZWxlY3RlZENvbmZpZ0lkIiwiY3VycmVudCIsInBhcmFtcyIsInNlbGVjdGVkUGF0aCIsInNldFNlbGVjdGVkUGF0aCIsImN1cnJlbnRNZW51Iiwic2V0Q3VycmVudE1lbnUiLCJjdXJyZW50Q29uZmlnIiwidGVzdENvbmZpZ3MiLCJmaW5kIiwiY29uZmlnIiwiaWQiLCJoYW5kbGVNZW51U2VsZWN0IiwiaXRlbSIsInVwZGF0ZWRDb25maWciLCJjYWJsZVR5cGUiLCJsaW1pdFZhbHVlIiwid2lyZU9yZGVyIiwibW9kdWxlVHlwZSIsImluY2x1ZGVzIiwibW9kdWxlbGFibGUiLCJyZWZKdW1wZXIiLCJzcGxpY2VDb3VudCIsImNvbm5lY3RvckNvdW50IiwidXBkYXRlZENvbmZpZ3MiLCJtYXAiLCJwcm9qZWN0SW5kZXgiLCJnZXRTdGF0ZSIsInNlbGVjdGVkSW5kZXhlcyIsImhhbmRsZUJhY2siLCJsZW5ndGgiLCJuZXdQYXRoIiwic2xpY2UiLCJpIiwicmVuZGVyTWVudU9wdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJkaXYiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsImdldEN1cnJlbnRUaXRsZSIsImJhY2tUbyIsInByZXZpb3VzIiwibmFtZSIsInZpZXciLCJvbkJhY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/MenuList.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/Operators.js":
/*!*****************************************************!*\
!*** ./src/components/dsxpage/general/Operators.js ***!
\*****************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Operators)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\nfunction Operators() {\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [selectedOperators, setSelectedOperators] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const { getCurrentProject, setSelectedIndexes, updateCurrentView, addOperator, updateProject, goBack, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const currentProject = getCurrentProject();\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.current;\n const handleDeleteOperators = ()=>{\n if (selectedOperators.length === currentProject.operators.length) {\n setToastMessage('至少需要保留一个操作员');\n return;\n }\n // 过滤掉被选中的操作员\n const newOperators = currentProject.operators.filter((operator)=>!selectedOperators.includes(operator.id));\n // 更新项目\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.projectIndex;\n updateProject(currentIndex, {\n operators: newOperators\n });\n // 如果当前选中的操作员被删除了,重置选中的操作员索引为0\n if (selectedOperators.includes(currentProject.operators[_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.operatorIndex].id)) {\n setSelectedIndexes({\n operatorIndex: 0\n });\n }\n // 清空选中列表并返回main视图\n setSelectedOperators([]);\n updateCurrentView('main');\n };\n const renderContent = ()=>{\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: currentProject.operators.map((operator, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `h-[50px] p-4 shadow-lg flex items-center cursor-pointer ${index === _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().selectedIndexes.operatorIndex ? 'bg-blue-500' : 'bg-gradient-to-b from-[#e6e3e6] to-[#7b797b]'}`,\n onClick: ()=>{\n setSelectedIndexes({\n operatorIndex: index\n });\n goBack();\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: operator.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 64,\n columnNumber: 37\n }, this)\n }, operator.id, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 56,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 54,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 53,\n columnNumber: 21\n }, this);\n case 'delete':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: currentProject.operators.map((operator)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] p-4 shadow-lg flex items-center justify-between bg-gradient-to-b from-[#e6e3e6] to-[#7b797b]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: operator.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 80,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n className: \"w-4 h-4\",\n checked: selectedOperators.includes(operator.id),\n onChange: (e)=>{\n if (e.target.checked) {\n setSelectedOperators([\n ...selectedOperators,\n operator.id\n ]);\n } else {\n setSelectedOperators(selectedOperators.filter((id)=>id !== operator.id));\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 81,\n columnNumber: 37\n }, this)\n ]\n }, operator.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 76,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 74,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 73,\n columnNumber: 21\n }, this);\n case 'new':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入操作员名称\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n // 保存光标位置\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 103,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 102,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n if (inputValue.trim()) {\n const newOperator = {\n id: Math.random().toString(36).substr(2, 9),\n name: inputValue.trim()\n };\n addOperator(newOperator);\n setInputValue('');\n updateCurrentView('main');\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 122,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 101,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 151,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: view === 'main' ? \"操作员\" : view === 'new' ? \"新操作员\" : \"删除操作员\",\n backTo: view === 'main' ? goBack : _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 152,\n columnNumber: 13\n }, this),\n renderContent(),\n view === 'main' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('delete'),\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"编辑列表\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 164,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('new'),\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"新操作员\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 170,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 163,\n columnNumber: 17\n }, this),\n view === 'delete' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleDeleteOperators,\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"删除\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 180,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 179,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Operators.js\",\n lineNumber: 150,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9PcGVyYXRvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUF3QztBQUNZO0FBQ0Y7QUFDQTtBQUNDO0FBRXBDLFNBQVNNO0lBQ3BCLE1BQU0sQ0FBQ0MsWUFBWUMsY0FBYyxHQUFHUCwrQ0FBUUEsQ0FBQztJQUM3QyxNQUFNLENBQUNRLGdCQUFnQkMsa0JBQWtCLEdBQUdULCtDQUFRQSxDQUFDO0lBQ3JELE1BQU0sQ0FBQ1UsbUJBQW1CQyxxQkFBcUIsR0FBR1gsK0NBQVFBLENBQUMsRUFBRTtJQUM3RCxNQUFNLEVBQ0ZZLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLFdBQVcsRUFDWEMsYUFBYSxFQUNiQyxNQUFNLEVBQ05DLGVBQWUsRUFDbEIsR0FBR2QsK0RBQWVBO0lBRW5CLE1BQU1lLGlCQUFpQlA7SUFDdkIsTUFBTSxFQUFFUSxJQUFJLEVBQUUsR0FBR2hCLG9FQUF3QixHQUFHa0IsVUFBVSxDQUFDQyxPQUFPO0lBRTlELE1BQU1DLHdCQUF3QjtRQUMxQixJQUFJZCxrQkFBa0JlLE1BQU0sS0FBS04sZUFBZU8sU0FBUyxDQUFDRCxNQUFNLEVBQUU7WUFDOURQLGdCQUFnQjtZQUNoQjtRQUNKO1FBRUEsYUFBYTtRQUNiLE1BQU1TLGVBQWVSLGVBQWVPLFNBQVMsQ0FBQ0UsTUFBTSxDQUNoREMsQ0FBQUEsV0FBWSxDQUFDbkIsa0JBQWtCb0IsUUFBUSxDQUFDRCxTQUFTRSxFQUFFO1FBR3ZELE9BQU87UUFDUCxNQUFNQyxlQUFlNUIsb0VBQXdCLEdBQUc2QixlQUFlLENBQUNDLFlBQVk7UUFDNUVsQixjQUFjZ0IsY0FBYztZQUFFTixXQUFXQztRQUFhO1FBRXRELDhCQUE4QjtRQUM5QixJQUFJakIsa0JBQWtCb0IsUUFBUSxDQUFDWCxlQUFlTyxTQUFTLENBQUN0QixvRUFBd0IsR0FBRzZCLGVBQWUsQ0FBQ0UsYUFBYSxD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QUNmO0lBQ0o7SUFFQSxxQkFDSSw4REFBQ3VCO1FBQUlDLFdBQVU7OzBCQUNYLDhEQUFDckMsaUVBQVNBOzs7OzswQkFDViw4REFBQ0MsZ0VBQVFBO2dCQUNMNkQsT0FDSTNDLFNBQVMsU0FBUyxRQUNsQkEsU0FBUyxRQUFRLFNBQ2pCO2dCQUVKNEMsUUFBUTVDLFNBQVMsU0FBU0gsU0FBU2Isb0VBQXdCLEdBQUdrQixVQUFVLENBQUMyQyxRQUFRLEVBQUV2QixRQUFRO2dCQUMzRnRCLE1BQU1oQixvRUFBd0IsR0FBR2tCLFVBQVUsQ0FBQzJDLFFBQVEsRUFBRTdDLFFBQVE7Ozs7OztZQUVqRWdCO1lBQ0FoQixTQUFTLHdCQUNOLDhEQUFDaUI7Z0JBQUlDLFdBQVU7O2tDQUNYLDhEQUFDNEI7d0JBQ0d6QixTQUFTLElBQU0zQixrQkFBa0I7d0JBQ2pDd0IsV0FBVTtrQ0FDYjs7Ozs7O2tDQUdELDhEQUFDNEI7d0JBQ0d6QixTQUFTLElBQU0zQixrQkFBa0I7d0JBQ2pDd0IsV0FBVTtrQ0FDYjs7Ozs7Ozs7Ozs7O1lBS1JsQixTQUFTLDBCQUNOLDhEQUFDaUI7Z0JBQUlDLFdBQVU7MEJBQ1gsNEVBQUM0QjtvQkFDR3pCLFNBQVNqQjtvQkFDVGMsV0FBVTs4QkFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPckIiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9nZW5lcmFsL09wZXJhdG9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vU3RhdHVzQmFyJztcclxuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1RpdGxlQmFyJztcclxuaW1wb3J0IEtleWJvYXJkIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL0tleWJvYXJkJztcclxuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPcGVyYXRvcnMoKSB7XHJcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbY3Vyc29yUG9zaXRpb24sIHNldEN1cnNvclBvc2l0aW9uXSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3NlbGVjdGVkT3BlcmF0b3JzLCBzZXRTZWxlY3RlZE9wZXJhdG9yc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgICAgZ2V0Q3VycmVudFByb2plY3QsXHJcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzLFxyXG4gICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3LFxyXG4gICAgICAgIGFkZE9wZXJhdG9yLFxyXG4gICAgICAgIHVwZGF0ZVByb2plY3QsXHJcbiAgICAgICAgZ29CYWNrLFxyXG4gICAgICAgIHNldFRvYXN0TWVzc2FnZVxyXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZURlbGV0ZU9wZXJhdG9ycyA9ICgpID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcGVyYXRvcnMubGVuZ3RoID09PSBjdXJyZW50UHJvamVjdC5vcGVyYXRvcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6Iez5bCR6ZyA6KaB5L+d55WZ5LiA5Liq5pON5L2c5ZGYJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g6L+H5ruk5o6J6KKr6YCJ5Lit55qE5pON5L2c5ZGYXHJcbiAgICAgICAgY29uc3QgbmV3T3BlcmF0b3JzID0gY3VycmVudFByb2plY3Qub3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICAgb3BlcmF0b3IgPT4gIXNlbGVjdGVkT3BlcmF0b3JzLmluY2x1ZGVzKG9wZXJhdG9yLmlkKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5pu05paw6aG555uuXHJcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnByb2plY3RJbmRleDtcclxuICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwgeyBvcGVyYXRvcnM6IG5ld09wZXJhdG9ycyB9KTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDlpoLmnpzlvZPliY3pgInkuK3nmoTmk43kvZzlkZjooqvliKDpmaTkuobvvIzph43nva7pgInkuK3nmoTmk43kvZzlkZjntKLlvJXkuLowXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3BlcmF0b3JzLmluY2x1ZGVzKGN1cnJlbnRQcm9qZWN0Lm9wZXJhdG9yc1t1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMub3BlcmF0b3JJbmRleF0uaWQpKSB7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhlcyh7IG9wZXJhdG9ySW5kZXg6IDAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOa4heepuumAieS4reWIl+ihqOW5tui/lOWbnm1haW7op4blm75cclxuICAgICAgICBzZXRTZWxlY3RlZE9wZXJhdG9ycyhbXSk7XHJcbiAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ21haW4nKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWFpbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50UHJvamVjdC5vcGVyYXRvcnMubWFwKChvcGVyYXRvciwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wZXJhdG9yLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BoLVs1MHB4XSBwLTQgc2hhZG93LWxnIGZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyICR7aW5kZXggPT09IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5vcGVyYXRvckluZGV4ID8gJ2JnLWJsdWUtNTAwJyA6ICdiZy1ncmFkaWVudC10by1iIGZyb20tWyNlNmUzZTZdIHRvLVsjN2I3OTdiXSd9YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzKHsgb3BlcmF0b3JJbmRleDogaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb0JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e29wZXJhdG9yLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRQcm9qZWN0Lm9wZXJhdG9ycy5tYXAoKG9wZXJhdG9yKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGVyYXRvci5pZH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gcC00IHNoYWRvdy1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZTZlM2U2XSB0by1bIzdiNzk3Yl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57b3BlcmF0b3IubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZE9wZXJhdG9ycy5pbmNsdWRlcyhvcGVyYXRvci5pZCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE9wZXJhdG9ycyhbLi4uc2VsZWN0ZWRPcGVyYXRvcnMsIG9wZXJhdG9yLmlkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcGVyYXRvcnMoc2VsZWN0ZWRPcGVyYXRvcnMuZmlsdGVyKGlkID0+IGlkICE9PSBvcGVyYXRvci5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbmV3JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeaTjeS9nOWRmOWQjeensFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjlhYnmoIfkvY3nva5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dFZhbHVlLnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRPcGVyYXRvcihuZXdPcGVyYXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICA8VGl0bGVCYXIgXHJcbiAgICAgICAgICAgICAgICB0aXRsZT17XHJcbiAgICAgICAgICAgICAgICAgICAgdmlldyA9PT0gJ21haW4nID8gXCLmk43kvZzlkZhcIiA6IFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXcgPT09ICduZXcnID8gXCLmlrDmk43kvZzlkZhcIiA6IFxyXG4gICAgICAgICAgICAgICAgICAgIFwi5Yig6Zmk5pON5L2c5ZGYXCJcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICBiYWNrVG89e3ZpZXcgPT09ICdtYWluJyA/IGdvQmFjayA6IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/Lm5hbWUgfHwgJ2hvbWUnfVxyXG4gICAgICAgICAgICAgICAgdmlldz17dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5wcmV2aW91cz8udmlldyB8fCAnbWFpbid9IFxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxyXG4gICAgICAgICAgICB7dmlldyA9PT0gJ21haW4nICYmIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ2RlbGV0ZScpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIOe8lui+keWIl+ihqFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCduZXcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDmlrDmk43kvZzlkZhcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICB7dmlldyA9PT0gJ2RlbGV0ZScgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZU9wZXJhdG9yc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDliKDpmaRcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufSAiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsIlN0YXR1c0JhciIsIlRpdGxlQmFyIiwiS2V5Ym9hcmQiLCJ1c2VEaXNwbGF5U3RvcmUiLCJPcGVyYXRvcnMiLCJpbnB1dFZhbHVlIiwic2V0SW5wdXRWYWx1ZSIsImN1cnNvclBvc2l0aW9uIiwic2V0Q3Vyc29yUG9zaXRpb24iLCJzZWxlY3RlZE9wZXJhdG9ycyIsInNldFNlbGVjdGVkT3BlcmF0b3JzIiwiZ2V0Q3VycmVudFByb2plY3QiLCJzZXRTZWxlY3RlZEluZGV4ZXMiLCJ1cGRhdGVDdXJyZW50VmlldyIsImFkZE9wZXJhdG9yIiwidXBkYXRlUHJvamVjdCIsImdvQmFjayIsInNldFRvYXN0TWVzc2FnZSIsImN1cnJlbnRQcm9qZWN0IiwidmlldyIsImdldFN0YXRlIiwibmF2aWdhdGlvbiIsImN1cnJlbnQiLCJoYW5kbGVEZWxldGVPcGVyYXRvcnMiLCJsZW5ndGgiLCJvcGVyYXRvcnMiLCJuZXdPcGVyYXRvcnMiLCJmaWx0ZXIiLCJvcGVyYXRvciIsImluY2x1ZGVzIiwiaWQiLCJjdXJyZW50SW5kZXgiLCJzZWxlY3RlZEluZGV4ZXMiLCJwcm9qZWN0SW5kZXgiLCJvcGVyYXRvckluZGV4IiwicmVuZGVyQ29udGVudCIsImRpdiIsImNsYXNzTmFtZSIsIm1hcCIsImluZGV4Iiwib25DbGljayIsIm5hbWUiLCJpbnB1dCIsInR5cGUiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwidmFsdWUiLCJwbGFjZWhvbGRlciIsInNlbGVjdGlvblN0YXJ0Iiwib25Gb2N1cyIsInNldFNlbGVjdGlvblJhbmdlIiwibmV3VmFsdWUiLCJuZXdQb3NpdGlvbiIsIm9uQ29tcGxldGUiLCJ0cmltIiwibmV3T3BlcmF0b3IiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHIiLCJ0aXRsZSIsImJhY2tUbyIsInByZXZpb3VzIiwiYnV0dG9uIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/Operators.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/Project.js":
/*!***************************************************!*\
!*** ./src/components/dsxpage/general/Project.js ***!
\***************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Project)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib//SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/lib//Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__, _store_displayStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__, _store_displayStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\nfunction Project() {\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const { getCurrentProject, navigation, navigateTo, updateCurrentView, goBack, deleteProject, setSelectedIndexes, updateProject, addProject, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n // 获取当前项目数据\n const currentProject = getCurrentProject();\n const passCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }).length;\n const failCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }).length;\n const renderContent = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'choose':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().projects.map((project, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>{\n setSelectedIndexes({\n projectIndex: index\n });\n setSelectedIndexes({\n testConfigIndex: 0\n });\n updateCurrentView('main');\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: project.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 77,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 79,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 78,\n columnNumber: 37\n }, this)\n ]\n }, project.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 68,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 66,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 65,\n columnNumber: 21\n }, this);\n case 'rxtx':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[200px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex items-center justify-center\",\n onClick: ()=>updateCurrentView('rxtx2'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"选择存储设备\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 99,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 95,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 94,\n columnNumber: 21\n }, this);\n case 'rxtx2':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"导出\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 108,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 107,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"导入\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 111,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 110,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 106,\n columnNumber: 21\n }, this);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg\",\n onClick: ()=>{\n if (currentProject?.id === 'default') {\n setToastMessage('默认项目不能重命名');\n return;\n }\n setInputValue(currentProject?.name || '');\n updateCurrentView('rename');\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"重命名\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 130,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 119,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[100px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg\",\n onClick: ()=>{\n if (currentProject?.id === 'default') {\n setToastMessage('默认项目不能删除');\n return;\n }\n // 删除当前项目\n deleteProject(_store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex);\n // 切换到默认项目(索引0)\n setSelectedIndexes({\n projectIndex: 0\n });\n updateCurrentView('main');\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"删除\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 146,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 132,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 118,\n columnNumber: 21\n }, this);\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black mb-4\",\n value: inputValue,\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 155,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 154,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n if (currentProject?.id === 'default') {\n setToastMessage('默认项目不能重命名');\n setInputValue('');\n updateCurrentView('main');\n return;\n }\n if (inputValue.trim()) {\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex;\n updateProject(currentIndex, {\n name: inputValue.trim()\n });\n setInputValue('');\n updateCurrentView('main');\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 172,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 153,\n columnNumber: 21\n }, this);\n case 'new':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black mb-4\",\n value: inputValue,\n placeholder: \"请输入项目名称\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 201,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 200,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n if (inputValue.trim()) {\n // 生成唯一ID的函数\n const generateId = ()=>Math.random().toString(36).substr(2, 9);\n // 创建新项目\n const newProject = {\n id: generateId(),\n name: inputValue.trim(),\n testResults: [],\n testConfigs: [\n {\n id: generateId(),\n moduleType: '8000',\n modulelable: '铜缆测试仪',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B'\n }\n }\n ],\n cableIds: [\n {\n id: generateId(),\n name: '001'\n },\n {\n id: generateId(),\n name: '002'\n }\n ],\n operators: [\n {\n id: generateId(),\n name: 'Bob'\n }\n ]\n };\n // 添加新项目\n addProject(newProject);\n // 获取新项目的索引\n const newIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().projects.length - 1;\n // 更新选中索引,重置所有相关索引\n setSelectedIndexes({\n projectIndex: newIndex,\n testConfigIndex: 0,\n operatorIndex: 0,\n cableIdIndex: 0\n });\n // 清空输入并更新视图\n setInputValue('');\n updateCurrentView('main');\n }\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 219,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 199,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('operators', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n \"操作员: \",\n currentProject?.operators[_store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.operatorIndex]?.name\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 293,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 295,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 294,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 289,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-gray-400\",\n children: [\n \"结果 \",\n currentProject?.testResults[0]?.date,\n \" - \",\n currentProject?.testResults[currentProject.testResults.length - 1]?.date\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 306,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('result', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-green-500\",\n children: passCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 316,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/pass.png'),\n alt: \"通过\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 318,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 317,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 315,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-500\",\n children: failCount || 0\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 328,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/fail.png'),\n alt: \"失败\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 330,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 329,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 327,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 314,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 313,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 342,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 341,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 309,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 305,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1 flex-1 overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-400\",\n children: \"测试设置\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 355,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"bg-[#404040] text-white px-3 py-1 rounded-sm text-sm\",\n onClick: ()=>{\n // 生成唯一ID\n const generateId = ()=>Math.random().toString(36).substr(2, 9);\n // 创建新的测试配置\n const newConfig = {\n id: generateId(),\n name: '新测试配置',\n moduleType: '8000',\n modulelable: '铜缆测试仪',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B',\n refJumper: '1',\n spliceCount: '0',\n connectorCount: '2'\n }\n };\n // 更新项目,添加新的测试配置\n const currentProjectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex;\n const updatedProject = {\n ...currentProject,\n testConfigs: [\n ...currentProject.testConfigs,\n newConfig\n ]\n };\n updateProject(currentProjectIndex, updatedProject);\n // 设置新配置为选中状态\n const newConfigIndex = updatedProject.testConfigs.length - 1;\n setSelectedIndexes({\n testConfigIndex: newConfigIndex\n });\n // 跳转到测试配置页面并进入编辑视图\n navigateTo('testConfig', 'setup');\n },\n children: \"新测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 356,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 354,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] overflow-y-auto space-y-2 pr-2\",\n children: currentProject?.testConfigs.map((config, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg cursor-pointer\",\n onClick: ()=>navigateTo('testConfig', 'main'),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0.2\",\n children: [\n config.moduleType === '8000' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 408,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 409,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.wireOrder\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 410,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 415,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 416,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 417,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n config.params.refJumper,\n \" 跳线参照\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 418,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'ofp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 423,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 424,\n columnNumber: 57\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 425,\n columnNumber: 57\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 405,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-end justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-500 text-sm\",\n children: config.modulelable\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 430,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-6 h-6 bg-[#404040] rounded-sm flex items-center justify-center\",\n onClick: (e)=>{\n e.stopPropagation(); // 阻止事件冒泡\n const currentProjectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.projectIndex;\n const currentTestConfigIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().selectedIndexes.testConfigIndex;\n const selectedConfigId = currentProject.testConfigs[currentTestConfigIndex]?.id;\n // 禁止删除最后一项配置\n if (currentProject.testConfigs.length <= 1) {\n setToastMessage('不能删除最后一项配置');\n return;\n }\n // 更新项目,删除选中的测试配置\n const updatedProject = {\n ...currentProject,\n testConfigs: currentProject.testConfigs.filter((testConfig)=>testConfig.id !== config.id)\n };\n updateProject(currentProjectIndex, updatedProject);\n // 更新选中索引\n const newIndex = updatedProject.testConfigs.findIndex((testConfig)=>testConfig.id === selectedConfigId);\n // 如果删除的是当前选中的配置,或者找不到选中的配置ID,则设置索引为0\n setSelectedIndexes({\n testConfigIndex: newIndex === -1 ? 0 : newIndex\n });\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-4 h-4 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/delete.png'),\n alt: \"删除\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 467,\n columnNumber: 45\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 466,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 432,\n columnNumber: 54\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 431,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 429,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 404,\n columnNumber: 25\n }, this)\n }, config.id, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 399,\n columnNumber: 37\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 397,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 353,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-400\",\n children: \"电缆ID集\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 487,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 486,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('cableId', 'main'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n \"下一个ID: \",\n currentProject?.cableIds?.[0]?.name || '001'\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 493,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 497,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 496,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 489,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 485,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 287,\n columnNumber: 13\n }, this);\n }\n };\n const renderTitleBar = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'choose':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"更改项目\",\n backTo: null,\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 518,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择您要的项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 519,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'rxtx':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"传输项目\",\n backTo: null,\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 526,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择存储设备\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 527,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'rxtx2':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"传输项目\",\n backTo: null,\n view: \"rxtx\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 534,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择所需操作\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 535,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"管理项目\",\n backTo: null,\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 542,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: currentProject?.name || 'DEFAULT'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 543,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"重命名\",\n backTo: null,\n view: \"setup\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 550,\n columnNumber: 25\n }, this)\n }, void 0, false);\n case 'new':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"新项目\",\n backTo: null,\n view: \"choose\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 557,\n columnNumber: 25\n }, this)\n }, void 0, false);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"项目\",\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 565,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: currentProject?.name || 'DEFAULT'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 566,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n }\n };\n const renderFooter = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'choose':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('new'),\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"新项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 579,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 578,\n columnNumber: 21\n }, this);\n case 'rxtx':\n case 'rxtx2':\n case 'setup':\n case 'rename':\n case 'new':\n return null;\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('choose'),\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"更改项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 599,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('rxtx'),\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"传输\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 605,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('setup'),\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"管理\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 611,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 598,\n columnNumber: 13\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 624,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Project.js\",\n lineNumber: 623,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9Qcm9qZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdDO0FBQ1Q7QUFDcUI7QUFDRjtBQUNNO0FBQ047QUFDQztBQUNQO0FBRTdCLFNBQVNTO0lBQ3BCLE1BQU0sQ0FBQ0MsWUFBWUMsY0FBYyxHQUFHViwrQ0FBUUEsQ0FBQztJQUM3QyxNQUFNLENBQUNXLGdCQUFnQkMsa0JBQWtCLEdBQUdaLCtDQUFRQSxDQUFDO0lBQ3JELE1BQU0sRUFDRmEsaUJBQWlCLEVBQ2pCQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsaUJBQWlCLEVBQ2pCQyxNQUFNLEVBQ05DLGFBQWEsRUFDYkMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBQ2JDLFVBQVUsRUFDVkMsZUFBZSxFQUNsQixHQUFHaEIsK0RBQWVBO0lBRW5CLFdBQVc7SUFDWCxNQUFNaUIsaUJBQWlCVjtJQUN2QixNQUFNVyxZQUFZRCxnQkFBZ0JFLFlBQVlDLE9BQU9DLENBQUFBO1FBQ2pELE1BQU1DLGVBQWVELE9BQU9FLGtCQUFrQjtRQUM5QyxNQUFNQyxZQUFZSCxPQUFPSSxlQUFlO1FBQ3hDLE1BQU1DLFlBQVlMLE9BQU9NLGVBQWU7UUFFeEMsSUFBSUwsY0FBYztZQUNkLE9BQU9BLGlCQUFpQjtRQUM1QixPQUFPLElBQUlFLFdBQVc7WUFDbEIsT0FBT0EsY0FBYztRQUN6QixPQUFPLElBQUlFLFdBQVc7WUFDbEIsT0FBT0EsY0FBYztRQUN6QjtRQUNBLE9BQU87SUFDWCxHQUFHRTtJQUVILE1BQU1DLFlBQVlaLGdCQUFnQkUsWUFBWUMsT0FBT0MsQ0FBQUE7UUFDakQsTUFBTUMsZUFBZUQsT0FBT0Usa0JBQWtCO1FBQzlDLE1BQU1DLFlBQVlILE9BQU9JLGVBQWU7UUFDeEMsTUFBTUMsWUFBWUwsT0FBT00sZUFBZTtRQUV4QyxJQUFJTCxjQUFjO1lBQ2QsT0FBT0EsaUJBQWlCO1FBQzVCLE9BQU8sSUFB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QUFTLElBQU05QixrQkFBa0I7NEJBQ2pDd0IsV0FBVTtzQ0FDckI7Ozs7OztzQ0FHRCw4REFBQ2M7NEJBQ1dSLFNBQVMsSUFBTTlCLGtCQUFrQjs0QkFDekN3QixXQUFVO3NDQUNiOzs7Ozs7c0NBR0QsOERBQUNjOzRCQUNXUixTQUFTLElBQU05QixrQkFBa0I7NEJBQ3pDd0IsV0FBVTtzQ0FDYjs7Ozs7Ozs7Ozs7O1FBS1Q7SUFDSjtJQUVBLHFCQUNJLDhEQUFDRDtRQUFJQyxXQUFVOzswQkFDWCw4REFBQ3RDLGlFQUFTQTs7Ozs7WUFDVHVHO1lBQ0FyRTtZQUNBd0U7Ozs7Ozs7QUFHYiIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2dlbmVyYWwvUHJvamVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnbmV4dC9pbWFnZSc7XG5pbXBvcnQgU3RhdHVzQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N0YXR1c0Jhcic7XG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vVGl0bGVCYXInO1xuaW1wb3J0IFN1YlRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N1YlRpdGxlQmFyJztcbmltcG9ydCBLZXlib2FyZCBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9LZXlib2FyZCc7XG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcbmltcG9ydCB7IGdldEFzc2V0VXJsIH0gZnJvbSAnQC91dGlscy9hc3NldCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByb2plY3QoKSB7XG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtjdXJzb3JQb3NpdGlvbiwgc2V0Q3Vyc29yUG9zaXRpb25dID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgeyBcbiAgICAgICAgZ2V0Q3VycmVudFByb2plY3QsXG4gICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgIG5hdmlnYXRlVG8sXG4gICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3LFxuICAgICAgICBnb0JhY2ssXG4gICAgICAgIGRlbGV0ZVByb2plY3QsXG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXhlcyxcbiAgICAgICAgdXBkYXRlUHJvamVjdCxcbiAgICAgICAgYWRkUHJvamVjdCxcbiAgICAgICAgc2V0VG9hc3RNZXNzYWdlXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xuXG4gICAgLy8g6I635Y+W5b2T5YmN6aG555uu5pWw5o2uXG4gICAgY29uc3QgY3VycmVudFByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdCgpO1xuICAgIGNvbnN0IHBhc3NDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgY29wcGVyU3RhdHVzID0gcmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cztcbiAgICAgICAgY29uc3QgY2ZwU3RhdHVzID0gcmVzdWx0LkNGUFJlc3VsdFN0YXR1cztcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcbiAgICAgICAgXG4gICAgICAgIGlmIChjb3BwZXJTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdwYXNzJztcbiAgICAgICAgfSBlbHNlIGlmIChjZnBTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZnBTdGF0dXMgPT09ICdwYXNzJztcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBvZnBTdGF0dXMgPT09ICdwYXNzJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSkubGVuZ3RoO1xuICAgIFxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgY29wcGVyU3RhdHVzID0gcmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cztcbiAgICAgICAgY29uc3QgY2ZwU3RhdHVzID0gcmVzdWx0LkNGUFJlc3VsdFN0YXR1cztcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcbiAgICAgICAgXG4gICAgICAgIGlmIChjb3BwZXJTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdmYWlsJztcbiAgICAgICAgfSBlbHNlIGlmIChjZnBTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZnBTdGF0dXMgPT09ICdmYWlsJztcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBvZnBTdGF0dXMgPT09ICdmYWlsJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSkubGVuZ3RoO1xuXG5cbiAgICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHZpZXcgfSA9IG5hdmlnYXRpb24uY3VycmVudDtcbiAgICAgICAgXG4gICAgICAgIHN3aXRjaCAodmlldykge1xuICAgICAgICAgICAgY2FzZSAnY2hvb3NlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bI0Q1REZFQl0gcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5wcm9qZWN0cy5tYXAoKHByb2plY3QsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb2plY3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzKHsgcHJvamVjdEluZGV4OiBpbmRleCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyB0ZXN0Q29uZmlnSW5kZXg6IDAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ21haW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e3Byb2plY3QubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSAncnh0eCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bMjAwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCdyeHR4MicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+6YCJ5oup5a2Y5YKo6K6+5aSHPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSAncnh0eDInOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBwLTQgc3BhY2UteS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInctZnVsbCBoLVsxMDBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+5a+85Ye6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwidy1mdWxsIGgtWzEwMHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7lr7zlhaU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjYXNlICdzZXR1cCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzEwMHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvamVjdD8uaWQgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfpu5jorqTpobnnm67kuI3og73ph43lkb3lkI0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKGN1cnJlbnRQcm9qZWN0Py5uYW1lIHx8ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3JlbmFtZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7ph43lkb3lkI08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bMTAwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9qZWN0Py5pZCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+m7mOiupOmhueebruS4jeiDveWIoOmZpCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliKDpmaTlvZPliY3pobnnm65cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVByb2plY3QodXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnByb2plY3RJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliIfmjaLliLDpu5jorqTpobnnm67vvIjntKLlvJUw77yJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyBwcm9qZWN0SW5kZXg6IDAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7liKDpmaQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjYXNlICdyZW5hbWUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBwLTQgZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcC00IHRleHQtYmxhY2sgbWItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEtleWJvYXJkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uPXtjdXJzb3JQb3NpdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG5ld1ZhbHVlLCBuZXdQb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24obmV3UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFByb2plY3Q/LmlkID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6buY6K6k6aG555uu5LiN6IO96YeN5ZG95ZCNJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdtYWluJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdChjdXJyZW50SW5kZXgsIHsgbmFtZTogaW5wdXRWYWx1ZS50cmltKCkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdtYWluJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bI0Q1REZFQl0gcC00IGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrIG1iLTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXpobnnm67lkI3np7BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEtleWJvYXJkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uPXtjdXJzb3JQb3NpdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG5ld1ZhbHVlLCBuZXdQb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24obmV3UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUn+aIkOWUr+S4gElE55qE5Ye95pWwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZUlkID0gKCkgPT4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJvlu7rmlrDpobnnm65cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Byb2plY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dFZhbHVlLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0czogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZ3M6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZVR5cGU6ICc4MDAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlbGFibGU6ICfpk5znvIbmtYvor5Xku6onLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0VmFsdWU6ICdUSUEgQ2F0IDYgQ2hhbm5lbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWJsZVR5cGU6ICdDYXQ2IFUvVVRQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlcjogJ1Q1NjhCJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVJZHM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcwMDEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICcwMDInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0JvYidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5re75Yqg5paw6aG555uuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQcm9qZWN0KG5ld1Byb2plY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDojrflj5bmlrDpobnnm67nmoTntKLlvJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6YCJ5Lit57Si5byV77yM6YeN572u5omA5pyJ55u45YWz57Si5byVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWdJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlSWRJbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa4heepuui+k+WFpeW5tuabtOaWsOinhuWbvlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtNCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICB7Lyog5pON5L2c5ZGY5L+h5oGvICovfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ29wZXJhdG9ycycsICdtYWluJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7mk43kvZzlkZg6IHtjdXJyZW50UHJvamVjdD8ub3BlcmF0b3JzW3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5vcGVyYXRvckluZGV4XT8ubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7Lyog57uT5p6c57uf6K6hICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICDnu5Pmnpwge2N1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0c1swXT8uZGF0ZX0gLSB7Y3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzW2N1cnJlbnRQcm9qZWN0LnRlc3RSZXN1bHRzLmxlbmd0aCAtIDFdPy5kYXRlfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ3Jlc3VsdCcsICdtYWluJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTUwMFwiPntwYXNzQ291bnR8fCAwfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvcGFzcy5wbmcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi6YCa6L+HXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDBcIj57ZmFpbENvdW50fHwgMH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2ZhaWwucG5nJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuWksei0pVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPXtcImF1dG9cIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIHsvKiDmtYvor5Xorr7nva4gKi99XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xIGZsZXgtMSBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTQwMFwiPua1i+ivleiuvue9rjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLVsjNDA0MDQwXSB0ZXh0LXdoaXRlIHB4LTMgcHktMSByb3VuZGVkLXNtIHRleHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUn+aIkOWUr+S4gElEXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVJZCA9ICgpID0+IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJvlu7rmlrDnmoTmtYvor5XphY3nva5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfmlrDmtYvor5XphY3nva4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVUeXBlOiAnODAwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZWxhYmxlOiAn6ZOc57yG5rWL6K+V5LuqJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVUeXBlOiAnQ2F0NiBVL1VUUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXI6ICdUNTY4QicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZKdW1wZXI6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudDogJzInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6aG555uu77yM5re75Yqg5paw55qE5rWL6K+V6YWN572uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFByb2plY3RJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnNlbGVjdGVkSW5kZXhlcy5wcm9qZWN0SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRQcm9qZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29uZmlnczogWy4uLmN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzLCBuZXdDb25maWddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0SW5kZXgsIHVwZGF0ZWRQcm9qZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiuvue9ruaWsOmFjee9ruS4uumAieS4reeKtuaAgVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZ0luZGV4ID0gdXBkYXRlZFByb2plY3QudGVzdENvbmZpZ3MubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4ZXMoeyB0ZXN0Q29uZmlnSW5kZXg6IG5ld0NvbmZpZ0luZGV4IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6Lez6L2s5Yiw5rWL6K+V6YWN572u6aG16Z2i5bm26L+b5YWl57yW6L6R6KeG5Zu+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygndGVzdENvbmZpZycsICdzZXR1cCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaWsOa1i+ivlVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bMTAwcHhdIG92ZXJmbG93LXktYXV0byBzcGFjZS15LTIgcHItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzLm1hcCgoY29uZmlnLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbmZpZy5pZH0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bMTAwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ3Rlc3RDb25maWcnLCAnbWFpbicpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMC4yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLm1vZHVsZVR5cGUgPT09ICc4MDAwJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5saW1pdFZhbHVlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy53aXJlT3JkZXJ9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5tb2R1bGVUeXBlID09PSAnY2ZwJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7mmbrog73ov5znq688L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5saW1pdFZhbHVlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5yZWZKdW1wZXJ9IOi3s+e6v+WPgueFpzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb25maWcubW9kdWxlVHlwZSA9PT0gJ29mcCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+6Ieq5YqoT1REUjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMuY2FibGVUeXBlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtZW5kIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMCB0ZXh0LXNtXCI+e2NvbmZpZy5tb2R1bGVsYWJsZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTYgaC02IGJnLVsjNDA0MDQwXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIOmYu+atouS6i+S7tuWGkuazoVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUZXN0Q29uZmlnSW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMudGVzdENvbmZpZ0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZmlnSWQgPSBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlnc1tjdXJyZW50VGVzdENvbmZpZ0luZGV4XT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g56aB5q2i5Yig6Zmk5pyA5ZCO5LiA6aG56YWN572uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9qZWN0LnRlc3RDb25maWdzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn5LiN6IO95Yig6Zmk5pyA5ZCO5LiA6aG56YWN572uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6aG555uu77yM5Yig6Zmk6YCJ5Lit55qE5rWL6K+V6YWN572uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRQcm9qZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29uZmlnczogY3VycmVudFByb2plY3QudGVzdENvbmZpZ3MuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZyA9PiB0ZXN0Q29uZmlnLmlkICE9PSBjb25maWcuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdChjdXJyZW50UHJvamVjdEluZGV4LCB1cGRhdGVkUHJvamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6YCJ5Lit57Si5byVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSB1cGRhdGVkUHJvamVjdC50ZXN0Q29uZmlncy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWcgPT4gdGVzdENvbmZpZy5pZCA9PT0gc2VsZWN0ZWRDb25maWdJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5Yig6Zmk55qE5piv5b2T5YmN6YCJ5Lit55qE6YWN572u77yM5oiW6ICF5om+5LiN5Yiw6YCJ5Lit55qE6YWN572uSUTvvIzliJnorr7nva7ntKLlvJXkuLowXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleGVzKHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWdJbmRleDogbmV3SW5kZXggPT09IC0xID8gMCA6IG5ld0luZGV4IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNCBoLTQgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvZGVsZXRlLnBuZycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi5Yig6ZmkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgey8qIOeUtee8hklE6ZuGICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj7nlLXnvIZJROmbhjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdjYWJsZUlkJywgJ21haW4nKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5LiL5LiA5LiqSUQ6IHtjdXJyZW50UHJvamVjdD8uY2FibGVJZHM/LlswXT8ubmFtZSB8fCAnMDAxJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIueureWktFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJUaXRsZUJhciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XG4gICAgICAgIFxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nob29zZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciB0aXRsZT1cIuabtOaUuemhueebrlwiIGJhY2tUbz17bnVsbH0gdmlldz1cIm1haW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN1YlRpdGxlQmFyIHRpdGxlPVwi6YCJ5oup5oKo6KaB55qE6aG555uuXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSAncnh0eCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciB0aXRsZT1cIuS8oOi+k+mhueebrlwiIGJhY2tUbz17bnVsbH0gdmlldz1cIm1haW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN1YlRpdGxlQmFyIHRpdGxlPVwi6YCJ5oup5a2Y5YKo6K6+5aSHXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSAncnh0eDInOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgdGl0bGU9XCLkvKDovpPpobnnm65cIiBiYWNrVG89e251bGx9IHZpZXc9XCJyeHR4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUJhciB0aXRsZT1cIumAieaLqeaJgOmcgOaTjeS9nFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIHRpdGxlPVwi566h55CG6aG555uuXCIgYmFja1RvPXtudWxsfSB2aWV3PVwibWFpblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ViVGl0bGVCYXIgdGl0bGU9e2N1cnJlbnRQcm9qZWN0Py5uYW1lIHx8ICdERUZBVUxUJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2FzZSAncmVuYW1lJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIHRpdGxlPVwi6YeN5ZG95ZCNXCIgYmFja1RvPXtudWxsfSB2aWV3PVwic2V0dXBcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgdGl0bGU9XCLmlrDpobnnm65cIiBiYWNrVG89e251bGx9IHZpZXc9XCJjaG9vc2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdtYWluJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaXRsZUJhciB0aXRsZT1cIumhueebrlwiIGJhY2tUbz1cImhvbWVcIiB2aWV3PVwibWFpblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ViVGl0bGVCYXIgdGl0bGU9e2N1cnJlbnRQcm9qZWN0Py5uYW1lIHx8ICdERUZBVUxUJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdmlldyB9ID0gbmF2aWdhdGlvbi5jdXJyZW50O1xuICAgICAgICBcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICAgICAgICBjYXNlICdjaG9vc2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC04XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCduZXcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDmlrDpobnnm65cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdyeHR4JzpcbiAgICAgICAgICAgIGNhc2UgJ3J4dHgyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcbiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZSc6XG4gICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdtYWluJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC04XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnY2hvb3NlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDmm7TmlLnpobnnm65cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCdyeHR4Jyl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSAgcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg5Lyg6L6TXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50Vmlldygnc2V0dXAnKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDnrqHnkIZcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8U3RhdHVzQmFyIC8+XG4gICAgICAgICAgICB7cmVuZGVyVGl0bGVCYXIoKX1cbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICAgICAgICB7cmVuZGVyRm9vdGVyKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJJbWFnZSIsIlN0YXR1c0JhciIsIlRpdGxlQmFyIiwiU3ViVGl0bGVCYXIiLCJLZXlib2FyZCIsInVzZURpc3BsYXlTdG9yZSIsImdldEFzc2V0VXJsIiwiUHJvamVjdCIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwiY3Vyc29yUG9zaXRpb24iLCJzZXRDdXJzb3JQb3NpdGlvbiIsImdldEN1cnJlbnRQcm9qZWN0IiwibmF2aWdhdGlvbiIsIm5hdmlnYXRlVG8iLCJ1cGRhdGVDdXJyZW50VmlldyIsImdvQmFjayIsImRlbGV0ZVByb2plY3QiLCJzZXRTZWxlY3RlZEluZGV4ZXMiLCJ1cGRhdGVQcm9qZWN0IiwiYWRkUHJvamVjdCIsInNldFRvYXN0TWVzc2FnZSIsImN1cnJlbnRQcm9qZWN0IiwicGFzc0NvdW50IiwidGVzdFJlc3VsdHMiLCJmaWx0ZXIiLCJyZXN1bHQiLCJjb3BwZXJTdGF0dXMiLCJDb3BwZXJSZXN1bHRTdGF0dXMiLCJjZnBTdGF0dXMiLCJDRlBSZXN1bHRTdGF0dXMiLCJvZnBTdGF0dXMiLCJvZnBSZXN1bHRTdGF0dXMiLCJsZW5ndGgiLCJmYWlsQ291bnQiLCJyZW5kZXJDb250ZW50IiwidmlldyIsImN1cnJlbnQiLCJkaXYiLCJjbGFzc05hbWUiLCJnZXRTdGF0ZSIsInByb2plY3RzIiwibWFwIiwicHJvamVjdCIsImluZGV4Iiwib25DbGljayIsInByb2plY3RJbmRleCIsInRlc3RDb25maWdJbmRleCIsIm5hbWUiLCJzcmMiLCJhbHQiLCJmaWxsIiwiaWQiLCJidXR0b24iLCJzZWxlY3RlZEluZGV4ZXMiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInNlbGVjdGlvblN0YXJ0Iiwib25Gb2N1cyIsInNldFNlbGVjdGlvblJhbmdlIiwibmV3VmFsdWUiLCJuZXdQb3NpdGlvbiIsIm9uQ29tcGxldGUiLCJ0cmltIiwiY3VycmVudEluZGV4IiwicGxhY2Vob2xkZXIiLCJnZW5lcmF0ZUlkIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic3Vic3RyIiwibmV3UHJvamVjdCIsInRlc3RDb25maWdzIiwibW9kdWxlVHlwZSIsIm1vZHVsZWxhYmxlIiwicGFyYW1zIiwibGltaXRWYWx1ZSIsImNhYmxlVHlwZSIsIndpcmVPcmRlciIsImNhYmxlSWRzIiwib3BlcmF0b3JzIiwibmV3SW5kZXgiLCJvcGVyYXRvckluZGV4IiwiY2FibGVJZEluZGV4IiwiZGF0ZSIsInNwYW4iLCJzaXplcyIsIm5ld0NvbmZpZyIsInJlZkp1bXBlciIsInNwbGljZUNvdW50IiwiY29ubmVjdG9yQ291bnQiLCJjdXJyZW50UHJvamVjdEluZGV4IiwidXBkYXRlZFByb2plY3QiLCJuZXdDb25maWdJbmRleCIsImNvbmZpZyIsInN0b3BQcm9wYWdhdGlvbiIsImN1cnJlbnRUZXN0Q29uZmlnSW5kZXgiLCJzZWxlY3RlZENvbmZpZ0lkIiwidGVzdENvbmZpZyIsImZpbmRJbmRleCIsInJlbmRlclRpdGxlQmFyIiwidGl0bGUiLCJiYWNrVG8iLCJyZW5kZXJGb290ZXIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/Project.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/Result.js":
/*!**************************************************!*\
!*** ./src/components/dsxpage/general/Result.js ***!
\**************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Result)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib//SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/lib//Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_8__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\nfunction Result() {\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n const { getCurrentProject, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const currentProject = getCurrentProject();\n const [isManageMode, setIsManageMode] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [selectedResults, setSelectedResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [showKeyboard, setShowKeyboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n // 获取当前项目名称\n const projectName = currentProject?.name || '';\n // 获取测试结果并统计通过/失败数量\n const testResults = currentProject?.testResults || [];\n const passCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'pass';\n } else if (cfpStatus) {\n return cfpStatus === 'pass';\n } else if (ofpStatus) {\n return ofpStatus === 'pass';\n }\n return false;\n }).length;\n const failCount = currentProject?.testResults.filter((result)=>{\n const copperStatus = result.CopperResultStatus;\n const cfpStatus = result.CFPResultStatus;\n const ofpStatus = result.ofpResultStatus;\n if (copperStatus) {\n return copperStatus === 'fail';\n } else if (cfpStatus) {\n return cfpStatus === 'fail';\n } else if (ofpStatus) {\n return ofpStatus === 'fail';\n }\n return false;\n }).length;\n // 对测试结果进行排序:失败在前,通过在后,相同结果按name排序(数字部分按数值大小排序)\n const sortedResults = [\n ...testResults\n ].sort((a, b)=>{\n const aPass = a.resultdata?.result === 'pass';\n const bPass = b.resultdata?.result === 'pass';\n // 如果通过状态相同,则按name排序\n if (aPass === bPass) {\n // 将名称分割成文本和数字部分\n const splitName = (name)=>{\n const match = name.match(/^(.*?)(\\d+)$/);\n if (match) {\n return {\n text: match[1],\n number: parseInt(match[2], 10)\n };\n }\n return {\n text: name,\n number: 0\n };\n };\n const nameA = splitName(a.name);\n const nameB = splitName(b.name);\n // 先比较文本部分\n if (nameA.text !== nameB.text) {\n return nameA.text.localeCompare(nameB.text);\n }\n // 文本相同则比较数字部分\n return nameA.number - nameB.number;\n }\n return aPass ? 1 : -1;\n });\n // 处理选择结果\n const handleSelect = (result)=>{\n setSelectedResults((prev)=>{\n if (prev.includes(result.name)) {\n return prev.filter((name)=>name !== result.name);\n } else {\n return [\n ...prev,\n result.name\n ];\n }\n });\n };\n // 处理删除选中的结果\n const handleDelete = ()=>{\n if (selectedResults.length === 0) return;\n const newResults = testResults.filter((result)=>!selectedResults.includes(result.name));\n const updatedProject = {\n ...currentProject,\n testResults: newResults\n };\n const projectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === currentProject.id);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(projectIndex, updatedProject);\n setSelectedResults([]);\n setIsManageMode(false);\n setShowDeleteDialog(false);\n };\n // 重命名逻辑\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Result.useEffect\": ()=>{\n if (view === 'rename' && selectedResults.length === 1) {\n const selectedResult = testResults.find({\n \"Result.useEffect.selectedResult\": (result)=>result.name === selectedResults[0]\n }[\"Result.useEffect.selectedResult\"]);\n setInputValue(selectedResult.name);\n }\n }\n }[\"Result.useEffect\"], [\n view,\n selectedResults,\n testResults\n ]);\n // 处理重命名完成\n const handleRename = ()=>{\n if (!inputValue.trim()) return;\n // 检查是否与其他结果名称冲突\n const isDuplicate = testResults.some((result)=>result.name !== selectedResults[0] && result.name === inputValue.trim());\n if (isDuplicate) {\n setToastMessage('该名称已存在,请使用其他名称');\n return;\n }\n const newResults = testResults.map((result)=>{\n console.log(testResults);\n console.log(result);\n if (result.name === selectedResults[0]) {\n // 处理CFP模块类型的特殊重命名逻辑\n if (result.testconfig?.moduleType === 'cfp') {\n const oldName = result.name;\n const newName = inputValue.trim();\n // 判断旧名字是input还是output\n if (oldName === result.inputname) {\n // 查找关联结果:inputname相同但name不同的结果\n const relatedResult = testResults.find((r)=>r.inputname === result.inputname && r.name !== result.name);\n console.log(\"找到的关联结果:\", relatedResult);\n // 如果是当前选中的结果,更新name和inputname\n if (result.name === selectedResults[0]) {\n // 更新选中结果的name和inputname\n const updatedResult = {\n ...result,\n name: newName,\n inputname: newName\n };\n // 查找并更新关联结果的inputname\n const relatedResult = testResults.find((r)=>r.inputname === result.inputname && r.name !== result.name);\n if (relatedResult) {\n relatedResult.inputname = newName;\n }\n return updatedResult;\n }\n return result;\n } else if (oldName === result.outname) {\n // 查找关联结果:outname相同但name不同的结果\n if (result.name === selectedResults[0]) {\n // outname\n const updatedResult = {\n ...result,\n name: newName,\n outname: newName\n };\n // outname\n const relatedResult = testResults.find((r)=>r.outname === result.outname && r.name !== result.name);\n if (relatedResult) {\n relatedResult.outname = newName;\n }\n return updatedResult;\n }\n return result;\n }\n }\n return {\n ...result,\n name: inputValue.trim()\n };\n }\n return result;\n });\n const updatedProject = {\n ...currentProject,\n testResults: newResults\n };\n const projectIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === currentProject.id);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(projectIndex, updatedProject);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'main');\n // 重置管理状态和选中结果状态\n setIsManageMode(false);\n setSelectedResults([]);\n };\n //确认删除提示框 \n const [showDeleteDialog, setShowDeleteDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n //确认移动提示框\n const [showConfirmDialog, setShowConfirmDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [targetProject, setTargetProject] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showOverwriteDialog, setShowOverwriteDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [duplicateResults, setDuplicateResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const moveResults = (project, index)=>{\n // 检查是否选择了结果和目标项目\n if (selectedResults.length === 0 || !project) return;\n // 检查是否在同一个项目中移动\n if (project.id === currentProject.id) {\n setToastMessage('不能移动到相同项目');\n return;\n }\n // 检查目标项目中是否有重名结果\n const duplicates = selectedResults.filter((resultName)=>project.testResults.some((targetResult)=>targetResult.name === resultName));\n if (duplicates.length > 0) {\n setDuplicateResults(duplicates);\n setTargetProject(project);\n setShowOverwriteDialog(true);\n } else {\n setTargetProject(project);\n setShowConfirmDialog(true);\n }\n };\n const handleMove = (overwrite = false)=>{\n if (!targetProject) return;\n // 获取要移动的结果对象\n const resultsToMove = testResults.filter((result)=>selectedResults.includes(result.name));\n // 更新目标项目\n const updatedTargetResults = overwrite ? [\n ...targetProject.testResults.filter((result)=>!selectedResults.includes(result.name)),\n ...resultsToMove\n ] : [\n ...targetProject.testResults,\n ...resultsToMove\n ];\n const updatedTargetProject = {\n ...targetProject,\n testResults: updatedTargetResults\n };\n // 更新当前项目\n const updatedCurrentResults = testResults.filter((result)=>!selectedResults.includes(result.name));\n const updatedCurrentProject = {\n ...currentProject,\n testResults: updatedCurrentResults\n };\n // 保存更改\n const targetIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === targetProject.id);\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.findIndex((p)=>p.id === currentProject.id);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(targetIndex, updatedTargetProject);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().updateProject(currentIndex, updatedCurrentProject);\n // 重置状态\n setSelectedResults([]);\n setIsManageMode(false);\n setShowConfirmDialog(false);\n setShowOverwriteDialog(false);\n setTargetProject(null);\n setDuplicateResults([]);\n // 显示成功消息并返回主视图\n setToastMessage('移动成功');\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'main');\n };\n // 渲染标题栏\n const renderTitleBar = ()=>{\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n switch(view){\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"重命名结果\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 283,\n columnNumber: 21\n }, this);\n case 'move':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"移至\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 291,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"结果\",\n backTo: 'home',\n view: 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 300,\n columnNumber: 21\n }, this);\n }\n };\n // 渲染主要内容\n const renderContent = ()=>{\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n switch(view){\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mb-4 cursor-pointer\",\n onClick: ()=>setShowKeyboard(true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入测试结果名称\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 321,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 317,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 341,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 316,\n columnNumber: 21\n }, this);\n case 'move':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: \"选择您要的项目\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 358,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2 p-4\",\n children: _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().projects.map((project, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7]rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>{\n moveResults(project, index);\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: project.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 369,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 371,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 370,\n columnNumber: 37\n }, this)\n ]\n }, project.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 362,\n columnNumber: 33\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 360,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 357,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-gradient-to-b from-[#d5dfeb] via-[#f8f6f7] to-[#d5dfeb] px-4 flex flex-col justify-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black\",\n children: projectName\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 389,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-green-500\",\n children: passCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 393,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/pass.png'),\n alt: \"通过\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 395,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 394,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 392,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-500\",\n children: failCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 405,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/fail.png'),\n alt: \"失败\",\n sizes: \"auto\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 407,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 406,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 404,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 391,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 388,\n columnNumber: 25\n }, this),\n isManageMode && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[40px] px-4 bg-[#F8F6F7] flex items-center border-b border-gray-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: selectedResults.length === sortedResults.length,\n onChange: ()=>{\n if (selectedResults.length === sortedResults.length) {\n setSelectedResults([]);\n } else {\n setSelectedResults(sortedResults.map((result)=>result.name));\n }\n },\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 421,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-black\",\n children: \"选择全部\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 433,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 420,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 419,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] overflow-y-auto\",\n style: {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none'\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: sortedResults.map((result, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] px-4 bg-[#F8F6F7] flex items-center justify-between border-b border-gray-600 cursor-pointer\",\n onClick: ()=>!isManageMode && _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('resultinfo', 'save', result),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n isManageMode && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: selectedResults.includes(result.name),\n onChange: ()=>handleSelect(result),\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 447,\n columnNumber: 49\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-black\",\n children: result.name\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 454,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 445,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: result.CopperResultStatus === 'pass' || result.ofpResultStatus === 'pass' || result.name === result.inputname && result.InPortStatus === 'pass' || result.name === result.outname && result.OutPortStatus === 'pass' ? (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/pass.png') : (0,_utils_asset__WEBPACK_IMPORTED_MODULE_8__.getAssetUrl)('/fail.png'),\n alt: result.CopperResultStatus === 'pass' || result.ofpResultStatus === 'pass' || result.name === result.inputname && result.InPortStatus === 'pass' || result.name === result.outname && result.OutPortStatus === 'pass' ? '通过' : '失败',\n className: \"w-7 h-7\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 456,\n columnNumber: 41\n }, this)\n ]\n }, index, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 440,\n columnNumber: 37\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 438,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 437,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true);\n }\n };\n // 渲染底部按钮\n const renderFooter = ()=>{\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n switch(view){\n case 'rename':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\",\n children: !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleRename,\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"完成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 493,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 491,\n columnNumber: 21\n }, this);\n case 'move':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-5\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 504,\n columnNumber: 21\n }, this);\n case 'main':\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n if (selectedResults.length > 0) {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'move');\n }\n },\n disabled: selectedResults.length === 0,\n style: {\n opacity: selectedResults.length > 0 ? 1 : 0.5\n },\n children: \"移动\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 513,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 512,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>{\n if (selectedResults.length === 1) {\n const selectedResult = testResults.find((result)=>result.name === selectedResults[0]);\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('result', 'rename', selectedResult);\n }\n },\n disabled: selectedResults.length !== 1,\n style: {\n opacity: selectedResults.length === 1 ? 1 : 0.5\n },\n children: \"重命名\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 528,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 527,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>isManageMode ? setShowDeleteDialog(true) : setIsManageMode(true),\n children: isManageMode ? '删除' : '管理'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 543,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 542,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 511,\n columnNumber: 21\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 557,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter(),\n showDeleteDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-9999\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 566,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: \"是否删除选中的测试结果?\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 568,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 567,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mt-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>setShowDeleteDialog(false),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 572,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>handleDelete(),\n children: \"确认\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 578,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 571,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 570,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 565,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 564,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 563,\n columnNumber: 29\n }, this),\n showConfirmDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-9999\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 595,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: [\n \"是否将选中的测试结果移动到项目 \",\n targetProject?.name,\n \"?\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 597,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 596,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mt-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \" text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>setShowConfirmDialog(false),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 601,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \" text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>handleMove(false),\n children: \"确认\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 607,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 600,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 599,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 594,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 593,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 592,\n columnNumber: 29\n }, this),\n showOverwriteDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-9999\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 625,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex flex-col items-center justify-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg mb-4\",\n children: \"以下测试结果在目标项目中已存在:\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 627,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ul\", {\n className: \"mb-4 list-disc pl-6\",\n children: duplicateResults.map((name, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: \"text-red-500\",\n children: name\n }, index, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 630,\n columnNumber: 45\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 628,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: \"是否覆盖这些结果?\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 633,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 626,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center mt-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>{\n setShowOverwriteDialog(false);\n setTargetProject(null);\n setDuplicateResults([]);\n },\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 637,\n columnNumber: 41\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"text-white text-s font-bold px-4 py-2 bg-[#1d3155] rounded-md hover:bg-[#2b4466]\",\n onClick: ()=>handleMove(true),\n children: \"覆盖\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 647,\n columnNumber: 41\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 636,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 635,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 624,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 623,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 622,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Result.js\",\n lineNumber: 556,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9SZXN1bHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDcEI7QUFDcUI7QUFDRjtBQUNNO0FBQ0w7QUFDRDtBQUNOO0FBRTdCLFNBQVNVO0lBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdKLG9FQUF3QixHQUFHTSxVQUFVLENBQUNDLE9BQU87SUFDOUQsTUFBTSxFQUFFQyxpQkFBaUIsRUFBQ0MsZUFBZSxFQUFFLEdBQUdULCtEQUFlQTtJQUM3RCxNQUFNVSxpQkFBaUJGO0lBQ3ZCLE1BQU0sQ0FBQ0csY0FBY0MsZ0JBQWdCLEdBQUdsQiwrQ0FBUUEsQ0FBQztJQUNqRCxNQUFNLENBQUNtQixpQkFBaUJDLG1CQUFtQixHQUFHcEIsK0NBQVFBLENBQUMsRUFBRTtJQUN6RCxNQUFNLENBQUNxQixZQUFZQyxjQUFjLEdBQUd0QiwrQ0FBUUEsQ0FBQztJQUM3QyxNQUFNLENBQUN1QixjQUFjQyxnQkFBZ0IsR0FBR3hCLCtDQUFRQSxDQUFDO0lBQ2pELE1BQU0sQ0FBQ3lCLGdCQUFnQkMsa0JBQWtCLEdBQUcxQiwrQ0FBUUEsQ0FBQztJQUNyRCxXQUFXO0lBQ1gsTUFBTTJCLGNBQWNYLGdCQUFnQlksUUFBUTtJQUU1QyxtQkFBbUI7SUFDbkIsTUFBTUMsY0FBY2IsZ0JBQWdCYSxlQUFlLEVBQUU7SUFDckQsTUFBTUMsWUFBWWQsZ0JBQWdCYSxZQUFZRSxPQUFPQyxDQUFBQTtRQUNqRCxNQUFNQyxlQUFlRCxPQUFPRSxrQkFBa0I7UUFDOUMsTUFBTUMsWUFBWUgsT0FBT0ksZUFBZTtRQUN4QyxNQUFNQyxZQUFZTCxPQUFPTSxlQUFlO1FBRXhDLElBQUlMLGNBQWM7WUFDZCxPQUFPQSxpQkFBaUI7UUFDNUIsT0FBTyxJQUFJRSxXQUFXO1lBQ2xCLE9BQU9BLGNBQWM7UUFDekIsT0FBTyxJQUFJRSxXQUFXO1lBQ2xCLE9BQU9BLGNBQWM7UUFD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NENBQ0c1QixXQUFVOzRDQUNWQyxTQUFTLElBQU03QixxQkFBcUI7c0RBQ3ZDOzs7Ozs7c0RBR0QsOERBQUN3RDs0Q0FDRzVCLFdBQVU7NENBQ1ZDLFNBQVMsSUFBTWhCLFdBQVc7c0RBQzdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFXeEJWLHFDQUNlLDhEQUFDd0I7Z0JBQUlDLFdBQVU7MEJBQ2YsNEVBQUNEO29CQUFJQyxXQUFVOzhCQUNQLDRFQUFDRDt3QkFBSUMsV0FBVTs7MENBQ2YsOERBQUMrQjtnQ0FBRy9CLFdBQVU7MENBQW9DOzs7Ozs7MENBQ2xELDhEQUFDRDtnQ0FBSUMsV0FBVTs7a0RBQ2YsOERBQUNEO3dDQUFJQyxXQUFVO2tEQUEwQjs7Ozs7O2tEQUN6Qyw4REFBQ2dDO3dDQUFHaEMsV0FBVTtrREFDVHZCLGlCQUFpQnBCLEdBQUcsQ0FBQyxDQUFDL0MsTUFBTXVFLHNCQUN6Qiw4REFBQ29EO2dEQUFlakMsV0FBVTswREFBZ0IxRjsrQ0FBakN1RTs7Ozs7Ozs7OztrREFHakIsOERBQUNrQjt3Q0FBSUMsV0FBVTtrREFBcUI7Ozs7Ozs7Ozs7OzswQ0FFcEMsOERBQUNEO2dDQUFJQyxXQUFVOzBDQUNmLDRFQUFDRDtvQ0FBSUMsV0FBVTs7c0RBQ1gsOERBQUM0Qjs0Q0FDRzVCLFdBQVU7NENBQ1ZDLFNBQVM7Z0RBQ0x6Qix1QkFBdUI7Z0RBQ3ZCRixpQkFBaUI7Z0RBQ2pCSSxvQkFBb0IsRUFBRTs0Q0FDMUI7c0RBQ0g7Ozs7OztzREFHRCw4REFBQ2tEOzRDQUNHNUIsV0FBVTs0Q0FDVkMsU0FBUyxJQUFNaEIsV0FBVztzREFDN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVd6QyIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2dlbmVyYWwvUmVzdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgSW1hZ2UgZnJvbSAnbmV4dC9pbWFnZSc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vU3RhdHVzQmFyJztcclxuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1RpdGxlQmFyJztcclxuaW1wb3J0IFN1YlRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1N1YlRpdGxlQmFyJztcclxuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XHJcbmltcG9ydCBLZXlib2FyZCBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9LZXlib2FyZCc7XHJcbmltcG9ydCB7IGdldEFzc2V0VXJsIH0gZnJvbSAnQC91dGlscy9hc3NldCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXN1bHQoKSB7XHJcbiAgICBjb25zdCB7IHZpZXcgfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24uY3VycmVudDtcclxuICAgIGNvbnN0IHsgZ2V0Q3VycmVudFByb2plY3Qsc2V0VG9hc3RNZXNzYWdlIH0gPSB1c2VEaXNwbGF5U3RvcmUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIGNvbnN0IFtpc01hbmFnZU1vZGUsIHNldElzTWFuYWdlTW9kZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbc2VsZWN0ZWRSZXN1bHRzLCBzZXRTZWxlY3RlZFJlc3VsdHNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3Nob3dLZXlib2FyZCwgc2V0U2hvd0tleWJvYXJkXSA9IHVzZVN0YXRlKHRydWUpO1xyXG4gICAgY29uc3QgW2N1cnNvclBvc2l0aW9uLCBzZXRDdXJzb3JQb3NpdGlvbl0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIC8vIOiOt+WPluW9k+WJjemhueebruWQjeensFxyXG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSBjdXJyZW50UHJvamVjdD8ubmFtZSB8fCAnJztcclxuXHJcbiAgICAvLyDojrflj5bmtYvor5Xnu5Pmnpzlubbnu5/orqHpgJrov4cv5aSx6LSl5pWw6YePXHJcbiAgICBjb25zdCB0ZXN0UmVzdWx0cyA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cyB8fCBbXTtcclxuICAgIGNvbnN0IHBhc3NDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBjb25zdCBjb3BwZXJTdGF0dXMgPSByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdwYXNzJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNmcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAncGFzcyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mcFN0YXR1cyA9PT0gJ3Bhc3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5sZW5ndGg7XHJcbiAgICBcclxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHtcclxuICAgICAgICBjb25zdCBjb3BwZXJTdGF0dXMgPSByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzO1xyXG4gICAgICAgIGNvbnN0IGNmcFN0YXR1cyA9IHJlc3VsdC5DRlBSZXN1bHRTdGF0dXM7XHJcbiAgICAgICAgY29uc3Qgb2ZwU3RhdHVzID0gcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29wcGVyU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3BwZXJTdGF0dXMgPT09ICdmYWlsJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNmcFN0YXR1cykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZwU3RhdHVzID09PSAnZmFpbCc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvZnBTdGF0dXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mcFN0YXR1cyA9PT0gJ2ZhaWwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5sZW5ndGg7XHJcblxyXG4gICAgLy8g5a+55rWL6K+V57uT5p6c6L+b6KGM5o6S5bqP77ya5aSx6LSl5Zyo5YmN77yM6YCa6L+H5Zyo5ZCO77yM55u45ZCM57uT5p6c5oyJbmFtZeaOkuW6j++8iOaVsOWtl+mDqOWIhuaMieaVsOWAvOWkp+Wwj+aOkuW6j++8iVxyXG4gICAgY29uc3Qgc29ydGVkUmVzdWx0cyA9IFsuLi50ZXN0UmVzdWx0c10uc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFQYXNzID0gYS5yZXN1bHRkYXRhPy5yZXN1bHQgPT09ICdwYXNzJztcclxuICAgICAgICBjb25zdCBiUGFzcyA9IGIucmVzdWx0ZGF0YT8ucmVzdWx0ID09PSAncGFzcyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5aaC5p6c6YCa6L+H54q25oCB55u45ZCM77yM5YiZ5oyJbmFtZeaOkuW6j1xyXG4gICAgICAgIGlmIChhUGFzcyA9PT0gYlBhc3MpIHtcclxuICAgICAgICAgICAgLy8g5bCG5ZCN56ew5YiG5Ymy5oiQ5paH5pys5ZKM5pWw5a2X6YOo5YiGXHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0TmFtZSA9IChuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5hbWUubWF0Y2goL14oLio/KShcXGQrKSQvKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IG1hdGNoWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXI6IHBhcnNlSW50KG1hdGNoWzJdLCAxMClcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogbmFtZSwgbnVtYmVyOiAwIH07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBuYW1lQSA9IHNwbGl0TmFtZShhLm5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lQiA9IHNwbGl0TmFtZShiLm5hbWUpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5YWI5q+U6L6D5paH5pys6YOo5YiGXHJcbiAgICAgICAgICAgIGlmIChuYW1lQS50ZXh0ICE9PSBuYW1lQi50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUEudGV4dC5sb2NhbGVDb21wYXJlKG5hbWVCLnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOaWh+acrOebuOWQjOWImeavlOi+g+aVsOWtl+mDqOWIhlxyXG4gICAgICAgICAgICByZXR1cm4gbmFtZUEubnVtYmVyIC0gbmFtZUIubnVtYmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYVBhc3MgPyAxIDogLTE7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlpITnkIbpgInmi6nnu5PmnpxcclxuICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChyZXN1bHQpID0+IHtcclxuICAgICAgICBzZXRTZWxlY3RlZFJlc3VsdHMocHJldiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LmluY2x1ZGVzKHJlc3VsdC5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gcmVzdWx0Lm5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCByZXN1bHQubmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5aSE55CG5Yig6Zmk6YCJ5Lit55qE57uT5p6cXHJcbiAgICBjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBuZXdSZXN1bHRzID0gdGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiAhc2VsZWN0ZWRSZXN1bHRzLmluY2x1ZGVzKHJlc3VsdC5uYW1lKSk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRQcm9qZWN0LFxyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0czogbmV3UmVzdWx0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcHJvamVjdEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gY3VycmVudFByb2plY3QuaWQpO1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnVwZGF0ZVByb2plY3QocHJvamVjdEluZGV4LCB1cGRhdGVkUHJvamVjdCk7XHJcbiAgICAgICAgc2V0U2VsZWN0ZWRSZXN1bHRzKFtdKTtcclxuICAgICAgICBzZXRJc01hbmFnZU1vZGUoZmFsc2UpO1xyXG4gICAgICAgIHNldFNob3dEZWxldGVEaWFsb2coZmFsc2UpO1xyXG5cclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIOmHjeWRveWQjemAu+i+kVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodmlldyA9PT0gJ3JlbmFtZScgJiYgc2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFJlc3VsdCA9IHRlc3RSZXN1bHRzLmZpbmQocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBzZWxlY3RlZFJlc3VsdHNbMF0pO1xyXG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlKHNlbGVjdGVkUmVzdWx0Lm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFt2aWV3LCBzZWxlY3RlZFJlc3VsdHMsIHRlc3RSZXN1bHRzXSk7XHJcblxyXG4gICAgLy8g5aSE55CG6YeN5ZG95ZCN5a6M5oiQXHJcbiAgICBjb25zdCBoYW5kbGVSZW5hbWUgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlLnRyaW0oKSkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOajgOafpeaYr+WQpuS4juWFtuS7lue7k+aenOWQjeensOWGsueqgVxyXG4gICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gdGVzdFJlc3VsdHMuc29tZShyZXN1bHQgPT4gXHJcbiAgICAgICAgICAgIHJlc3VsdC5uYW1lICE9PSBzZWxlY3RlZFJlc3VsdHNbMF0gJiYgcmVzdWx0Lm5hbWUgPT09IGlucHV0VmFsdWUudHJpbSgpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6K+l5ZCN56ew5bey5a2Y5Zyo77yM6K+35L2/55So5YW25LuW5ZCN56ewJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0cyA9IHRlc3RSZXN1bHRzLm1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0ZXN0UmVzdWx0cyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0Lm5hbWUgPT09IHNlbGVjdGVkUmVzdWx0c1swXSkge1xyXG4gICAgICAgICAgICAgICAgLy8g5aSE55CGQ0ZQ5qih5Z2X57G75Z6L55qE54m55q6K6YeN5ZG95ZCN6YC76L6RXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGUgPT09ICdjZnAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkTmFtZSA9IHJlc3VsdC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld05hbWUgPSBpbnB1dFZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDliKTmlq3ml6flkI3lrZfmmK9pbnB1dOi/mOaYr291dHB1dFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGROYW1lID09PSByZXN1bHQuaW5wdXRuYW1lKSB7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOafpeaJvuWFs+iBlOe7k+aenO+8mmlucHV0bmFtZeebuOWQjOS9hm5hbWXkuI3lkIznmoTnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZFJlc3VsdCA9IHRlc3RSZXN1bHRzLmZpbmQociA9PiByLmlucHV0bmFtZSA9PT0gcmVzdWx0LmlucHV0bmFtZSAmJiByLm5hbWUgIT09IHJlc3VsdC5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmib7liLDnmoTlhbPogZTnu5PmnpzvvJpcIiwgcmVsYXRlZFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOaYr+W9k+WJjemAieS4reeahOe7k+aenO+8jOabtOaWsG5hbWXlkoxpbnB1dG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5uYW1lID09PSBzZWxlY3RlZFJlc3VsdHNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsOmAieS4ree7k+aenOeahG5hbWXlkoxpbnB1dG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZXN1bHQgPSB7IC4uLnJlc3VsdCwgbmFtZTogbmV3TmFtZSwgaW5wdXRuYW1lOiBuZXdOYW1lIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmn6Xmib7lubbmm7TmlrDlhbPogZTnu5PmnpznmoRpbnB1dG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRSZXN1bHQgPSB0ZXN0UmVzdWx0cy5maW5kKHIgPT4gci5pbnB1dG5hbWUgPT09IHJlc3VsdC5pbnB1dG5hbWUgJiYgci5uYW1lICE9PSByZXN1bHQubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsYXRlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRSZXN1bHQuaW5wdXRuYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkTmFtZSA9PT0gcmVzdWx0Lm91dG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5p+l5om+5YWz6IGU57uT5p6c77yab3V0bmFtZeebuOWQjOS9hm5hbWXkuI3lkIznmoTnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5uYW1lID09PSBzZWxlY3RlZFJlc3VsdHNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZXN1bHQgPSB7IC4uLnJlc3VsdCwgbmFtZTogbmV3TmFtZSwgb3V0bmFtZTogbmV3TmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3V0bmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZFJlc3VsdCA9IHRlc3RSZXN1bHRzLmZpbmQociA9PiByLm91dG5hbWUgPT09IHJlc3VsdC5vdXRuYW1lICYmIHIubmFtZSAhPT0gcmVzdWx0Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0ZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkUmVzdWx0Lm91dG5hbWUgPSBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdWx0LCBuYW1lOiBpbnB1dFZhbHVlLnRyaW0oKSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRQcm9qZWN0LFxyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0czogbmV3UmVzdWx0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcHJvamVjdEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gY3VycmVudFByb2plY3QuaWQpO1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnVwZGF0ZVByb2plY3QocHJvamVjdEluZGV4LCB1cGRhdGVkUHJvamVjdCk7XHJcbiAgICAgICAgdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGVUbygncmVzdWx0JywgJ21haW4nKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDph43nva7nrqHnkIbnirbmgIHlkozpgInkuK3nu5PmnpznirbmgIFcclxuICAgICAgICBzZXRJc01hbmFnZU1vZGUoZmFsc2UpO1xyXG4gICAgICAgIHNldFNlbGVjdGVkUmVzdWx0cyhbXSk7XHJcbiAgICAgICAgXHJcbiAgICB9O1xyXG4gICBcclxuICAgIC8v56Gu6K6k5Yig6Zmk5o+Q56S65qGGIFxyXG4gICAgY29uc3QgW3Nob3dEZWxldGVEaWFsb2csIHNldFNob3dEZWxldGVEaWFsb2ddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgLy/noa7orqTnp7vliqjmj5DnpLrmoYZcclxuICAgIGNvbnN0IFtzaG93Q29uZmlybURpYWxvZywgc2V0U2hvd0NvbmZpcm1EaWFsb2ddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3RhcmdldFByb2plY3QsIHNldFRhcmdldFByb2plY3RdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc2hvd092ZXJ3cml0ZURpYWxvZywgc2V0U2hvd092ZXJ3cml0ZURpYWxvZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbZHVwbGljYXRlUmVzdWx0cywgc2V0RHVwbGljYXRlUmVzdWx0c10gPSB1c2VTdGF0ZShbXSk7XHJcblxyXG4gICAgY29uc3QgbW92ZVJlc3VsdHMgPSAocHJvamVjdCwgaW5kZXgpID0+IHtcclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbpgInmi6nkuobnu5Pmnpzlkoznm67moIfpobnnm65cclxuICAgICAgICBpZiAoc2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA9PT0gMCB8fCAhcHJvamVjdCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOajgOafpeaYr+WQpuWcqOWQjOS4gOS4qumhueebruS4reenu+WKqFxyXG4gICAgICAgIGlmIChwcm9qZWN0LmlkID09PSBjdXJyZW50UHJvamVjdC5pZCkge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+S4jeiDveenu+WKqOWIsOebuOWQjOmhueebricpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6Xnm67moIfpobnnm67kuK3mmK/lkKbmnInph43lkI3nu5PmnpxcclxuICAgICAgICBjb25zdCBkdXBsaWNhdGVzID0gc2VsZWN0ZWRSZXN1bHRzLmZpbHRlcihyZXN1bHROYW1lID0+XHJcbiAgICAgICAgICAgIHByb2plY3QudGVzdFJlc3VsdHMuc29tZSh0YXJnZXRSZXN1bHQgPT4gdGFyZ2V0UmVzdWx0Lm5hbWUgPT09IHJlc3VsdE5hbWUpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzZXREdXBsaWNhdGVSZXN1bHRzKGR1cGxpY2F0ZXMpO1xyXG4gICAgICAgICAgICBzZXRUYXJnZXRQcm9qZWN0KHByb2plY3QpO1xyXG4gICAgICAgICAgICBzZXRTaG93T3ZlcndyaXRlRGlhbG9nKHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRhcmdldFByb2plY3QocHJvamVjdCk7XHJcbiAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW92ZSA9IChvdmVyd3JpdGUgPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGFyZ2V0UHJvamVjdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyDojrflj5bopoHnp7vliqjnmoTnu5Pmnpzlr7nosaFcclxuICAgICAgICBjb25zdCByZXN1bHRzVG9Nb3ZlID0gdGVzdFJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiBzZWxlY3RlZFJlc3VsdHMuaW5jbHVkZXMocmVzdWx0Lm5hbWUpKTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw55uu5qCH6aG555uuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFRhcmdldFJlc3VsdHMgPSBvdmVyd3JpdGVcclxuICAgICAgICAgICAgPyBbLi4udGFyZ2V0UHJvamVjdC50ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+ICFzZWxlY3RlZFJlc3VsdHMuaW5jbHVkZXMocmVzdWx0Lm5hbWUpKSwgLi4ucmVzdWx0c1RvTW92ZV1cclxuICAgICAgICAgICAgOiBbLi4udGFyZ2V0UHJvamVjdC50ZXN0UmVzdWx0cywgLi4ucmVzdWx0c1RvTW92ZV07XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRUYXJnZXRQcm9qZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRQcm9qZWN0LFxyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0czogdXBkYXRlZFRhcmdldFJlc3VsdHNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyDmm7TmlrDlvZPliY3pobnnm65cclxuICAgICAgICBjb25zdCB1cGRhdGVkQ3VycmVudFJlc3VsdHMgPSB0ZXN0UmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+ICFzZWxlY3RlZFJlc3VsdHMuaW5jbHVkZXMocmVzdWx0Lm5hbWUpKTtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQ3VycmVudFByb2plY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRQcm9qZWN0LFxyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0czogdXBkYXRlZEN1cnJlbnRSZXN1bHRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8g5L+d5a2Y5pu05pS5XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5wcm9qZWN0cy5maW5kSW5kZXgocCA9PiBwLmlkID09PSB0YXJnZXRQcm9qZWN0LmlkKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5wcm9qZWN0cy5maW5kSW5kZXgocCA9PiBwLmlkID09PSBjdXJyZW50UHJvamVjdC5pZCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkudXBkYXRlUHJvamVjdCh0YXJnZXRJbmRleCwgdXBkYXRlZFRhcmdldFByb2plY3QpO1xyXG4gICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB1cGRhdGVkQ3VycmVudFByb2plY3QpO1xyXG5cclxuICAgICAgICAvLyDph43nva7nirbmgIFcclxuICAgICAgICBzZXRTZWxlY3RlZFJlc3VsdHMoW10pO1xyXG4gICAgICAgIHNldElzTWFuYWdlTW9kZShmYWxzZSk7XHJcbiAgICAgICAgc2V0U2hvd0NvbmZpcm1EaWFsb2coZmFsc2UpO1xyXG4gICAgICAgIHNldFNob3dPdmVyd3JpdGVEaWFsb2coZmFsc2UpO1xyXG4gICAgICAgIHNldFRhcmdldFByb2plY3QobnVsbCk7XHJcbiAgICAgICAgc2V0RHVwbGljYXRlUmVzdWx0cyhbXSk7XHJcblxyXG4gICAgICAgIC8vIOaYvuekuuaIkOWKn+a2iOaBr+W5tui/lOWbnuS4u+inhuWbvlxyXG4gICAgICAgIHNldFRvYXN0TWVzc2FnZSgn56e75Yqo5oiQ5YqfJyk7XHJcbiAgICAgICAgdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGVUbygncmVzdWx0JywgJ21haW4nKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5qCH6aKY5qCPXHJcbiAgICBjb25zdCByZW5kZXJUaXRsZUJhciA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB7IHZpZXcgfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24uY3VycmVudDtcclxuICAgICAgICBcclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAncmVuYW1lJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIumHjeWRveWQjee7k+aenFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG89e3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/Lm5hbWUgfHwgJ2hvbWUnfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldz17dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5wcmV2aW91cz8udmlldyB8fCAnbWFpbid9IFxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdtb3ZlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIuenu+iHs1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG89e3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/Lm5hbWUgfHwgJ2hvbWUnfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldz17dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5wcmV2aW91cz8udmlldyB8fCAnbWFpbid9IFxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdtYWluJzpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIue7k+aenFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG89eydob21lJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXc9eydtYWluJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyDmuLLmn5PkuLvopoHlhoXlrrlcclxuICAgIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlbmFtZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBwLTQgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbWItNCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93S2V5Ym9hcmQodHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpea1i+ivlee7k+aenOWQjeensFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvd0tleWJvYXJkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQb3NpdGlvbj17Y3Vyc29yUG9zaXRpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKG5ld1Bvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0tleWJvYXJkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ21vdmUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bI0Q1REZFQl0gZmxleCBmbGV4LWNvbCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8U3ViVGl0bGVCYXIgdGl0bGU9XCLpgInmi6nmgqjopoHnmoTpobnnm65cIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMubWFwKChwcm9qZWN0LCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cHJvamVjdC5pZH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctWyNGOEY2Rjddcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVSZXN1bHRzKHByb2plY3QsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e3Byb2plY3QubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbWFpbic6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZDVkZmViXSB2aWEtWyNmOGY2ZjddIHRvLVsjZDVkZmViXSBweC00IGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFja1wiPntwcm9qZWN0TmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTUwMFwiPntwYXNzQ291bnR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9wYXNzLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumAmui/h1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTUwMFwiPntmYWlsQ291bnR9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9mYWlsLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuWksei0pVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2lzTWFuYWdlTW9kZSAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs0MHB4XSBweC00IGJnLVsjRjhGNkY3XSBmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXItYiBib3JkZXItZ3JheS02MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZFJlc3VsdHMubGVuZ3RoID09PSBzb3J0ZWRSZXN1bHRzLmxlbmd0aH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA9PT0gc29ydGVkUmVzdWx0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkUmVzdWx0cyhbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZFJlc3VsdHMoc29ydGVkUmVzdWx0cy5tYXAocmVzdWx0ID0+IHJlc3VsdC5uYW1lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNCBoLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtYmxhY2tcIj7pgInmi6nlhajpg6g8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIG92ZXJmbG93LXktYXV0b1wiIHN0eWxlPXt7IHNjcm9sbGJhcldpZHRoOiAnbm9uZScsIG1zT3ZlcmZsb3dTdHlsZTogJ25vbmUnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c29ydGVkUmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs2MHB4XSBweC00IGJnLVsjRjhGNkY3XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLWIgYm9yZGVyLWdyYXktNjAwIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+ICFpc01hbmFnZU1vZGUgJiYgdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGVUbygncmVzdWx0aW5mbycsICdzYXZlJywgcmVzdWx0KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc01hbmFnZU1vZGUgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZFJlc3VsdHMuaW5jbHVkZXMocmVzdWx0Lm5hbWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IGhhbmRsZVNlbGVjdChyZXN1bHQpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy00IGgtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrXCI+e3Jlc3VsdC5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuQ29wcGVyUmVzdWx0U3RhdHVzID09PSAncGFzcycgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5vZnBSZXN1bHRTdGF0dXMgPT09ICdwYXNzJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lm5hbWUgPT09IHJlc3VsdC5pbnB1dG5hbWUgJiYgcmVzdWx0LkluUG9ydFN0YXR1cyA9PT0gJ3Bhc3MnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lm5hbWUgPT09IHJlc3VsdC5vdXRuYW1lICYmIHJlc3VsdC5PdXRQb3J0U3RhdHVzID09PSAncGFzcycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0QXNzZXRVcmwoJy9wYXNzLnBuZycpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldEFzc2V0VXJsKCcvZmFpbC5wbmcnKSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5Db3BwZXJSZXN1bHRTdGF0dXMgPT09ICdwYXNzJyB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm9mcFJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQubmFtZSA9PT0gcmVzdWx0LmlucHV0bmFtZSAmJiByZXN1bHQuSW5Qb3J0U3RhdHVzID09PSAncGFzcycpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQubmFtZSA9PT0gcmVzdWx0Lm91dG5hbWUgJiYgcmVzdWx0Lk91dFBvcnRTdGF0dXMgPT09ICdwYXNzJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAn6YCa6L+HJyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAn5aSx6LSlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTcgaC03XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOa4suafk+W6lemDqOaMiemSrlxyXG4gICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN3aXRjaCAodmlldykge1xyXG4gICAgICAgICAgICBjYXNlICdyZW5hbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHshc2hvd0tleWJvYXJkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUmVuYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSAgcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWujOaIkFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdtb3ZlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybihcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjYXNlICdtYWluJzpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSZXN1bHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRlVG8oJ3Jlc3VsdCcsICdtb3ZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZFJlc3VsdHMubGVuZ3RoID09PSAwfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG9wYWNpdHk6IHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPiAwID8gMSA6IDAuNSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOenu+WKqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmVzdWx0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZXN1bHQgPSB0ZXN0UmVzdWx0cy5maW5kKHJlc3VsdCA9PiByZXN1bHQubmFtZSA9PT0gc2VsZWN0ZWRSZXN1bHRzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGVUbygncmVzdWx0JywgJ3JlbmFtZScsIHNlbGVjdGVkUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkUmVzdWx0cy5sZW5ndGggIT09IDF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBvcGFjaXR5OiBzZWxlY3RlZFJlc3VsdHMubGVuZ3RoID09PSAxID8gMSA6IDAuNSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDph43lkb3lkI1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGlzTWFuYWdlTW9kZSA/IHNldFNob3dEZWxldGVEaWFsb2codHJ1ZSkgOiBzZXRJc01hbmFnZU1vZGUodHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc01hbmFnZU1vZGUgPyAn5Yig6ZmkJyA6ICfnrqHnkIYnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICB7cmVuZGVyVGl0bGVCYXIoKX1cclxuICAgICAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cclxuICAgICAgICAgICAge3JlbmRlckZvb3RlcigpfVxyXG4gICAgICAgICAgICB7Lyog56Gu6K6k5Yig6Zmk5a+56K+d5qGGICovfVxyXG4gICAgICAgICAgICB7c2hvd0RlbGV0ZURpYWxvZyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctWzQ4MHB4XSBoLVs2NDBweF0gYmctWyMwMDI4NDJkNF0gYWJzb2x1dGUgei05OTk5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncGwtMTAgcHQtNjAnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLVsjMkIzQzVCXSByb3VuZGVkLWxnIHAtNiB3LVs0MDBweF0gbWluLWgtWzIwMHB4XSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQteGwgZm9udC1ib2xkIG1iLTRcIj7mj5DnpLo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1sZ1wiPuaYr+WQpuWIoOmZpOmAieS4reeahOa1i+ivlee7k+aenO+8nzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1zIGZvbnQtYm9sZCBweC00IHB5LTIgYmctWyMxZDMxNTVdIHJvdW5kZWQtbWQgaG92ZXI6YmctWyMyYjQ0NjZdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dEZWxldGVEaWFsb2coZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlj5bmtohcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1zIGZvbnQtYm9sZCBweC00IHB5LTIgYmctWyMxZDMxNTVdIHJvdW5kZWQtbWQgaG92ZXI6YmctWyMyYjQ0NjZdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDnoa7orqRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIHsvKiDnoa7orqTnp7vliqjlr7nor53moYYgKi99XHJcbiAgICAgICAgICAgIHtzaG93Q29uZmlybURpYWxvZyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctWzQ4MHB4XSBoLVs2NDBweF0gYmctWyMwMDI4NDJkNF0gYWJzb2x1dGUgei05OTk5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncGwtMTAgcHQtNjAnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLVsjMkIzQzVCXSByb3VuZGVkLWxnIHAtNiB3LVs0MDBweF0gbWluLWgtWzIwMHB4XSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQteGwgZm9udC1ib2xkIG1iLTRcIj7mj5DnpLo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1sZ1wiPuaYr+WQpuWwhumAieS4reeahOa1i+ivlee7k+aenOenu+WKqOWIsOmhueebriB7dGFyZ2V0UHJvamVjdD8ubmFtZX3vvJ88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCIgdGV4dC13aGl0ZSB0ZXh0LXMgZm9udC1ib2xkIHB4LTQgcHktMiBiZy1bIzFkMzE1NV0gcm91bmRlZC1tZCBob3ZlcjpiZy1bIzJiNDQ2Nl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0NvbmZpcm1EaWFsb2coZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlj5bmtohcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIiB0ZXh0LXdoaXRlIHRleHQtcyBmb250LWJvbGQgcHgtNCBweS0yIGJnLVsjMWQzMTU1XSByb3VuZGVkLW1kIGhvdmVyOmJnLVsjMmI0NDY2XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb3ZlKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg56Gu6K6kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgey8qIOmHjeWQjeimhuebluehruiupOWvueivneahhiAqL31cclxuICAgICAgICAgICAge3Nob3dPdmVyd3JpdGVEaWFsb2cgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LVs0ODBweF0gaC1bNjQwcHhdIGJnLVsjMDAyODQyZDRdIGFic29sdXRlIHotOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3BsLTEwIHB0LTYwJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1bIzJCM0M1Ql0gcm91bmRlZC1sZyBwLTYgdy1bNDAwcHhdIG1pbi1oLVsyMDBweF0gZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXhsIGZvbnQtYm9sZCBtYi00XCI+5o+Q56S6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtbGcgbWItNFwiPuS7peS4i+a1i+ivlee7k+aenOWcqOebruagh+mhueebruS4reW3suWtmOWcqO+8mjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibWItNCBsaXN0LWRpc2MgcGwtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2R1cGxpY2F0ZVJlc3VsdHMubWFwKChuYW1lLCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJ0ZXh0LXJlZC01MDBcIj57bmFtZX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LWxnXCI+5piv5ZCm6KaG55uW6L+Z5Lqb57uT5p6c77yfPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LXMgZm9udC1ib2xkIHB4LTQgcHktMiBiZy1bIzFkMzE1NV0gcm91bmRlZC1tZCBob3ZlcjpiZy1bIzJiNDQ2Nl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd092ZXJ3cml0ZURpYWxvZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRhcmdldFByb2plY3QobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldER1cGxpY2F0ZVJlc3VsdHMoW10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQtcyBmb250LWJvbGQgcHgtNCBweS0yIGJnLVsjMWQzMTU1XSByb3VuZGVkLW1kIGhvdmVyOmJnLVsjMmI0NDY2XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW92ZSh0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDopobnm5ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn1cclxuICAgIl0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJJbWFnZSIsIlN0YXR1c0JhciIsIlRpdGxlQmFyIiwiU3ViVGl0bGVCYXIiLCJ1c2VEaXNwbGF5U3RvcmUiLCJLZXlib2FyZCIsImdldEFzc2V0VXJsIiwiUmVzdWx0IiwidmlldyIsImdldFN0YXRlIiwibmF2aWdhdGlvbiIsImN1cnJlbnQiLCJnZXRDdXJyZW50UHJvamVjdCIsInNldFRvYXN0TWVzc2FnZSIsImN1cnJlbnRQcm9qZWN0IiwiaXNNYW5hZ2VNb2RlIiwic2V0SXNNYW5hZ2VNb2RlIiwic2VsZWN0ZWRSZXN1bHRzIiwic2V0U2VsZWN0ZWRSZXN1bHRzIiwiaW5wdXRWYWx1ZSIsInNldElucHV0VmFsdWUiLCJzaG93S2V5Ym9hcmQiLCJzZXRTaG93S2V5Ym9hcmQiLCJjdXJzb3JQb3NpdGlvbiIsInNldEN1cnNvclBvc2l0aW9uIiwicHJvamVjdE5hbWUiLCJuYW1lIiwidGVzdFJlc3VsdHMiLCJwYXNzQ291bnQiLCJmaWx0ZXIiLCJyZXN1bHQiLCJjb3BwZXJTdGF0dXMiLCJDb3BwZXJSZXN1bHRTdGF0dXMiLCJjZnBTdGF0dXMiLCJDRlBSZXN1bHRTdGF0dXMiLCJvZnBTdGF0dXMiLCJvZnBSZXN1bHRTdGF0dXMiLCJsZW5ndGgiLCJmYWlsQ291bnQiLCJzb3J0ZWRSZXN1bHRzIiwic29ydCIsImEiLCJiIiwiYVBhc3MiLCJyZXN1bHRkYXRhIiwiYlBhc3MiLCJzcGxpdE5hbWUiLCJtYXRjaCIsInRleHQiLCJudW1iZXIiLCJwYXJzZUludCIsIm5hbWVBIiwibmFtZUIiLCJsb2NhbGVDb21wYXJlIiwiaGFuZGxlU2VsZWN0IiwicHJldiIsImluY2x1ZGVzIiwiaGFuZGxlRGVsZXRlIiwibmV3UmVzdWx0cyIsInVwZGF0ZWRQcm9qZWN0IiwicHJvamVjdEluZGV4IiwicHJvamVjdHMiLCJmaW5kSW5kZXgiLCJwIiwiaWQiLCJ1cGRhdGVQcm9qZWN0Iiwic2V0U2hvd0RlbGV0ZURpYWxvZyIsInNlbGVjdGVkUmVzdWx0IiwiZmluZCIsImhhbmRsZVJlbmFtZSIsInRyaW0iLCJpc0R1cGxpY2F0ZSIsInNvbWUiLCJtYXAiLCJjb25zb2xlIiwibG9nIiwidGVzdGNvbmZpZyIsIm1vZHVsZVR5cGUiLCJvbGROYW1lIiwibmV3TmFtZSIsImlucHV0bmFtZSIsInJlbGF0ZWRSZXN1bHQiLCJyIiwidXBkYXRlZFJlc3VsdCIsIm91dG5hbWUiLCJuYXZpZ2F0ZVRvIiwic2hvd0RlbGV0ZURpYWxvZyIsInNob3dDb25maXJtRGlhbG9nIiwic2V0U2hvd0NvbmZpcm1EaWFsb2ciLCJ0YXJnZXRQcm9qZWN0Iiwic2V0VGFyZ2V0UHJvamVjdCIsInNob3dPdmVyd3JpdGVEaWFsb2ciLCJzZXRTaG93T3ZlcndyaXRlRGlhbG9nIiwiZHVwbGljYXRlUmVzdWx0cyIsInNldER1cGxpY2F0ZVJlc3VsdHMiLCJtb3ZlUmVzdWx0cyIsInByb2plY3QiLCJpbmRleCIsImR1cGxpY2F0ZXMiLCJyZXN1bHROYW1lIiwidGFyZ2V0UmVzdWx0IiwiaGFuZGxlTW92ZSIsIm92ZXJ3cml0ZSIsInJlc3VsdHNUb01vdmUiLCJ1cGRhdGVkVGFyZ2V0UmVzdWx0cyIsInVwZGF0ZWRUYXJnZXRQcm9qZWN0IiwidXBkYXRlZEN1cnJlbnRSZXN1bHRzIiwidXBkYXRlZEN1cnJlbnRQcm9qZWN0IiwidGFyZ2V0SW5kZXgiLCJjdXJyZW50SW5kZXgiLCJyZW5kZXJUaXRsZUJhciIsInRpdGxlIiwiYmFja1RvIiwicHJldmlvdXMiLCJyZW5kZXJDb250ZW50IiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayIsImlucHV0IiwidHlwZSIsInZhbHVlIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJzZWxlY3Rpb25TdGFydCIsIm9uRm9jdXMiLCJzZXRTZWxlY3Rpb25SYW5nZSIsIm5ld1ZhbHVlIiwibmV3UG9zaXRpb24iLCJvbkNvbXBsZXRlIiwic3JjIiwiYWx0IiwiZmlsbCIsInNwYW4iLCJzaXplcyIsImNoZWNrZWQiLCJzdHlsZSIsInNjcm9sbGJhcldpZHRoIiwibXNPdmVyZmxvd1N0eWxlIiwiaW1nIiwiSW5Qb3J0U3RhdHVzIiwiT3V0UG9ydFN0YXR1cyIsInJlbmRlckZvb3RlciIsImJ1dHRvbiIsImRpc2FibGVkIiwib3BhY2l0eSIsImgzIiwidWwiLCJsaSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/Result.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/ResultInfo.js":
/*!******************************************************!*\
!*** ./src/components/dsxpage/general/ResultInfo.js ***!
\******************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ResultInfo)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//ResultTitleBar */ \"(pages-dir-node)/./src/components/lib/ResultTitleBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib//CopperResultMain */ \"(pages-dir-node)/./src/components/lib/CopperResultMain.js\");\n/* harmony import */ var _components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/lib//OLTSResultMain */ \"(pages-dir-node)/./src/components/lib/OLTSResultMain.js\");\n/* harmony import */ var _components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/lib//OTDRResultMain */ \"(pages-dir-node)/./src/components/lib/OTDRResultMain.js\");\n/* harmony import */ var _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/lib//Keyboard */ \"(pages-dir-node)/./src/components/lib/Keyboard.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\n/* harmony import */ var _components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/AudioProvider */ \"(pages-dir-node)/./src/components/AudioProvider.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__, _components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__, _components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__, _store_displayStore__WEBPACK_IMPORTED_MODULE_9__, _utils_asset__WEBPACK_IMPORTED_MODULE_10__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__, _components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__, _components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__, _components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__, _store_displayStore__WEBPACK_IMPORTED_MODULE_9__, _utils_asset__WEBPACK_IMPORTED_MODULE_10__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\n\n\n\n// 自定义确认弹窗组件\nconst ConfirmDialog = ({ message, onConfirm, onCancel })=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[480px] h-[640px] bg-[#002842d4] absolute z-[9999] top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"pl-10 pt-60\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-[#2B3C5B] rounded-lg p-6 w-[400px] min-h-[200px] flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-white text-xl font-bold mb-4\",\n children: \"提示\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 18,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-lg\",\n children: message\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 20,\n columnNumber: 21\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 19,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center gap-4 mt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onConfirm,\n className: \"bg-[#354e7a] text-white px-6 py-2 rounded hover:bg-[#1E293B] transition-colors\",\n children: \"确定\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 23,\n columnNumber: 21\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onCancel,\n className: \"bg-[#4a4a4a] text-white px-6 py-2 rounded hover:bg-[#3a3a3a] transition-colors\",\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 29,\n columnNumber: 21\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 22,\n columnNumber: 17\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 17,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 16,\n columnNumber: 9\n }, undefined)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 15,\n columnNumber: 5\n }, undefined);\nfunction ResultInfo() {\n const [showKeyboard, setShowKeyboard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [cursorPosition, setCursorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0);\n const [inputValue, setInputValue] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [inputValue2, setInputValue2] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [activeInput, setActiveInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1); // 1 表示第一个输入框,2 表示第二个输入框\n const [showConfirmDialog, setShowConfirmDialog] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [confirmDialogMessage, setConfirmDialogMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n const [confirmDialogCallback, setConfirmDialogCallback] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const { navigation } = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState();\n const tempTestResult = navigation.current.params;\n const { play } = (0,_components_AudioProvider__WEBPACK_IMPORTED_MODULE_11__.useAudio)();\n // 根据测试结果播放音效\n const { hasPlayedSound } = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState();\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ResultInfo.useEffect\": ()=>{\n // 只有从测试页面进入nosave视图时才播放声音\n if (navigation.previous.name === 'testing' && tempTestResult && !hasPlayedSound) {\n if (tempTestResult.CopperResultStatus === 'pass' || tempTestResult.CFPResultStatus === 'pass' || tempTestResult.ofpResultStatus === 'pass') {\n play('pass');\n } else {\n play('fail');\n }\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n hasPlayedSound: true\n });\n }\n }\n }[\"ResultInfo.useEffect\"], [\n navigation,\n tempTestResult,\n hasPlayedSound\n ]);\n // 从URL参数中获取临时测试结果\n const { getCurrentProject, getCurrentCableId, getCurrentCableId2, updateCurrentView, getCurrentTestConfig, navigateTo, setToastMessage, updateProject } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n const currentProject = getCurrentProject();\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation.current;\n // 获取当前的线缆ID\n const currentCableId = getCurrentCableId().name || '';\n const currentCableId2 = getCurrentCableId2().name || '';\n // 计算下一个序号的ID\n const getNextId = (currentId)=>{\n if (!currentId) return '';\n // 检查是否以数字结尾\n const numMatch = currentId.match(/^(.*?)(\\d+)$/);\n if (numMatch) {\n const [, prefix, num] = numMatch;\n const nextNum = String(Number(num) + 1).padStart(num.length, '0');\n return prefix + nextNum;\n }\n // 检查是否以字母结尾\n const letterMatch = currentId.match(/^(.*?)([a-zA-Z]+)$/);\n if (letterMatch) {\n const [, prefix, letters] = letterMatch;\n // 将字母转换为数组以便处理\n const letterArray = letters.split('');\n let carry = true;\n // 从右向左处理每个字母\n for(let i = letterArray.length - 1; i >= 0 && carry; i--){\n if (letterArray[i] === 'z') {\n letterArray[i] = 'a';\n carry = true;\n } else if (letterArray[i] === 'Z') {\n letterArray[i] = 'A';\n carry = true;\n } else {\n letterArray[i] = String.fromCharCode(letterArray[i].charCodeAt(0) + 1);\n carry = false;\n }\n }\n // 如果还有进位,说明需要在前面添加一个字母\n if (carry) {\n if (letters[0] >= 'a' && letters[0] <= 'z') {\n letterArray.unshift('a');\n } else {\n letterArray.unshift('A');\n }\n }\n return prefix + letterArray.join('');\n }\n // 如果既不是数字也不是字母结尾,直接返回原值\n return currentId;\n };\n // 初始化输入值为当前的线缆ID\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ResultInfo.useEffect\": ()=>{\n setInputValue(currentCableId);\n setInputValue2(currentCableId2);\n }\n }[\"ResultInfo.useEffect\"], [\n currentCableId,\n currentCableId2\n ]);\n // 当第一个输入框值变化时,仅在用户手动输入时自动更新第二个输入框\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ResultInfo.useEffect\": ()=>{\n if (tempTestResult?.testconfig?.moduleType === 'cfp' && inputValue && inputValue !== currentCableId) {\n setInputValue2(getNextId(inputValue));\n }\n }\n }[\"ResultInfo.useEffect\"], [\n inputValue,\n view,\n currentCableId\n ]);\n //创建保存结果存储逻辑\n const handleComplete = ()=>{\n const currentId = inputValue.trim();\n // 检查是否存在重名的测试结果\n const currentProject = getCurrentProject();\n const existingResults = currentProject?.testResults || [];\n // 检查两个ID是否重复\n const isDuplicate = existingResults.some((result)=>result.name === currentId);\n // 重名替换\n if (isDuplicate) {\n setConfirmDialogMessage('该线缆ID已使用,是否覆盖?');\n setConfirmDialogCallback(()=>()=>{\n // 更新临时测试结果的名称\n const updatedTestResult = {\n ...tempTestResult,\n name: currentId\n };\n // 更新当前项目的测试结果\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n // 移除旧的测试结果并添加新的\n const newResults = existingResults.filter((result)=>result.name !== currentId);\n updateProject(currentIndex, {\n testResults: [\n ...newResults,\n updatedTestResult\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult\n }\n }\n });\n }\n updateCurrentView('save');\n setShowConfirmDialog(false);\n });\n setShowConfirmDialog(true);\n return;\n }\n // 更新临时测试结果的名称并保存到项目中\n if (tempTestResult) {\n const updatedTestResult = {\n ...tempTestResult,\n name: currentId\n };\n // 更新当前项目的cableIds.name为下一个ID\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n //更新测试结果\n updateProject(currentIndex, {\n testResults: [\n ...currentProject.testResults || [],\n updatedTestResult\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n const navigation = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation;\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult\n }\n }\n });\n // 获取下一个ID\n const nextId = (()=>{\n const currentId = inputValue.trim();\n if (!currentId) return currentId;\n // 获取最后一个字符\n const lastChar = currentId.slice(-1);\n const prefix = currentId.slice(0, -1);\n // 如果最后一个字符是数字\n if (/\\d/.test(lastChar)) {\n const match = currentId.match(/^(.*?)(\\d+)$/);\n if (match) {\n const numPrefix = match[1];\n const number = parseInt(match[2]) + 1;\n return `${numPrefix}${number.toString().padStart(match[2].length, '0')}`;\n }\n }\n // 如果最后一个字符是字母\n if (/[A-Za-z]/.test(lastChar)) {\n const nextChar = String.fromCharCode(lastChar.charCodeAt(0) + 1);\n // 如果超过Z或z,回到A或a\n if (lastChar === 'Z' && nextChar > 'Z' || lastChar === 'z' && nextChar > 'z') {\n const baseChar = lastChar === 'Z' ? 'A' : 'a';\n return `${prefix}${baseChar}`;\n }\n return `${prefix}${nextChar}`;\n }\n return currentId;\n })();\n // 获取当前项目的所有cableIds\n const currentCableIds = currentProject?.cableIds || [];\n const selectedId = getCurrentCableId().id;\n // 只更新选中的ID,保留其他ID不变\n const updatedCableIds = currentCableIds.map((cable)=>cable.id === selectedId ? {\n ...cable,\n name: nextId\n } : cable);\n // 更新项目\n updateProject(currentIndex, {\n cableIds: updatedCableIds\n });\n }\n updateCurrentView('save');\n }\n };\n const handleComplete2 = ()=>{\n const currentId = inputValue.trim();\n const currentId2 = inputValue2.trim();\n // 检查两个ID是否相同\n if (currentId === currentId2) {\n setConfirmDialogMessage('输入输出ID不能相同,请检查');\n setConfirmDialogCallback(()=>()=>{\n setShowConfirmDialog(false);\n });\n setShowConfirmDialog(true);\n return;\n }\n // 检查是否存在重名的测试结果\n const currentProject = getCurrentProject();\n const existingResults = currentProject?.testResults || [];\n // 检查两个ID是否重复\n const isDuplicate1 = existingResults.some((result)=>result.name === currentId);\n const isDuplicate2 = existingResults.some((result)=>result.name === currentId2);\n const currentConfig = getCurrentTestConfig();\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n if (isDuplicate1 || isDuplicate2) {\n const message = [];\n if (isDuplicate1) message.push(`线缆ID ${currentId}`);\n if (isDuplicate2) message.push(`线缆ID ${currentId2}`);\n setConfirmDialogMessage(`${message.join(' 和 ')}已使用,是否覆盖?`);\n setConfirmDialogCallback(()=>()=>{\n // 更新临时测试结果的名称\n const updatedTestResult1 = {\n ...tempTestResult,\n name: currentId,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n const updatedTestResult2 = {\n ...tempTestResult,\n name: currentId2,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n // 更新当前项目的测试结果\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n // 移除旧的测试结果并添加新的\n const newResults = existingResults.filter((result)=>result.name !== currentId && result.name !== currentId2);\n updateProject(currentIndex, {\n testResults: [\n ...newResults,\n updatedTestResult1,\n updatedTestResult2\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult1\n }\n }\n });\n }\n updateCurrentView('save');\n setShowConfirmDialog(false);\n });\n setShowConfirmDialog(true);\n return;\n }\n // 更新临时测试结果的名称并保存到项目中\n if (tempTestResult) {\n // 创建两个测试结果\n const updatedTestResult1 = {\n ...tempTestResult,\n name: currentId,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n const updatedTestResult2 = {\n ...tempTestResult,\n name: currentId2,\n inputname: isMultiMode ? currentId2 : currentId,\n outname: isMultiMode ? currentId : currentId2\n };\n // 更新当前项目的cableIds.name为下一个ID\n const currentIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().projects.findIndex((p)=>p === currentProject);\n if (currentIndex !== -1) {\n //更新测试结果\n updateProject(currentIndex, {\n testResults: [\n ...currentProject.testResults || [],\n updatedTestResult1,\n updatedTestResult2\n ]\n });\n // 更新navigation.current.params中的测试结果名称\n const navigation = _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation;\n _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setState({\n navigation: {\n ...navigation,\n current: {\n ...navigation.current,\n params: updatedTestResult1\n }\n }\n });\n // 获取下一个ID\n const nextId = getNextId(getNextId(inputValue.trim()));\n // 获取下一个ID2\n const nextId2 = getNextId(getNextId(inputValue2.trim()));\n // 获取当前项目的所有cableIds\n const currentCableIds = currentProject?.cableIds || [];\n const selectedId = getCurrentCableId().id;\n const selectedId2 = getCurrentCableId2().id;\n // 只更新选中的ID,保留其他ID不变\n const updatedCableIds = currentCableIds.map((cable)=>cable.id === selectedId ? {\n ...cable,\n name: nextId\n } : cable.id === selectedId2 ? {\n ...cable,\n name: nextId2\n } : cable);\n // 更新项目,添加两个测试结果\n updateProject(currentIndex, {\n cableIds: updatedCableIds\n });\n }\n updateCurrentView('save');\n }\n };\n // 创建测试结果的视图\n const renderContent = ()=>{\n const renderResultMain = ()=>{\n const moduleType = tempTestResult?.testconfig?.moduleType;\n switch(moduleType){\n case '8000':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 429,\n columnNumber: 28\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_OLTSResultMain__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 431,\n columnNumber: 28\n }, this);\n case 'ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_OTDRResultMain__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 433,\n columnNumber: 28\n }, this);\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_CopperResultMain__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n testResult: tempTestResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 435,\n columnNumber: 28\n }, this);\n }\n };\n const renderSetName = ()=>{\n const moduleType = tempTestResult?.testconfig?.moduleType;\n switch(moduleType){\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输出光纤ID1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 446,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue,\n placeholder: \"请输入线缆ID1\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(1);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 448,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 447,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 445,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-1 text-white text-sm\",\n children: \"输入光纤ID2\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 470,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative cursor-pointer\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm px-4 text-black overflow-x-auto whitespace-nowrap\",\n value: inputValue2,\n placeholder: \"请输入线缆ID2\",\n onChange: (e)=>{\n setInputValue2(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setActiveInput(2);\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 472,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 471,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 469,\n columnNumber: 25\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n value: activeInput === 1 ? inputValue : inputValue2,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n if (activeInput === 1) {\n setInputValue(newValue);\n } else {\n setInputValue2(newValue);\n }\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 494,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 444,\n columnNumber: 21\n }, this);\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4 flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative mb-4 cursor-pointer\",\n onClick: ()=>setShowKeyboard(true),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n className: \"w-full h-[50px] bg-[#ffffe1] rounded-sm p-4 text-black\",\n value: inputValue,\n placeholder: \"请输入线缆ID\",\n onChange: (e)=>{\n setInputValue(e.target.value);\n setCursorPosition(e.target.selectionStart);\n },\n onClick: (e)=>{\n setShowKeyboard(true);\n setCursorPosition(e.target.selectionStart);\n },\n onFocus: (e)=>{\n // 保存光标位置\n const cursorPosition = e.target.selectionStart;\n e.target.setSelectionRange(cursorPosition, cursorPosition);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 519,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 515,\n columnNumber: 21\n }, this),\n showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_Keyboard__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n value: inputValue,\n cursorPosition: cursorPosition,\n onChange: (newValue, newPosition)=>{\n setInputValue(newValue);\n setCursorPosition(newPosition);\n },\n onComplete: ()=>{\n setShowKeyboard(false);\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 540,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 514,\n columnNumber: 21\n }, this);\n }\n };\n switch(view){\n case 'nosave':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 561,\n columnNumber: 25\n }, this),\n tempTestResult?.testconfig?.moduleType !== 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \"未保存结果\",\n testResult: tempTestResult,\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 563,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \" \",\n testResult: tempTestResult,\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 564,\n columnNumber: 30\n }, this),\n renderResultMain(),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('setname'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 568,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 567,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 560,\n columnNumber: 21\n }, this);\n case 'setname':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 581,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"保存结果\",\n backTo: _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation.previous?.name || 'home',\n view: _store_displayStore__WEBPACK_IMPORTED_MODULE_9__[\"default\"].getState().navigation.previous?.view || 'main'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 583,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-2 flex flex-col\",\n children: renderSetName()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 589,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: tempTestResult?.testconfig?.moduleType === \"cfp\" ? !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleComplete2(),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 595,\n columnNumber: 37\n }, this) : !showKeyboard && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>handleComplete(),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 603,\n columnNumber: 51\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 592,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 580,\n columnNumber: 21\n }, this);\n case 'save':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 620,\n columnNumber: 25\n }, this),\n tempTestResult?.testconfig?.moduleType !== 'cfp' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n testResult: tempTestResult,\n backTo: \"result\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 622,\n columnNumber: 29\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_ResultTitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \" \",\n testResult: tempTestResult,\n backTo: \"result\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 623,\n columnNumber: 30\n }, this),\n renderResultMain(),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n navigateTo('home', 'main');\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"主页\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 627,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 626,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 619,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const content = renderContent();\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative w-full h-full\",\n children: [\n content,\n showConfirmDialog && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(ConfirmDialog, {\n message: confirmDialogMessage,\n onConfirm: confirmDialogCallback,\n onCancel: ()=>setShowConfirmDialog(false)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 649,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/ResultInfo.js\",\n lineNumber: 646,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9SZXN1bHRJbmZvLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDQztBQUNVO0FBQ1o7QUFDaUI7QUFDTDtBQUNBO0FBQ1o7QUFDQztBQUNQO0FBQ1U7QUFFdEQsWUFBWTtBQUNaLE1BQU1hLGdCQUFnQixDQUFDLEVBQUVDLE9BQU8sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQUUsaUJBQ25ELDhEQUFDQztRQUFJQyxXQUFVO2tCQUNYLDRFQUFDRDtZQUFJQyxXQUFVO3NCQUNYLDRFQUFDRDtnQkFBSUMsV0FBVTs7a0NBQ1gsOERBQUNDO3dCQUFHRCxXQUFVO2tDQUFvQzs7Ozs7O2tDQUNsRCw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ1gsNEVBQUNEOzRCQUFJQyxXQUFVO3NDQUFzQko7Ozs7Ozs7Ozs7O2tDQUV6Qyw4REFBQ0c7d0JBQUlDLFdBQVU7OzBDQUNYLDhEQUFDRTtnQ0FDR0MsU0FBU047Z0NBQ1RHLFdBQVU7MENBQ2I7Ozs7OzswQ0FHRCw4REFBQ0U7Z0NBQ0dDLFNBQVNMO2dDQUNURSxXQUFVOzBDQUNiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU04sU0FBU0k7SUFDcEIsTUFBTSxDQUFDQyxjQUFjQyxnQkFBZ0IsR0FBR3ZCLCtDQUFRQSxDQUFDO0lBQ2pELE1BQU0sQ0FBQ3dCLGdCQUFnQkMsa0JBQWtCLEdBQUd6QiwrQ0FBUUEsQ0FBQztJQUNyRCxNQUFNLENBQUMwQixZQUFZQyxjQUFjLEdBQUczQiwrQ0FBUUEsQ0FBQztJQUM3QyxNQUFNLENBQUM0QixhQUFhQyxlQUFlLEdBQUc3QiwrQ0FBUUEsQ0FBQztJQUMvQyxNQUFNLENBQUM4QixhQUFhQyxlQUFlLEdBQUcvQiwrQ0FBUUEsQ0FBQyxJQUFJLHdCQUF3QjtJQUMzRSxNQUFNLENBQUNnQyxtQkFBbUJDLHFCQUFxQixHQUFHakMsK0NBQVFBLENBQUM7SUFD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O1lBQ0F2SCxtQ0FDRyw4REFBQ3BCO2dCQUNHQyxTQUFTcUI7Z0JBQ1RwQixXQUFXc0I7Z0JBQ1hyQixVQUFVLElBQU1rQixxQkFBcUI7Ozs7Ozs7Ozs7OztBQUt6RCIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2dlbmVyYWwvUmVzdWx0SW5mby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9TdGF0dXNCYXInO1xyXG5pbXBvcnQgUmVzdWx0VGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vUmVzdWx0VGl0bGVCYXInO1xyXG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vVGl0bGVCYXInO1xyXG5pbXBvcnQgQ29wcGVyUmVzdWx0TWFpbiBmcm9tICAnQC9jb21wb25lbnRzL2xpYi8vQ29wcGVyUmVzdWx0TWFpbic7XHJcbmltcG9ydCBPTFRTUmVzdWx0TWFpbiBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9PTFRTUmVzdWx0TWFpbic7XHJcbmltcG9ydCBPVERSUmVzdWx0TWFpbiBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9PVERSUmVzdWx0TWFpbic7XHJcbmltcG9ydCBLZXlib2FyZCBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9LZXlib2FyZCc7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgeyBnZXRBc3NldFVybCB9IGZyb20gJ0AvdXRpbHMvYXNzZXQnO1xyXG5pbXBvcnQgeyB1c2VBdWRpbyB9IGZyb20gJ0AvY29tcG9uZW50cy9BdWRpb1Byb3ZpZGVyJztcclxuXHJcbi8vIOiHquWumuS5ieehruiupOW8ueeql+e7hOS7tlxyXG5jb25zdCBDb25maXJtRGlhbG9nID0gKHsgbWVzc2FnZSwgb25Db25maXJtLCBvbkNhbmNlbCB9KSA9PiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInctWzQ4MHB4XSBoLVs2NDBweF0gYmctWyMwMDI4NDJkNF0gYWJzb2x1dGUgei1bOTk5OV0gdG9wLTEvMiBsZWZ0LTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3BsLTEwIHB0LTYwJz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1bIzJCM0M1Ql0gcm91bmRlZC1sZyBwLTYgdy1bNDAwcHhdIG1pbi1oLVsyMDBweF0gZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC14bCBmb250LWJvbGQgbWItNFwiPuaPkOekujwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSB0ZXh0LWxnXCI+e21lc3NhZ2V9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtNCBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNvbmZpcm19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLVsjMzU0ZTdhXSB0ZXh0LXdoaXRlIHB4LTYgcHktMiByb3VuZGVkIGhvdmVyOmJnLVsjMUUyOTNCXSB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDnoa7lrppcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2FuY2VsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1bIzRhNGE0YV0gdGV4dC13aGl0ZSBweC02IHB5LTIgcm91bmRlZCBob3ZlcjpiZy1bIzNhM2EzYV0gdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlc3VsdEluZm8oKSB7XHJcbiAgICBjb25zdCBbc2hvd0tleWJvYXJkLCBzZXRTaG93S2V5Ym9hcmRdID0gdXNlU3RhdGUodHJ1ZSk7XHJcbiAgICBjb25zdCBbY3Vyc29yUG9zaXRpb24sIHNldEN1cnNvclBvc2l0aW9uXSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW2lucHV0VmFsdWUyLCBzZXRJbnB1dFZhbHVlMl0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbYWN0aXZlSW5wdXQsIHNldEFjdGl2ZUlucHV0XSA9IHVzZVN0YXRlKDEpOyAvLyAxIOihqOekuuesrOS4gOS4qui+k+WFpeahhu+8jDIg6KGo56S656ys5LqM5Liq6L6T5YWl5qGGXHJcbiAgICBjb25zdCBbc2hvd0NvbmZpcm1EaWFsb2csIHNldFNob3dDb25maXJtRGlhbG9nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtjb25maXJtRGlhbG9nTWVzc2FnZSwgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2VdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW2NvbmZpcm1EaWFsb2dDYWxsYmFjaywgc2V0Q29uZmlybURpYWxvZ0NhbGxiYWNrXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgeyBuYXZpZ2F0aW9uIH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKTtcclxuICAgIGNvbnN0IHRlbXBUZXN0UmVzdWx0ID0gbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtcztcclxuICAgIGNvbnN0IHsgcGxheSB9ID0gdXNlQXVkaW8oKTtcclxuICAgIFxyXG4gICAgLy8g5qC55o2u5rWL6K+V57uT5p6c5pKt5pS+6Z+z5pWIXHJcbiAgICBjb25zdCB7IGhhc1BsYXllZFNvdW5kIH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKTtcclxuICAgIFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAvLyDlj6rmnInku47mtYvor5XpobXpnaLov5vlhaVub3NhdmXop4blm77ml7bmiY3mkq3mlL7lo7Dpn7NcclxuICAgICAgICBpZiAobmF2aWdhdGlvbi5wcmV2aW91cy5uYW1lID09PSAndGVzdGluZycgJiYgXHJcbiAgICAgICAgICAgIHRlbXBUZXN0UmVzdWx0ICYmIFxyXG4gICAgICAgICAgICAhaGFzUGxheWVkU291bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBUZXN0UmVzdWx0LkNvcHBlclJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnfHx0ZW1wVGVzdFJlc3VsdC5DRlBSZXN1bHRTdGF0dXMgPT09ICdwYXNzJyB8fHRlbXBUZXN0UmVzdWx0Lm9mcFJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnKSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5KCdwYXNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5KCdmYWlsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdXNlRGlzcGxheVN0b3JlLnNldFN0YXRlKHsgaGFzUGxheWVkU291bmQ6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgIH0sIFtuYXZpZ2F0aW9uLCB0ZW1wVGVzdFJlc3VsdCwgaGFzUGxheWVkU291bmRdKTtcclxuXHJcbiAgICAvLyDku45VUkzlj4LmlbDkuK3ojrflj5bkuLTml7bmtYvor5Xnu5PmnpxcclxuICAgIGNvbnN0IHtcclxuICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcclxuICAgICAgICBnZXRDdXJyZW50Q2FibGVJZCxcclxuICAgICAgICBnZXRDdXJyZW50Q2FibGVJZDIsXHJcbiAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcsXHJcbiAgICAgICAgZ2V0Q3VycmVudFRlc3RDb25maWcsXHJcbiAgICAgICAgbmF2aWdhdGVUbyxcclxuICAgICAgICBzZXRUb2FzdE1lc3NhZ2UsXHJcbiAgICAgICAgdXBkYXRlUHJvamVjdFxyXG4gICAgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgIGNvbnN0IHsgdmlldyB9ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkubmF2aWdhdGlvbi5jdXJyZW50O1xyXG4gICAgXHJcbiAgICAvLyDojrflj5blvZPliY3nmoTnur/nvIZJRFxyXG4gICAgY29uc3QgY3VycmVudENhYmxlSWQgPSBnZXRDdXJyZW50Q2FibGVJZCgpLm5hbWUgfHwgJyc7XHJcbiAgICBjb25zdCBjdXJyZW50Q2FibGVJZDIgPSBnZXRDdXJyZW50Q2FibGVJZDIoKS5uYW1lIHx8ICcnO1xyXG4gICAgLy8g6K6h566X5LiL5LiA5Liq5bqP5Y+355qESURcclxuICAgIGNvbnN0IGdldE5leHRJZCA9IChjdXJyZW50SWQpID0+IHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRJZCkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbku6XmlbDlrZfnu5PlsL5cclxuICAgICAgICBjb25zdCBudW1NYXRjaCA9IGN1cnJlbnRJZC5tYXRjaCgvXiguKj8pKFxcZCspJC8pO1xyXG4gICAgICAgIGlmIChudW1NYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBbLCBwcmVmaXgsIG51bV0gPSBudW1NYXRjaDtcclxuICAgICAgICAgICAgY29uc3QgbmV4dE51bSA9IFN0cmluZyhOdW1iZXIobnVtKSArIDEpLnBhZFN0YXJ0KG51bS5sZW5ndGgsICcwJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBuZXh0TnVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm5Lul5a2X5q+N57uT5bC+XHJcbiAgICAgICAgY29uc3QgbGV0dGVyTWF0Y2ggPSBjdXJyZW50SWQubWF0Y2goL14oLio/KShbYS16QS1aXSspJC8pO1xyXG4gICAgICAgIGlmIChsZXR0ZXJNYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBbLCBwcmVmaXgsIGxldHRlcnNdID0gbGV0dGVyTWF0Y2g7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDlsIblrZfmr43ovazmjaLkuLrmlbDnu4Tku6Xkvr/lpITnkIZcclxuICAgICAgICAgICAgY29uc3QgbGV0dGVyQXJyYXkgPSBsZXR0ZXJzLnNwbGl0KCcnKTtcclxuICAgICAgICAgICAgbGV0IGNhcnJ5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOS7juWPs+WQkeW3puWkhOeQhuavj+S4quWtl+avjVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGV0dGVyQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwICYmIGNhcnJ5OyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJBcnJheVtpXSA9PT0gJ3onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXlbaV0gPSAnYSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZXR0ZXJBcnJheVtpXSA9PT0gJ1onKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXlbaV0gPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FycnkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXR0ZXJBcnJheVtpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUobGV0dGVyQXJyYXlbaV0uY2hhckNvZGVBdCgwKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcnJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOWmguaenOi/mOaciei/m+S9je+8jOivtOaYjumcgOimgeWcqOWJjemdoua3u+WKoOS4gOS4quWtl+avjVxyXG4gICAgICAgICAgICBpZiAoY2FycnkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChsZXR0ZXJzWzBdID49ICdhJyAmJiBsZXR0ZXJzWzBdIDw9ICd6Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldHRlckFycmF5LnVuc2hpZnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0dGVyQXJyYXkudW5zaGlmdCgnQScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgbGV0dGVyQXJyYXkuam9pbignJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlpoLmnpzml6LkuI3mmK/mlbDlrZfkuZ/kuI3mmK/lrZfmr43nu5PlsL7vvIznm7TmjqXov5Tlm57ljp/lgLxcclxuICAgICAgICByZXR1cm4gY3VycmVudElkO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDliJ3lp4vljJbovpPlhaXlgLzkuLrlvZPliY3nmoTnur/nvIZJRFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBzZXRJbnB1dFZhbHVlKGN1cnJlbnRDYWJsZUlkKTtcclxuICAgICAgICBzZXRJbnB1dFZhbHVlMihjdXJyZW50Q2FibGVJZDIpO1xyXG4gICAgfSwgW2N1cnJlbnRDYWJsZUlkLCBjdXJyZW50Q2FibGVJZDJdKTtcclxuXHJcbiAgICAvLyDlvZPnrKzkuIDkuKrovpPlhaXmoYblgLzlj5jljJbml7bvvIzku4XlnKjnlKjmiLfmiYvliqjovpPlhaXml7boh6rliqjmm7TmlrDnrKzkuozkuKrovpPlhaXmoYZcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRlbXBUZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlID09PSAnY2ZwJyAmJiBpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUgIT09IGN1cnJlbnRDYWJsZUlkKSB7XHJcbiAgICAgICAgICAgIHNldElucHV0VmFsdWUyKGdldE5leHRJZChpbnB1dFZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lucHV0VmFsdWUsIHZpZXcsIGN1cnJlbnRDYWJsZUlkXSk7XHJcblxyXG4gICAgICAgIC8v5Yib5bu65L+d5a2Y57uT5p6c5a2Y5YKo6YC76L6RXHJcbiAgICAgICAgY29uc3QgaGFuZGxlQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IGlucHV0VmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5a2Y5Zyo6YeN5ZCN55qE5rWL6K+V57uT5p6cXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHRzID0gY3VycmVudFByb2plY3Q/LnRlc3RSZXN1bHRzIHx8IFtdO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vIOajgOafpeS4pOS4qklE5piv5ZCm6YeN5aSNXHJcbiAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gZXhpc3RpbmdSZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBjdXJyZW50SWQpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g6YeN5ZCN5pu/5o2iXHJcbiAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2UoJ+ivpee6v+e8hklE5bey5L2/55So77yM5piv5ZCm6KaG55uW77yfJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtRGlhbG9nQ2FsbGJhY2soKCkgPT4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsOS4tOaXtua1i+ivlee7k+aenOeahOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRUZXN0UmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZW1wVGVzdFJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw5b2T5YmN6aG555uu55qE5rWL6K+V57uT5p6cXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcCA9PT0gY3VycmVudFByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOenu+mZpOaXp+eahOa1i+ivlee7k+aenOW5tua3u+WKoOaWsOeahFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSZXN1bHRzID0gZXhpc3RpbmdSZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0Lm5hbWUgIT09IGN1cnJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0czogWy4uLm5ld1Jlc3VsdHMsIHVwZGF0ZWRUZXN0UmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VEaXNwbGF5U3RvcmUuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5uYXZpZ2F0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50Vmlldygnc2F2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2V0U2hvd0NvbmZpcm1EaWFsb2codHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8g5pu05paw5Li05pe25rWL6K+V57uT5p6c55qE5ZCN56ew5bm25L+d5a2Y5Yiw6aG555uu5LitXHJcbiAgICAgICAgICAgIGlmICh0ZW1wVGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RSZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGVtcFRlc3RSZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvLyDmm7TmlrDlvZPliY3pobnnm67nmoRjYWJsZUlkcy5uYW1l5Li65LiL5LiA5LiqSURcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLnByb2plY3RzLmZpbmRJbmRleChwID0+IHAgPT09IGN1cnJlbnRQcm9qZWN0KTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mm7TmlrDmtYvor5Xnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0czogWy4uLihjdXJyZW50UHJvamVjdC50ZXN0UmVzdWx0cyB8fCBbXSksIHVwZGF0ZWRUZXN0UmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubmF2aWdhdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5LiqSURcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SWQgPSAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SWQgPSBpbnB1dFZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SWQpIHJldHVybiBjdXJyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDojrflj5bmnIDlkI7kuIDkuKrlrZfnrKZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdENoYXIgPSBjdXJyZW50SWQuc2xpY2UoLTEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXggPSBjdXJyZW50SWQuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5pyA5ZCO5LiA5Liq5a2X56ym5piv5pWw5a2XXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxkLy50ZXN0KGxhc3RDaGFyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjdXJyZW50SWQubWF0Y2goL14oLio/KShcXGQrKSQvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bVByZWZpeCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoWzJdKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke251bVByZWZpeH0ke251bWJlci50b1N0cmluZygpLnBhZFN0YXJ0KG1hdGNoWzJdLmxlbmd0aCwgJzAnKX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnIDlkI7kuIDkuKrlrZfnrKbmmK/lrZfmr41cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9bQS1aYS16XS8udGVzdChsYXN0Q2hhcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShsYXN0Q2hhci5jaGFyQ29kZUF0KDApICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzotoXov4da5oiWeu+8jOWbnuWIsEHmiJZhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxhc3RDaGFyID09PSAnWicgJiYgbmV4dENoYXIgPiAnWicpIHx8IChsYXN0Q2hhciA9PT0gJ3onICYmIG5leHRDaGFyID4gJ3onKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VDaGFyID0gbGFzdENoYXIgPT09ICdaJyA/ICdBJyA6ICdhJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7YmFzZUNoYXJ9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtuZXh0Q2hhcn1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN6aG555uu55qE5omA5pyJY2FibGVJZHNcclxuICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkcyA9IGN1cnJlbnRQcm9qZWN0Py5jYWJsZUlkcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gZ2V0Q3VycmVudENhYmxlSWQoKS5pZDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPquabtOaWsOmAieS4reeahElE77yM5L+d55WZ5YW25LuWSUTkuI3lj5hcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkQ2FibGVJZHMgPSBjdXJyZW50Q2FibGVJZHMubWFwKGNhYmxlID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZS5pZCA9PT0gc2VsZWN0ZWRJZCA/IHsgLi4uY2FibGUsIG5hbWU6IG5leHRJZCB9IDogY2FibGVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05paw6aG555uuXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdChjdXJyZW50SW5kZXgsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVJZHM6IHVwZGF0ZWRDYWJsZUlkc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NhdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYW5kbGVDb21wbGV0ZTIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IGlucHV0VmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SWQyID0gaW5wdXRWYWx1ZTIudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgLy8g5qOA5p+l5Lik5LiqSUTmmK/lkKbnm7jlkIxcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJZCA9PT0gY3VycmVudElkMikge1xyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2UoJ+i+k+WFpei+k+WHuklE5LiN6IO955u45ZCM77yM6K+35qOA5p+lJyk7XHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtRGlhbG9nQ2FsbGJhY2soKCkgPT4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2V0U2hvd0NvbmZpcm1EaWFsb2codHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOajgOafpeaYr+WQpuWtmOWcqOmHjeWQjeeahOa1i+ivlee7k+aenFxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0UmVzdWx0cyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIOajgOafpeS4pOS4qklE5piv5ZCm6YeN5aSNXHJcbiAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlMSA9IGV4aXN0aW5nUmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQubmFtZSA9PT0gY3VycmVudElkKTtcclxuICAgICAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUyID0gZXhpc3RpbmdSZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBjdXJyZW50SWQyKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDdXJyZW50VGVzdENvbmZpZygpO1xyXG4gICAgICAgICAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlNb2RlID0gY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRHVwbGljYXRlMSB8fCBpc0R1cGxpY2F0ZTIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZTEpIG1lc3NhZ2UucHVzaChg57q/57yGSUQgJHtjdXJyZW50SWR9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEdXBsaWNhdGUyKSBtZXNzYWdlLnB1c2goYOe6v+e8hklEICR7Y3VycmVudElkMn1gKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ01lc3NhZ2UoYCR7bWVzc2FnZS5qb2luKCcg5ZKMICcpfeW3suS9v+eUqO+8jOaYr+WQpuimhueblu+8n2ApO1xyXG4gICAgICAgICAgICAgICAgc2V0Q29uZmlybURpYWxvZ0NhbGxiYWNrKCgpID0+ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDkuLTml7bmtYvor5Xnu5PmnpznmoTlkI3np7BcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVGVzdFJlc3VsdDEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRlbXBUZXN0UmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bmFtZTogaXNNdWx0aU1vZGUgPyBjdXJyZW50SWQyIDogY3VycmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZCA6IGN1cnJlbnRJZDIsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RSZXN1bHQyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZW1wVGVzdFJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZDIgOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dG5hbWU6IGlzTXVsdGlNb2RlID8gY3VycmVudElkIDogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDlvZPliY3pobnnm67nmoTmtYvor5Xnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5wcm9qZWN0cy5maW5kSW5kZXgocCA9PiBwID09PSBjdXJyZW50UHJvamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g56e76Zmk5pen55qE5rWL6K+V57uT5p6c5bm25re75Yqg5paw55qEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Jlc3VsdHMgPSBleGlzdGluZ1Jlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lICE9PSBjdXJyZW50SWQgJiYgcmVzdWx0Lm5hbWUgIT09IGN1cnJlbnRJZDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvamVjdChjdXJyZW50SW5kZXgsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzOiBbLi4ubmV3UmVzdWx0cywgdXBkYXRlZFRlc3RSZXN1bHQxLCB1cGRhdGVkVGVzdFJlc3VsdDJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VEaXNwbGF5U3RvcmUuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5uYXZpZ2F0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHQxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NhdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRTaG93Q29uZmlybURpYWxvZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNldFNob3dDb25maXJtRGlhbG9nKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOabtOaWsOS4tOaXtua1i+ivlee7k+aenOeahOWQjeensOW5tuS/neWtmOWIsOmhueebruS4rVxyXG4gICAgICAgICAgICBpZiAodGVtcFRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8g5Yib5bu65Lik5Liq5rWL6K+V57uT5p6cXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVGVzdFJlc3VsdDEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRlbXBUZXN0UmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bmFtZTogaXNNdWx0aU1vZGUgPyBjdXJyZW50SWQyIDogY3VycmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZCA6IGN1cnJlbnRJZDIsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RSZXN1bHQyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50ZW1wVGVzdFJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRuYW1lOiBpc011bHRpTW9kZSA/IGN1cnJlbnRJZDIgOiBjdXJyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dG5hbWU6IGlzTXVsdGlNb2RlID8gY3VycmVudElkIDogY3VycmVudElkMixcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOabtOaWsOW9k+WJjemhueebrueahGNhYmxlSWRzLm5hbWXkuLrkuIvkuIDkuKpJRFxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkucHJvamVjdHMuZmluZEluZGV4KHAgPT4gcCA9PT0gY3VycmVudFByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL+abtOaWsOa1i+ivlee7k+aenFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3QoY3VycmVudEluZGV4LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHRzOiBbLi4uKGN1cnJlbnRQcm9qZWN0LnRlc3RSZXN1bHRzIHx8IFtdKSwgdXBkYXRlZFRlc3RSZXN1bHQxLHVwZGF0ZWRUZXN0UmVzdWx0Ml1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc+S4reeahOa1i+ivlee7k+aenOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubmF2aWdhdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogdXBkYXRlZFRlc3RSZXN1bHQxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5LiqSURcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SWQgPSBnZXROZXh0SWQoZ2V0TmV4dElkKGlucHV0VmFsdWUudHJpbSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5LiL5LiA5LiqSUQyXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dElkMiA9IGdldE5leHRJZChnZXROZXh0SWQoaW5wdXRWYWx1ZTIudHJpbSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN6aG555uu55qE5omA5pyJY2FibGVJZHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2FibGVJZHMgPSBjdXJyZW50UHJvamVjdD8uY2FibGVJZHMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGdldEN1cnJlbnRDYWJsZUlkKCkuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZDIgPSBnZXRDdXJyZW50Q2FibGVJZDIoKS5pZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPquabtOaWsOmAieS4reeahElE77yM5L+d55WZ5YW25LuWSUTkuI3lj5hcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkQ2FibGVJZHMgPSBjdXJyZW50Q2FibGVJZHMubWFwKGNhYmxlID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZS5pZCA9PT0gc2VsZWN0ZWRJZCA/IHsgLi4uY2FibGUsIG5hbWU6IG5leHRJZCB9IDogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhYmxlLmlkID09PSBzZWxlY3RlZElkMiA/IHsgLi4uY2FibGUsIG5hbWU6IG5leHRJZDIgfSA6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDpobnnm67vvIzmt7vliqDkuKTkuKrmtYvor5Xnu5PmnpxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0KGN1cnJlbnRJbmRleCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWJsZUlkczogdXBkYXRlZENhYmxlSWRzLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NhdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAvLyDliJvlu7rmtYvor5Xnu5PmnpznmoTop4blm75cclxuICAgIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyUmVzdWx0TWFpbiA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlVHlwZSA9IHRlbXBUZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJzgwMDAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q29wcGVyUmVzdWx0TWFpbiB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gIC8+O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPE9MVFNSZXN1bHRNYWluIHRlc3RSZXN1bHQ9e3RlbXBUZXN0UmVzdWx0fSAvPjtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ29mcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxPVERSUmVzdWx0TWFpbiB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gLz47XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q29wcGVyUmVzdWx0TWFpbiB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gLz47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCByZW5kZXJTZXROYW1lID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVUeXBlID0gdGVtcFRlc3RSZXN1bHQ/LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGU7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4oXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0xIHRleHQtd2hpdGUgdGV4dC1zbVwiPui+k+WHuuWFiee6pElEMTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNmZmZmZTFdIHJvdW5kZWQtc20gcHgtNCB0ZXh0LWJsYWNrIG92ZXJmbG93LXgtYXV0byB3aGl0ZXNwYWNlLW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJbnB1dCgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShjdXJzb3JQb3NpdGlvbiwgY3Vyc29yUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTEgdGV4dC13aGl0ZSB0ZXh0LXNtXCI+6L6T5YWl5YWJ57qkSUQyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVs1MHB4XSBiZy1bI2ZmZmZlMV0gcm91bmRlZC1zbSBweC00IHRleHQtYmxhY2sgb3ZlcmZsb3cteC1hdXRvIHdoaXRlc3BhY2Utbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWUyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZTIoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5wdXQoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihlLnRhcmdldC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb24sIGN1cnNvclBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvd0tleWJvYXJkICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWN0aXZlSW5wdXQgPT09IDEgPyBpbnB1dFZhbHVlIDogaW5wdXRWYWx1ZTJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmFsdWUsIG5ld1Bvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJbnB1dCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlMihuZXdWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24obmV3UG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93S2V5Ym9hcmQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtNCBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbWItNCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dLZXlib2FyZCh0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjZmZmZmUxXSByb3VuZGVkLXNtIHAtNCB0ZXh0LWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpee6v+e8hklEXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnNvclBvc2l0aW9uKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yUG9zaXRpb24oZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y5YWJ5qCH5L2N572uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKGN1cnNvclBvc2l0aW9uLCBjdXJzb3JQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3Nob3dLZXlib2FyZCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxLZXlib2FyZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb249e2N1cnNvclBvc2l0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhuZXdWYWx1ZSwgbmV3UG9zaXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbihuZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dLZXlib2FyZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAnbm9zYXZlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3RlbXBUZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlICE9PSAnY2ZwJyA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZXN1bHRUaXRsZUJhciB0aXRsZT1cIuacquS/neWtmOe7k+aenFwiIHRlc3RSZXN1bHQ9e3RlbXBUZXN0UmVzdWx0fSBiYWNrVG89XCJob21lXCIgdmlldz1cIm1haW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKDxSZXN1bHRUaXRsZUJhciAgdGl0bGU9XCIgXCIgdGVzdFJlc3VsdD17dGVtcFRlc3RSZXN1bHR9IGJhY2tUbz1cImhvbWVcIiB2aWV3PVwibWFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSZXN1bHRNYWluKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3NldG5hbWUnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjZkYWU3XSB0by1bIzY1ZGZmZl0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS/neWtmFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3NldG5hbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCLkv53lrZjnu5PmnpxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvPXt1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLnByZXZpb3VzPy5uYW1lIHx8ICdob21lJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXc9e3VzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24ucHJldmlvdXM/LnZpZXcgfHwgJ21haW4nfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIHAtMiBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyU2V0TmFtZSgpfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGVtcFRlc3RSZXN1bHQ/LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGUgPT09IFwiY2ZwXCIgPyAgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzaG93S2V5Ym9hcmQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29tcGxldGUyKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjZkYWU3XSB0by1bIzY1ZGZmZl0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDkv53lrZhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNob3dLZXlib2FyZCAmJiAoPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb21wbGV0ZSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNiNmRhZTddIHRvLVsjNjVkZmZmXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3NhdmUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGVtcFRlc3RSZXN1bHQ/LnRlc3Rjb25maWc/Lm1vZHVsZVR5cGUgIT09ICdjZnAnID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlc3VsdFRpdGxlQmFyICB0ZXN0UmVzdWx0PXt0ZW1wVGVzdFJlc3VsdH0gYmFja1RvPVwicmVzdWx0XCIgdmlldz1cIm1haW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKDxSZXN1bHRUaXRsZUJhciAgdGl0bGU9XCIgXCIgdGVzdFJlc3VsdD17dGVtcFRlc3RSZXN1bHR9IGJhY2tUbz1cInJlc3VsdFwiIHZpZXc9XCJtYWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclJlc3VsdE1haW4oKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlVG8oJ2hvbWUnLCAnbWFpbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDkuLvpobVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gcmVuZGVyQ29udGVudCgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGxcIj5cclxuICAgICAgICAgICAge2NvbnRlbnR9XHJcbiAgICAgICAgICAgIHtzaG93Q29uZmlybURpYWxvZyAmJiAoXHJcbiAgICAgICAgICAgICAgICA8Q29uZmlybURpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e2NvbmZpcm1EaWFsb2dNZXNzYWdlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURpYWxvZ0NhbGxiYWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRTaG93Q29uZmlybURpYWxvZyhmYWxzZSl9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiU3RhdHVzQmFyIiwiUmVzdWx0VGl0bGVCYXIiLCJUaXRsZUJhciIsIkNvcHBlclJlc3VsdE1haW4iLCJPTFRTUmVzdWx0TWFpbiIsIk9URFJSZXN1bHRNYWluIiwiS2V5Ym9hcmQiLCJ1c2VEaXNwbGF5U3RvcmUiLCJnZXRBc3NldFVybCIsInVzZUF1ZGlvIiwiQ29uZmlybURpYWxvZyIsIm1lc3NhZ2UiLCJvbkNvbmZpcm0iLCJvbkNhbmNlbCIsImRpdiIsImNsYXNzTmFtZSIsImgzIiwiYnV0dG9uIiwib25DbGljayIsIlJlc3VsdEluZm8iLCJzaG93S2V5Ym9hcmQiLCJzZXRTaG93S2V5Ym9hcmQiLCJjdXJzb3JQb3NpdGlvbiIsInNldEN1cnNvclBvc2l0aW9uIiwiaW5wdXRWYWx1ZSIsInNldElucHV0VmFsdWUiLCJpbnB1dFZhbHVlMiIsInNldElucHV0VmFsdWUyIiwiYWN0aXZlSW5wdXQiLCJzZXRBY3RpdmVJbnB1dCIsInNob3dDb25maXJtRGlhbG9nIiwic2V0U2hvd0NvbmZpcm1EaWFsb2ciLCJjb25maXJtRGlhbG9nTWVzc2FnZSIsInNldENvbmZpcm1EaWFsb2dNZXNzYWdlIiwiY29uZmlybURpYWxvZ0NhbGxiYWNrIiwic2V0Q29uZmlybURpYWxvZ0NhbGxiYWNrIiwibmF2aWdhdGlvbiIsImdldFN0YXRlIiwidGVtcFRlc3RSZXN1bHQiLCJjdXJyZW50IiwicGFyYW1zIiwicGxheSIsImhhc1BsYXllZFNvdW5kIiwicHJldmlvdXMiLCJuYW1lIiwiQ29wcGVyUmVzdWx0U3RhdHVzIiwiQ0ZQUmVzdWx0U3RhdHVzIiwib2ZwUmVzdWx0U3RhdHVzIiwic2V0U3RhdGUiLCJnZXRDdXJyZW50UHJvamVjdCIsImdldEN1cnJlbnRDYWJsZUlkIiwiZ2V0Q3VycmVudENhYmxlSWQyIiwidXBkYXRlQ3VycmVudFZpZXciLCJnZXRDdXJyZW50VGVzdENvbmZpZyIsIm5hdmlnYXRlVG8iLCJzZXRUb2FzdE1lc3NhZ2UiLCJ1cGRhdGVQcm9qZWN0IiwiY3VycmVudFByb2plY3QiLCJ2aWV3IiwiY3VycmVudENhYmxlSWQiLCJjdXJyZW50Q2FibGVJZDIiLCJnZXROZXh0SWQiLCJjdXJyZW50SWQiLCJudW1NYXRjaCIsIm1hdGNoIiwicHJlZml4IiwibnVtIiwibmV4dE51bSIsIlN0cmluZyIsIk51bWJlciIsInBhZFN0YXJ0IiwibGVuZ3RoIiwibGV0dGVyTWF0Y2giLCJsZXR0ZXJzIiwibGV0dGVyQXJyYXkiLCJzcGxpdCIsImNhcnJ5IiwiaSIsImZyb21DaGFyQ29kZSIsImNoYXJDb2RlQXQiLCJ1bnNoaWZ0Iiwiam9pbiIsInRlc3Rjb25maWciLCJtb2R1bGVUeXBlIiwiaGFuZGxlQ29tcGxldGUiLCJ0cmltIiwiZXhpc3RpbmdSZXN1bHRzIiwidGVzdFJlc3VsdHMiLCJpc0R1cGxpY2F0ZSIsInNvbWUiLCJyZXN1bHQiLCJ1cGRhdGVkVGVzdFJlc3VsdCIsImN1cnJlbnRJbmRleCIsInByb2plY3RzIiwiZmluZEluZGV4IiwicCIsIm5ld1Jlc3VsdHMiLCJmaWx0ZXIiLCJuZXh0SWQiLCJsYXN0Q2hhciIsInNsaWNlIiwidGVzdCIsIm51bVByZWZpeCIsIm51bWJlciIsInBhcnNlSW50IiwidG9TdHJpbmciLCJuZXh0Q2hhciIsImJhc2VDaGFyIiwiY3VycmVudENhYmxlSWRzIiwiY2FibGVJZHMiLCJzZWxlY3RlZElkIiwiaWQiLCJ1cGRhdGVkQ2FibGVJZHMiLCJtYXAiLCJjYWJsZSIsImhhbmRsZUNvbXBsZXRlMiIsImN1cnJlbnRJZDIiLCJpc0R1cGxpY2F0ZTEiLCJpc0R1cGxpY2F0ZTIiLCJjdXJyZW50Q29uZmlnIiwiY2FibGVUeXBlIiwiaXNNdWx0aU1vZGUiLCJpbmNsdWRlcyIsInB1c2giLCJ1cGRhdGVkVGVzdFJlc3VsdDEiLCJpbnB1dG5hbWUiLCJvdXRuYW1lIiwidXBkYXRlZFRlc3RSZXN1bHQyIiwibmV4dElkMiIsInNlbGVjdGVkSWQyIiwicmVuZGVyQ29udGVudCIsInJlbmRlclJlc3VsdE1haW4iLCJ0ZXN0UmVzdWx0IiwicmVuZGVyU2V0TmFtZSIsImlucHV0IiwidHlwZSIsInZhbHVlIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJzZWxlY3Rpb25TdGFydCIsIm9uRm9jdXMiLCJzZXRTZWxlY3Rpb25SYW5nZSIsIm5ld1ZhbHVlIiwibmV3UG9zaXRpb24iLCJvbkNvbXBsZXRlIiwidGl0bGUiLCJiYWNrVG8iLCJjb250ZW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/ResultInfo.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/TestConfig.js":
/*!******************************************************!*\
!*** ./src/components/dsxpage/general/TestConfig.js ***!
\******************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TestConfig)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib//SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! uuid */ \"uuid\");\n/* harmony import */ var _MenuList_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./MenuList.js */ \"(pages-dir-node)/./src/components/dsxpage/general/MenuList.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, uuid__WEBPACK_IMPORTED_MODULE_7__, _MenuList_js__WEBPACK_IMPORTED_MODULE_8__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, uuid__WEBPACK_IMPORTED_MODULE_7__, _MenuList_js__WEBPACK_IMPORTED_MODULE_8__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\n\nfunction TestConfig() {\n const [selectedConfigId, setSelectedConfigId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const { getCurrentProject, navigation, navigateTo, updateCurrentView, goBack, setSelectedIndexes, updateProject, addProject, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n // 获取当前项目数据\n const currentProject = getCurrentProject();\n // 单多模判断\n const { getCurrentTestConfig } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState();\n const currentConfig = getCurrentTestConfig();\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n // 设置默认选中的配置\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"TestConfig.useEffect\": ()=>{\n // 优先使用导航参数中的配置ID\n const configIdFromParams = navigation.current.params?.selectedConfigId;\n if (configIdFromParams) {\n setSelectedConfigId(configIdFromParams);\n return;\n }\n // 如果没有参数,使用当前选中的配置索引\n const currentTestConfigIndex = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.testConfigIndex;\n if (currentProject?.testConfigs && currentTestConfigIndex >= 0) {\n setSelectedConfigId(currentProject.testConfigs[currentTestConfigIndex].id);\n }\n // 确保导航历史正确记录\n if (navigation.current.name === 'testconfig' && navigation.current.view === 'main') {\n const current = navigation.current;\n const previous = navigation.previous;\n if (!previous || previous.name !== 'testconfig' || previous.view !== 'main') {\n _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigateTo('testconfig', 'main', current.params);\n }\n }\n }\n }[\"TestConfig.useEffect\"], [\n currentProject,\n navigation.current.params\n ]);\n // 渲染主视图内容\n const renderMainContent = ()=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[490px] flex-1 bg-[#D5DFEB] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full overflow-y-auto space-y-2 pr-2\",\n children: currentProject?.testConfigs.map((config)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[100px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex items-center gap-4 cursor-pointer\",\n onClick: ()=>{\n setSelectedConfigId(config.id);\n // 保存选中的配置ID到导航参数\n updateCurrentView('main', {\n selectedConfigId: config.id\n });\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 border-2 border-gray-600 rounded-full flex items-center justify-center\",\n children: selectedConfigId === config.id && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-4 h-4 bg-blue-500 rounded-full\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 78,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 76,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1\",\n children: [\n config.moduleType === '8000' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 86,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 87,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.wireOrder\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 88,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 93,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 94,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 95,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: [\n config.params.refJumper,\n \" 跳线参照\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 96,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true),\n config.moduleType === 'ofp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: \"自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 101,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.limitValue\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 102,\n columnNumber: 45\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-sm\",\n children: config.params.cableType\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 103,\n columnNumber: 45\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 83,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-gray-400 text-sm absolute top-0 right-0\",\n children: config.modulelable\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 107,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 81,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 110,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 109,\n columnNumber: 29\n }, this)\n ]\n }, config.id, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 67,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 65,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 64,\n columnNumber: 13\n }, this);\n };\n // 渲染设置视图内容\n const renderSetupContent = ()=>{\n const currentConfig = currentProject?.testConfigs.find((config)=>config.id === selectedConfigId);\n if (!currentConfig) return null;\n const renderConfigContent = ()=>{\n switch(currentConfig.moduleType){\n case '8000':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-t-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'CABLE_TYPE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"电缆类型:\",\n currentConfig.params.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 147,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 149,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 148,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 138,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"NVP:根据电缆类型生成\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 153,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 155,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 154,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 152,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 137,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-t-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'LIMIT_VALUE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"测试极限值:\",\n currentConfig.params.limitValue\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 169,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 171,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 170,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 160,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"存储测试数据:开\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 175,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 177,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 176,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 174,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"TDR/TDX:仅失败\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 181,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 183,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 182,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 180,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 159,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'WIRE_ORDER',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"插座配置:\",\n currentConfig.params.wireOrder\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 196,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 198,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 197,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 187,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 136,\n columnNumber: 25\n }, this);\n case 'cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-t-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: \"测试类型:智能远端\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 208,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 210,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 209,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 207,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"双向:关\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 214,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 216,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 215,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 213,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 206,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'FIBER_TYPE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"光纤类型:\",\n currentConfig.params.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 229,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 231,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 230,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 220,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-t-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'CFP_LIMIT',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"测试极限值:\",\n currentConfig.params.limitValue\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 244,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 246,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 245,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 235,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l \",\n children: [\n \"参照方法:\",\n currentConfig.params.refJumper,\n \" 跳线\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 250,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 252,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 251,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 249,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: \"连接器类型:LC\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 256,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 258,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 257,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 255,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center cursor-pointer \",\n onClick: ()=>updateCurrentView('cfp-conunt'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l\",\n children: [\n \"接线/接头的数量:\",\n currentConfig.params.connectorCount,\n \"/\",\n currentConfig.params.spliceCount\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 262,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 264,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 263,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 261,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 234,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 205,\n columnNumber: 25\n }, this);\n case 'ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-t-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: \"测试类型:自动OTDR\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 275,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 277,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 276,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 274,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l \",\n children: \"前导补偿:开\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 281,\n columnNumber: 37\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 282,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 280,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-gradient-to-b from-[#ffffff] to-[#ffffff] rounded-b-sm p-4 shadow-lg flex justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l \",\n children: [\n \"波长:\",\n currentConfig.params.cableType.includes('OM') ? '850 nm、1310nm' : '1310nm、1550nm'\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 287,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 288,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 286,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 273,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'FIBER_TYPE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"光纤类型:\",\n currentConfig.params.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 302,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 304,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 303,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 293,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'OFP_LIMIT',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-l font-bold\",\n children: [\n \"测试极限值:\",\n currentConfig.params.limitValue\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 316,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 318,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 317,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 307,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 272,\n columnNumber: 25\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-full bg-gradient-to-b from-[#e9e9e9] to-[##ffffff0d] rounded-sm p-4 shadow-lg flex flex-col\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4 cursor-pointer\",\n onClick: ()=>navigateTo('menulist', 'setup', {\n menuType: 'MODULE',\n selectedConfigId: selectedConfigId,\n backTo: 'testconfig',\n backView: 'setup'\n }),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black font-bold text-lg\",\n children: [\n \"模块:\",\n currentConfig.modulelable\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 340,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-5 h-5 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 342,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 341,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 331,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 overflow-auto\",\n children: renderConfigContent()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 345,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 330,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 329,\n columnNumber: 13\n }, this);\n };\n // 渲染标题栏\n const renderTitleBar = ()=>{\n const { view } = navigation.current;\n const handleBack = ()=>{\n if (view === 'setup') {\n updateCurrentView('main');\n } else {\n goBack();\n }\n };\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"更改测试\",\n backTo: navigation.previous?.name || 'home',\n view: navigation.previous?.view || 'main',\n params: navigation.previous?.params || {},\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 368,\n columnNumber: 21\n }, this);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"测试设置\",\n backTo: navigation.previous?.name || 'testconfig',\n view: navigation.previous?.view || 'main',\n params: navigation.previous?.params || {},\n onBack: handleBack\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 378,\n columnNumber: 21\n }, this);\n case 'cfp-conunt':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \" \",\n view: 'setup',\n params: navigation.previous?.params || {}\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 388,\n columnNumber: 21\n }, this);\n }\n };\n // 渲染底部栏\n const renderFooter = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // 创建新的测试配置\n const newConfig = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_7__.v4)(),\n moduleType: '8000',\n modulelable: '铜缆测试仪',\n params: {\n limitValue: 'TIA Cat 6 Channel',\n cableType: 'Cat6 U/UTP',\n wireOrder: 'T568B',\n refJumper: '1',\n spliceCount: '0',\n connectorCount: '2'\n }\n };\n // 更新项目,添加新的测试配置\n const updatedProject = {\n ...currentProject,\n testConfigs: [\n ...currentProject.testConfigs,\n newConfig\n ]\n };\n updateProject(_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.projectIndex, updatedProject);\n // 设置新配置为选中状态并保存到导航参数\n setSelectedConfigId(newConfig.id);\n updateCurrentView('setup', {\n selectedConfigId: newConfig.id\n });\n },\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"新测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 405,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n if (!selectedConfigId) {\n setToastMessage('请先选择一个测试配置');\n return;\n }\n // 保存选中的配置ID到导航参数\n updateCurrentView('setup', {\n selectedConfigId: selectedConfigId\n });\n },\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"编辑\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 437,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n if (!selectedConfigId) {\n setToastMessage('请先选择一个测试配置');\n return;\n }\n const configIndex = currentProject.testConfigs.findIndex((config)=>config.id === selectedConfigId);\n setSelectedIndexes({\n testConfigIndex: configIndex\n });\n navigateTo('home', 'main');\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"使用所选\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 450,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 404,\n columnNumber: 21\n }, this);\n case 'setup':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // 保存配置并返回主视图\n updateCurrentView('main', {\n selectedConfigId: selectedConfigId\n });\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 471,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 470,\n columnNumber: 21\n }, this);\n case 'cfp-conunt':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // 保存配置并返回主视图\n updateCurrentView('setup', {\n selectedConfigId: selectedConfigId\n });\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 485,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 484,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const renderCFPCONUNTContent = ()=>{\n const currentConfig = currentProject?.testConfigs.find((config)=>config.id === selectedConfigId);\n if (!currentConfig) return null;\n const handleValueChange = (field, value)=>{\n const currentConfig = currentProject?.testConfigs.find((config)=>config.id === selectedConfigId);\n if (!currentConfig) return;\n // 更新当前配置的参数\n const updatedConfig = {\n ...currentConfig,\n params: {\n ...currentConfig.params,\n [field]: value\n }\n };\n // 更新项目中的测试配置\n const updatedProject = {\n ...currentProject,\n testConfigs: currentProject.testConfigs.map((config)=>config.id === selectedConfigId ? updatedConfig : config)\n };\n // 调用displayStore的updateProject方法更新状态\n updateProject(_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.projectIndex, updatedProject);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#0f172a] flex flex-col relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/olts-weldingPointSet.png`),\n alt: \"CFPCOUNUNT\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 539,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 538,\n columnNumber: 17\n }, this),\n currentConfig.params.connectorCount > 2 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-56.5 pt-45\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/icon-connector.svg`),\n alt: \"connector\",\n width: 30,\n height: 30,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 550,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.connectorCount - 2\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 557,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 549,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 548,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-43 pt-45\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/icon-connector.svg`),\n alt: \"connector\",\n width: 30,\n height: 30,\n className: \"object-contain\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 564,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.connectorCount - 2\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 571,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 563,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 562,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 547,\n columnNumber: 62\n }, this),\n currentConfig.params.spliceCount > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-57 pt-65\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 rounded-full bg-[#104878]\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 580,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.spliceCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 581,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 579,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 578,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute flex flex-col gap-10 pl-44 pt-65\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-6 h-6 rounded-full bg-[#104878]\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 588,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-white\",\n children: currentConfig.params.spliceCount\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 589,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 587,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 586,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 577,\n columnNumber: 59\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex flex-col gap-10 pl-75 pt-30\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n min: \"2\",\n max: \"20\",\n defaultValue: currentConfig.params.connectorCount,\n onChange: (e)=>handleValueChange('connectorCount', e.target.value),\n onKeyDown: (e)=>e.preventDefault(),\n className: \"w-16 h-8 px-2 bg-[#104878] rounded text-center focus:outline-none focus:ring-2 focus:ring-[#0ff] text-white\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 598,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-4 text-base font-roboto select-none text-black\",\n children: \"全部连接\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 607,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 597,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n min: \"0\",\n max: \"18\",\n defaultValue: currentConfig.params.spliceCount,\n onChange: (e)=>handleValueChange('spliceCount', e.target.value),\n onKeyDown: (e)=>e.preventDefault(),\n className: \"w-16 h-8 px-2 bg-[#104878] rounded text-center focus:outline-none focus:ring-2 focus:ring-[#0ff] text-white\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 610,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-4 text-base font-roboto select-none text-black\",\n children: \"接头\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 619,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 609,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n min: \"1\",\n max: \"1\",\n defaultValue: currentConfig.params.refJumper,\n onChange: (e)=>handleValueChange('refJumper', e.target.value),\n onKeyDown: (e)=>e.preventDefault(),\n className: \"w-16 h-8 px-2 bg-[#104878] rounded text-center focus:outline-none focus:ring-2 focus:ring-[#0ff] text-white\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 622,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"ml-4 text-base font-roboto select-none text-black\",\n children: \"跳线参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 631,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 621,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 596,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 537,\n columnNumber: 13\n }, this);\n };\n // 渲染内容\n const renderContent = ()=>{\n const { view } = navigation.current;\n switch(view){\n case 'main':\n return renderMainContent();\n case 'setup':\n return renderSetupContent();\n case 'cfp-conunt':\n return renderCFPCONUNTContent();\n default:\n return renderMainContent();\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 656,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/TestConfig.js\",\n lineNumber: 655,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9UZXN0Q29uZmlnLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtRDtBQUNwQjtBQUNxQjtBQUNGO0FBQ007QUFDTDtBQUNmO0FBQ0M7QUFDTztBQUk3QixTQUFTWTtJQUNwQixNQUFNLENBQUNDLGtCQUFrQkMsb0JBQW9CLEdBQUdiLCtDQUFRQSxDQUFDO0lBQ3pELE1BQU0sRUFDRmMsaUJBQWlCLEVBQ2pCQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsaUJBQWlCLEVBQ2pCQyxNQUFNLEVBQ05DLGtCQUFrQixFQUNsQkMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLGVBQWUsRUFDbEIsR0FBR2hCLCtEQUFlQTtJQUVuQixXQUFXO0lBQ1gsTUFBTWlCLGlCQUFpQlQ7SUFFdkIsUUFBUTtJQUNSLE1BQU0sRUFBRVUsb0JBQW9CLEVBQUUsR0FBR2xCLG9FQUF3QjtJQUN6RCxNQUFNb0IsZ0JBQWdCRjtJQUN0QixNQUFNRyxZQUFZRCxjQUFjRSxNQUFNLENBQUNELFNBQVM7SUFDaEQsTUFBTUUsY0FBY0YsVUFBVUcsUUFBUSxDQUFDO0lBRXZDLFlBQVk7SUFDWjdCLGdEQUFTQTtnQ0FBQztZQUNGLGlCQUFpQjtZQUNqQixNQUFNOEIscUJBQXFCaEIsV0FBV2lCLE9BQU8sQ0FBQ0osTUFBTSxFQUFFaEI7WUFDdEQsSUFBSW1CLG9CQUFvQjtnQkFDcEJsQixvQkFBb0JrQjtnQkFDcEI7WUFDSjtZQUVBLHFCQUFxQjtZQUNyQixNQUFNRSx5QkFBeUIzQixvRUFBd0IsR0FBRzRCLGVBQWUsQ0FBQ0MsZUFBZTtZQUN6RixJQUFJWixnQkFBZ0JhLGVBQWVILDBCQUEwQixHQUFHO2dCQUM1RHBCLG9CQUFvQlUsZUFBZWEsV0FBVyxDQUFDSCx1QkFBdUIsQ0FBQ0ksRUFBRTtZQUM3RTtZQUVBLGFBQWE7WUFDYixJQUFJdEIsV0FBV2lCLE9BQU8sQ0FBQ00sSUFBSSxLQUFL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QkFDSSw4REFBQ0M7UUFBSUMsV0FBVTs7MEJBQ1gsOERBQUN4QyxpRUFBU0E7Ozs7O1lBQ1Q0RDtZQUNBOEI7WUFDQTFCOzs7Ozs7O0FBR2IiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9nZW5lcmFsL1Rlc3RDb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBJbWFnZSBmcm9tICduZXh0L2ltYWdlJztcclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9TdGF0dXNCYXInO1xyXG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vVGl0bGVCYXInO1xyXG5pbXBvcnQgU3ViVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vU3ViVGl0bGVCYXInO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCBNZW51TGlzdCBmcm9tICcuL01lbnVMaXN0LmpzJztcclxuaW1wb3J0IHsgZ2V0QXNzZXRVcmwgfSBmcm9tICdAL3V0aWxzL2Fzc2V0JztcclxuXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGVzdENvbmZpZygpIHtcclxuICAgIGNvbnN0IFtzZWxlY3RlZENvbmZpZ0lkLCBzZXRTZWxlY3RlZENvbmZpZ0lkXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgeyBcclxuICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcclxuICAgICAgICBuYXZpZ2F0aW9uLFxyXG4gICAgICAgIG5hdmlnYXRlVG8sXHJcbiAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcsXHJcbiAgICAgICAgZ29CYWNrLFxyXG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXhlcyxcclxuICAgICAgICB1cGRhdGVQcm9qZWN0LFxyXG4gICAgICAgIGFkZFByb2plY3QsXHJcbiAgICAgICAgc2V0VG9hc3RNZXNzYWdlXHJcbiAgICB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcblxyXG4gICAgLy8g6I635Y+W5b2T5YmN6aG555uu5pWw5o2uXHJcbiAgICBjb25zdCBjdXJyZW50UHJvamVjdCA9IGdldEN1cnJlbnRQcm9qZWN0KCk7XHJcblxyXG4gICAgLy8g5Y2V5aSa5qih5Yik5patXHJcbiAgICBjb25zdCB7IGdldEN1cnJlbnRUZXN0Q29uZmlnIH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDdXJyZW50VGVzdENvbmZpZygpO1xyXG4gICAgY29uc3QgY2FibGVUeXBlID0gY3VycmVudENvbmZpZy5wYXJhbXMuY2FibGVUeXBlO1xyXG4gICAgY29uc3QgaXNNdWx0aU1vZGUgPSBjYWJsZVR5cGUuaW5jbHVkZXMoJ09NJyk7XHJcblxyXG4gICAgLy8g6K6+572u6buY6K6k6YCJ5Lit55qE6YWN572uXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyDkvJjlhYjkvb/nlKjlr7zoiKrlj4LmlbDkuK3nmoTphY3nva5JRFxyXG4gICAgICAgICAgICBjb25zdCBjb25maWdJZEZyb21QYXJhbXMgPSBuYXZpZ2F0aW9uLmN1cnJlbnQucGFyYW1zPy5zZWxlY3RlZENvbmZpZ0lkO1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnSWRGcm9tUGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENvbmZpZ0lkKGNvbmZpZ0lkRnJvbVBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOWmguaenOayoeacieWPguaVsO+8jOS9v+eUqOW9k+WJjemAieS4reeahOmFjee9rue0ouW8lVxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGVzdENvbmZpZ0luZGV4ID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnRlc3RDb25maWdJbmRleDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9qZWN0Py50ZXN0Q29uZmlncyAmJiBjdXJyZW50VGVzdENvbmZpZ0luZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQ29uZmlnSWQoY3VycmVudFByb2plY3QudGVzdENvbmZpZ3NbY3VycmVudFRlc3RDb25maWdJbmRleF0uaWQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyDnoa7kv53lr7zoiKrljoblj7LmraPnoa7orrDlvZVcclxuICAgICAgICAgICAgaWYgKG5hdmlnYXRpb24uY3VycmVudC5uYW1lID09PSAndGVzdGNvbmZpZycgJiYgbmF2aWdhdGlvbi5jdXJyZW50LnZpZXcgPT09ICdtYWluJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IG5hdmlnYXRpb24uY3VycmVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gbmF2aWdhdGlvbi5wcmV2aW91cztcclxuICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXMgfHwgcHJldmlvdXMubmFtZSAhPT0gJ3Rlc3Rjb25maWcnIHx8IHByZXZpb3VzLnZpZXcgIT09ICdtYWluJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRlVG8oJ3Rlc3Rjb25maWcnLCAnbWFpbicsIGN1cnJlbnQucGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIFtjdXJyZW50UHJvamVjdCwgbmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtc10pO1xyXG5cclxuICAgIC8vIOa4suafk+S4u+inhuWbvuWGheWuuVxyXG4gICAgY29uc3QgcmVuZGVyTWFpbkNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs0OTBweF0gZmxleC0xIGJnLVsjRDVERkVCXSBwLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIG92ZXJmbG93LXktYXV0byBzcGFjZS15LTIgcHItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50UHJvamVjdD8udGVzdENvbmZpZ3MubWFwKChjb25maWcpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y29uZmlnLmlkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bMTAwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQ29uZmlnSWQoY29uZmlnLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjpgInkuK3nmoTphY3nva5JROWIsOWvvOiIquWPguaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdtYWluJywgeyBzZWxlY3RlZENvbmZpZ0lkOiBjb25maWcuaWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNiBoLTYgYm9yZGVyLTIgYm9yZGVyLWdyYXktNjAwIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZENvbmZpZ0lkID09PSBjb25maWcuaWQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNCBoLTQgYmctYmx1ZS01MDAgcm91bmRlZC1mdWxsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLm1vZHVsZVR5cGUgPT09ICc4MDAwJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LXNtXCI+e2NvbmZpZy5wYXJhbXMubGltaXRWYWx1ZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLndpcmVPcmRlcn08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29uZmlnLm1vZHVsZVR5cGUgPT09ICdjZnAnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj7mmbrog73ov5znq688L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5yZWZKdW1wZXJ9IOi3s+e6v+WPgueFpzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb25maWcubW9kdWxlVHlwZSA9PT0gJ29mcCcgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPuiHquWKqE9URFI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1zbVwiPntjb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtc21cIj57Y29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtZ3JheS00MDAgdGV4dC1zbSBhYnNvbHV0ZSB0b3AtMCByaWdodC0wXCI+e2NvbmZpZy5tb2R1bGVsYWJsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDmuLLmn5Porr7nva7op4blm77lhoXlrrlcclxuICAgIGNvbnN0IHJlbmRlclNldHVwQ29udGVudCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gY3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzLmZpbmQoXHJcbiAgICAgICAgICAgIGNvbmZpZyA9PiBjb25maWcuaWQgPT09IHNlbGVjdGVkQ29uZmlnSWRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCByZW5kZXJDb25maWdDb250ZW50ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRDb25maWcubW9kdWxlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnODAwMCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtdC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ21lbnVsaXN0JywgJ3NldHVwJywgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVUeXBlOiAnQ0FCTEVfVFlQRScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVmlldzogJ3NldHVwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgZm9udC1ib2xkXCI+55S157yG57G75Z6L77yae2N1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSByb3VuZGVkLWItc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiPk5WUO+8muagueaNrueUtee8huexu+Wei+eUn+aIkDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC10LXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnbWVudWxpc3QnLCAnc2V0dXAnLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdMSU1JVF9WQUxVRScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVmlldzogJ3NldHVwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgZm9udC1ib2xkXCI+5rWL6K+V5p6B6ZmQ5YC877yae2N1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZmZmZmXSB0by1bI2ZmZmZmZl0gIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxcIj7lrZjlgqjmtYvor5XmlbDmja7vvJrlvIA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSByb3VuZGVkLWItc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiPlREUi9URFjvvJrku4XlpLHotKU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ21lbnVsaXN0JywgJ3NldHVwJywgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdXSVJFX09SREVSJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7mj5LluqfphY3nva7vvJp7Y3VycmVudENvbmZpZy5wYXJhbXMud2lyZU9yZGVyfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY2ZwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7mtYvor5XnsbvlnovvvJrmmbrog73ov5znq688L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSByb3VuZGVkLWItc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiPuWPjOWQke+8muWFszwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnbWVudWxpc3QnLCAnc2V0dXAnLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51VHlwZTogJ0ZJQkVSX1RZUEUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG86ICd0ZXN0Y29uZmlnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1ZpZXc6ICdzZXR1cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sIGZvbnQtYm9sZFwiPuWFiee6pOexu+Wei++8mntjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdtZW51bGlzdCcsICdzZXR1cCcsIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51VHlwZTogJ0NGUF9MSU1JVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVmlldzogJ3NldHVwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgZm9udC1ib2xkXCI+5rWL6K+V5p6B6ZmQ5YC877yae2N1cnJlbnRDb25maWcucGFyYW1zLmxpbWl0VmFsdWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZmZmZmXSB0by1bI2ZmZmZmZl0gIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgXCI+5Y+C54Wn5pa55rOV77yae2N1cnJlbnRDb25maWcucGFyYW1zLnJlZkp1bXBlcn0g6Lez57q/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZmZmZmXSB0by1bI2ZmZmZmZl0gIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxcIj7ov57mjqXlmajnsbvlnovvvJpMQzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2ZmZmZmZl0gdG8tWyNmZmZmZmZdIHJvdW5kZWQtYi1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlciBcIiBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygnY2ZwLWNvbnVudCcpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbFwiID7mjqXnur8v5o6l5aS055qE5pWw6YeP77yae2N1cnJlbnRDb25maWcucGFyYW1zLmNvbm5lY3RvckNvdW50fS97Y3VycmVudENvbmZpZy5wYXJhbXMuc3BsaWNlQ291bnR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvZnAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtdC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sIGZvbnQtYm9sZFwiPua1i+ivleexu+Wei++8muiHquWKqE9URFI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNmZmZmZmZdIHRvLVsjZmZmZmZmXSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sIFwiPuWJjeWvvOihpeWBv++8muW8gDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNTBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZmZmZmZmXSB0by1bI2ZmZmZmZl0gcm91bmRlZC1iLXNtICBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWwgXCI+5rOi6ZW/77yae2N1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZS5pbmNsdWRlcygnT00nKSA/ICc4NTAgbm3jgIExMzEwbm0nIDogJzEzMTBubeOAgTE1NTBubSd9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz4gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVs1MHB4XSBiZy1bI0Y4RjZGN10gcm91bmRlZC1zbSBwLTQgc2hhZG93LWxnIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnbWVudWxpc3QnLCAnc2V0dXAnLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51VHlwZTogJ0ZJQkVSX1RZUEUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG86ICd0ZXN0Y29uZmlnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1ZpZXc6ICdzZXR1cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sIGZvbnQtYm9sZFwiPuWFiee6pOexu+Wei++8mntjdXJyZW50Q29uZmlnLnBhcmFtcy5jYWJsZVR5cGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9IGFsdD1cIueureWktFwiIGZpbGwgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzUwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdtZW51bGlzdCcsICdzZXR1cCcsIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVUeXBlOiAnT0ZQX0xJTUlUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1RvOiAndGVzdGNvbmZpZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tWaWV3OiAnc2V0dXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbCBmb250LWJvbGRcIj7mtYvor5XmnoHpmZDlgLzvvJp7Y3VycmVudENvbmZpZy5wYXJhbXMubGltaXRWYWx1ZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX0gYWx0PVwi566t5aS0XCIgZmlsbCBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bI0Q1REZFQl0gcC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBiZy1ncmFkaWVudC10by1iIGZyb20tWyNlOWU5ZTldIHRvLVsjI2ZmZmZmZjBkXSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBmbGV4LWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUbygnbWVudWxpc3QnLCAnc2V0dXAnLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudVR5cGU6ICdNT0RVTEUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb25maWdJZDogc2VsZWN0ZWRDb25maWdJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tUbzogJ3Rlc3Rjb25maWcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja1ZpZXc6ICdzZXR1cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgZm9udC1ib2xkIHRleHQtbGdcIj7mqKHlnZfvvJp7Y3VycmVudENvbmZpZy5tb2R1bGVsYWJsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgaC01IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfSBhbHQ9XCLnrq3lpLRcIiBmaWxsIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyQ29uZmlnQ29udGVudCgpfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOa4suafk+agh+mimOagj1xyXG4gICAgY29uc3QgcmVuZGVyVGl0bGVCYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaGFuZGxlQmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZpZXcgPT09ICdzZXR1cCcpIHtcclxuICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygnbWFpbicpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ29CYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8VGl0bGVCYXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwi5pu05pS55rWL6K+VXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tUbz17bmF2aWdhdGlvbi5wcmV2aW91cz8ubmFtZSB8fCAnaG9tZSd9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3PXtuYXZpZ2F0aW9uLnByZXZpb3VzPy52aWV3IHx8ICdtYWluJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz17bmF2aWdhdGlvbi5wcmV2aW91cz8ucGFyYW1zIHx8IHt9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIua1i+ivleiuvue9rlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG89e25hdmlnYXRpb24ucHJldmlvdXM/Lm5hbWUgfHwgJ3Rlc3Rjb25maWcnfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldz17bmF2aWdhdGlvbi5wcmV2aW91cz8udmlldyB8fCAnbWFpbid9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e25hdmlnYXRpb24ucHJldmlvdXM/LnBhcmFtcyB8fCB7fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdjZnAtY29udW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIiBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldz17J3NldHVwJ30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz17bmF2aWdhdGlvbi5wcmV2aW91cz8ucGFyYW1zIHx8IHt9fVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8g5riy5p+T5bqV6YOo5qCPXHJcbiAgICBjb25zdCByZW5kZXJGb290ZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIm+W7uuaWsOeahOa1i+ivlemFjee9rlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVUeXBlOiAnODAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZWxhYmxlOiAn6ZOc57yG5rWL6K+V5LuqJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFZhbHVlOiAnVElBIENhdCA2IENoYW5uZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FibGVUeXBlOiAnQ2F0NiBVL1VUUCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXJlT3JkZXI6ICdUNTY4QicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZKdW1wZXI6ICcxJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50OiAnMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudDogJzInXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDpobnnm67vvIzmt7vliqDmlrDnmoTmtYvor5XphY3nva5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUHJvamVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFByb2plY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWdzOiBbLi4uY3VycmVudFByb2plY3QudGVzdENvbmZpZ3MsIG5ld0NvbmZpZ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3QodXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCkuc2VsZWN0ZWRJbmRleGVzLnByb2plY3RJbmRleCwgdXBkYXRlZFByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiuvue9ruaWsOmFjee9ruS4uumAieS4reeKtuaAgeW5tuS/neWtmOWIsOWvvOiIquWPguaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQ29uZmlnSWQobmV3Q29uZmlnLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50Vmlldygnc2V0dXAnLCB7IHNlbGVjdGVkQ29uZmlnSWQ6IG5ld0NvbmZpZy5pZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5paw5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRDb25maWdJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+WFiOmAieaLqeS4gOS4qua1i+ivlemFjee9ricpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS/neWtmOmAieS4reeahOmFjee9rklE5Yiw5a+86Iiq5Y+C5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3NldHVwJywgeyBzZWxlY3RlZENvbmZpZ0lkOiBzZWxlY3RlZENvbmZpZ0lkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSAgcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnvJbovpFcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZENvbmZpZ0lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6K+35YWI6YCJ5oup5LiA5Liq5rWL6K+V6YWN572uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnSW5kZXggPSBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9PiBjb25maWcuaWQgPT09IHNlbGVjdGVkQ29uZmlnSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhlcyh7IHRlc3RDb25maWdJbmRleDogY29uZmlnSW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGVUbygnaG9tZScsICdtYWluJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L2/55So5omA6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnc2V0dXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y6YWN572u5bm26L+U5Zue5Li76KeG5Zu+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ21haW4nLCB7IHNlbGVjdGVkQ29uZmlnSWQ6IHNlbGVjdGVkQ29uZmlnSWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2FzZSAnY2ZwLWNvbnVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjphY3nva7lubbov5Tlm57kuLvop4blm75cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50Vmlldygnc2V0dXAnLCB7IHNlbGVjdGVkQ29uZmlnSWQ6IHNlbGVjdGVkQ29uZmlnSWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVuZGVyQ0ZQQ09OVU5UQ29udGVudCA9ICgpID0+e1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBjdXJyZW50UHJvamVjdD8udGVzdENvbmZpZ3MuZmluZChcclxuICAgICAgICAgICAgY29uZmlnID0+IGNvbmZpZy5pZCA9PT0gc2VsZWN0ZWRDb25maWdJZFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICghY3VycmVudENvbmZpZykgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbmRsZVZhbHVlQ2hhbmdlID0gKGZpZWxkLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gY3VycmVudFByb2plY3Q/LnRlc3RDb25maWdzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICBjb25maWcgPT4gY29uZmlnLmlkID09PSBzZWxlY3RlZENvbmZpZ0lkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcpIHJldHVybjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOabtOaWsOW9k+WJjemFjee9rueahOWPguaVsFxyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcucGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF06IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyDmm7TmlrDpobnnm67kuK3nmoTmtYvor5XphY3nva5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2plY3QgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgICAgIHRlc3RDb25maWdzOiBjdXJyZW50UHJvamVjdC50ZXN0Q29uZmlncy5tYXAoY29uZmlnID0+IFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5pZCA9PT0gc2VsZWN0ZWRDb25maWdJZCA/IHVwZGF0ZWRDb25maWcgOiBjb25maWdcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIOiwg+eUqGRpc3BsYXlTdG9yZeeahHVwZGF0ZVByb2plY3Tmlrnms5Xmm7TmlrDnirbmgIFcclxuICAgICAgICAgICAgdXBkYXRlUHJvamVjdCh1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMucHJvamVjdEluZGV4LCB1cGRhdGVkUHJvamVjdCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyMwZjE3MmFdIGZsZXggZmxleC1jb2wgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvb2x0cy13ZWxkaW5nUG9pbnRTZXQucG5nYCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNGUENPVU5VTlRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWcucGFyYW1zLmNvbm5lY3RvckNvdW50ID4gMiAmJiAoPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgZmxleCBmbGV4LWNvbCBnYXAtMTAgcGwtNTYuNSBwdC00NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvaWNvbi1jb25uZWN0b3Iuc3ZnYCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJjb25uZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezMwfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdHJhbnNmb3JtIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZy5wYXJhbXMuY29ubmVjdG9yQ291bnQtMn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGZsZXggZmxleC1jb2wgZ2FwLTEwIHBsLTQzIHB0LTQ1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoYC9pY29uLWNvbm5lY3Rvci5zdmdgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cImNvbm5lY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MzB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezMwfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtd2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q29uZmlnLnBhcmFtcy5jb25uZWN0b3JDb3VudC0yfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2Pil9XHJcbiAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZy5wYXJhbXMuc3BsaWNlQ291bnQgPiAwICYmICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBmbGV4IGZsZXgtY29sIGdhcC0xMCBwbC01NyBwdC02NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTYgaC02IHJvdW5kZWQtZnVsbCBiZy1bIzEwNDg3OF1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtd2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q29uZmlnLnBhcmFtcy5zcGxpY2VDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGZsZXggZmxleC1jb2wgZ2FwLTEwIHBsLTQ0IHB0LTY1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNiBoLTYgcm91bmRlZC1mdWxsIGJnLVsjMTA0ODc4XVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIHRyYW5zZm9ybSAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC13aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWcucGFyYW1zLnNwbGljZUNvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2Pil9XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGdhcC0xMCBwbC03NSBwdC0zMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17Y3VycmVudENvbmZpZy5wYXJhbXMuY29ubmVjdG9yQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVZhbHVlQ2hhbmdlKCdjb25uZWN0b3JDb3VudCcsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMTYgaC04IHB4LTIgYmctWyMxMDQ4NzhdIHJvdW5kZWQgdGV4dC1jZW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLVsjMGZmXSB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtNCB0ZXh0LWJhc2UgZm9udC1yb2JvdG8gc2VsZWN0LW5vbmUgdGV4dC1ibGFja1wiPuWFqOmDqOi/nuaOpTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjE4XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2N1cnJlbnRDb25maWcucGFyYW1zLnNwbGljZUNvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVWYWx1ZUNoYW5nZSgnc3BsaWNlQ291bnQnLCBlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTE2IGgtOCBweC0yIGJnLVsjMTA0ODc4XSByb3VuZGVkIHRleHQtY2VudGVyIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1bIzBmZl0gdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1sLTQgdGV4dC1iYXNlIGZvbnQtcm9ib3RvIHNlbGVjdC1ub25lIHRleHQtYmxhY2tcIj7mjqXlpLQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2N1cnJlbnRDb25maWcucGFyYW1zLnJlZkp1bXBlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVmFsdWVDaGFuZ2UoJ3JlZkp1bXBlcicsIGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMTYgaC04IHB4LTIgYmctWyMxMDQ4NzhdIHJvdW5kZWQgdGV4dC1jZW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLVsjMGZmXSB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtNCB0ZXh0LWJhc2UgZm9udC1yb2JvdG8gc2VsZWN0LW5vbmUgdGV4dC1ibGFja1wiPui3s+e6v+WPgueFpzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG5cclxuICAgIH07XHJcbiAgICAvLyDmuLLmn5PlhoXlrrlcclxuICAgIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB2aWV3IH0gPSBuYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlck1haW5Db250ZW50KCk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NldHVwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJTZXR1cENvbnRlbnQoKTtcclxuICAgICAgICAgICAgY2FzZSAnY2ZwLWNvbnVudCc6XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckNGUENPTlVOVENvbnRlbnQoKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNYWluQ29udGVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgPFN0YXR1c0JhciAvPlxyXG4gICAgICAgICAgICB7cmVuZGVyVGl0bGVCYXIoKX1cclxuICAgICAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cclxuICAgICAgICAgICAge3JlbmRlckZvb3RlcigpfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiSW1hZ2UiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsIlN1YlRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwidjQiLCJ1dWlkdjQiLCJNZW51TGlzdCIsImdldEFzc2V0VXJsIiwiVGVzdENvbmZpZyIsInNlbGVjdGVkQ29uZmlnSWQiLCJzZXRTZWxlY3RlZENvbmZpZ0lkIiwiZ2V0Q3VycmVudFByb2plY3QiLCJuYXZpZ2F0aW9uIiwibmF2aWdhdGVUbyIsInVwZGF0ZUN1cnJlbnRWaWV3IiwiZ29CYWNrIiwic2V0U2VsZWN0ZWRJbmRleGVzIiwidXBkYXRlUHJvamVjdCIsImFkZFByb2plY3QiLCJzZXRUb2FzdE1lc3NhZ2UiLCJjdXJyZW50UHJvamVjdCIsImdldEN1cnJlbnRUZXN0Q29uZmlnIiwiZ2V0U3RhdGUiLCJjdXJyZW50Q29uZmlnIiwiY2FibGVUeXBlIiwicGFyYW1zIiwiaXNNdWx0aU1vZGUiLCJpbmNsdWRlcyIsImNvbmZpZ0lkRnJvbVBhcmFtcyIsImN1cnJlbnQiLCJjdXJyZW50VGVzdENvbmZpZ0luZGV4Iiwic2VsZWN0ZWRJbmRleGVzIiwidGVzdENvbmZpZ0luZGV4IiwidGVzdENvbmZpZ3MiLCJpZCIsIm5hbWUiLCJ2aWV3IiwicHJldmlvdXMiLCJyZW5kZXJNYWluQ29udGVudCIsImRpdiIsImNsYXNzTmFtZSIsIm1hcCIsImNvbmZpZyIsIm9uQ2xpY2siLCJtb2R1bGVUeXBlIiwibGltaXRWYWx1ZSIsIndpcmVPcmRlciIsInJlZkp1bXBlciIsIm1vZHVsZWxhYmxlIiwic3JjIiwiYWx0IiwiZmlsbCIsInJlbmRlclNldHVwQ29udGVudCIsImZpbmQiLCJyZW5kZXJDb25maWdDb250ZW50IiwibWVudVR5cGUiLCJiYWNrVG8iLCJiYWNrVmlldyIsImNvbm5lY3RvckNvdW50Iiwic3BsaWNlQ291bnQiLCJyZW5kZXJUaXRsZUJhciIsImhhbmRsZUJhY2siLCJ0aXRsZSIsIm9uQmFjayIsInJlbmRlckZvb3RlciIsImJ1dHRvbiIsIm5ld0NvbmZpZyIsInVwZGF0ZWRQcm9qZWN0IiwicHJvamVjdEluZGV4IiwiY29uZmlnSW5kZXgiLCJmaW5kSW5kZXgiLCJyZW5kZXJDRlBDT05VTlRDb250ZW50IiwiaGFuZGxlVmFsdWVDaGFuZ2UiLCJmaWVsZCIsInZhbHVlIiwidXBkYXRlZENvbmZpZyIsInNpemVzIiwid2lkdGgiLCJoZWlnaHQiLCJzcGFuIiwiaW5wdXQiLCJ0eXBlIiwibWluIiwibWF4IiwiZGVmYXVsdFZhbHVlIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0Iiwib25LZXlEb3duIiwicHJldmVudERlZmF1bHQiLCJyZW5kZXJDb250ZW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/TestConfig.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/Testing.js":
/*!***************************************************!*\
!*** ./src/components/dsxpage/general/Testing.js ***!
\***************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Testing)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! uuid */ \"uuid\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_5__, uuid__WEBPACK_IMPORTED_MODULE_6__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__, _store_displayStore__WEBPACK_IMPORTED_MODULE_4__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_5__, uuid__WEBPACK_IMPORTED_MODULE_6__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n// 计算电阻余量的函数\nfunction calculateResistanceMargin(data, limitdata, limitValue) {\n try {\n // 判断测试类型\n const isPoETest = limitValue.includes('+PoE');\n const isALLTest = limitValue.includes('+ALL');\n let minMargin = Infinity;\n // 回路电阻计算\n const loopResistanceData = data?.performance?.data?.['Loop Resistance (Ω)'];\n const loopResistanceLimit = limitdata?.['Loop Resistance (Ω)']?.['PAIRLimit (Ω)'];\n if (loopResistanceData && loopResistanceLimit) {\n const pairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of pairs){\n const actualValues = loopResistanceData[pair];\n if (actualValues && Array.isArray(actualValues)) {\n for(let i = 0; i < actualValues.length && i < loopResistanceLimit.length; i++){\n const actualValue = actualValues[i];\n const limitVal = loopResistanceLimit[i];\n if (actualValue !== undefined && actualValue !== null && limitVal !== undefined && limitVal !== null) {\n const margin = limitVal - Math.abs(actualValue);\n minMargin = Math.min(minMargin, margin);\n }\n }\n }\n }\n }\n // 线对UBL计算(仅在+PoE或+ALL测试时)\n if (isPoETest || isALLTest) {\n const ublData = data?.performance?.data?.['UBL (Ω)'];\n const ublLimit = limitdata?.['UBL (Ω)']?.['PAIRLimit (Ω)'];\n if (ublData && ublLimit) {\n const pairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of pairs){\n const actualValues = ublData[pair];\n if (actualValues && Array.isArray(actualValues)) {\n for(let i = 0; i < actualValues.length && i < ublLimit.length; i++){\n const actualValue = actualValues[i];\n const limitVal = ublLimit[i];\n if (actualValue !== undefined && actualValue !== null && limitVal !== undefined && limitVal !== null) {\n const margin = limitVal - Math.abs(actualValue);\n minMargin = Math.min(minMargin, margin);\n }\n }\n }\n }\n }\n }\n // P2PUBL计算(仅在+PoE或+ALL测试时)\n if (isPoETest || isALLTest) {\n const p2pUblData = data?.performance?.data?.['P2PUBL (Ω)'];\n const p2pUblLimit = limitdata?.['P2PUBL (Ω)']?.['PAIRLimit (Ω)'];\n if (p2pUblData && p2pUblLimit) {\n const pairs = [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ];\n for (const pair of pairs){\n const actualValues = p2pUblData[pair];\n if (actualValues && Array.isArray(actualValues)) {\n for(let i = 0; i < actualValues.length && i < p2pUblLimit.length; i++){\n const actualValue = actualValues[i];\n const limitVal = p2pUblLimit[i];\n if (actualValue !== undefined && actualValue !== null && limitVal !== undefined && limitVal !== null) {\n const margin = limitVal - Math.abs(actualValue);\n minMargin = Math.min(minMargin, margin);\n }\n }\n }\n }\n }\n }\n return minMargin === Infinity ? 0 : minMargin;\n } catch (error) {\n console.error('Error calculating resistance margin:', error);\n return 0;\n }\n}\nfunction Testing() {\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState().navigation.current;\n const { navigateTo, getCurrentTestConfig, getCurrentProject, getCurrentOperator, getCurrentCableId, getCurrentCableId2, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n const currentConfig = getCurrentTestConfig();\n const { connectionStatus, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n // 铜缆测试路径和状态\n const copperMainPathKey = connectionStatus?.mainPaths ? Object.keys(connectionStatus.mainPaths)[0] : null;\n const copperRemotePathKey = connectionStatus?.remotePaths ? Object.keys(connectionStatus.remotePaths)[0] : null;\n const coppermainend = copperMainPathKey ? connectionStatus.mainPaths[copperMainPathKey]?.end : null;\n const copperremoteend = copperRemotePathKey ? connectionStatus.remotePaths[copperRemotePathKey]?.end : null;\n const copperRefStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.copper?.status || null;\n // CFP测试路径和状态\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n const cfpRefStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.cfp?.status || null;\n const cfpRefConnectStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.cfp?.connectStatus || null;\n const cfpInResult = isMultiMode ? connectionStatus?.CFPMainIn : connectionStatus?.CFPMainOut;\n const cfpOutResult = isMultiMode ? connectionStatus?.CFPMainOut : connectionStatus?.CFPMainIn;\n // 获取isMultiMode\n const wavelength1 = isMultiMode ? '850' : '1310';\n const wavelength2 = isMultiMode ? '1300' : '1550';\n // OFP测试路径和状态\n const ofpMainEnd = copperMainPathKey ? connectionStatus.mainPaths[copperMainPathKey]?.end : null;\n const ofpRefStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.ofp?.status || null;\n const ofpRefConnectStatus = _store_displayStore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getState()?.ref?.ofp?.connectStatus || null;\n const [tempTestResult, setTempTestResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // 获取测试链路清洁状态\n const moduleType = currentConfig?.moduleType;\n // 检查路径中所有端口的清洁状态\n const checkPortsCleanStatus = (paths)=>{\n if (!paths || paths.length === 0) return false;\n // 检查每个端口的清洁状态\n const cleanPorts = paths.filter((portId)=>{\n const portElement = document.getElementById(portId);\n return portElement?.getAttribute('lcclean') === 'true';\n });\n // 返回已清洁的端口数量\n return cleanPorts.length;\n };\n let allPathsCleanStatus = {};\n let isAllPathsClean = 0; // 默认为0,表示全部未清洁\n // 只在模块类型为 cfp 或 ofp 时执行检测\n if (moduleType === 'cfp' || moduleType === 'ofp') {\n if (moduleType === 'cfp') {\n // CFP模块检测所有路径\n const mainInPaths = connectionStatus?.mainPaths?.['main-cfp-in']?.path || [];\n const mainOutPaths = connectionStatus?.mainPaths?.[isMultiMode ? 'main-cfp-mm-out' : 'main-cfp-sm-out']?.path || [];\n const remoteInPaths = connectionStatus?.remotePaths?.['remote-cfp-in']?.path || [];\n const remoteOutPaths = connectionStatus?.remotePaths?.[isMultiMode ? 'remote-cfp-mm-out' : 'remote-cfp-sm-out']?.path || [];\n // 获取每个路径的清洁端口数量\n const mainInClean = checkPortsCleanStatus(mainInPaths);\n const mainOutClean = checkPortsCleanStatus(mainOutPaths);\n const remoteInClean = checkPortsCleanStatus(remoteInPaths);\n const remoteOutClean = checkPortsCleanStatus(remoteOutPaths);\n // 计算总端口数和已清洁端口数\n const totalPorts = mainInPaths.length + mainOutPaths.length + remoteInPaths.length + remoteOutPaths.length;\n const cleanedPorts = mainInClean + mainOutClean + remoteInClean + remoteOutClean;\n // 设置清洁状态\n if (cleanedPorts === 0) isAllPathsClean = 0;\n else if (cleanedPorts < totalPorts) isAllPathsClean = 1;\n else if (cleanedPorts === totalPorts) isAllPathsClean = 2;\n allPathsCleanStatus = {\n mainInClean: mainInClean === mainInPaths.length,\n mainOutClean: mainOutClean === mainOutPaths.length,\n remoteInClean: remoteInClean === remoteInPaths.length,\n remoteOutClean: remoteOutClean === remoteOutPaths.length\n };\n } else {\n // OFP模块只检测主机输出端口\n const mainOutPaths = connectionStatus?.mainPaths?.[isMultiMode ? 'main-ofp-mm-out' : 'main-ofp-sm-out']?.path || [];\n const cleanedPorts = checkPortsCleanStatus(mainOutPaths);\n // 设置清洁状态\n if (cleanedPorts === 0) isAllPathsClean = 0;\n else if (cleanedPorts < mainOutPaths.length) isAllPathsClean = 1;\n else if (cleanedPorts === mainOutPaths.length) isAllPathsClean = 2;\n allPathsCleanStatus = {\n mainOutClean: cleanedPorts === mainOutPaths.length\n };\n }\n }\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Testing.useEffect\": ()=>{\n if (!tempTestResult) {\n const loadTestResult = {\n \"Testing.useEffect.loadTestResult\": async ()=>{\n try {\n const currentProject = getCurrentProject();\n const currentOperator = getCurrentOperator();\n // 获取当前选中的电缆ID\n const currentCableId = getCurrentCableId().name;\n // 获取当前选中的电缆ID2\n const currentCableId2 = getCurrentCableId2().name;\n const CopperWiremapStatus = connectionStatus?.CopperWiremapStatus;\n const CopperPerformanceStatus = connectionStatus?.CopperPerformanceStatus;\n const ofpResult = connectionStatus?.OFPStatus;\n const moduleType = currentConfig?.moduleType;\n const cableType = currentConfig?.params?.cableType;\n const wireOrder = currentConfig?.params?.wireOrder;\n let testResult;\n // 不同模块组装测试结果逻辑\n if (moduleType === '8000') {\n let CopperResultStatus = 'fail';\n let CopperWiremapResultStatus = 'fail';\n if (CopperWiremapStatus === 'pass') {\n if (wireOrder === 'T568B' || wireOrder === 'Ethernet Two-Pair' || wireOrder === 'M12-D Two-Pair') {\n CopperWiremapResultStatus = 'pass';\n console.log(CopperWiremapResultStatus);\n }\n } else if (CopperWiremapStatus === 'pass-2pair') {\n if (wireOrder === 'Ethernet Two-Pair' || wireOrder === 'M12-D Two-Pair') {\n CopperWiremapResultStatus = 'pass';\n } else if (wireOrder === 'T568B') {\n CopperWiremapResultStatus = 'fail';\n CopperResultStatus = 'fail';\n }\n } else if (CopperWiremapStatus === 'sopen') {\n if (wireOrder === 'T568B') {\n CopperWiremapResultStatus = 'fail';\n CopperResultStatus = 'fail';\n } else if (cableType.includes('U/UTP')) {\n CopperWiremapResultStatus = 'pass';\n } else if (cableType.includes('F/UTP')) {\n CopperWiremapResultStatus = 'fail';\n CopperResultStatus = 'fail';\n }\n }\n if (CopperWiremapResultStatus === 'pass') {\n try {\n const response = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.*\\\\.json$\")(`./${CopperPerformanceStatus}.json`);\n const data = response.default;\n // 加载限制数据\n const limitValue = currentConfig?.params?.limitValue;\n try {\n // 从limitValue中提取基础名称(移除+PoE和+ALL后缀)\n const baseName = limitValue.split(' (+')[0];\n // 使用基础名称加载带有(+ALL)后缀的文件\n const limitResponse = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.* \\\\(\\\\+ALL\\\\)\\\\.json$\")(`./${baseName} (+ALL).json`);\n const limitdata = limitResponse;\n // 计算所有参数的余量\n const paramTitles = [\n '插入损耗',\n '回波损耗',\n 'NEXT',\n 'PS NEXT',\n 'ACR-N',\n 'PS ACR-N',\n 'ACR-F',\n 'PS ACR-F',\n 'CDNEXT',\n 'CMRL',\n 'TCL',\n 'ELTCTL',\n '电阻'\n ];\n const dataGroupMap = {\n '插入损耗': 'Insertion Loss (dB)',\n '回波损耗': 'RL (dB)',\n 'NEXT': 'NEXT (dB)',\n 'PS NEXT': 'PS NEXT (dB)',\n 'ACR-N': 'ACR-N (dB)',\n 'PS ACR-N': 'PS ACR-N (dB)',\n 'ACR-F': 'ACR-F (dB)',\n 'PS ACR-F': 'PS ACR-F (dB)',\n 'CDNEXT': 'CDNEXT (dB)',\n 'CMRL': 'CMRL (dB)',\n 'TCL': 'TCL (dB)',\n 'ELTCTL': 'ELTCTL (dB)',\n '电阻': 'Resistance (Ω)'\n };\n let hasNegativeMargin = false;\n // 长度判断\n if (limitdata.LENGTH && data.performance.LENGTH) {\n const lengthPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of lengthPairs){\n if (data.performance.LENGTH[pair] > limitdata.LENGTH) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n // 电阻判断\n if (limitdata.LOOP && data.performance.OHM?.LOOP) {\n const loopPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of loopPairs){\n if (data.performance.OHM.LOOP[pair] > limitdata.LOOP) {\n hasNegativeMargin = true;\n console.log(\"电阻fail\");\n break;\n }\n }\n }\n // 检查是否是 +PoE 或 +ALL 测试\n const hasPoE = limitValue?.includes('+PoE');\n const hasALL = limitValue?.includes('+ALL');\n // +PoE 或 +ALL 测试的额外检查\n if ((hasPoE || hasALL) && data.performance.OHM) {\n // 线对 UBL 余量检查\n if (limitdata.PAIRUBL && data.performance.OHM.PAIRUBL) {\n const pairUblPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of pairUblPairs){\n if (Math.abs(data.performance.OHM.PAIRUBL[pair]) > limitdata.PAIRUBL) {\n hasNegativeMargin = true;\n console.log(\"UBL fail\");\n break;\n }\n }\n }\n // P2P UBL 余量检查\n if (limitdata.P2PUBL && data.performance.OHM.P2PUBL) {\n const p2pUblPairs = [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ];\n for (const pair of p2pUblPairs){\n if (Math.abs(data.performance.OHM.P2PUBL[pair]) > limitdata.P2PUBL) {\n hasNegativeMargin = true;\n console.log(\"P2P fail\");\n break;\n }\n }\n }\n }\n for (const paramTitle of paramTitles){\n const dataGroup = dataGroupMap[paramTitle];\n // 电阻参数的特殊处理\n if (paramTitle === '电阻') {\n const resistanceMargin = calculateResistanceMargin(data, limitdata, limitValue);\n if (resistanceMargin < 0) {\n hasNegativeMargin = true;\n }\n continue;\n }\n if (!dataGroup || !data?.performance?.data?.[dataGroup] || !limitdata?.[dataGroup]) continue;\n const testData = data.performance.data[dataGroup];\n const limitValues = limitdata[dataGroup]?.['PAIRLimit (dB)'] || [];\n const pairs = [\n 'NEXT (dB)',\n 'ACR-N (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ] : [\n 'ACR-F (dB)',\n 'CDNEXT (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3612',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4512',\n 'PAIR4535',\n 'PAIR4578',\n 'PAIR7812',\n 'PAIR7936',\n 'PAIR7845'\n ] : [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for(let index = 0; index < limitValues.length && !hasNegativeMargin; index++){\n const limitValue = limitValues[index];\n if (limitValue === undefined || limitValue === null) break;\n for (const pair of pairs){\n const actualValue = testData[pair]?.[index];\n if (actualValue !== undefined && actualValue !== null) {\n const margin = paramTitle === '插入损耗' ? Math.abs(limitValue) - Math.abs(actualValue) : Math.abs(actualValue) - limitValue;\n if (margin < 0) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n }\n }\n CopperResultStatus = hasNegativeMargin ? 'fail' : 'pass';\n } catch (error) {\n console.error('Error calculating margins:', error);\n }\n } catch (error) {\n console.error('加载测试结果失败:', error);\n }\n }\n testResult = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_6__.v4)(),\n name: currentProject?.cableIds[0]?.name || '',\n testconfig: JSON.parse(JSON.stringify(currentConfig || {})),\n operators: currentOperator?.name || '',\n CopperWiremapStatus,\n CopperWiremapResultStatus,\n CopperPerformanceStatus,\n CopperRef: copperRefStatus,\n CopperResultStatus\n };\n } else if (moduleType === 'cfp') {\n // 极限值导入\n const limitValue = currentConfig?.params?.limitValue;\n const CFP_LIMIT = (__webpack_require__(/*! @/store/FIBER/CFP_LIMIT */ \"(pages-dir-node)/./src/store/FIBER/CFP_LIMIT.js\")[\"default\"]);\n const limitData = CFP_LIMIT[limitValue];\n if (limitData) {\n // 使用limitData中的极限值进行后续处理\n const { adapterLoss, firstLastAdapterLoss, spliceLoss, totalLoss1310nm, totalLoss1550nm, lossPerKm850nm, lossPerKm13000nm, lossPerKm1310nm, lossPerKm1550nm, maxSMLength, manMMLength } = limitData;\n }\n // 用户配置加载\n const connectorCount = currentConfig?.params?.connectorCount;\n const spliceCount = currentConfig?.params?.spliceCount;\n const refJumper = currentConfig?.params?.refJumper;\n let cfpMainInStatus = null;\n let cfpMainOutStatus = null;\n if (cfpInResult) {\n try {\n // 加载第一个波长的数据\n const wave1Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpInResult}/${wavelength1}-dump.json`);\n // 加载第二个波长的数据\n const wave2Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpInResult}/${wavelength2}-dump.json`);\n // 添加随机浮动因子(损耗上下浮动1%)\n const getDistanceRandomFactor = {\n \"Testing.useEffect.loadTestResult.getDistanceRandomFactor\": ()=>1\n }[\"Testing.useEffect.loadTestResult.getDistanceRandomFactor\"]; // 长度不浮动\n const getLossRandomFactor = {\n \"Testing.useEffect.loadTestResult.getLossRandomFactor\": ()=>1 + (Math.random() * 0.02 - 0.01)\n }[\"Testing.useEffect.loadTestResult.getLossRandomFactor\"]; // 生成0.99到1.01之间的随机数\n // 先计算两个波长的损耗值\n const wave1Loss = wave1Data.Summary.totalLoss * getLossRandomFactor();\n const wave2Loss = wave2Data.Summary.totalLoss * getLossRandomFactor();\n // 如果是参考状态,增加0.1\n const finalWave1Loss = !cfpRefStatus ? wave1Loss : wave1Loss + 0.1;\n const finalWave2Loss = !cfpRefStatus ? wave2Loss : wave2Loss + 0.1;\n cfpMainInStatus = {\n wavelength1: {\n wave: wavelength1,\n distance: (wave1Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave1Loss.toFixed(2)\n },\n wavelength2: {\n wave: wavelength2,\n distance: (wave2Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave2Loss.toFixed(2)\n }\n };\n } catch (error) {\n setTimeout({\n \"Testing.useEffect.loadTestResult\": ()=>{\n setTotalToastMessage(\"被测链路与参考跳纤类型不一致,请检查\");\n }\n }[\"Testing.useEffect.loadTestResult\"], 1500); // 3000 毫秒 = 3 秒\n return;\n }\n }\n if (cfpOutResult) {\n try {\n // 加载第一个波长的数据\n const wave1Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpOutResult}/${wavelength1}-dump.json`);\n // 加载第二个波长的数据\n const wave2Data = await __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${cfpOutResult}/${wavelength2}-dump.json`);\n // 添加随机浮动因子(损耗上下浮动1%)\n const getDistanceRandomFactor = {\n \"Testing.useEffect.loadTestResult.getDistanceRandomFactor\": ()=>1\n }[\"Testing.useEffect.loadTestResult.getDistanceRandomFactor\"]; // 长度不浮动\n const getLossRandomFactor = {\n \"Testing.useEffect.loadTestResult.getLossRandomFactor\": ()=>1 + (Math.random() * 0.02 - 0.01)\n }[\"Testing.useEffect.loadTestResult.getLossRandomFactor\"]; // 生成0.99到1.01之间的随机数\n // 先计算两个波长的损耗值\n const wave1Loss = wave1Data.Summary.totalLoss * getLossRandomFactor();\n const wave2Loss = wave2Data.Summary.totalLoss * getLossRandomFactor();\n // 如果是参考状态,增加0.1\n const finalWave1Loss = !cfpRefStatus ? wave1Loss : wave1Loss + 0.1;\n const finalWave2Loss = !cfpRefStatus ? wave2Loss : wave2Loss + 0.1;\n cfpMainOutStatus = {\n wavelength1: {\n wave: wavelength1,\n distance: (wave1Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave1Loss.toFixed(2)\n },\n wavelength2: {\n wave: wavelength2,\n distance: (wave2Data.Summary.totalDistance * getDistanceRandomFactor()).toFixed(2),\n loss: finalWave2Loss.toFixed(2)\n }\n };\n } catch (error) {\n setTimeout({\n \"Testing.useEffect.loadTestResult\": ()=>{\n setToastMessage(\"未检测到光纤,请检查接口\");\n }\n }[\"Testing.useEffect.loadTestResult\"], 1500); // 3000 毫秒 = 3 秒\n return;\n }\n }\n // 结果计算与判断\n // 第一根光纤\n const cfpMainIndistance = cfpMainInStatus?.wavelength1?.distance || 0;\n const cfpMainIndistance2 = cfpMainInStatus?.wavelength2?.distance || 0;\n const cfpMainInloss = cfpMainInStatus?.wavelength1?.loss || 0;\n const cfpMainInloss2 = cfpMainInStatus?.wavelength2?.loss || 0;\n // 长度判断\n const maxLength = isMultiMode ? limitData.maxMMLength : limitData.maxSMLength;\n const isLengthValidIn = cfpMainIndistance <= maxLength && cfpMainIndistance2 <= maxLength;\n // 损耗判断\n const lossPerKm = isMultiMode ? limitData.lossPerKm850nm : limitData.lossPerKm1310nm;\n const lossPerKm2 = isMultiMode ? limitData.lossPerKm1300nm : limitData.lossPerKm1550nm;\n const totalLossLimit = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainIndistance / 1000 * lossPerKm : isMultiMode ? limitData.totalLoss850nm : limitData.totalLoss1310nm;\n const totalLossLimit2 = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainIndistance2 / 1000 * lossPerKm2 : isMultiMode ? limitData.totalLoss1300nm : limitData.totalLoss1550nm;\n const isLossValidIn = cfpMainInloss <= totalLossLimit && cfpMainInloss2 <= totalLossLimit2;\n // 第二根光纤\n const cfpMainOutdistance = cfpMainOutStatus?.wavelength1?.distance || 0;\n const cfpMainOutdistance2 = cfpMainOutStatus?.wavelength2?.distance || 0;\n const cfpMainOutloss = cfpMainOutStatus?.wavelength1?.loss || 0;\n const cfpMainOutloss2 = cfpMainOutStatus?.wavelength2?.loss || 0;\n // 长度判断\n const maxLengthOut = isMultiMode ? limitData.maxMMLength : limitData.maxSMLength;\n const isLengthValidOut = cfpMainOutdistance <= maxLength && cfpMainOutdistance2 <= maxLength;\n // 损耗判断\n const lossPerKmOut = isMultiMode ? limitData.lossPerKm850nm : limitData.lossPerKm1310nm;\n const lossPerKm2Out = isMultiMode ? limitData.lossPerKm1300nm : limitData.lossPerKm1550nm;\n const totalLossLimitOut = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainIndistance / 1000 * lossPerKmOut : isMultiMode ? limitData.totalLoss850nm : limitData.totalLoss1310nm;\n const totalLossLimit2Out = limitData.adapterLoss !== null ? connectorCount * limitData.adapterLoss + spliceCount * limitData.spliceLoss + cfpMainOutdistance2 / 1000 * lossPerKm2Out : isMultiMode ? limitData.totalLoss1300nm : limitData.totalLoss1550nm;\n const isLossValidOut = cfpMainOutloss <= totalLossLimitOut && cfpMainOutloss2 <= totalLossLimit2Out;\n // 结果判断\n const CFPResultStatus = isLengthValidIn && isLossValidIn && isLengthValidOut && isLossValidOut ? 'pass' : 'fail';\n // IN端口通过失败判断(根据 isMultiMode 判断使用哪组参数)\n const InPortStatus = isMultiMode ? isLengthValidIn && isLossValidIn ? 'pass' : 'fail' : isLengthValidOut && isLossValidOut ? 'pass' : 'fail';\n // OUT端口通过失败判断\n const OutPortStatus = isMultiMode ? isLengthValidOut && isLengthValidOut ? 'pass' : 'fail' : isLengthValidIn && isLossValidIn ? 'pass' : 'fail';\n testResult = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_6__.v4)(),\n name: currentCableId || '',\n name2: currentCableId2 || '',\n testconfig: JSON.parse(JSON.stringify(currentConfig || {})),\n operators: currentOperator?.name || '',\n CFPRef: cfpRefStatus,\n CFPRefConnect: cfpRefConnectStatus,\n CFPMainIn: cfpMainInStatus,\n isLengthValidIn,\n isLossValidIn,\n InPortStatus,\n isLengthValidOut,\n isLossValidOut,\n OutPortStatus,\n CFPMainOut: cfpMainOutStatus,\n CFPResultStatus,\n PortCleanStatus: isAllPathsClean\n };\n } else if (moduleType === 'ofp') {\n const ofpConnectionStatus = connectionStatus;\n let ofpResultStatus = 'fail';\n if (ofpResult.includes('pass')) {\n if (!ofpRefStatus) {\n if (connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-')) {\n ofpResultStatus = 'fail';\n } else {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'start') {\n if (connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-')) {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'end') {\n const hasSmOrMm = connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-');\n const hasSmcOrMmc = connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-');\n const hasConnectedSmOrMm = connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-');\n const hasConnectedSmcOrMmc = connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-');\n // 只有前导和末尾都是补偿线时才是pass,其他情况都是fail\n if (hasSmcOrMmc && hasConnectedSmcOrMmc) {\n ofpResultStatus = 'pass';\n } else {\n ofpResultStatus = 'fail';\n }\n }\n } else if (ofpResult === 'connector-fail-end') {\n if (!ofpRefStatus) {\n if (connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-')) {\n ofpResultStatus = 'fail';\n } else {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'start') {\n if (connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-')) {\n ofpResultStatus = 'pass';\n }\n } else if (ofpRefStatus === 'end') {\n const hasSmOrMm = connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-');\n const hasSmcOrMmc = connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-');\n const hasConnectedSmOrMm = connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-');\n const hasConnectedSmcOrMmc = connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-');\n // 只有前导和末尾都是补偿线时才是pass,其他情况都是fail\n if (hasSmcOrMmc && hasConnectedSmcOrMmc) {\n ofpResultStatus = 'pass';\n } else {\n ofpResultStatus = 'fail';\n }\n }\n } else if (ofpResult === 'connector-fail-start') {\n if (ofpRefStatus === 'start') {\n const hasSmOrMm = connectionStatus.OFPoutRefStatus.includes('sm-') || connectionStatus.OFPoutRefStatus.includes('mm-');\n const hasSmcOrMmc = connectionStatus.OFPoutRefStatus.includes('smc-') || connectionStatus.OFPoutRefStatus.includes('mmc-');\n if (hasSmOrMm) {\n ofpResultStatus = 'fail';\n } else if (hasSmcOrMmc) {\n ofpResultStatus = 'fail';\n }\n }\n }\n testResult = {\n id: (0,uuid__WEBPACK_IMPORTED_MODULE_6__.v4)(),\n name: currentProject?.cableIds[0]?.name || '',\n testconfig: JSON.parse(JSON.stringify(currentConfig || {})),\n operators: currentOperator?.name || '',\n ofpResult,\n ofpRefStatus,\n OFPRefConnect: ofpRefConnectStatus,\n ofpConnectionStatus,\n ofpResultStatus,\n PortCleanStatus: isAllPathsClean\n };\n }\n setTempTestResult(testResult);\n } catch (error) {\n console.error('加载测试结果失败:', error);\n }\n }\n }[\"Testing.useEffect.loadTestResult\"];\n loadTestResult();\n }\n }\n }[\"Testing.useEffect\"], [\n connectionStatus?.CopperWiremapStatus,\n connectionStatus?.CopperPerformanceStatus\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Testing.useEffect\": ()=>{\n if (tempTestResult) {\n const moduleType = tempTestResult.testconfig?.moduleType;\n let delayTime = 1500; // 默认延迟1.5秒\n if (moduleType === '8000') {\n delayTime = 5000; // 8000模块延迟5秒\n } else if (moduleType === 'cfp') {\n delayTime = 1500; // cfp模块延迟1.5秒\n } else if (moduleType === 'ofp') {\n delayTime = 6000; // ofp模块延迟6秒\n }\n const timer = setTimeout({\n \"Testing.useEffect.timer\": ()=>{\n navigateTo('resultinfo', 'nosave', tempTestResult);\n }\n }[\"Testing.useEffect.timer\"], delayTime);\n return ({\n \"Testing.useEffect\": ()=>clearTimeout(timer)\n })[\"Testing.useEffect\"];\n }\n }\n }[\"Testing.useEffect\"], [\n tempTestResult\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 717,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: \"进程\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 718,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[490px] bg-[#D5DFEB] relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0 bg-cover bg-center bg-no-repeat\",\n style: {\n backgroundImage: 'url(/testing.gif)'\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 723,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full top-8 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"flex items-center justify-center text-black text-xl font-bold\",\n children: currentConfig?.params?.limitValue || '未设置'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 730,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 729,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 721,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-center px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n onClick: ()=>navigateTo('home', 'main'),\n children: \"取消\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 737,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 736,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Testing.js\",\n lineNumber: 716,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9UZXN0aW5nLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0M7QUFDRjtBQUNDO0FBQ0Y7QUFDYjtBQUVwQyxZQUFZO0FBQ1osU0FBU1MsMEJBQTBCQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsVUFBVTtJQUMxRCxJQUFJO1FBQ0EsU0FBUztRQUNULE1BQU1DLFlBQVlELFdBQVdFLFFBQVEsQ0FBQztRQUN0QyxNQUFNQyxZQUFZSCxXQUFXRSxRQUFRLENBQUM7UUFFdEMsSUFBSUUsWUFBWUM7UUFFaEIsU0FBUztRQUNULE1BQU1DLHFCQUFxQlIsTUFBTVMsYUFBYVQsTUFBTSxDQUFDLHNCQUFzQjtRQUMzRSxNQUFNVSxzQkFBc0JULFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGdCQUFnQjtRQUVqRixJQUFJTyxzQkFBc0JFLHFCQUFxQjtZQUMzQyxNQUFNQyxRQUFRO2dCQUFDO2dCQUFVO2dCQUFVO2dCQUFVO2FBQVM7WUFDdEQsS0FBSyxNQUFNQyxRQUFRRCxNQUFPO2dCQUN0QixNQUFNRSxlQUFlTCxrQkFBa0IsQ0FBQ0ksS0FBSztnQkFDN0MsSUFBSUMsZ0JBQWdCQyxNQUFNQyxPQUFPLENBQUNGLGVBQWU7b0JBQzdDLElBQUssSUFBSUcsSUFBSSxHQUFHQSxJQUFJSCxhQUFhSSxNQUFNLElBQUlELElBQUlOLG9CQUFvQk8sTUFBTSxFQUFFRCxJQUFLO3dCQUM1RSxNQUFNRSxjQUFjTCxZQUFZLENBQUNHLEVBQUU7d0JBQ25DLE1BQU1HLFdBQVdULG1CQUFtQixDQUFDTSxFQUFFO3dCQUN2QyxJQUFJRSxnQkFBZ0JFLGFBQWFGLGdCQUFnQixRQUFRQyxhQUFhQyxhQUFhRCxhQUFhLE1BQU07NEJBQ2xHLE1BQU1FLFNBQVNGLFdBQVdHLEtBQUtDLEdBQUcsQ0FBQ0w7NEJBQ25DWixZQUFZZ0IsS0FBS0UsR0FBRyxDQUFDbEIsV0FBV2U7d0JBQ3BDO29CQUNKO2dCQUNKO1lBQ0o7UUFDSjtRQUVBLDBCQUEwQjtRQUMxQixJQUFJbEIsYUFBYUUsV0FBVztZQUN4QixNQUFNb0IsVUFBVXpCLE1BQU1TLGFBQWFULE1BQU0sQ0FBQyxVQUFVO1lBQ3BELE1BQU0wQixXQUFXekIsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLGdCQUFnQjtZQUUxRCxJQUFJd0IsV0FBV0MsVUFBVTtnQkFDckIsTUFBTWYsUUFBUTtvQkFBQztvQkFBVTtvQkFBVTtvQkFBVTtpQkFBUztnQkFDdEQsS0FBSyxNQUFNQyxRQUFRRCxNQUFPO29CQUN0QixNQUFNRSxlQUFlWSxPQUFPLENBQUNiLEtBQUs7b0JBQ2xDLElBQUlDLGdCQUFnQkMsTUFBTUMsT0FBTyxDQUFDRixlQUFlO3dCQUM3QyxJQUFLLElBQUlHLElBQUksR0FBR0EsSUFBSUgsYUFBYUksTUFBTSxJQUFJRCxJQUFJVSxTQUFTVCxNQUFNLEVBQUVELElBQUs7NEJBQ2pFLE1BQU1FLGNBQWNMLFlBQVksQ0FBQ0csRUFBRTs0QkFDbkMsTUFBTUcsV0FBV08sUUFBUSxDQUFDVixFQUFFOzRCQUM1QixJQUFJRSxnQkFBZ0JFLGFBQWFGLGdCQUFnQixRQUFRQyxhQUFhQyxhQUFhRCxhQUFhLE1BQU07Z0NBQ2xHLE1BQU1FLFNBQVNGLFdBQVdHLEtBQUtDLEdBQUcsQ0FBQ0w7Z0NBQ25DWixZQUFZZ0IsS0FBS0UsR0FBRyxDQUFDbEIsV0FBV2U7NEJBQ3BDO3dCQUNKO29CQUNKO2dCQUNKO1lBQ0o7UUFDSjtRQUVBLDJCQUEyQjtRQUMzQixJQUFJbEIsYUFBYUUsV0FBVztZQUN4QixNQUFNc0IsYUFBYTNCLE1BQU1TLGFBQWFULE1BQU0sQ0FBQyxhQUFhO1lBQzFELE1BQU00QixjQUFjM0IsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLGdCQUFnQjtZQUVoRSxJQUFJMEIsY0FBY0MsYUFBYTtnQkFDM0IsTUFBTWpCLFFBQVE7b0JBQUM7b0JBQVk7b0JBQVk7b0JBQVk7b0JBQVk7b0JBQVk7aUJBQVc7Z0JBQ3RGLEtBQUssTUFBTUMsUUFBUUQsTUFBTztvQkFDdEIsTUFBTUUsZUFBZWMsVUFBVSxDQUFDZixLQUFLO29CQUNyQyxJQUFJQyxnQkFBZ0JDLE1BQU1DLE9BQU8sQ0FBQ0YsZUFBZTt3QkFDN0MsSUFBSyxJQUFJRyxJQUFJLEdBQUdBLElBQUlILGFBQWFJLE1BQU0sSUFBSUQsSUFBSVksWUFBWVgsTUFBTSxFQUFFRCxJQUFLOzRCQUNwRSxNQUFNRSxjQUFjTCxZQUFZLENBQUNHLEVBQUU7NEJBQ25DLE1BQU1HLFdBQVdTLFdBQVcsQ0FBQ1osRUFBRTs0QkFDL0IsSUFBSUUsZ0JBQWdCRSxhQUFhRixnQkFBZ0IsUUFBUUMsYUFBYUMsYUFBYUQsYUFBYSxNQUFNO2dDQUNsRyxNQUFNRSxTQUFTRixXQUFXRyxLQUFLQyxHQUFHLENBQUNMO2dDQUNuQ1osWUFBWWdCLEtBQUtFLEdBQUcsQ0FBQ2xCLFdBQVdlOzRCQUNwQzt3QkFDSjtvQkFDSjtnQkFDSjtZQUNKO1FBQ0o7UUFFQSxPQUFPZixjQUFjQyxXQUFXLElBQUlEO0lBQ3hDLEVBQUUsT0FBT3VCLE9BQU87UUFDWkMsUUFBUUQsS0FBSyxDQUFDLHdDQUF3Q0E7UUFDdEQsT0FBTztJQUNYO0FBQ0o7QUFFZSxTQUFTRTtJQUNwQixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHckMsb0VBQXdCLEdBQUd1QyxVQUFVLENBQUNDLE9BQU87SUFDOUQsTUFBTSxFQUFFQyxVQUFVLEVBQ1ZDLG9CQUFvQixFQUNwQkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2QsR0FBRy9DLCtEQUFlQTtJQUMzQixNQUFNZ0QsZ0JBQWdCTjtJQUN0QixNQUFNLEVBQUVPLGdCQUFnQixFQUFDQyxvQkFBb0IsRUFBRSxHQUFHakQsOERBQWNBO0lBRWhFLFlBQVk7SUFDWixNQUFNa0Qsb0JBQW9CRixrQkFBa0JHLFlBQVlDLE9BQU9DLElBQUksQ0FBQ0wsaUJBQWlCRyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUc7SUFDckcsTUFBTUcsc0JBQXNCTixrQkFBa0JPLGNBQWNILE9BQU9DLElBQUksQ0FBQ0wsaUJBQWlCTyxXQUFXLENBQUMsQ0FBQyxFQUFFLEdBQUc7SUFDM0csTUFBTUMsZ0JBQWdCTixvQkFBb0JGLGlCQUFpQkcsU0FBUyxDQUFDRCxrQkFBa0IsRUFBRU8sTUFBTTtJQUMvRixNQUFNQyxrQkFBa0JKLHNCQUFzQk4saUJBQWlCTyxXQUFXLENBQUNELG9CQUFvQixFQUFFRyxNQUFNO0lBQ3ZHLE1BQU1FLGtCQUFrQjVELG9FQUF3QixJQUFJNkQsS0FBS0MsUUFBUUMsVUFBVTtJQUUzRSxhQUFhO0lBRWIsTUFBTUMsWUFBWWhCLGNBQWNpQixNQUFNLENBQUNELFNBQVM7SUFDaEQsTUFBTUUsY0FBY0YsVUFBVXZELFFBQVEsQ0FBQztJQUN2QyxNQUFNMEQsZUFBZW5FLG9FQUF3QixJQUFJNkQsS0FBS08sS0FBS0wsVUFBVTtJQUNyRSxNQUFNTSxzQkFBc0JyRSxvRUFBd0IsSUFBSTZELEtBQUtPLEtBQUtFLGlCQUFpQjtJQUVuRixNQUFNQyxjQUFjTCxjQUFjakIsa0JBQWtCdUIsWUFBWXZCLGtCQUFrQndCO0lBQ2xGLE1BQU1DLGVBQWVSLGNBQWNqQixrQkFBa0J3QixhQUFheEIsa0JBQWtCdUI7SUFHcEYsZ0JBQWdCO0lBQ2hCLE1BQU1HLGNBQWNULGNBQWMsUUFBUTtJQUMxQyxNQUFNVSxjQUFjVixjQUFjLFNBQVM7SUFFM0MsYUFBYTtJQUNiLE1BQU1XLGFBQWExQixvQkFBb0JGLGlCQUFpQkcsU0FBUyxDQUFDRCxrQkFBa0IsRUFBRU8sTUFBTTtJQUM1RixNQUFNb0IsZUFBZTlFLG9FQUF3QixJQUFJNkQsS0FBS2tCLEtBQUtoQixVQUFVO0lBQ3JFLE1BQU1pQixzQkFBc0JoRixvRUFBd0IsSUFBSTZELEtBQUtrQixLQUFLVCxpQkFBaUI7SUFDbkYsTUFBTSxDQUFDVyxnQkFBZ0JDLGtCQUFrQixHQUFHdEYsK0NBQVFBLENBQUM7SUFFckQsYUFBYTtJQUNiLE1BQU11RixhQUFhbkMsZUFBZW1DO0lBRWxDLGlCQUFpQjtJQUNqQixNQUFNQyx3QkFBd0IsQ0FBQ0M7UUFDM0IsSUFBSSxDQUFDQSxTQUFTQSxNQUFNL0QsTUFBTSxLQUFLLEdBQUcsT0FBTztRQUV6QyxjQUFjO1FBQ2QsTUFBTWdFLGFBQWFELE1BQU1FLE1BQU0sQ0FBQ0MsQ0FBQUE7WUFDNUIsTUFBTUMsY0FBY0MsU0FBU0MsY0FBYyxDQUFDSDtZQUM1QyxPQUFPQyxhQUFhRyxhQUFhLGVBQWU7UUFDcEQ7UUFFQSxhQUFhO1FBQ2IsT0FBT04sV0FBV2hFLE1BQU07SUFDNUI7SUFFQSxJQUFJdUUsc0JBQXNCLENBQUM7SUFDM0IsSUFBSUMsa0JBQWtCLEdBQUcsZUFBZTtJQUV4QywwQkFBMEI7SUFDMUIsSUFBSVgsZUFBZSxTQUFTQSxlQUFlLE9BQU87UUFDOUMsSUFBSUEsZUFBZSxPQUFPO1lBQ3RCLGNBQWM7WUFDZCxNQUFNWSxjQUFjOUMsa0JBQWtCRyxXQUFXLENBQUMsY0FBYyxFQUFFNEMsUUFBUSxFQUFFO1lBQzVFLE1BQU1DLGVBQWVoRCxrQkFBa0JHLFdBQVcsQ0FBQ2MsY0FBYyxvQkFBb0Isa0JBQWtCLEVBQUU4QixRQUFRLEVBQUU7WUFDbkgsTUFBTUUsZ0JBQWdCakQsa0JBQWtCTyxhQUFhLENBQUMsZ0JBQWdCLEVBQUV3QyxRQUFRLEVBQUU7WUFDbEYsTUFBTUcsaUJBQWlCbEQsa0JBQWtCTyxhQUFhLENBQUNVLGNBQWMsc0JBQXNCLG9CQUFvQixFQUFFOEIsUUFBUSxFQUFFO1lBRTNILGdCQUFnQjtZQUNoQixNQUFNSSxjQUFjaEIsc0JBQXNCVztZQUMxQyxNQUFNTSxlQUFlakIsc0JBQXNCYTtZQUMzQyxNQUFNSyxnQkFBZ0JsQixzQkFBc0JjO1lBQzVDLE1BQU1LLGlCQUFpQm5CLHNCQUFzQmU7WUFFN0MsZ0JBQWdCO1lBQ2hCLE1BQU1LLGFBQWFULFlBQVl6RSxNQUFNLEdBQUcyRSxhQUFhM0UsTUFBTSxHQUMxQzRFLGNBQWM1RSxNQUFNLEdBQUc2RSxlQUFlN0UsTUFBTTtZQUM3RCxNQUFNbUYsZUFBZUwsY0FBY0MsZUFDaEJDLGdCQUFnQkM7WUFFbkMsU0FBUztZQUNULElBQUlFLGlCQUFpQixHQUFHWCxrQkFBa0I7aUJBQ3JDLElBQUlXLGVBQWVELFlBQVlWLGtCQUFrQjtpQkFDakQsSUFBSVcsaUJBQWlCRCxZQUFZVixrQkFBa0I7WUFFeERELHNCQUFzQjtnQkFDbEJPLGFBQWFBLGdCQUFnQkwsWUFBWXpFLE1BQU07Z0JBQy9DK0UsY0FBY0EsaUJBQWlCSixhQUFhM0UsTUFBTTtnQkFDbERnRixlQUFlQSxrQkFBa0JKLGNBQWM1RSxNQUFNO2dCQUNyRGlGLGdCQUFnQkEsbUJBQW1CSixlQUFlN0UsTUFBTTtZQUM1RDtRQUNKLE9BQU87WUFDSCxpQkFBaUI7WUFDakIsTUFBTTJFLGVBQWVoRCxrQkFBa0JHLFdBQVcsQ0FBQ2MsY0FBYyxvQkFBb0Isa0JBQWtCLEVBQUU4QixRQUFRLEVBQUU7WUFDbkgsTUFBTVMsZUFBZXJCLHNCQUFzQmE7WUFFM0MsU0FBUztZQUNULElBQUlRLGlCQUFpQixHQUFHWCxrQkFBa0I7aUJBQ3JDLElBQUlXLGVBQWVSLGFBQWEzRSxNQUFNLEVBQUV3RSxrQkFBa0I7aUJBQzFELElBQUlXLGlCQUFpQlIsYUFBYTNFLE1BQU0sRUFBRXdFLGtCQUFrQjtZQUVqRUQsc0JBQXNCO2dCQUNsQlEsY0FBY0ksaUJBQWlCUixhQUFhM0UsTUFBTTtZQUN0RDtRQUNKO0lBQ0o7SUFJQXpCLGdEQUFTQTs2QkFBQztZQUNOLElBQUksQ0FBQ29GLGdCQUFnQjtnQkFDakIsTUFBTXlCO3dEQUFpQjt3QkFDbkIsSUFBSTs0QkFDQSxNQUFNQyxpQkFBaUJoRTs0QkFDdkIsTUFBTWlFLGtCQUFrQmhFOzRCQUN4QixjQUFjOzRCQUNkLE1BQU1pRSxpQkFBaUJoRSxvQkFBb0JpRSxJQUFJOzRCQUMvQyxlQUFlOzRCQUNmLE1BQU1DLGtCQUFrQmpFLHFCQUFxQmdFLElBQUk7NEJBQ2pELE1BQU1FLHNCQUFzQi9ELGtCQUFrQitEOzRCQUM5QyxNQUFNQywwQkFBMEJoRSxrQkFBa0JnRTs0QkFDbEQsTUFBTUMsWUFBWWpFLGtCQUFrQmtFOzRCQUNwQyxNQUFNaEMsYUFBYW5DLGVBQWVtQzs0QkFDbEMsTUFBTW5CLFlBQVloQixlQUFlaUIsUUFBUUQ7NEJBQ3pDLE1BQU1vRCxZQUFZcEUsZUFBZWlCLFFBQVFtRDs0QkFFekMsSUFBSUM7NEJBRUosZUFBZTs0QkFDZixJQUFJbEMsZUFBZSxRQUFRO2dDQUN2QixJQUFJbUMscUJBQXFCO2dDQUN6QixJQUFJQyw0QkFBNEI7Z0NBRWhDLElBQUlQLHdCQUF3QixRQUFTO29DQUNqQyxJQUFJSSxjQUFjLFdBQ2RBLGNBQWMsdUJBQ2RBLGNBQWMsa0JBQWtCO3dDQUNoQ0csNEJBQTRCO3dDQUM1QnBGLFFBQVFxRixHQUFHLENBQUNEO29DQUNoQjtnQ0FDSixPQUFPLElBQUlQLHdCQUF3QixjQUFjO29DQUM3QyxJQUFJSSxjQUFjLHVCQUNkQSxjQUFjLGtCQUFrQjt3Q0FDaENHLDRCQUE0QjtvQ0FDaEMsT0FBTyxJQUFJSCxjQUFjLFNBQVM7d0NBQzlCRyw0QkFBNEI7d0NBQzVCRCxxQkFBcUI7b0NBQ3pCO2dDQUNKLE9BQU0sSUFBSU4sd0JBQXdCLFNBQVM7b0NBQ3ZDLElBQUlJLGNBQWMsU0FBUzt3Q0FDdkJHLDRCQUE0Qjt3Q0FDNUJELHFCQUFxQjtvQ0FDekIsT0FDSyxJQUFJdEQsVUFBVXZELFFBQVEsQ0FBQyxVQUFVO3dDQUNsQzhHLDRCQUE0QjtvQ0FDaEMsT0FDSyxJQUFJdkQsVUFBVXZELFFBQVEsQ0FBQyxVQUFVO3dDQUNsQzhHLDRCQUE0Qjt3Q0FDNUJELHFCQUFxQjtvQ0FDekI7Z0NBQ0o7Z0NBRUEsSUFBSUMsOEJBQThCLFFBQVE7b0NBQ3RDLElBQUk7d0NBQ0EsTUFBTUUsV0FBVyxNQUFNLDRGQUFPLEdBQWdCLEVBQUVSLHdCQUF3QixNQUFNLENBQUM7d0NBQy9FLE1BQU01RyxPQUFPb0gsU0FBU0MsT0FBTzt3Q0FFN0IsU0FBUzt3Q0FDVCxNQUFNbkgsYUFBYXlDLGVBQWVpQixRQUFRMUQ7d0NBQzFDLElBQUk7NENBQ0Esb0NBQW9DOzRDQUNwQyxNQUFNb0gsV0FBV3BILFdBQVdxSCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7NENBQzNDLHdCQUF3Qjs0Q0FDeEIsTUFBTUMsZ0JBQWdCLE1BQU0seUdBQU8sR0FBZ0IsRUFBRUYsU0FBUyxhQUFhLENBQUM7NENBQzVFLE1BQU1ySCxZQUFZdUg7NENBRWxCLFlBQVk7NENBQ1osTUFBTUMsY0FBYztnREFBQztnREFBUTtnREFBUTtnREFBUTtnREFBVztnREFBUztnREFDN0M7Z0RBQVM7Z0RBQVk7Z0RBQVU7Z0RBQVE7Z0RBQU87Z0RBQVU7NkNBQUs7NENBQ2pGLE1BQU1DLGVBQWU7Z0RBQ2pCLFFBQVE7Z0RBQ1IsUUFBUTtnREFDUixRQUFRO2dEQUNSLFdBQVc7Z0RBQ1gsU0FBUztnREFDVCxZQUFZO2dEQUNaLFNBQVM7Z0RBQ1QsWUFBWTtnREFDWixVQUFVO2dEQUNWLFFBQVE7Z0RBQ1IsT0FBTztnREFDUCxVQUFVO2dEQUNWLE1BQU07NENBQ1Y7NENBRUEsSUFBSUMsb0JBQW9COzRDQUV4QixPQUFPOzRDQUNQLElBQUkxSCxVQUFVMkgsTUFBTSxJQUFJNUgsS0FBS1MsV0FBVyxDQUFDbUgsTUFBTSxFQUFFO2dEQUM3QyxNQUFNQyxjQUFjO29EQUFDO29EQUFVO29EQUFVO29EQUFVO2lEQUFTO2dEQUM1RCxLQUFLLE1BQU1qSCxRQUFRaUgsWUFBYTtvREFDNUIsSUFBSTdILEtBQUtTLFdBQVcsQ0FBQ21ILE1BQU0sQ0FBQ2hILEtBQUssR0FBR1gsVUFBVTJILE1BQU0sRUFBRTt3REFDbERELG9CQUFvQjt3REFDcEI7b0RBQ0o7Z0RBQ0o7NENBQ0o7NENBRUEsT0FBTzs0Q0FDUCxJQUFJMUgsVUFBVTZILElBQUksSUFBSTlILEtBQUtTLFdBQVcsQ0FBQ3NILEdBQUcsRUFBRUQsTUFBTTtnREFDOUMsTUFBTUUsWUFBWTtvREFBQztvREFBVTtvREFBVTtvREFBVTtpREFBUztnREFDMUQsS0FBSyxNQUFNcEgsUUFBUW9ILFVBQVc7b0RBQzFCLElBQUloSSxLQUFLUyxXQUFXLENBQUNzSCxHQUFHLENBQUNELElBQUksQ0FBQ2xILEtBQUssR0FBR1gsVUFBVTZILElBQUksRUFBRTt3REFDbERILG9CQUFvQjt3REFDcEI3RixRQUFRcUYsR0FBRyxDQUFDO3dEQUNaO29EQUNKO2dEQUNKOzRDQUNKOzRDQUVBLHVCQUF1Qjs0Q0FDdkIsTUFBTWMsU0FBUy9ILFlBQVlFLFNBQVM7NENBQ3BDLE1BQU04SCxTQUFTaEksWUFBWUUsU0FBUzs0Q0FDcEMsc0JBQXNCOzRDQUN0QixJQUFJLENBQUM2SCxVQUFVQyxNQUFLLEtBQU1sSSxLQUFLUyxXQUFXLENBQUNzSCxHQUFHLEVBQUU7Z0RBQzVDLGNBQWM7Z0RBQ2QsSUFBSTlILFVBQVVrSSxPQUFPLElBQUluSSxLQUFLUyxXQUFXLENBQUNzSCxHQUFHLENBQUNJLE9BQU8sRUFBRTtvREFDbkQsTUFBTUMsZUFBZTt3REFBQzt3REFBVTt3REFBVTt3REFBVTtxREFBUztvREFDN0QsS0FBSyxNQUFNeEgsUUFBUXdILGFBQWM7d0RBQzdCLElBQUk5RyxLQUFLQyxHQUFHLENBQUN2QixLQUFLUyxXQUFXLENBQUNzSCxHQUFHLENBQUNJLE9BQU8sQ0FBQ3ZILEtBQUssSUFBSVgsVUFBVWtJLE9BQU8sRUFBRTs0REFDbEVSLG9CQUFvQjs0REFDcEI3RixRQUFRcUYsR0FBRyxDQUFDOzREQUNaO3dEQUNKO29EQUNKO2dEQUNKO2dEQUVBLGVBQWU7Z0RBQ2YsSUFBSWxILFVBQVVvSSxNQUFNLElBQUlySSxLQUFLUyxXQUFXLENBQUNzSCxHQUFHLENBQUNNLE1BQU0sRUFBRTtvREFDakQsTUFBTUMsY0FBYzt3REFBQzt3REFBWTt3REFBWTt3REFBWTt3REFBWTt3REFBWTtxREFBVztvREFDNUYsS0FBSyxNQUFNMUgsUUFBUTBILFlBQWE7d0RBQzVCLElBQUloSCxLQUFLQyxHQUFHLENBQUN2QixLQUFLUyxXQUFXLENBQUNzSCxHQUFHLENBQUNNLE1BQU0sQ0FBQ3pILEtBQUssSUFBSVgsVUFBVW9JLE1BQU0sRUFBRTs0REFDaEVWLG9CQUFvQjs0REFDcEI3RixRQUFRcUYsR0FBRyxDQUFDOzREQUNaO3dEQUNKO29EQUNKO2dEQUNKOzRDQUNKOzRDQUVBLEtBQUssTUFBTW9CLGNBQWNkLFlBQWE7Z0RBQ2xDLE1BQU1lLFlBQVlkLFlBQVksQ0FBQ2EsV0FBVztnREFFMUMsWUFBWTtnREFDWixJQUFJQSxlQUFlLE1BQU07b0RBQ3JCLE1BQU1FLG1CQUFtQjFJLDBCQUEwQkMsTUFBTUMsV0FBV0M7b0RBQ3BFLElBQUl1SSxtQkFBbUIsR0FBRzt3REFDdEJkLG9CQUFvQjtvREFDeEI7b0RBQ0E7Z0RBQ0o7Z0RBRUEsSUFBSSxDQUFDYSxhQUFhLENBQUN4SSxNQUFNUyxhQUFhVCxNQUFNLENBQUN3SSxVQUFVLElBQUksQ0FBQ3ZJLFdBQVcsQ0FBQ3VJLFVBQVUsRUFBRTtnREFFcEYsTUFBTUUsV0FBVzFJLEtBQUtTLFdBQVcsQ0FBQ1QsSUFBSSxDQUFDd0ksVUFBVTtnREFDakQsTUFBTUcsY0FBYzFJLFNBQVMsQ0FBQ3VJLFVBQVUsRUFBRSxDQUFDLGlCQUFpQixJQUFJLEVBQUU7Z0RBRWxFLE1BQU03SCxRQUFRO29EQUFDO29EQUFhO2lEQUFhLENBQUNQLFFBQVEsQ0FBQ29JLGFBQy9DO29EQUFDO29EQUFZO29EQUFZO29EQUFZO29EQUFZO29EQUFZO2lEQUFXLEdBQ3hFO29EQUFDO29EQUFjO2lEQUFjLENBQUNwSSxRQUFRLENBQUNvSSxhQUNuQztvREFBQztvREFBWTtvREFBWTtvREFBWTtvREFBWTtvREFBWTtvREFDNUQ7b0RBQVk7b0RBQVk7b0RBQVk7b0RBQVk7b0RBQVk7aURBQVcsR0FDeEU7b0RBQUM7b0RBQVU7b0RBQVU7b0RBQVU7aURBQVM7Z0RBRWhELElBQUssSUFBSUksUUFBUSxHQUFHQSxRQUFRRCxZQUFZMUgsTUFBTSxJQUFJLENBQUMwRyxtQkFBbUJpQixRQUFTO29EQUMzRSxNQUFNMUksYUFBYXlJLFdBQVcsQ0FBQ0MsTUFBTTtvREFDckMsSUFBSTFJLGVBQWVrQixhQUFhbEIsZUFBZSxNQUFNO29EQUVyRCxLQUFLLE1BQU1VLFFBQVFELE1BQU87d0RBQ3RCLE1BQU1PLGNBQWN3SCxRQUFRLENBQUM5SCxLQUFLLEVBQUUsQ0FBQ2dJLE1BQU07d0RBQzNDLElBQUkxSCxnQkFBZ0JFLGFBQWFGLGdCQUFnQixNQUFNOzREQUNuRCxNQUFNRyxTQUFTa0gsZUFBZSxTQUMxQmpILEtBQUtDLEdBQUcsQ0FBQ3JCLGNBQWNvQixLQUFLQyxHQUFHLENBQUNMLGVBQ2hDSSxLQUFLQyxHQUFHLENBQUNMLGVBQWVoQjs0REFDNUIsSUFBSW1CLFNBQVMsR0FBRztnRUFDWnNHLG9CQUFvQjtnRUFDcEI7NERBQ0o7d0RBQ0o7b0RBQ0o7Z0RBQ0o7NENBQ0o7NENBRUFWLHFCQUFxQlUsb0JBQW9CLFNBQVM7d0NBQ3RELEVBQUUsT0FBTzlGLE9BQU87NENBQ1pDLFFBQVFELEtBQUssQ0FBQyw4QkFBOEJBO3dDQUNoRDtvQ0FDSixFQUFFLE9BQU9BLE9BQU87d0NBQ1pDLFFBQVFELEtBQUssQ0FBQyxhQUFhQTtvQ0FDL0I7Z0NBQ0o7Z0NBQ0FtRixhQUFhO29DQUNUNkIsSUFBSS9JLHdDQUFNQTtvQ0FDVjJHLE1BQU1ILGdCQUFnQndDLFFBQVEsQ0FBQyxFQUFFLEVBQUVyQyxRQUFRO29DQUMzQ3NDLFlBQVlDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsU0FBUyxDQUFDdkcsaUJBQWlCLENBQUM7b0NBQ3hEd0csV0FBVzVDLGlCQUFpQkUsUUFBUTtvQ0FDcENFO29DQUNBTztvQ0FDQU47b0NBQ0F3QyxXQUFXN0Y7b0NBQ1gwRDtnQ0FDSjs0QkFDSixPQUFPLElBQUluQyxlQUFlLE9BQVE7Z0NBQzlCLFFBQVE7Z0NBQ1IsTUFBTTVFLGFBQWF5QyxlQUFlaUIsUUFBUTFEO2dDQUMxQyxNQUFNbUosWUFBWUMsa0hBQTBDO2dDQUM1RCxNQUFNQyxZQUFZRixTQUFTLENBQUNuSixXQUFXO2dDQUV2QyxJQUFJcUosV0FBVztvQ0FDWCx5QkFBeUI7b0NBQ3pCLE1BQU0sRUFDRkMsV0FBVyxFQUNYQyxvQkFBb0IsRUFDcEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGNBQWMsRUFDZEMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGVBQWUsRUFDZkMsV0FBVyxFQUNYQyxXQUFXLEVBQ2QsR0FBR1g7Z0NBQ1I7Z0NBQ0EsU0FBUztnQ0FDVCxNQUFNWSxpQkFBaUJ4SCxlQUFlaUIsUUFBUXVHO2dDQUM5QyxNQUFNQyxjQUFjekgsZUFBZWlCLFFBQVF3RztnQ0FDM0MsTUFBTUMsWUFBWTFILGVBQWVpQixRQUFReUc7Z0NBRXpDLElBQUlDLGtCQUFrQjtnQ0FDdEIsSUFBSUMsbUJBQW1CO2dDQUV2QixJQUFJckcsYUFBYTtvQ0FDYixJQUFJO3dDQUNBLGFBQWE7d0NBQ2IsTUFBTXNHLFlBQVksTUFBTSx1R0FBTyxHQUFlLEVBQUV0RyxZQUFZLENBQUMsRUFBRUksWUFBWSxXQUFXLENBQUM7d0NBQ3ZGLGFBQWE7d0NBQ2IsTUFBTW1HLFlBQVksTUFBTSx1R0FBTyxHQUFlLEVBQUV2RyxZQUFZLENBQUMsRUFBRUssWUFBWSxXQUFXLENBQUM7d0NBRXZGLHFCQUFxQjt3Q0FDckIsTUFBTW1HO3dHQUEwQixJQUFNO3VHQUFHLFFBQVE7d0NBQ2pELE1BQU1DO29HQUFzQixJQUFNLElBQUtySixDQUFBQSxLQUFLc0osTUFBTSxLQUFLLE9BQU8sSUFBRzttR0FBSSxvQkFBb0I7d0NBRXpGLGNBQWM7d0NBQ2QsTUFBTUMsWUFBWUwsVUFBVU0sT0FBTyxDQUFDQyxTQUFTLEdBQUdKO3dDQUNoRCxNQUFNSyxZQUFZUCxVQUFVSyxPQUFPLENBQUNDLFNBQVMsR0FBR0o7d0NBQ2hELGdCQUFnQjt3Q0FDaEIsTUFBTU0saUJBQWlCLENBQUNuSCxlQUFlK0csWUFBWUEsWUFBWTt3Q0FDL0QsTUFBTUssaUJBQWlCLENBQUNwSCxlQUFla0gsWUFBWUEsWUFBWTt3Q0FFL0RWLGtCQUFrQjs0Q0FDZGhHLGFBQWE7Z0RBQ1Q2RyxNQUFNN0c7Z0RBQ044RyxVQUFVLENBQUNaLFVBQVVNLE9BQU8sQ0FBQ08sYUFBYSxHQUFHWCx5QkFBd0IsRUFBR1ksT0FBTyxDQUFDO2dEQUNoRkMsTUFBTU4sZUFBZUssT0FBTyxDQUFDOzRDQUNqQzs0Q0FDQS9HLGFBQWE7Z0RBQ1Q0RyxNQUFNNUc7Z0RBQ042RyxVQUFVLENBQUNYLFVBQVVLLE9BQU8sQ0FBQ08sYUFBYSxHQUFHWCx5QkFBd0IsRUFBR1ksT0FBTyxDQUFDO2dEQUNoRkMsTUFBTUwsZUFBZUksT0FBTyxDQUFDOzRDQUNqQzt3Q0FDSjtvQ0FFSixFQUFFLE9BQU96SixPQUFPO3dDQUNaMko7Z0ZBQVc7Z0RBQ1AzSSxxQkFBcUI7NENBQ3pCOytFQUFHLE9BQU8sZ0JBQWdCO3dDQUMxQjtvQ0FDSjtnQ0FDSjtnQ0FDQSxJQUFJd0IsY0FBYztvQ0FDZCxJQUFJO3dDQUNBLGFBQWE7d0NBQ2IsTUFBTW1HLFlBQVksTUFBTSx1R0FBTyxHQUFlLEVBQUVuRyxhQUFhLENBQUMsRUFBRUMsWUFBWSxXQUFXLENBQUM7d0NBQ3hGLGFBQWE7d0NBQ2IsTUFBTW1HLFlBQVksTUFBTSx1R0FBTyxHQUFlLEVBQUVwRyxhQUFhLENBQUMsRUFBRUUsWUFBWSxXQUFXLENBQUM7d0NBRXhGLHFCQUFxQjt3Q0FDckIsTUFBTW1HO3dHQUEwQixJQUFNO3VHQUFHLFFBQVE7d0NBQ2pELE1BQU1DO29HQUFzQixJQUFNLElBQUtySixDQUFBQSxLQUFLc0osTUFBTSxLQUFLLE9BQU8sSUFBRzttR0FBSSxvQkFBb0I7d0NBRXpGLGNBQWM7d0NBQ2QsTUFBTUMsWUFBWUwsVUFBVU0sT0FBTyxDQUFDQyxTQUFTLEdBQUdKO3dDQUNoRCxNQUFNSyxZQUFZUCxVQUFVSyxPQUFPLENBQUNDLFNBQVMsR0FBR0o7d0NBQ2hELGdCQUFnQjt3Q0FDaEIsTUFBTU0saUJBQWlCLENBQUNuSCxlQUFlK0csWUFBWUEsWUFBWTt3Q0FDL0QsTUFBTUssaUJBQWlCLENBQUNwSCxlQUFla0gsWUFBWUEsWUFBWTt3Q0FFL0RULG1CQUFtQjs0Q0FDZmpHLGFBQWE7Z0RBQ1Q2RyxNQUFNN0c7Z0RBQ044RyxVQUFVLENBQUNaLFVBQVVNLE9BQU8sQ0FBQ08sYUFBYSxHQUFHWCx5QkFBd0IsRUFBR1ksT0FBTyxDQUFDO2dEQUNoRkMsTUFBTU4sZUFBZUssT0FBTyxDQUFDOzRDQUNqQzs0Q0FDQS9HLGFBQWE7Z0RBQ1Q0RyxNQUFNNUc7Z0RBQ042RyxVQUFVLENBQUNYLFVBQVVLLE9BQU8sQ0FBQ08sYUFBYSxHQUFHWCx5QkFBd0IsRUFBR1ksT0FBTyxDQUFDO2dEQUNoRkMsTUFBTUwsZUFBZUksT0FBTyxDQUFDOzRDQUNqQzt3Q0FDSjtvQ0FDSixFQUFFLE9BQU96SixPQUFPO3dDQUNaMko7Z0ZBQVc7Z0RBQ1A5SSxnQkFBZ0I7NENBQ3BCOytFQUFHLE9BQU8sZ0JBQWdCO3dDQUMxQjtvQ0FDSjtnQ0FDSjtnQ0FDQSxVQUFVO2dDQUNWLFFBQVE7Z0NBQ1IsTUFBTStJLG9CQUFvQm5CLGlCQUFpQmhHLGFBQWE4RyxZQUFZO2dDQUNwRSxNQUFNTSxxQkFBcUJwQixpQkFBaUIvRixhQUFhNkcsWUFBWTtnQ0FDckUsTUFBTU8sZ0JBQWdCckIsaUJBQWlCaEcsYUFBYWlILFFBQVE7Z0NBQzVELE1BQU1LLGlCQUFpQnRCLGlCQUFpQi9GLGFBQWFnSCxRQUFRO2dDQUM3RCxPQUFPO2dDQUNQLE1BQU1NLFlBQVloSSxjQUFjMEYsVUFBVXVDLFdBQVcsR0FBR3ZDLFVBQVVVLFdBQVc7Z0NBQzdFLE1BQU04QixrQkFBa0JOLHFCQUFxQkksYUFDekJILHNCQUFzQkc7Z0NBQzFDLE9BQU87Z0NBQ1AsTUFBTUcsWUFBWW5JLGNBQWUwRixVQUFVTSxjQUFjLEdBQUdOLFVBQVVRLGVBQWU7Z0NBQ3JGLE1BQU1rQyxhQUFhcEksY0FBZTBGLFVBQVUyQyxlQUFlLEdBQUczQyxVQUFVUyxlQUFlO2dDQUV2RixNQUFNbUMsaUJBQWlCNUMsVUFBVUMsV0FBVyxLQUFLLE9BQzdDVyxpQkFBaUJaLFVBQVVDLFdBQVcsR0FDdENZLGNBQWNiLFVBQVVHLFVBQVUsR0FDbEMsb0JBQW1CLE9BQVFzQyxZQUN6Qm5JLGNBQ0cwRixVQUFVNkMsY0FBYyxHQUFHN0MsVUFBVUksZUFBZTtnQ0FFN0QsTUFBTTBDLGtCQUFrQjlDLFVBQVVDLFdBQVcsS0FBSyxPQUM5Q1csaUJBQWlCWixVQUFVQyxXQUFXLEdBQ3RDWSxjQUFjYixVQUFVRyxVQUFVLEdBQ2xDLHFCQUFvQixPQUFRdUMsYUFDMUJwSSxjQUNHMEYsVUFBVStDLGVBQWUsR0FBRy9DLFVBQVVLLGVBQWU7Z0NBRTlELE1BQU0yQyxnQkFBZ0JaLGlCQUFpQlEsa0JBQ3ZCUCxrQkFBa0JTO2dDQUVsQyxRQUFRO2dDQUNSLE1BQU1HLHFCQUFxQmpDLGtCQUFrQmpHLGFBQWE4RyxZQUFZO2dDQUN0RSxNQUFNcUIsc0JBQXNCbEMsa0JBQWtCaEcsYUFBYTZHLFlBQVk7Z0NBQ3ZFLE1BQU1zQixpQkFBaUJuQyxrQkFBa0JqRyxhQUFhaUgsUUFBUTtnQ0FDOUQsTUFBTW9CLGtCQUFrQnBDLGtCQUFrQmhHLGFBQWFnSCxRQUFRO2dDQUMvRCxPQUFPO2dDQUNQLE1BQU1xQixlQUFlL0ksY0FBYzBGLFVBQVV1QyxXQUFXLEdBQUd2QyxVQUFVVSxXQUFXO2dDQUNoRixNQUFNNEMsbUJBQW1CTCxzQkFBc0JYLGFBQ3ZCWSx1QkFBdUJaO2dDQUMvQyxPQUFPO2dDQUNQLE1BQU1pQixlQUFlakosY0FBZTBGLFVBQVVNLGNBQWMsR0FBR04sVUFBVVEsZUFBZTtnQ0FDeEYsTUFBTWdELGdCQUFnQmxKLGNBQWUwRixVQUFVMkMsZUFBZSxHQUFHM0MsVUFBVVMsZUFBZTtnQ0FFMUYsTUFBTWdELG9CQUFvQnpELFVBQVVDLFdBQVcsS0FBSyxPQUNoRFcsaUJBQWlCWixVQUFVQyxXQUFXLEdBQ3RDWSxjQUFjYixVQUFVRyxVQUFVLEdBQ2xDLG9CQUFtQixPQUFRb0QsZUFDekJqSixjQUNHMEYsVUFBVTZDLGNBQWMsR0FBRzdDLFVBQVVJLGVBQWU7Z0NBRTdELE1BQU1zRCxxQkFBcUIxRCxVQUFVQyxXQUFXLEtBQUssT0FDakRXLGlCQUFpQlosVUFBVUMsV0FBVyxHQUN0Q1ksY0FBY2IsVUFBVUcsVUFBVSxHQUNsQyxzQkFBcUIsT0FBUXFELGdCQUMzQmxKLGNBQ0cwRixVQUFVK0MsZUFBZSxHQUFHL0MsVUFBVUssZUFBZTtnQ0FFOUQsTUFBTXNELGlCQUFpQlIsa0JBQWtCTSxxQkFDakJMLG1CQUFtQk07Z0NBRzNDLE9BQU87Z0NBQ1AsTUFBTUUsa0JBQWtCcEIsbUJBQW1CUSxpQkFBaUJNLG9CQUFvQkssaUJBQWlCLFNBQVM7Z0NBQzFHLHNDQUFzQztnQ0FDdEMsTUFBTUUsZUFBZXZKLGNBQ2RrSSxtQkFBbUJRLGdCQUFnQixTQUFTLFNBQzVDTSxvQkFBb0JLLGlCQUFpQixTQUFTO2dDQUNyRCxjQUFjO2dDQUNkLE1BQU1HLGdCQUFnQnhKLGNBQ2ZnSixvQkFBb0JBLG1CQUFtQixTQUFTLFNBQ2hEZCxtQkFBbUJRLGdCQUFnQixTQUFTO2dDQUVuRHZGLGFBQWE7b0NBQ1Q2QixJQUFJL0ksd0NBQU1BO29DQUNWMkcsTUFBTUQsa0JBQWtCO29DQUN4QjhHLE9BQU81RyxtQkFBbUI7b0NBQzFCcUMsWUFBWUMsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxTQUFTLENBQUN2RyxpQkFBaUIsQ0FBQztvQ0FDeER3RyxXQUFXNUMsaUJBQWlCRSxRQUFRO29DQUNwQzhHLFFBQU96SjtvQ0FDUDBKLGVBQWN4SjtvQ0FDZEcsV0FBVW1HO29DQUNWeUI7b0NBQ0FRO29DQUNBYTtvQ0FDQVA7b0NBQ0FLO29DQUNBRztvQ0FDQWpKLFlBQVdtRztvQ0FDWDRDO29DQUNBTSxpQkFBZ0JoSTtnQ0FDcEI7NEJBQ0osT0FBTyxJQUFJWCxlQUFlLE9BQU87Z0NBRTdCLE1BQU80SSxzQkFBc0I5SztnQ0FFN0IsSUFBSStLLGtCQUFrQjtnQ0FFdEIsSUFBSTlHLFVBQVV6RyxRQUFRLENBQUMsU0FBUztvQ0FDNUIsSUFBSSxDQUFDcUUsY0FBYzt3Q0FFZixJQUFJN0IsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFVBQVV3QyxpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUMsUUFBUTs0Q0FDdEd1TixrQkFBa0I7d0NBQ3RCLE9BQU87NENBQ0hBLGtCQUFrQjt3Q0FDdEI7b0NBRUosT0FBTyxJQUFJbEosaUJBQWlCLFNBQVM7d0NBQ2pDLElBQUk3QixpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUMsV0FBV3dDLGlCQUFpQmdMLGVBQWUsQ0FBQ3hOLFFBQVEsQ0FBQyxTQUFTOzRDQUN4R3VOLGtCQUFrQjt3Q0FDdEI7b0NBQ0osT0FBTyxJQUFJbEosaUJBQWlCLE9BQU87d0NBQy9CLE1BQU1vSixZQUFZakwsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFVBQVV3QyxpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUM7d0NBQ2hILE1BQU0wTixjQUFjbEwsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFdBQVd3QyxpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUM7d0NBQ25ILE1BQU0yTixxQkFBcUJuTCxpQkFBaUJvTCx1QkFBdUIsRUFBRTVOLFNBQVMsVUFBVXdDLGlCQUFpQm9MLHVCQUF1QixFQUFFNU4sU0FBUzt3Q0FDM0ksTUFBTTZOLHVCQUF1QnJMLGlCQUFpQm9MLHVCQUF1QixFQUFFNU4sU0FBUyxXQUFXd0MsaUJBQWlCb0wsdUJBQXVCLEVBQUU1TixTQUFTO3dDQUU5SSxpQ0FBaUM7d0NBQ2pDLElBQUkwTixlQUFlRyxzQkFBc0I7NENBQ3JDTixrQkFBa0I7d0NBQ3RCLE9BQU87NENBQ0hBLGtCQUFrQjt3Q0FDdEI7b0NBQ0o7Z0NBQ0osT0FBTyxJQUFJOUcsY0FBYyxzQkFBc0I7b0NBQzNDLElBQUksQ0FBQ3BDLGNBQWM7d0NBRWYsSUFBSTdCLGlCQUFpQmdMLGVBQWUsQ0FBQ3hOLFFBQVEsQ0FBQyxVQUFVd0MsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFFBQVE7NENBQ3RHdU4sa0JBQWtCO3dDQUN0QixPQUFPOzRDQUNIQSxrQkFBa0I7d0NBQ3RCO29DQUVKLE9BQU8sSUFBSWxKLGlCQUFpQixTQUFTO3dDQUNqQyxJQUFJN0IsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFdBQVd3QyxpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUMsU0FBUzs0Q0FDeEd1TixrQkFBa0I7d0NBQ3RCO29DQUNKLE9BQU8sSUFBSWxKLGlCQUFpQixPQUFPO3dDQUMvQixNQUFNb0osWUFBWWpMLGlCQUFpQmdMLGVBQWUsQ0FBQ3hOLFFBQVEsQ0FBQyxVQUFVd0MsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDO3dDQUNoSCxNQUFNME4sY0FBY2xMLGlCQUFpQmdMLGVBQWUsQ0FBQ3hOLFFBQVEsQ0FBQyxXQUFXd0MsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDO3dDQUNuSCxNQUFNMk4scUJBQXFCbkwsaUJBQWlCb0wsdUJBQXVCLEVBQUU1TixTQUFTLFVBQVV3QyxpQkFBaUJvTCx1QkFBdUIsRUFBRTVOLFNBQVM7d0NBQzNJLE1BQU02Tix1QkFBdUJyTCxpQkFBaUJvTCx1QkFBdUIsRUFBRTVOLFNBQVMsV0FBV3dDLGlCQUFpQm9MLHVCQUF1QixFQUFFNU4sU0FBUzt3Q0FFL0ksaUNBQWlDO3dDQUNoQyxJQUFJME4sZUFBZUcsc0JBQXNCOzRDQUNyQ04sa0JBQWtCO3dDQUN0QixPQUFPOzRDQUNIQSxrQkFBa0I7d0NBQ3RCO29DQUNKO2dDQUNKLE9BQU0sSUFBSTlHLGNBQWMsd0JBQXdCO29DQUM1QyxJQUFJcEMsaUJBQWlCLFNBQVM7d0NBQ3RCLE1BQU1vSixZQUFZakwsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFVBQVV3QyxpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUM7d0NBQ2hILE1BQU0wTixjQUFjbEwsaUJBQWlCZ0wsZUFBZSxDQUFDeE4sUUFBUSxDQUFDLFdBQVd3QyxpQkFBaUJnTCxlQUFlLENBQUN4TixRQUFRLENBQUM7d0NBQ25ILElBQUd5TixXQUFVOzRDQUNURixrQkFBa0I7d0NBQ3RCLE9BQU0sSUFBR0csYUFBWTs0Q0FDakJILGtCQUFrQjt3Q0FDdEI7b0NBQ0o7Z0NBQ0o7Z0NBRUozRyxhQUFhO29DQUNUNkIsSUFBSS9JLHdDQUFNQTtvQ0FDVjJHLE1BQU1ILGdCQUFnQndDLFFBQVEsQ0FBQyxFQUFFLEVBQUVyQyxRQUFRO29DQUMzQ3NDLFlBQVlDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsU0FBUyxDQUFDdkcsaUJBQWlCLENBQUM7b0NBQ3hEd0csV0FBVzVDLGlCQUFpQkUsUUFBUTtvQ0FDcENJO29DQUNBcEM7b0NBQ0F5SixlQUFjdko7b0NBQ2QrSTtvQ0FDQUM7b0NBQ0FGLGlCQUFnQmhJO2dDQUNwQjs0QkFDSjs0QkFFQVosa0JBQWtCbUM7d0JBQ3RCLEVBQUUsT0FBT25GLE9BQU87NEJBQ1pDLFFBQVFELEtBQUssQ0FBQyxhQUFhQTt3QkFDL0I7b0JBQ0o7O2dCQUNBd0U7WUFDSjtRQUNKOzRCQUFHO1FBQUN6RCxrQkFBa0IrRDtRQUFxQi9ELGtCQUFrQmdFO0tBQXdCO0lBRXJGcEgsZ0RBQVNBOzZCQUFDO1lBQ04sSUFBSW9GLGdCQUFnQjtnQkFDaEIsTUFBTUUsYUFBYUYsZUFBZW1FLFVBQVUsRUFBRWpFO2dCQUM5QyxJQUFJcUosWUFBWSxNQUFNLFdBQVc7Z0JBRWpDLElBQUlySixlQUFlLFFBQVE7b0JBQ3ZCcUosWUFBWSxNQUFNLGFBQWE7Z0JBQ25DLE9BQU8sSUFBSXJKLGVBQWUsT0FBTztvQkFDN0JxSixZQUFZLE1BQU0sY0FBYztnQkFDcEMsT0FBTyxJQUFJckosZUFBZSxPQUFPO29CQUM3QnFKLFlBQVksTUFBTSxZQUFZO2dCQUNsQztnQkFFQSxNQUFNQyxRQUFRNUM7K0NBQVc7d0JBQ3JCcEosV0FBVyxjQUFjLFVBQVV3QztvQkFDdkM7OENBQUd1SjtnQkFDSDt5Q0FBTyxJQUFNRSxhQUFhRDs7WUFDOUI7UUFDSjs0QkFBRztRQUFDeEo7S0FBZTtJQUVuQixxQkFDSSw4REFBQzBKO1FBQUlDLFdBQVU7OzBCQUNYLDhEQUFDOU8saUVBQVNBOzs7OzswQkFDViw4REFBQ0MsZ0VBQVFBO2dCQUNMOE8sT0FBTTs7Ozs7OzBCQUVWLDhEQUFDRjtnQkFBSUMsV0FBVTs7a0NBRVgsOERBQUNEO3dCQUNHQyxXQUFVO3dCQUNWRSxPQUFPOzRCQUFFQyxpQkFBaUI7d0JBQW9COzs7Ozs7a0NBSWxELDhEQUFDSjt3QkFBSUMsV0FBVTtrQ0FDWCw0RUFBQ0k7NEJBQUtKLFdBQVU7c0NBQ1g1TCxlQUFlaUIsUUFBUTFELGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQUtsRCw4REFBQ29PO2dCQUFJQyxXQUFVOzBCQUNILDRFQUFDSztvQkFDR0wsV0FBVTtvQkFDVk0sU0FBUyxJQUFNek0sV0FBVyxRQUFROzhCQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekIiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvZHN4cGFnZS9nZW5lcmFsL1Rlc3RpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBTdGF0dXNCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vU3RhdHVzQmFyJztcclxuaW1wb3J0IFRpdGxlQmFyIGZyb20gJ0AvY29tcG9uZW50cy9saWIvL1RpdGxlQmFyJztcclxuaW1wb3J0IHVzZURpc3BsYXlTdG9yZSBmcm9tICdAL3N0b3JlL2Rpc3BsYXlTdG9yZSc7XHJcbmltcG9ydCB1c2VEZXZpY2VTdG9yZSBmcm9tICdAL3N0b3JlL2RldmljZVN0b3JlJztcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcblxyXG4vLyDorqHnrpfnlLXpmLvkvZnph4/nmoTlh73mlbBcclxuZnVuY3Rpb24gY2FsY3VsYXRlUmVzaXN0YW5jZU1hcmdpbihkYXRhLCBsaW1pdGRhdGEsIGxpbWl0VmFsdWUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8g5Yik5pat5rWL6K+V57G75Z6LXHJcbiAgICAgICAgY29uc3QgaXNQb0VUZXN0ID0gbGltaXRWYWx1ZS5pbmNsdWRlcygnK1BvRScpO1xyXG4gICAgICAgIGNvbnN0IGlzQUxMVGVzdCA9IGxpbWl0VmFsdWUuaW5jbHVkZXMoJytBTEwnKTtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbWluTWFyZ2luID0gSW5maW5pdHk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5Zue6Lev55S16Zi76K6h566XXHJcbiAgICAgICAgY29uc3QgbG9vcFJlc2lzdGFuY2VEYXRhID0gZGF0YT8ucGVyZm9ybWFuY2U/LmRhdGE/LlsnTG9vcCBSZXNpc3RhbmNlICjOqSknXTtcclxuICAgICAgICBjb25zdCBsb29wUmVzaXN0YW5jZUxpbWl0ID0gbGltaXRkYXRhPy5bJ0xvb3AgUmVzaXN0YW5jZSAozqkpJ10/LlsnUEFJUkxpbWl0ICjOqSknXTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAobG9vcFJlc2lzdGFuY2VEYXRhICYmIGxvb3BSZXNpc3RhbmNlTGltaXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFpcnMgPSBbJ1BBSVIxMicsICdQQUlSMzYnLCAnUEFJUjQ1JywgJ1BBSVI3OCddO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlcyA9IGxvb3BSZXNpc3RhbmNlRGF0YVtwYWlyXTtcclxuICAgICAgICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZXMgJiYgQXJyYXkuaXNBcnJheShhY3R1YWxWYWx1ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZXMubGVuZ3RoICYmIGkgPCBsb29wUmVzaXN0YW5jZUxpbWl0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFZhbCA9IGxvb3BSZXNpc3RhbmNlTGltaXRbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbFZhbHVlICE9PSBudWxsICYmIGxpbWl0VmFsICE9PSB1bmRlZmluZWQgJiYgbGltaXRWYWwgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IGxpbWl0VmFsIC0gTWF0aC5hYnMoYWN0dWFsVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBtYXJnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOe6v+WvuVVCTOiuoeeul++8iOS7heWcqCtQb0XmiJYrQUxM5rWL6K+V5pe277yJXHJcbiAgICAgICAgaWYgKGlzUG9FVGVzdCB8fCBpc0FMTFRlc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgdWJsRGF0YSA9IGRhdGE/LnBlcmZvcm1hbmNlPy5kYXRhPy5bJ1VCTCAozqkpJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHVibExpbWl0ID0gbGltaXRkYXRhPy5bJ1VCTCAozqkpJ10/LlsnUEFJUkxpbWl0ICjOqSknXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh1YmxEYXRhICYmIHVibExpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYWlycyA9IFsnUEFJUjEyJywgJ1BBSVIzNicsICdQQUlSNDUnLCAnUEFJUjc4J107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZXMgPSB1YmxEYXRhW3BhaXJdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZXMgJiYgQXJyYXkuaXNBcnJheShhY3R1YWxWYWx1ZXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsVmFsdWVzLmxlbmd0aCAmJiBpIDwgdWJsTGltaXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWwgPSB1YmxMaW1pdFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbFZhbHVlICE9PSBudWxsICYmIGxpbWl0VmFsICE9PSB1bmRlZmluZWQgJiYgbGltaXRWYWwgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBsaW1pdFZhbCAtIE1hdGguYWJzKGFjdHVhbFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIG1hcmdpbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUDJQVUJM6K6h566X77yI5LuF5ZyoK1BvReaIlitBTEzmtYvor5Xml7bvvIlcclxuICAgICAgICBpZiAoaXNQb0VUZXN0IHx8IGlzQUxMVGVzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBwMnBVYmxEYXRhID0gZGF0YT8ucGVyZm9ybWFuY2U/LmRhdGE/LlsnUDJQVUJMICjOqSknXTtcclxuICAgICAgICAgICAgY29uc3QgcDJwVWJsTGltaXQgPSBsaW1pdGRhdGE/LlsnUDJQVUJMICjOqSknXT8uWydQQUlSTGltaXQgKM6pKSddO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHAycFVibERhdGEgJiYgcDJwVWJsTGltaXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhaXJzID0gWydQQUlSMTIzNicsICdQQUlSMTI0NScsICdQQUlSMTI3OCcsICdQQUlSMzY0NScsICdQQUlSMzY3OCcsICdQQUlSNDU3OCddO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWVzID0gcDJwVWJsRGF0YVtwYWlyXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWVzICYmIEFycmF5LmlzQXJyYXkoYWN0dWFsVmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbFZhbHVlcy5sZW5ndGggJiYgaSA8IHAycFVibExpbWl0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0VmFsID0gcDJwVWJsTGltaXRbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxWYWx1ZSAhPT0gbnVsbCAmJiBsaW1pdFZhbCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0VmFsICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gbGltaXRWYWwgLSBNYXRoLmFicyhhY3R1YWxWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBtYXJnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtaW5NYXJnaW4gPT09IEluZmluaXR5ID8gMCA6IG1pbk1hcmdpbjtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2FsY3VsYXRpbmcgcmVzaXN0YW5jZSBtYXJnaW46JywgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUZXN0aW5nKCkge1xyXG4gICAgY29uc3QgeyB2aWV3IH0gPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5uYXZpZ2F0aW9uLmN1cnJlbnQ7XHJcbiAgICBjb25zdCB7IG5hdmlnYXRlVG8sXHJcbiAgICAgICAgICAgIGdldEN1cnJlbnRUZXN0Q29uZmlnLFxyXG4gICAgICAgICAgICBnZXRDdXJyZW50UHJvamVjdCxcclxuICAgICAgICAgICAgZ2V0Q3VycmVudE9wZXJhdG9yLFxyXG4gICAgICAgICAgICBnZXRDdXJyZW50Q2FibGVJZCxcclxuICAgICAgICAgICAgZ2V0Q3VycmVudENhYmxlSWQyLFxyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UsXHJcbiAgICAgICAgICAgIH0gPSB1c2VEaXNwbGF5U3RvcmUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDdXJyZW50VGVzdENvbmZpZygpO1xyXG4gICAgY29uc3QgeyBjb25uZWN0aW9uU3RhdHVzLHNldFRvdGFsVG9hc3RNZXNzYWdlIH0gPSB1c2VEZXZpY2VTdG9yZSgpO1xyXG4gICAgXHJcbiAgICAvLyDpk5znvIbmtYvor5Xot6/lvoTlkoznirbmgIFcclxuICAgIGNvbnN0IGNvcHBlck1haW5QYXRoS2V5ID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzID8gT2JqZWN0LmtleXMoY29ubmVjdGlvblN0YXR1cy5tYWluUGF0aHMpWzBdIDogbnVsbDtcclxuICAgIGNvbnN0IGNvcHBlclJlbW90ZVBhdGhLZXkgPSBjb25uZWN0aW9uU3RhdHVzPy5yZW1vdGVQYXRocyA/IE9iamVjdC5rZXlzKGNvbm5lY3Rpb25TdGF0dXMucmVtb3RlUGF0aHMpWzBdIDogbnVsbDtcclxuICAgIGNvbnN0IGNvcHBlcm1haW5lbmQgPSBjb3BwZXJNYWluUGF0aEtleSA/IGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzW2NvcHBlck1haW5QYXRoS2V5XT8uZW5kIDogbnVsbDtcclxuICAgIGNvbnN0IGNvcHBlcnJlbW90ZWVuZCA9IGNvcHBlclJlbW90ZVBhdGhLZXkgPyBjb25uZWN0aW9uU3RhdHVzLnJlbW90ZVBhdGhzW2NvcHBlclJlbW90ZVBhdGhLZXldPy5lbmQgOiBudWxsO1xyXG4gICAgY29uc3QgY29wcGVyUmVmU3RhdHVzID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCk/LnJlZj8uY29wcGVyPy5zdGF0dXMgfHwgbnVsbDtcclxuICAgIFxyXG4gICAgLy8gQ0ZQ5rWL6K+V6Lev5b6E5ZKM54q25oCBXHJcbiAgICBcclxuICAgIGNvbnN0IGNhYmxlVHlwZSA9IGN1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZTtcclxuICAgIGNvbnN0IGlzTXVsdGlNb2RlID0gY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpO1xyXG4gICAgY29uc3QgY2ZwUmVmU3RhdHVzID0gdXNlRGlzcGxheVN0b3JlLmdldFN0YXRlKCk/LnJlZj8uY2ZwPy5zdGF0dXMgfHwgbnVsbDtcclxuICAgIGNvbnN0IGNmcFJlZkNvbm5lY3RTdGF0dXMgPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKT8ucmVmPy5jZnA/LmNvbm5lY3RTdGF0dXMgfHwgbnVsbDtcclxuICAgIFxyXG4gICAgY29uc3QgY2ZwSW5SZXN1bHQgPSBpc011bHRpTW9kZSA/IGNvbm5lY3Rpb25TdGF0dXM/LkNGUE1haW5JbiA6IGNvbm5lY3Rpb25TdGF0dXM/LkNGUE1haW5PdXQ7XHJcbiAgICBjb25zdCBjZnBPdXRSZXN1bHQgPSBpc011bHRpTW9kZSA/IGNvbm5lY3Rpb25TdGF0dXM/LkNGUE1haW5PdXQgOiBjb25uZWN0aW9uU3RhdHVzPy5DRlBNYWluSW47IFxyXG5cclxuXHJcbiAgICAvLyDojrflj5Zpc011bHRpTW9kZVxyXG4gICAgY29uc3Qgd2F2ZWxlbmd0aDEgPSBpc011bHRpTW9kZSA/ICc4NTAnIDogJzEzMTAnO1xyXG4gICAgY29uc3Qgd2F2ZWxlbmd0aDIgPSBpc011bHRpTW9kZSA/ICcxMzAwJyA6ICcxNTUwJztcclxuICAgIFxyXG4gICAgLy8gT0ZQ5rWL6K+V6Lev5b6E5ZKM54q25oCBXHJcbiAgICBjb25zdCBvZnBNYWluRW5kID0gY29wcGVyTWFpblBhdGhLZXkgPyBjb25uZWN0aW9uU3RhdHVzLm1haW5QYXRoc1tjb3BwZXJNYWluUGF0aEtleV0/LmVuZCA6IG51bGw7XHJcbiAgICBjb25zdCBvZnBSZWZTdGF0dXMgPSB1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKT8ucmVmPy5vZnA/LnN0YXR1cyB8fCBudWxsO1xyXG4gICAgY29uc3Qgb2ZwUmVmQ29ubmVjdFN0YXR1cyA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpPy5yZWY/Lm9mcD8uY29ubmVjdFN0YXR1cyB8fCBudWxsO1xyXG4gICAgY29uc3QgW3RlbXBUZXN0UmVzdWx0LCBzZXRUZW1wVGVzdFJlc3VsdF0gPSB1c2VTdGF0ZShudWxsKTtcclxuXHJcbiAgICAvLyDojrflj5bmtYvor5Xpk77ot6/muIXmtIHnirbmgIFcclxuICAgIGNvbnN0IG1vZHVsZVR5cGUgPSBjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlO1xyXG5cclxuICAgIC8vIOajgOafpei3r+W+hOS4reaJgOacieerr+WPo+eahOa4hea0geeKtuaAgVxyXG4gICAgY29uc3QgY2hlY2tQb3J0c0NsZWFuU3RhdHVzID0gKHBhdGhzKSA9PiB7XHJcbiAgICAgICAgaWYgKCFwYXRocyB8fCBwYXRocy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmo4Dmn6Xmr4/kuKrnq6/lj6PnmoTmuIXmtIHnirbmgIFcclxuICAgICAgICBjb25zdCBjbGVhblBvcnRzID0gcGF0aHMuZmlsdGVyKHBvcnRJZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9ydElkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBvcnRFbGVtZW50Py5nZXRBdHRyaWJ1dGUoJ2xjY2xlYW4nKSA9PT0gJ3RydWUnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDov5Tlm57lt7LmuIXmtIHnmoTnq6/lj6PmlbDph49cclxuICAgICAgICByZXR1cm4gY2xlYW5Qb3J0cy5sZW5ndGg7XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBhbGxQYXRoc0NsZWFuU3RhdHVzID0ge307XHJcbiAgICBsZXQgaXNBbGxQYXRoc0NsZWFuID0gMDsgLy8g6buY6K6k5Li6MO+8jOihqOekuuWFqOmDqOacqua4hea0gVxyXG5cclxuICAgIC8vIOWPquWcqOaooeWdl+exu+Wei+S4uiBjZnAg5oiWIG9mcCDml7bmiafooYzmo4DmtYtcclxuICAgIGlmIChtb2R1bGVUeXBlID09PSAnY2ZwJyB8fCBtb2R1bGVUeXBlID09PSAnb2ZwJykge1xyXG4gICAgICAgIGlmIChtb2R1bGVUeXBlID09PSAnY2ZwJykge1xyXG4gICAgICAgICAgICAvLyBDRlDmqKHlnZfmo4DmtYvmiYDmnInot6/lvoRcclxuICAgICAgICAgICAgY29uc3QgbWFpbkluUGF0aHMgPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LlsnbWFpbi1jZnAtaW4nXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgbWFpbk91dFBhdGhzID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5baXNNdWx0aU1vZGUgPyAnbWFpbi1jZnAtbW0tb3V0JyA6ICdtYWluLWNmcC1zbS1vdXQnXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgcmVtb3RlSW5QYXRocyA9IGNvbm5lY3Rpb25TdGF0dXM/LnJlbW90ZVBhdGhzPy5bJ3JlbW90ZS1jZnAtaW4nXT8ucGF0aCB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgcmVtb3RlT3V0UGF0aHMgPSBjb25uZWN0aW9uU3RhdHVzPy5yZW1vdGVQYXRocz8uW2lzTXVsdGlNb2RlID8gJ3JlbW90ZS1jZnAtbW0tb3V0JyA6ICdyZW1vdGUtY2ZwLXNtLW91dCddPy5wYXRoIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8g6I635Y+W5q+P5Liq6Lev5b6E55qE5riF5rSB56uv5Y+j5pWw6YePXHJcbiAgICAgICAgICAgIGNvbnN0IG1haW5JbkNsZWFuID0gY2hlY2tQb3J0c0NsZWFuU3RhdHVzKG1haW5JblBhdGhzKTtcclxuICAgICAgICAgICAgY29uc3QgbWFpbk91dENsZWFuID0gY2hlY2tQb3J0c0NsZWFuU3RhdHVzKG1haW5PdXRQYXRocyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW90ZUluQ2xlYW4gPSBjaGVja1BvcnRzQ2xlYW5TdGF0dXMocmVtb3RlSW5QYXRocyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW90ZU91dENsZWFuID0gY2hlY2tQb3J0c0NsZWFuU3RhdHVzKHJlbW90ZU91dFBhdGhzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOiuoeeul+aAu+err+WPo+aVsOWSjOW3sua4hea0geerr+WPo+aVsFxyXG4gICAgICAgICAgICBjb25zdCB0b3RhbFBvcnRzID0gbWFpbkluUGF0aHMubGVuZ3RoICsgbWFpbk91dFBhdGhzLmxlbmd0aCArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUluUGF0aHMubGVuZ3RoICsgcmVtb3RlT3V0UGF0aHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBjbGVhbmVkUG9ydHMgPSBtYWluSW5DbGVhbiArIG1haW5PdXRDbGVhbiArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSW5DbGVhbiArIHJlbW90ZU91dENsZWFuO1xyXG5cclxuICAgICAgICAgICAgLy8g6K6+572u5riF5rSB54q25oCBXHJcbiAgICAgICAgICAgIGlmIChjbGVhbmVkUG9ydHMgPT09IDApIGlzQWxsUGF0aHNDbGVhbiA9IDA7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNsZWFuZWRQb3J0cyA8IHRvdGFsUG9ydHMpIGlzQWxsUGF0aHNDbGVhbiA9IDE7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNsZWFuZWRQb3J0cyA9PT0gdG90YWxQb3J0cykgaXNBbGxQYXRoc0NsZWFuID0gMjtcclxuXHJcbiAgICAgICAgICAgIGFsbFBhdGhzQ2xlYW5TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICBtYWluSW5DbGVhbjogbWFpbkluQ2xlYW4gPT09IG1haW5JblBhdGhzLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIG1haW5PdXRDbGVhbjogbWFpbk91dENsZWFuID09PSBtYWluT3V0UGF0aHMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgcmVtb3RlSW5DbGVhbjogcmVtb3RlSW5DbGVhbiA9PT0gcmVtb3RlSW5QYXRocy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICByZW1vdGVPdXRDbGVhbjogcmVtb3RlT3V0Q2xlYW4gPT09IHJlbW90ZU91dFBhdGhzLmxlbmd0aFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIE9GUOaooeWdl+WPquajgOa1i+S4u+acuui+k+WHuuerr+WPo1xyXG4gICAgICAgICAgICBjb25zdCBtYWluT3V0UGF0aHMgPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/Lltpc011bHRpTW9kZSA/ICdtYWluLW9mcC1tbS1vdXQnIDogJ21haW4tb2ZwLXNtLW91dCddPy5wYXRoIHx8IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBjbGVhbmVkUG9ydHMgPSBjaGVja1BvcnRzQ2xlYW5TdGF0dXMobWFpbk91dFBhdGhzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOiuvue9rua4hea0geeKtuaAgVxyXG4gICAgICAgICAgICBpZiAoY2xlYW5lZFBvcnRzID09PSAwKSBpc0FsbFBhdGhzQ2xlYW4gPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjbGVhbmVkUG9ydHMgPCBtYWluT3V0UGF0aHMubGVuZ3RoKSBpc0FsbFBhdGhzQ2xlYW4gPSAxO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjbGVhbmVkUG9ydHMgPT09IG1haW5PdXRQYXRocy5sZW5ndGgpIGlzQWxsUGF0aHNDbGVhbiA9IDI7XHJcblxyXG4gICAgICAgICAgICBhbGxQYXRoc0NsZWFuU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgbWFpbk91dENsZWFuOiBjbGVhbmVkUG9ydHMgPT09IG1haW5PdXRQYXRocy5sZW5ndGhcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGVtcFRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9hZFRlc3RSZXN1bHQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gZ2V0Q3VycmVudFByb2plY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50T3BlcmF0b3IgPSBnZXRDdXJyZW50T3BlcmF0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDojrflj5blvZPliY3pgInkuK3nmoTnlLXnvIZJRFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkID0gZ2V0Q3VycmVudENhYmxlSWQoKS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjemAieS4reeahOeUtee8hklEMlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDYWJsZUlkMiA9IGdldEN1cnJlbnRDYWJsZUlkMigpLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29wcGVyV2lyZW1hcFN0YXR1cyA9IGNvbm5lY3Rpb25TdGF0dXM/LkNvcHBlcldpcmVtYXBTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29wcGVyUGVyZm9ybWFuY2VTdGF0dXMgPSBjb25uZWN0aW9uU3RhdHVzPy5Db3BwZXJQZXJmb3JtYW5jZVN0YXR1cztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZnBSZXN1bHQgPSBjb25uZWN0aW9uU3RhdHVzPy5PRlBTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlVHlwZSA9IGN1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FibGVUeXBlID0gY3VycmVudENvbmZpZz8ucGFyYW1zPy5jYWJsZVR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lyZU9yZGVyID0gY3VycmVudENvbmZpZz8ucGFyYW1zPy53aXJlT3JkZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXN0UmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4jeWQjOaooeWdl+e7hOijhea1i+ivlee7k+aenOmAu+i+kVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGVUeXBlID09PSAnODAwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IENvcHBlclJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ29wcGVyV2lyZW1hcFN0YXR1cyA9PT0gJ3Bhc3MnICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVPcmRlciA9PT0gJ1Q1NjhCJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlciA9PT0gJ0V0aGVybmV0IFR3by1QYWlyJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpcmVPcmRlciA9PT0gJ00xMi1EIFR3by1QYWlyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQ29wcGVyV2lyZW1hcFN0YXR1cyA9PT0gJ3Bhc3MtMnBhaXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lyZU9yZGVyID09PSAnRXRoZXJuZXQgVHdvLVBhaXInIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lyZU9yZGVyID09PSAnTTEyLUQgVHdvLVBhaXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2lyZU9yZGVyID09PSAnVDU2OEInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmIChDb3BwZXJXaXJlbWFwU3RhdHVzID09PSAnc29wZW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lyZU9yZGVyID09PSAnVDU2OEInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYWJsZVR5cGUuaW5jbHVkZXMoJ1UvVVRQJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJXaXJlbWFwUmVzdWx0U3RhdHVzID0gJ3Bhc3MnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhYmxlVHlwZS5pbmNsdWRlcygnRi9VVFAnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0NPUFBFUi8ke0NvcHBlclBlcmZvcm1hbmNlU3RhdHVzfS5qc29uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yqg6L296ZmQ5Yi25pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8ubGltaXRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDku45saW1pdFZhbHVl5Lit5o+Q5Y+W5Z+656GA5ZCN56ewKOenu+mZpCtQb0XlkowrQUxM5ZCO57yAKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGxpbWl0VmFsdWUuc3BsaXQoJyAoKycpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkvb/nlKjln7rnoYDlkI3np7DliqDovb3luKbmnIkoK0FMTCnlkI7nvIDnmoTmlofku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZXNwb25zZSA9IGF3YWl0IGltcG9ydChgQC9zdG9yZS9DT1BQRVIvJHtiYXNlTmFtZX0gKCtBTEwpLmpzb25gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRkYXRhID0gbGltaXRSZXNwb25zZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiuoeeul+aJgOacieWPguaVsOeahOS9memHj1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVRpdGxlcyA9IFsn5o+S5YWl5o2f6ICXJywgJ+WbnuazouaNn+iAlycsICdORVhUJywgJ1BTIE5FWFQnLCAnQUNSLU4nLCAnUFMgQUNSLU4nLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUNSLUYnLCAnUFMgQUNSLUYnLCAnQ0RORVhUJywgJ0NNUkwnLCAnVENMJywgJ0VMVENUTCcsICfnlLXpmLsnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUdyb3VwTWFwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+aPkuWFpeaNn+iAlyc6ICdJbnNlcnRpb24gTG9zcyAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICflm57ms6LmjZ/ogJcnOiAnUkwgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTkVYVCc6ICdORVhUIChkQiknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BTIE5FWFQnOiAnUFMgTkVYVCAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBQ1ItTic6ICdBQ1ItTiAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQUyBBQ1ItTic6ICdQUyBBQ1ItTiAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBQ1ItRic6ICdBQ1ItRiAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQUyBBQ1ItRic6ICdQUyBBQ1ItRiAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDRE5FWFQnOiAnQ0RORVhUIChkQiknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NNUkwnOiAnQ01STCAoZEIpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUQ0wnOiAnVENMIChkQiknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VMVENUTCc6ICdFTFRDVEwgKGRCKScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn55S16Zi7JzogJ1Jlc2lzdGFuY2UgKM6pKSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNOZWdhdGl2ZU1hcmdpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6ZW/5bqm5Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdGRhdGEuTEVOR1RIICYmIGRhdGEucGVyZm9ybWFuY2UuTEVOR1RIKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGhQYWlycyA9IFsnUEFJUjEyJywgJ1BBSVIzNicsICdQQUlSNDUnLCAnUEFJUjc4J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgbGVuZ3RoUGFpcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5wZXJmb3JtYW5jZS5MRU5HVEhbcGFpcl0gPiBsaW1pdGRhdGEuTEVOR1RIKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05lZ2F0aXZlTWFyZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnlLXpmLvliKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbWl0ZGF0YS5MT09QICYmIGRhdGEucGVyZm9ybWFuY2UuT0hNPy5MT09QKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29wUGFpcnMgPSBbJ1BBSVIxMicsICdQQUlSMzYnLCAnUEFJUjQ1JywgJ1BBSVI3OCddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIGxvb3BQYWlycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBlcmZvcm1hbmNlLk9ITS5MT09QW3BhaXJdID4gbGltaXRkYXRhLkxPT1ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmVnYXRpdmVNYXJnaW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIueUtemYu2ZhaWxcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmmK8gK1BvRSDmiJYgK0FMTCDmtYvor5VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzUG9FID0gbGltaXRWYWx1ZT8uaW5jbHVkZXMoJytQb0UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQUxMID0gbGltaXRWYWx1ZT8uaW5jbHVkZXMoJytBTEwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gK1BvRSDmiJYgK0FMTCDmtYvor5XnmoTpop3lpJbmo4Dmn6VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChoYXNQb0UgfHwgaGFzQUxMKSAmJiBkYXRhLnBlcmZvcm1hbmNlLk9ITSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g57q/5a+5IFVCTCDkvZnph4/mo4Dmn6VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdGRhdGEuUEFJUlVCTCAmJiBkYXRhLnBlcmZvcm1hbmNlLk9ITS5QQUlSVUJMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFpclVibFBhaXJzID0gWydQQUlSMTInLCAnUEFJUjM2JywgJ1BBSVI0NScsICdQQUlSNzgnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpclVibFBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhkYXRhLnBlcmZvcm1hbmNlLk9ITS5QQUlSVUJMW3BhaXJdKSA+IGxpbWl0ZGF0YS5QQUlSVUJMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZWdhdGl2ZU1hcmdpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVCTCBmYWlsXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQMlAgVUJMIOS9memHj+ajgOafpVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbWl0ZGF0YS5QMlBVQkwgJiYgZGF0YS5wZXJmb3JtYW5jZS5PSE0uUDJQVUJMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDJwVWJsUGFpcnMgPSBbJ1BBSVIxMjM2JywgJ1BBSVIxMjQ1JywgJ1BBSVIxMjc4JywgJ1BBSVIzNjQ1JywgJ1BBSVIzNjc4JywgJ1BBSVI0NTc4J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHAycFVibFBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhkYXRhLnBlcmZvcm1hbmNlLk9ITS5QMlBVQkxbcGFpcl0pID4gbGltaXRkYXRhLlAyUFVCTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmVnYXRpdmVNYXJnaW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQMlAgZmFpbFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1UaXRsZSBvZiBwYXJhbVRpdGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUdyb3VwID0gZGF0YUdyb3VwTWFwW3BhcmFtVGl0bGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnlLXpmLvlj4LmlbDnmoTnibnmrorlpITnkIZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbVRpdGxlID09PSAn55S16Zi7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2lzdGFuY2VNYXJnaW4gPSBjYWxjdWxhdGVSZXNpc3RhbmNlTWFyZ2luKGRhdGEsIGxpbWl0ZGF0YSwgbGltaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2lzdGFuY2VNYXJnaW4gPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05lZ2F0aXZlTWFyZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YUdyb3VwIHx8ICFkYXRhPy5wZXJmb3JtYW5jZT8uZGF0YT8uW2RhdGFHcm91cF0gfHwgIWxpbWl0ZGF0YT8uW2RhdGFHcm91cF0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0RGF0YSA9IGRhdGEucGVyZm9ybWFuY2UuZGF0YVtkYXRhR3JvdXBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZXMgPSBsaW1pdGRhdGFbZGF0YUdyb3VwXT8uWydQQUlSTGltaXQgKGRCKSddIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWlycyA9IFsnTkVYVCAoZEIpJywgJ0FDUi1OIChkQiknXS5pbmNsdWRlcyhkYXRhR3JvdXApID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ1BBSVIxMjM2JywgJ1BBSVIxMjQ1JywgJ1BBSVIxMjc4JywgJ1BBSVIzNjQ1JywgJ1BBSVIzNjc4JywgJ1BBSVI0NTc4J10gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnQUNSLUYgKGRCKScsICdDRE5FWFQgKGRCKSddLmluY2x1ZGVzKGRhdGFHcm91cCkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ1BBSVIxMjM2JywgJ1BBSVIxMjQ1JywgJ1BBSVIxMjc4JywgJ1BBSVIzNjEyJywgJ1BBSVIzNjQ1JywgJ1BBSVIzNjc4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQUlSNDUxMicsICdQQUlSNDUzNScsICdQQUlSNDU3OCcsICdQQUlSNzgxMicsICdQQUlSNzkzNicsICdQQUlSNzg0NSddIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTInLCAnUEFJUjM2JywgJ1BBSVI0NScsICdQQUlSNzgnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbWl0VmFsdWVzLmxlbmd0aCAmJiAhaGFzTmVnYXRpdmVNYXJnaW47IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFZhbHVlID0gbGltaXRWYWx1ZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW1pdFZhbHVlID09PSB1bmRlZmluZWQgfHwgbGltaXRWYWx1ZSA9PT0gbnVsbCkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gdGVzdERhdGFbcGFpcl0/LltpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBwYXJhbVRpdGxlID09PSAn5o+S5YWl5o2f6ICXJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnMobGltaXRWYWx1ZSkgLSBNYXRoLmFicyhhY3R1YWxWYWx1ZSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGFjdHVhbFZhbHVlKSAtIGxpbWl0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFyZ2luIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05lZ2F0aXZlTWFyZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyUmVzdWx0U3RhdHVzID0gaGFzTmVnYXRpdmVNYXJnaW4gPyAnZmFpbCcgOiAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2FsY3VsYXRpbmcgbWFyZ2luczonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfliqDovb3mtYvor5Xnu5PmnpzlpLHotKU6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50UHJvamVjdD8uY2FibGVJZHNbMF0/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Y29uZmlnOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRDb25maWcgfHwge30pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yczogY3VycmVudE9wZXJhdG9yPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyV2lyZW1hcFN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3BwZXJQZXJmb3JtYW5jZVN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHBlclJlZjogY29wcGVyUmVmU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29wcGVyUmVzdWx0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kdWxlVHlwZSA9PT0gJ2NmcCcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaegemZkOWAvOWvvOWFpVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFZhbHVlID0gY3VycmVudENvbmZpZz8ucGFyYW1zPy5saW1pdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlBfTElNSVQgPSByZXF1aXJlKCdAL3N0b3JlL0ZJQkVSL0NGUF9MSU1JVCcpLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0RGF0YSA9IENGUF9MSU1JVFtsaW1pdFZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbWl0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2/55SobGltaXREYXRh5Lit55qE5p6B6ZmQ5YC86L+b6KGM5ZCO57ut5aSE55CGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlckxvc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RMYXN0QWRhcHRlckxvc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbExvc3MxMzEwbm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMb3NzMTU1MG5tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3NQZXJLbTg1MG5tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3NQZXJLbTEzMDAwbm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zc1BlckttMTMxMG5tLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvc3NQZXJLbTE1NTBubSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTTUxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5NTUxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9IGxpbWl0RGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnlKjmiLfphY3nva7liqDovb1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdG9yQ291bnQgPSBjdXJyZW50Q29uZmlnPy5wYXJhbXM/LmNvbm5lY3RvckNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpY2VDb3VudCA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8uc3BsaWNlQ291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkp1bXBlciA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8ucmVmSnVtcGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNmcE1haW5JblN0YXR1cyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZnBNYWluT3V0U3RhdHVzID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZnBJblJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliqDovb3nrKzkuIDkuKrms6Lplb/nmoTmlbDmja5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXZlMURhdGEgPSBhd2FpdCBpbXBvcnQoYEAvc3RvcmUvRklCRVIvJHtjZnBJblJlc3VsdH0vJHt3YXZlbGVuZ3RoMX0tZHVtcC5qc29uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yqg6L2956ys5LqM5Liq5rOi6ZW/55qE5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZTJEYXRhID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0ZJQkVSLyR7Y2ZwSW5SZXN1bHR9LyR7d2F2ZWxlbmd0aDJ9LWR1bXAuanNvbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa3u+WKoOmaj+acuua1ruWKqOWboOWtkO+8iOaNn+iAl+S4iuS4i+a1ruWKqDEl77yJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0RGlzdGFuY2VSYW5kb21GYWN0b3IgPSAoKSA9PiAxOyAvLyDplb/luqbkuI3mta7liqhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRMb3NzUmFuZG9tRmFjdG9yID0gKCkgPT4gMSArIChNYXRoLnJhbmRvbSgpICogMC4wMiAtIDAuMDEpOyAvLyDnlJ/miJAwLjk55YiwMS4wMeS5i+mXtOeahOmaj+acuuaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWFiOiuoeeul+S4pOS4quazoumVv+eahOaNn+iAl+WAvFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhdmUxTG9zcyA9IHdhdmUxRGF0YS5TdW1tYXJ5LnRvdGFsTG9zcyAqIGdldExvc3NSYW5kb21GYWN0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXZlMkxvc3MgPSB3YXZlMkRhdGEuU3VtbWFyeS50b3RhbExvc3MgKiBnZXRMb3NzUmFuZG9tRmFjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5piv5Y+C6ICD54q25oCB77yM5aKe5YqgMC4xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxXYXZlMUxvc3MgPSAhY2ZwUmVmU3RhdHVzID8gd2F2ZTFMb3NzIDogd2F2ZTFMb3NzICsgMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsV2F2ZTJMb3NzID0gIWNmcFJlZlN0YXR1cyA/IHdhdmUyTG9zcyA6IHdhdmUyTG9zcyArIDAuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZnBNYWluSW5TdGF0dXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdmVsZW5ndGgxOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXZlOiB3YXZlbGVuZ3RoMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAod2F2ZTFEYXRhLlN1bW1hcnkudG90YWxEaXN0YW5jZSAqIGdldERpc3RhbmNlUmFuZG9tRmFjdG9yKCkpLnRvRml4ZWQoMiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3NzOiBmaW5hbFdhdmUxTG9zcy50b0ZpeGVkKDIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdmVsZW5ndGgyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXZlOiB3YXZlbGVuZ3RoMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiAod2F2ZTJEYXRhLlN1bW1hcnkudG90YWxEaXN0YW5jZSAqIGdldERpc3RhbmNlUmFuZG9tRmFjdG9yKCkpLnRvRml4ZWQoMiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3NzOiBmaW5hbFdhdmUyTG9zcy50b0ZpeGVkKDIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKFwi6KKr5rWL6ZO+6Lev5LiO5Y+C6ICD6Lez57qk57G75Z6L5LiN5LiA6Ie077yM6K+35qOA5p+lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE1MDApOyAvLyAzMDAwIOavq+enkiA9IDMg56eSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZnBPdXRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yqg6L2956ys5LiA5Liq5rOi6ZW/55qE5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZTFEYXRhID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0ZJQkVSLyR7Y2ZwT3V0UmVzdWx0fS8ke3dhdmVsZW5ndGgxfS1kdW1wLmpzb25gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliqDovb3nrKzkuozkuKrms6Lplb/nmoTmlbDmja5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXZlMkRhdGEgPSBhd2FpdCBpbXBvcnQoYEAvc3RvcmUvRklCRVIvJHtjZnBPdXRSZXN1bHR9LyR7d2F2ZWxlbmd0aDJ9LWR1bXAuanNvbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa3u+WKoOmaj+acuua1ruWKqOWboOWtkO+8iOaNn+iAl+S4iuS4i+a1ruWKqDEl77yJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0RGlzdGFuY2VSYW5kb21GYWN0b3IgPSAoKSA9PiAxOyAvLyDplb/luqbkuI3mta7liqhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRMb3NzUmFuZG9tRmFjdG9yID0gKCkgPT4gMSArIChNYXRoLnJhbmRvbSgpICogMC4wMiAtIDAuMDEpOyAvLyDnlJ/miJAwLjk55YiwMS4wMeS5i+mXtOeahOmaj+acuuaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWFiOiuoeeul+S4pOS4quazoumVv+eahOaNn+iAl+WAvFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhdmUxTG9zcyA9IHdhdmUxRGF0YS5TdW1tYXJ5LnRvdGFsTG9zcyAqIGdldExvc3NSYW5kb21GYWN0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXZlMkxvc3MgPSB3YXZlMkRhdGEuU3VtbWFyeS50b3RhbExvc3MgKiBnZXRMb3NzUmFuZG9tRmFjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5piv5Y+C6ICD54q25oCB77yM5aKe5YqgMC4xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxXYXZlMUxvc3MgPSAhY2ZwUmVmU3RhdHVzID8gd2F2ZTFMb3NzIDogd2F2ZTFMb3NzICsgMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsV2F2ZTJMb3NzID0gIWNmcFJlZlN0YXR1cyA/IHdhdmUyTG9zcyA6IHdhdmUyTG9zcyArIDAuMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZnBNYWluT3V0U3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXZlbGVuZ3RoMToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F2ZTogd2F2ZWxlbmd0aDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogKHdhdmUxRGF0YS5TdW1tYXJ5LnRvdGFsRGlzdGFuY2UgKiBnZXREaXN0YW5jZVJhbmRvbUZhY3RvcigpKS50b0ZpeGVkKDIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zczogZmluYWxXYXZlMUxvc3MudG9GaXhlZCgyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXZlbGVuZ3RoMjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F2ZTogd2F2ZWxlbmd0aDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogKHdhdmUyRGF0YS5TdW1tYXJ5LnRvdGFsRGlzdGFuY2UgKiBnZXREaXN0YW5jZVJhbmRvbUZhY3RvcigpKS50b0ZpeGVkKDIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zczogZmluYWxXYXZlMkxvc3MudG9GaXhlZCgyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZShcIuacquajgOa1i+WIsOWFiee6pO+8jOivt+ajgOafpeaOpeWPo1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxNTAwKTsgLy8gMzAwMCDmr6vnp5IgPSAzIOenklxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnu5PmnpzorqHnrpfkuI7liKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5qC55YWJ57qkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5JbmRpc3RhbmNlID0gY2ZwTWFpbkluU3RhdHVzPy53YXZlbGVuZ3RoMT8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZwTWFpbkluZGlzdGFuY2UyID0gY2ZwTWFpbkluU3RhdHVzPy53YXZlbGVuZ3RoMj8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZwTWFpbklubG9zcyA9IGNmcE1haW5JblN0YXR1cz8ud2F2ZWxlbmd0aDE/Lmxvc3MgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZwTWFpbklubG9zczIgPSBjZnBNYWluSW5TdGF0dXM/LndhdmVsZW5ndGgyPy5sb3NzIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmVv+W6puWIpOaWrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBpc011bHRpTW9kZSA/IGxpbWl0RGF0YS5tYXhNTUxlbmd0aCA6IGxpbWl0RGF0YS5tYXhTTUxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMZW5ndGhWYWxpZEluID0gY2ZwTWFpbkluZGlzdGFuY2UgPD0gbWF4TGVuZ3RoICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmcE1haW5JbmRpc3RhbmNlMiA8PSBtYXhMZW5ndGggO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjZ/ogJfliKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9zc1BlckttID0gaXNNdWx0aU1vZGUgPyAobGltaXREYXRhLmxvc3NQZXJLbTg1MG5tKToobGltaXREYXRhLmxvc3NQZXJLbTEzMTBubSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvc3NQZXJLbTIgPSBpc011bHRpTW9kZSA/IChsaW1pdERhdGEubG9zc1BlckttMTMwMG5tKToobGltaXREYXRhLmxvc3NQZXJLbTE1NTBubSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbExvc3NMaW1pdCA9IGxpbWl0RGF0YS5hZGFwdGVyTG9zcyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudCAqIGxpbWl0RGF0YS5hZGFwdGVyTG9zcyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlQ291bnQgKiBsaW1pdERhdGEuc3BsaWNlTG9zcyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNmcE1haW5JbmRpc3RhbmNlLzEwMDApICogbG9zc1BlckttXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzTXVsdGlNb2RlID8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbWl0RGF0YS50b3RhbExvc3M4NTBubSk6KGxpbWl0RGF0YS50b3RhbExvc3MxMzEwbm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxMb3NzTGltaXQyID0gbGltaXREYXRhLmFkYXB0ZXJMb3NzICE9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RvckNvdW50ICogbGltaXREYXRhLmFkYXB0ZXJMb3NzICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50ICogbGltaXREYXRhLnNwbGljZUxvc3MgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNmcE1haW5JbmRpc3RhbmNlMi8xMDAwKSAqIGxvc3NQZXJLbTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXNNdWx0aU1vZGUgPyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGltaXREYXRhLnRvdGFsTG9zczEzMDBubSk6KGxpbWl0RGF0YS50b3RhbExvc3MxNTUwbm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMb3NzVmFsaWRJbiA9IGNmcE1haW5Jbmxvc3MgPD0gdG90YWxMb3NzTGltaXQgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZnBNYWluSW5sb3NzMiA8PSB0b3RhbExvc3NMaW1pdDIgO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g56ys5LqM5qC55YWJ57qkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5PdXRkaXN0YW5jZSA9IGNmcE1haW5PdXRTdGF0dXM/LndhdmVsZW5ndGgxPy5kaXN0YW5jZSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZnBNYWluT3V0ZGlzdGFuY2UyID0gY2ZwTWFpbk91dFN0YXR1cz8ud2F2ZWxlbmd0aDI/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNmcE1haW5PdXRsb3NzID0gY2ZwTWFpbk91dFN0YXR1cz8ud2F2ZWxlbmd0aDE/Lmxvc3MgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ZwTWFpbk91dGxvc3MyID0gY2ZwTWFpbk91dFN0YXR1cz8ud2F2ZWxlbmd0aDI/Lmxvc3MgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6ZW/5bqm5Yik5patXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heExlbmd0aE91dCA9IGlzTXVsdGlNb2RlID8gbGltaXREYXRhLm1heE1NTGVuZ3RoIDogbGltaXREYXRhLm1heFNNTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xlbmd0aFZhbGlkT3V0ID0gY2ZwTWFpbk91dGRpc3RhbmNlIDw9IG1heExlbmd0aCAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZwTWFpbk91dGRpc3RhbmNlMiA8PSBtYXhMZW5ndGggO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjZ/ogJfliKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9zc1BlckttT3V0ID0gaXNNdWx0aU1vZGUgPyAobGltaXREYXRhLmxvc3NQZXJLbTg1MG5tKToobGltaXREYXRhLmxvc3NQZXJLbTEzMTBubSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvc3NQZXJLbTJPdXQgPSBpc011bHRpTW9kZSA/IChsaW1pdERhdGEubG9zc1BlckttMTMwMG5tKToobGltaXREYXRhLmxvc3NQZXJLbTE1NTBubSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbExvc3NMaW1pdE91dCA9IGxpbWl0RGF0YS5hZGFwdGVyTG9zcyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JDb3VudCAqIGxpbWl0RGF0YS5hZGFwdGVyTG9zcyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlQ291bnQgKiBsaW1pdERhdGEuc3BsaWNlTG9zcyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNmcE1haW5JbmRpc3RhbmNlLzEwMDApICogbG9zc1BlckttT3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzTXVsdGlNb2RlID8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbWl0RGF0YS50b3RhbExvc3M4NTBubSk6KGxpbWl0RGF0YS50b3RhbExvc3MxMzEwbm0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxMb3NzTGltaXQyT3V0ID0gbGltaXREYXRhLmFkYXB0ZXJMb3NzICE9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RvckNvdW50ICogbGltaXREYXRhLmFkYXB0ZXJMb3NzICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUNvdW50ICogbGltaXREYXRhLnNwbGljZUxvc3MgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNmcE1haW5PdXRkaXN0YW5jZTIvMTAwMCkgKiBsb3NzUGVyS20yT3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzTXVsdGlNb2RlID8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbWl0RGF0YS50b3RhbExvc3MxMzAwbm0pOihsaW1pdERhdGEudG90YWxMb3NzMTU1MG5tKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTG9zc1ZhbGlkT3V0ID0gY2ZwTWFpbk91dGxvc3MgPD0gdG90YWxMb3NzTGltaXRPdXQgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmcE1haW5PdXRsb3NzMiA8PSB0b3RhbExvc3NMaW1pdDJPdXQgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe7k+aenOWIpOaWrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlBSZXN1bHRTdGF0dXMgPSBpc0xlbmd0aFZhbGlkSW4gJiYgaXNMb3NzVmFsaWRJbiAmJiBpc0xlbmd0aFZhbGlkT3V0ICYmIGlzTG9zc1ZhbGlkT3V0ID8gJ3Bhc3MnIDogJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJTuerr+WPo+mAmui/h+Wksei0peWIpOaWre+8iOagueaNriBpc011bHRpTW9kZSDliKTmlq3kvb/nlKjlk6rnu4Tlj4LmlbDvvIlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5Qb3J0U3RhdHVzID0gaXNNdWx0aU1vZGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpc0xlbmd0aFZhbGlkSW4gJiYgaXNMb3NzVmFsaWRJbiA/ICdwYXNzJyA6ICdmYWlsJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGlzTGVuZ3RoVmFsaWRPdXQgJiYgaXNMb3NzVmFsaWRPdXQgPyAncGFzcycgOiAnZmFpbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPVVTnq6/lj6PpgJrov4flpLHotKXliKTmlq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3V0UG9ydFN0YXR1cyA9IGlzTXVsdGlNb2RlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNMZW5ndGhWYWxpZE91dCAmJiBpc0xlbmd0aFZhbGlkT3V0ID8gJ3Bhc3MnIDogJ2ZhaWwnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoaXNMZW5ndGhWYWxpZEluICYmIGlzTG9zc1ZhbGlkSW4gPyAncGFzcycgOiAnZmFpbCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjdXJyZW50Q2FibGVJZCB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUyOiBjdXJyZW50Q2FibGVJZDIgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Y29uZmlnOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRDb25maWcgfHwge30pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yczogY3VycmVudE9wZXJhdG9yPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZQUmVmOmNmcFJlZlN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGUFJlZkNvbm5lY3Q6Y2ZwUmVmQ29ubmVjdFN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGUE1haW5JbjpjZnBNYWluSW5TdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xlbmd0aFZhbGlkSW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvc3NWYWxpZEluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5Qb3J0U3RhdHVzLCAgICAgIC8vIOa3u+WKoElO56uv5Y+j54q25oCBXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xlbmd0aFZhbGlkT3V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMb3NzVmFsaWRPdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRQb3J0U3RhdHVzLCAgICAgLy8g5re75YqgT1VU56uv5Y+j54q25oCBXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlBNYWluT3V0OmNmcE1haW5PdXRTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlBSZXN1bHRTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0Q2xlYW5TdGF0dXM6aXNBbGxQYXRoc0NsZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kdWxlVHlwZSA9PT0gJ29mcCcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICBvZnBDb25uZWN0aW9uU3RhdHVzID0gY29ubmVjdGlvblN0YXR1cztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvZnBSZXN1bHRTdGF0dXMgPSAnZmFpbCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2ZwUmVzdWx0LmluY2x1ZGVzKCdwYXNzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2ZwUmVmU3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnbW0tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZnBSZWZTdGF0dXMgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnbW1jLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mcFJlZlN0YXR1cyA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTbU9yTW0gPSBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1NtY09yTW1jID0gY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnbW1jLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0Nvbm5lY3RlZFNtT3JNbSA9IGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnbW0tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ29ubmVjdGVkU21jT3JNbWMgPSBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnc21jLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdtbWMtJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Y+q5pyJ5YmN5a+85ZKM5pyr5bC+6YO95piv6KGl5YG/57q/5pe25omN5pivcGFzc++8jOWFtuS7luaDheWGtemDveaYr2ZhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU21jT3JNbWMgJiYgaGFzQ29ubmVjdGVkU21jT3JNbWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzID0gJ3Bhc3MnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2ZwUmVzdWx0ID09PSAnY29ubmVjdG9yLWZhaWwtZW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvZnBSZWZTdGF0dXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnbW0tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZnBSZWZTdGF0dXMgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnbW1jLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdwYXNzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mcFJlZlN0YXR1cyA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTbU9yTW0gPSBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1NtY09yTW1jID0gY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnbW1jLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0Nvbm5lY3RlZFNtT3JNbSA9IGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnbW0tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ29ubmVjdGVkU21jT3JNbWMgPSBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnc21jLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdtbWMtJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlj6rmnInliY3lr7zlkozmnKvlsL7pg73mmK/ooaXlgb/nur/ml7bmiY3mmK9wYXNz77yM5YW25LuW5oOF5Ya16YO95pivZmFpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTbWNPck1tYyAmJiBoYXNDb25uZWN0ZWRTbWNPck1tYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHRTdGF0dXMgPSAncGFzcyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYgKG9mcFJlc3VsdCA9PT0gJ2Nvbm5lY3Rvci1mYWlsLXN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mcFJlZlN0YXR1cyA9PT0gJ3N0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTbU9yTW0gPSBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tLScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTbWNPck1tYyA9IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzLmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXMuaW5jbHVkZXMoJ21tYy0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGFzU21Pck1tKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mcFJlc3VsdFN0YXR1cyA9ICdmYWlsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaGFzU21jT3JNbWMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzID0gJ2ZhaWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRQcm9qZWN0Py5jYWJsZUlkc1swXT8ubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rjb25maWc6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudENvbmZpZyB8fCB7fSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JzOiBjdXJyZW50T3BlcmF0b3I/Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBSZWZTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRlBSZWZDb25uZWN0Om9mcFJlZkNvbm5lY3RTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnBDb25uZWN0aW9uU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZwUmVzdWx0U3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydENsZWFuU3RhdHVzOmlzQWxsUGF0aHNDbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGVtcFRlc3RSZXN1bHQodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+WKoOi9vea1i+ivlee7k+aenOWksei0pTonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGxvYWRUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2Nvbm5lY3Rpb25TdGF0dXM/LkNvcHBlcldpcmVtYXBTdGF0dXMsIGNvbm5lY3Rpb25TdGF0dXM/LkNvcHBlclBlcmZvcm1hbmNlU3RhdHVzXSk7XHJcbiAgICBcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRlbXBUZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVR5cGUgPSB0ZW1wVGVzdFJlc3VsdC50ZXN0Y29uZmlnPy5tb2R1bGVUeXBlO1xyXG4gICAgICAgICAgICBsZXQgZGVsYXlUaW1lID0gMTUwMDsgLy8g6buY6K6k5bu26L+fMS4156eSXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAobW9kdWxlVHlwZSA9PT0gJzgwMDAnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxheVRpbWUgPSA1MDAwOyAvLyA4MDAw5qih5Z2X5bu26L+fNeenklxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vZHVsZVR5cGUgPT09ICdjZnAnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxheVRpbWUgPSAxNTAwOyAvLyBjZnDmqKHlnZflu7bov58xLjXnp5JcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb2R1bGVUeXBlID09PSAnb2ZwJykge1xyXG4gICAgICAgICAgICAgICAgZGVsYXlUaW1lID0gNjAwMDsgLy8gb2Zw5qih5Z2X5bu26L+fNuenklxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdGVUbygncmVzdWx0aW5mbycsICdub3NhdmUnLCB0ZW1wVGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0sIGRlbGF5VGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFt0ZW1wVGVzdFJlc3VsdF0pO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAgPFRpdGxlQmFyIFxyXG4gICAgICAgICAgICAgICAgdGl0bGU9XCLov5vnqItcIiBcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs0OTBweF0gYmctWyNENURGRUJdIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICB7Lyog6IOM5pmv5Zu+54mHICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLWNvdmVyIGJnLWNlbnRlciBiZy1uby1yZXBlYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRJbWFnZTogJ3VybCgvdGVzdGluZy5naWYpJyB9fVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgey8qIOa1i+ivlemFjee9rmxpbWl05YC8ICovfVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSAgdy1mdWxsIHRvcC04ICB6LTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayB0ZXh0LXhsIGZvbnQtYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZz8ucGFyYW1zPy5saW1pdFZhbHVlIHx8ICfmnKrorr7nva4nfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdICByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdob21lJywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5Y+W5raIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsInVzZURpc3BsYXlTdG9yZSIsInVzZURldmljZVN0b3JlIiwidjQiLCJ1dWlkdjQiLCJjYWxjdWxhdGVSZXNpc3RhbmNlTWFyZ2luIiwiZGF0YSIsImxpbWl0ZGF0YSIsImxpbWl0VmFsdWUiLCJpc1BvRVRlc3QiLCJpbmNsdWRlcyIsImlzQUxMVGVzdCIsIm1pbk1hcmdpbiIsIkluZmluaXR5IiwibG9vcFJlc2lzdGFuY2VEYXRhIiwicGVyZm9ybWFuY2UiLCJsb29wUmVzaXN0YW5jZUxpbWl0IiwicGFpcnMiLCJwYWlyIiwiYWN0dWFsVmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsImxlbmd0aCIsImFjdHVhbFZhbHVlIiwibGltaXRWYWwiLCJ1bmRlZmluZWQiLCJtYXJnaW4iLCJNYXRoIiwiYWJzIiwibWluIiwidWJsRGF0YSIsInVibExpbWl0IiwicDJwVWJsRGF0YSIsInAycFVibExpbWl0IiwiZXJyb3IiLCJjb25zb2xlIiwiVGVzdGluZyIsInZpZXciLCJnZXRTdGF0ZSIsIm5hdmlnYXRpb24iLCJjdXJyZW50IiwibmF2aWdhdGVUbyIsImdldEN1cnJlbnRUZXN0Q29uZmlnIiwiZ2V0Q3VycmVudFByb2plY3QiLCJnZXRDdXJyZW50T3BlcmF0b3IiLCJnZXRDdXJyZW50Q2FibGVJZCIsImdldEN1cnJlbnRDYWJsZUlkMiIsInNldFRvYXN0TWVzc2FnZSIsImN1cnJlbnRDb25maWciLCJjb25uZWN0aW9uU3RhdHVzIiwic2V0VG90YWxUb2FzdE1lc3NhZ2UiLCJjb3BwZXJNYWluUGF0aEtleSIsIm1haW5QYXRocyIsIk9iamVjdCIsImtleXMiLCJjb3BwZXJSZW1vdGVQYXRoS2V5IiwicmVtb3RlUGF0aHMiLCJjb3BwZXJtYWluZW5kIiwiZW5kIiwiY29wcGVycmVtb3RlZW5kIiwiY29wcGVyUmVmU3RhdHVzIiwicmVmIiwiY29wcGVyIiwic3RhdHVzIiwiY2FibGVUeXBlIiwicGFyYW1zIiwiaXNNdWx0aU1vZGUiLCJjZnBSZWZTdGF0dXMiLCJjZnAiLCJjZnBSZWZDb25uZWN0U3RhdHVzIiwiY29ubmVjdFN0YXR1cyIsImNmcEluUmVzdWx0IiwiQ0ZQTWFpbkluIiwiQ0ZQTWFpbk91dCIsImNmcE91dFJlc3VsdCIsIndhdmVsZW5ndGgxIiwid2F2ZWxlbmd0aDIiLCJvZnBNYWluRW5kIiwib2ZwUmVmU3RhdHVzIiwib2ZwIiwib2ZwUmVmQ29ubmVjdFN0YXR1cyIsInRlbXBUZXN0UmVzdWx0Iiwic2V0VGVtcFRlc3RSZXN1bHQiLCJtb2R1bGVUeXBlIiwiY2hlY2tQb3J0c0NsZWFuU3RhdHVzIiwicGF0aHMiLCJjbGVhblBvcnRzIiwiZmlsdGVyIiwicG9ydElkIiwicG9ydEVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0QXR0cmlidXRlIiwiYWxsUGF0aHNDbGVhblN0YXR1cyIsImlzQWxsUGF0aHNDbGVhbiIsIm1haW5JblBhdGhzIiwicGF0aCIsIm1haW5PdXRQYXRocyIsInJlbW90ZUluUGF0aHMiLCJyZW1vdGVPdXRQYXRocyIsIm1haW5JbkNsZWFuIiwibWFpbk91dENsZWFuIiwicmVtb3RlSW5DbGVhbiIsInJlbW90ZU91dENsZWFuIiwidG90YWxQb3J0cyIsImNsZWFuZWRQb3J0cyIsImxvYWRUZXN0UmVzdWx0IiwiY3VycmVudFByb2plY3QiLCJjdXJyZW50T3BlcmF0b3IiLCJjdXJyZW50Q2FibGVJZCIsIm5hbWUiLCJjdXJyZW50Q2FibGVJZDIiLCJDb3BwZXJXaXJlbWFwU3RhdHVzIiwiQ29wcGVyUGVyZm9ybWFuY2VTdGF0dXMiLCJvZnBSZXN1bHQiLCJPRlBTdGF0dXMiLCJ3aXJlT3JkZXIiLCJ0ZXN0UmVzdWx0IiwiQ29wcGVyUmVzdWx0U3RhdHVzIiwiQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyIsImxvZyIsInJlc3BvbnNlIiwiZGVmYXVsdCIsImJhc2VOYW1lIiwic3BsaXQiLCJsaW1pdFJlc3BvbnNlIiwicGFyYW1UaXRsZXMiLCJkYXRhR3JvdXBNYXAiLCJoYXNOZWdhdGl2ZU1hcmdpbiIsIkxFTkdUSCIsImxlbmd0aFBhaXJzIiwiTE9PUCIsIk9ITSIsImxvb3BQYWlycyIsImhhc1BvRSIsImhhc0FMTCIsIlBBSVJVQkwiLCJwYWlyVWJsUGFpcnMiLCJQMlBVQkwiLCJwMnBVYmxQYWlycyIsInBhcmFtVGl0bGUiLCJkYXRhR3JvdXAiLCJyZXNpc3RhbmNlTWFyZ2luIiwidGVzdERhdGEiLCJsaW1pdFZhbHVlcyIsImluZGV4IiwiaWQiLCJjYWJsZUlkcyIsInRlc3Rjb25maWciLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJvcGVyYXRvcnMiLCJDb3BwZXJSZWYiLCJDRlBfTElNSVQiLCJyZXF1aXJlIiwibGltaXREYXRhIiwiYWRhcHRlckxvc3MiLCJmaXJzdExhc3RBZGFwdGVyTG9zcyIsInNwbGljZUxvc3MiLCJ0b3RhbExvc3MxMzEwbm0iLCJ0b3RhbExvc3MxNTUwbm0iLCJsb3NzUGVyS204NTBubSIsImxvc3NQZXJLbTEzMDAwbm0iLCJsb3NzUGVyS20xMzEwbm0iLCJsb3NzUGVyS20xNTUwbm0iLCJtYXhTTUxlbmd0aCIsIm1hbk1NTGVuZ3RoIiwiY29ubmVjdG9yQ291bnQiLCJzcGxpY2VDb3VudCIsInJlZkp1bXBlciIsImNmcE1haW5JblN0YXR1cyIsImNmcE1haW5PdXRTdGF0dXMiLCJ3YXZlMURhdGEiLCJ3YXZlMkRhdGEiLCJnZXREaXN0YW5jZVJhbmRvbUZhY3RvciIsImdldExvc3NSYW5kb21GYWN0b3IiLCJyYW5kb20iLCJ3YXZlMUxvc3MiLCJTdW1tYXJ5IiwidG90YWxMb3NzIiwid2F2ZTJMb3NzIiwiZmluYWxXYXZlMUxvc3MiLCJmaW5hbFdhdmUyTG9zcyIsIndhdmUiLCJkaXN0YW5jZSIsInRvdGFsRGlzdGFuY2UiLCJ0b0ZpeGVkIiwibG9zcyIsInNldFRpbWVvdXQiLCJjZnBNYWluSW5kaXN0YW5jZSIsImNmcE1haW5JbmRpc3RhbmNlMiIsImNmcE1haW5Jbmxvc3MiLCJjZnBNYWluSW5sb3NzMiIsIm1heExlbmd0aCIsIm1heE1NTGVuZ3RoIiwiaXNMZW5ndGhWYWxpZEluIiwibG9zc1BlckttIiwibG9zc1BlckttMiIsImxvc3NQZXJLbTEzMDBubSIsInRvdGFsTG9zc0xpbWl0IiwidG90YWxMb3NzODUwbm0iLCJ0b3RhbExvc3NMaW1pdDIiLCJ0b3RhbExvc3MxMzAwbm0iLCJpc0xvc3NWYWxpZEluIiwiY2ZwTWFpbk91dGRpc3RhbmNlIiwiY2ZwTWFpbk91dGRpc3RhbmNlMiIsImNmcE1haW5PdXRsb3NzIiwiY2ZwTWFpbk91dGxvc3MyIiwibWF4TGVuZ3RoT3V0IiwiaXNMZW5ndGhWYWxpZE91dCIsImxvc3NQZXJLbU91dCIsImxvc3NQZXJLbTJPdXQiLCJ0b3RhbExvc3NMaW1pdE91dCIsInRvdGFsTG9zc0xpbWl0Mk91dCIsImlzTG9zc1ZhbGlkT3V0IiwiQ0ZQUmVzdWx0U3RhdHVzIiwiSW5Qb3J0U3RhdHVzIiwiT3V0UG9ydFN0YXR1cyIsIm5hbWUyIiwiQ0ZQUmVmIiwiQ0ZQUmVmQ29ubmVjdCIsIlBvcnRDbGVhblN0YXR1cyIsIm9mcENvbm5lY3Rpb25TdGF0dXMiLCJvZnBSZXN1bHRTdGF0dXMiLCJPRlBvdXRSZWZTdGF0dXMiLCJoYXNTbU9yTW0iLCJoYXNTbWNPck1tYyIsImhhc0Nvbm5lY3RlZFNtT3JNbSIsIk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzIiwiaGFzQ29ubmVjdGVkU21jT3JNbWMiLCJPRlBSZWZDb25uZWN0IiwiZGVsYXlUaW1lIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJkaXYiLCJjbGFzc05hbWUiLCJ0aXRsZSIsInN0eWxlIiwiYmFja2dyb3VuZEltYWdlIiwic3BhbiIsImJ1dHRvbiIsIm9uQ2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/Testing.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/general/Tools.js":
/*!*************************************************!*\
!*** ./src/components/dsxpage/general/Tools.js ***!
\*************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Tools)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/lib//StatusBar */ \"(pages-dir-node)/./src/components/lib/StatusBar.js\");\n/* harmony import */ var _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/lib//TitleBar */ \"(pages-dir-node)/./src/components/lib/TitleBar.js\");\n/* harmony import */ var _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/lib//SubTitleBar */ \"(pages-dir-node)/./src/components/lib/SubTitleBar.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _config_api__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/config/api */ \"(pages-dir-node)/./src/config/api.js\");\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\n/* harmony import */ var _components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/AudioProvider */ \"(pages-dir-node)/./src/components/AudioProvider.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__]);\n([_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__, _components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__, _components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__, _store_displayStore__WEBPACK_IMPORTED_MODULE_6__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__, _utils_asset__WEBPACK_IMPORTED_MODULE_9__, _components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\n\n\n\nfunction Tools() {\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().navigation.current;\n const { navigateTo, updateCurrentView, getCurrentProject, updataRef, setToastMessage } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const currentProject = getCurrentProject();\n const currentConfig = currentProject?.testConfigs[_store_displayStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getState().selectedIndexes.testConfigIndex];\n const faultScenario = _store_deviceStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"].getState().faultScenarios;\n // 获取连接状态\n const { connectionStatus, setTotalToastMessage } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const mainPortStart = connectionStatus?.mainPaths?.[Object.keys(connectionStatus.mainPaths)[0]]?.start;\n const mainPortEnd = connectionStatus?.mainPaths?.[Object.keys(connectionStatus.mainPaths)[0]]?.end;\n const mainpath = connectionStatus?.mainPaths?.[Object.keys(connectionStatus.mainPaths)[0]]?.path;\n const mainVFLEnd = connectionStatus?.mainPaths?.['main-vfl']?.end || null;\n const [connectionMap, setConnectionMap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const connectionMapRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null); // 添加ref用于缓存connectionMap\n const cableType = currentConfig.params.cableType;\n const isMultiMode = cableType.includes('OM');\n const { play } = (0,_components_AudioProvider__WEBPACK_IMPORTED_MODULE_10__.useAudio)();\n // VFL状态\n const [vflStatus, setVflStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n // 获取连接配置\n const fetchConnectionMap = async ()=>{\n try {\n // 如果已经有缓存的connectionMap,直接返回\n if (connectionMapRef.current) {\n setConnectionMap(connectionMapRef.current);\n return;\n }\n const apiUrl = _config_api__WEBPACK_IMPORTED_MODULE_8__.API_URLS.CONNECTION.MAP_WITH_SCENE(faultScenario);\n const response = await fetch(apiUrl);\n if (!response.ok) {\n throw new Error('获取连接配置失败');\n }\n const data = await response.json();\n connectionMapRef.current = data || {}; // 缓存connectionMap\n setConnectionMap(data || {});\n } catch (error) {\n console.error('获取连接配置错误:', error);\n setConnectionMap({});\n }\n };\n // --------------------------------------VFL--------------------------------------\n // VFL功能函数\n const handleVfl = ()=>{\n fetchConnectionMap();\n if (!mainVFLEnd) return;\n console.log(connectionStatus?.mainPaths?.['main-vfl']);\n // 在connectionMap中查找与mainVFLEnd匹配的连接\n let connectedPort = null;\n let targetPortId = null;\n // 首先检查mainVFLEnd是否作为key存在\n if (connectionMap[mainVFLEnd]) {\n connectedPort = mainVFLEnd;\n targetPortId = connectionMap[mainVFLEnd].connectedTo;\n } else {\n // 如果不是key,则查找哪个key的connectedTo等于mainVFLEnd\n const foundKey = Object.keys(connectionMap).find((key)=>{\n return connectionMap[key].connectedTo === mainVFLEnd;\n });\n if (foundKey) {\n connectedPort = mainVFLEnd;\n targetPortId = foundKey;\n }\n }\n if (connectedPort && targetPortId) {\n // 如果targetPortId包含-portx(x为数字),则移除这部分\n if (targetPortId && /-port\\d+$/.test(targetPortId)) {\n targetPortId = targetPortId.replace(/-port\\d+$/, '');\n }\n const targetElement = document.getElementById(targetPortId);\n if (targetElement) {\n // 检查目标元素是否已连接\n if (targetElement.classList.contains('jtk-connected')) {\n return;\n }\n // 获取目标元素的位置信息\n const rect = targetElement.getBoundingClientRect();\n // 创建闪烁的红点\n const redDot = document.createElement('div');\n redDot.style.cssText = `\n position: absolute;\n width: 20px;\n height: 20px;\n background-color: red;\n border-radius: 50%;\n top: ${rect.top + rect.height / 2}px;\n left: ${rect.left + rect.width / 2}px;\n transform: translate(-50%, -50%);\n animation: blink 1s infinite;\n z-index: 9999;\n `;\n // 添加闪烁动画样式\n const style = document.createElement('style');\n style.textContent = `\n @keyframes blink {\n 0% { opacity: 1; }\n 50% { opacity: 0; }\n 100% { opacity: 1; }\n }\n `;\n document.head.appendChild(style);\n document.body.appendChild(redDot);\n // 在VFL状态关闭时移除红点\n return ()=>{\n document.body.removeChild(redDot);\n document.head.removeChild(style);\n };\n }\n }\n };\n // VFL状态切换函数\n const SetvflStatus = ()=>{\n setVflStatus(!vflStatus);\n };\n // 使用useRef来存储当前的connectedPort\n const currentConnectedPortRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n let cleanup;\n if (vflStatus) {\n // 获取当前的connectedPort,使用双向查找逻辑\n let connectedPort = null;\n if (connectionMap[mainVFLEnd]) {\n connectedPort = mainVFLEnd;\n } else {\n connectedPort = Object.keys(connectionMap).find({\n \"Tools.useEffect\": (key)=>{\n return connectionMap[key].connectedTo === mainVFLEnd;\n }\n }[\"Tools.useEffect\"]);\n }\n // 如果connectedPort发生变化,重新执行handleVfl\n if (connectedPort !== currentConnectedPortRef.current) {\n if (cleanup) {\n cleanup();\n }\n currentConnectedPortRef.current = connectedPort;\n cleanup = handleVfl();\n } else if (!cleanup) {\n // 如果没有cleanup,说明还没有执行过handleVfl\n cleanup = handleVfl();\n }\n }\n return ({\n \"Tools.useEffect\": ()=>{\n if (cleanup) {\n cleanup();\n }\n }\n })[\"Tools.useEffect\"];\n }\n }[\"Tools.useEffect\"], [\n vflStatus,\n mainVFLEnd,\n connectionMap\n ]);\n // 监听视图变化,当离开vfl视图时重置vflStatus\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n if (view !== 'vfl' && vflStatus) {\n setVflStatus(false);\n }\n }\n }[\"Tools.useEffect\"], [\n view\n ]);\n //---------------------------------------------------------------------------------\n // 铜缆基准判断函数 对应ref-copper页脚按钮\n const RefCopperButtonClick = ()=>{\n if (mainPortStart === 'main-permanent') {\n if (mainPortEnd === 'remote-channel') {\n updateCurrentView('ref-copper-setting');\n } else {\n setToastMessage('基准设置错误,请检查连接状态'); // 可以用自定义的提示方式替代alert\n }\n } else {\n setToastMessage('适配器不兼容,导致基准设置失败'); // 同样,可以用自定义的提示方式替代alert\n }\n };\n //铜缆基准设置状态更新函数\n const ReFCopperUpdata = ()=>{\n updataRef('copper', {\n status: true\n });\n };\n // cfp基准判断函数 对应cfp页脚按钮\n const RefCfpButtonClick = ()=>{\n const mainPaths = connectionStatus.mainPaths || {};\n const remotePaths = connectionStatus.remotePaths || {};\n // 检查端口是否存在\n const mainOutExists = isMultiMode ? mainPaths['main-cfp-mm-out'] || mainPaths['main-cfp-sm-out'] : mainPaths['main-cfp-sm-out'];\n const mainInExists = mainPaths['main-cfp-in'];\n const remoteOutExists = isMultiMode ? remotePaths['remote-cfp-mm-out'] || remotePaths['remote-cfp-sm-out'] : remotePaths['remote-cfp-sm-out'];\n const remoteInExists = remotePaths['remote-cfp-in'];\n // 获取端点连接\n const mainOutEnd = isMultiMode ? mainPaths['main-cfp-mm-out']?.end || mainPaths['main-cfp-sm-out']?.end : mainPaths['main-cfp-sm-out']?.end;\n const mainInEnd = mainPaths['main-cfp-in']?.end;\n const remoteOutEnd = isMultiMode ? remotePaths['remote-cfp-mm-out']?.end || remotePaths['remote-cfp-sm-out']?.end : remotePaths['remote-cfp-sm-out']?.end;\n const remoteInEnd = remotePaths['remote-cfp-in']?.end;\n // 检查所有端口是否存在\n if (!mainOutExists || !mainInExists || !remoteOutExists || !remoteInExists) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查是否有未连接的端口\n if (!mainOutEnd || !mainInEnd || !remoteOutEnd || !remoteInEnd) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 验证端口连接是否正确\n const isConnectionCorrect = mainOutEnd === 'remote-cfp-in' && mainInEnd === (isMultiMode ? 'remote-cfp-mm-out' : 'remote-cfp-sm-out') && remoteOutEnd === 'main-cfp-in' && remoteInEnd === (isMultiMode ? 'main-cfp-mm-out' : 'main-cfp-sm-out');\n if (isConnectionCorrect) {\n updateCurrentView('ref-cfp-setting');\n } else {\n setTotalToastMessage('请使用跳线设置基准');\n }\n };\n const [showRetryButtons, setShowRetryButtons] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const RefCfpRefButtonClick = ()=>{\n const mainPaths = connectionStatus.mainPaths || {};\n const remotePaths = connectionStatus.remotePaths || {};\n // 检查端口是否存在\n const mainOutExists = isMultiMode ? mainPaths['main-cfp-mm-out'] || mainPaths['main-cfp-sm-out'] : mainPaths['main-cfp-sm-out'];\n const mainInExists = mainPaths['main-cfp-in'];\n const remoteOutExists = isMultiMode ? remotePaths['remote-cfp-mm-out'] || remotePaths['remote-cfp-sm-out'] : remotePaths['remote-cfp-sm-out'];\n const remoteInExists = remotePaths['remote-cfp-in'];\n // 获取端点连接\n const mainOutEnd = isMultiMode ? mainPaths['main-cfp-mm-out']?.end || mainPaths['main-cfp-sm-out']?.end : mainPaths['main-cfp-sm-out']?.end;\n const mainInEnd = mainPaths['main-cfp-in']?.end;\n const remoteOutEnd = isMultiMode ? remotePaths['remote-cfp-mm-out']?.end || remotePaths['remote-cfp-sm-out']?.end : remotePaths['remote-cfp-sm-out']?.end;\n const remoteInEnd = remotePaths['remote-cfp-in']?.end;\n // 检查所有端口是否存在\n if (!mainOutExists || !mainInExists || !remoteOutExists || !remoteInExists) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查是否有未连接的端口\n if (!mainOutEnd || !mainInEnd || !remoteOutEnd || !remoteInEnd) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查端口连接是否正确\n const isConnectionCorrect = mainOutEnd === 'remote-cfp-in' && mainInEnd === (isMultiMode ? 'remote-cfp-mm-out' : 'remote-cfp-sm-out') && remoteOutEnd === 'main-cfp-in' && remoteInEnd === (isMultiMode ? 'main-cfp-mm-out' : 'main-cfp-sm-out');\n if (!isConnectionCorrect) {\n setToastMessage('请检查端口连接');\n return;\n }\n // 检查TRC长度\n const mainTrcCount = mainPaths['main-cfp-in']?.path?.filter((p)=>isMultiMode ? p.includes('mm-lc-lc') : p.includes('sm-lc-lc'))?.length || 0;\n const remoteTrcCount = remotePaths['remote-cfp-in']?.path?.filter((p)=>isMultiMode ? p.includes('mm-lc-lc') : p.includes('sm-lc-lc'))?.length || 0;\n if (mainTrcCount < 4 || remoteTrcCount < 4) {\n updateCurrentView('ref-cfp-settrc-no50');\n setShowRetryButtons(true);\n return;\n }\n if (isConnectionCorrect) {\n updateCurrentView('ref-cfp-settrc');\n } else {\n setToastMessage('请检查端口连接');\n }\n };\n //CFP基准设置状态更新函数\n const ReFCFPUpdata = ()=>{\n updataRef('cfp', {\n status: true\n });\n updataRef('cfp', {\n connectStatus: true\n });\n };\n //OFP基准设置状态更新函数\n const ReFOFPUpdata = ()=>{\n const statusValue = ofpBackground === 'ref-ofp.png' ? 'start' : 'end';\n updataRef('ofp', {\n status: statusValue\n });\n updataRef('ofp', {\n connectStatus: true\n });\n };\n // OFP补偿检测函数\n const handleRefOFPTest = ()=>{\n // 获取当前选择的光纤类型\n const cableType = currentConfig?.params?.cableType;\n // 获取当前选择的补偿方式(仅前导 or 前导+末尾)\n const isLeadOnly = ofpBackground === 'ref-ofp.png';\n // 判断是否为多模光纤\n const isMultiMode = cableType.includes('OM');\n // 检查mainpath的第一个接口是否匹配当前光纤类型\n const firstPort = mainpath?.[0];\n if (!firstPort || isMultiMode && !firstPort.includes('mm-out') || !isMultiMode && !firstPort.includes('sm-out')) {\n setToastMessage('未检测到前导光纤');\n return;\n }\n // 检查补偿光纤类型是否匹配\n const hasInvalidFiber = mainpath?.some((path)=>{\n if (path.includes('mmc-') || path.includes('smc-')) {\n return isMultiMode && path.includes('smc-') || !isMultiMode && path.includes('mmc-');\n }\n return false;\n });\n if (hasInvalidFiber) {\n setTotalToastMessage(isMultiMode ? '请使用多模补偿光纤' : '请使用单模补偿光纤');\n return;\n }\n // 检查路径长度和组成\n if (isLeadOnly) {\n // 仅前导模式:应该只有主机out端口和一个补偿光纤\n if (mainpath?.length !== 2 || !mainpath[1].includes(isMultiMode ? 'mmc-' : 'smc-')) {\n setTotalToastMessage('请确保正确连接前导光纤');\n return;\n }\n } else {\n // 前导+末尾模式:应该有主机out端口、两个补偿光纤和一个连接器\n if (mainpath?.length !== 6 || !mainpath[1].includes(isMultiMode ? 'mmc-' : 'smc-') || !mainpath[5].includes(isMultiMode ? 'mmc-' : 'smc-')) {\n setTotalToastMessage('请确保正确连接前导光纤');\n return;\n }\n }\n // 所有检查通过,更新视图\n updateCurrentView('ref-ofp-setting');\n };\n // 处理定时器效果\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n if (view === 'ref-copper-setting') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n play('pass');\n updateCurrentView('ref-copper-ok');\n ReFCopperUpdata(); //更新状态\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n if (view === 'ref-cfp-setting') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-cfp4');\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n if (view === 'ref-cfp-settrc') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-cfp-trc');\n ReFCFPUpdata();\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n if (view === 'ref-cfp-settrc-no50') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-cfp-trc');\n setToastMessage('TRC长度不足50cm,请重新测试');\n }\n }[\"Tools.useEffect.timer\"], 3000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n // 重置showRetryButtons状态\n if (view !== 'ref-cfp-settrc-no50' && view !== 'ref-cfp-trc') {\n setShowRetryButtons(false);\n }\n if (view === 'ref-ofp-setting') {\n const timer = setTimeout({\n \"Tools.useEffect.timer\": ()=>{\n updateCurrentView('ref-ofp-ok');\n ReFOFPUpdata();\n }\n }[\"Tools.useEffect.timer\"], 10000);\n return ({\n \"Tools.useEffect\": ()=>clearTimeout(timer)\n })[\"Tools.useEffect\"];\n }\n }\n }[\"Tools.useEffect\"], [\n view\n ]);\n const [ofpBackground, setOfpBackground] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('ref-ofp.png');\n // 监听view变化,当进入ref-ofp视图时重置背景图片\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Tools.useEffect\": ()=>{\n if (view === 'ref-ofp') {\n setOfpBackground('ref-ofp.png');\n }\n }\n }[\"Tools.useEffect\"], [\n view\n ]);\n // 处理单选框切换事件\n const handleCompensationChange = (value)=>{\n setOfpBackground(value === 'lead' ? 'ref-ofp.png' : 'ref-ofp-end.png');\n };\n const renderContent = ()=>{\n switch(view){\n case 'main':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] p-4\",\n children: [\n currentConfig?.moduleType === '8000' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center\",\n onClick: ()=>updateCurrentView('ref-copper'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"设置基准\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 459,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 461,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 460,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 455,\n columnNumber: 29\n }, this),\n currentConfig?.moduleType === 'cfp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center\",\n onClick: ()=>updateCurrentView('ref-cfp'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"设置参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 477,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 479,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 478,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 473,\n columnNumber: 29\n }, this),\n currentConfig?.moduleType === 'ofp' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center\",\n onClick: ()=>updateCurrentView('ref-ofp'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"设置补偿\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 494,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 496,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 495,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 490,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center mt-4\",\n onClick: ()=>updateCurrentView('tone'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"音频发生器\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 510,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 512,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 511,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 506,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"w-full h-[50px] bg-[#F8F6F7] rounded-sm p-4 shadow-lg flex justify-between items-center mt-4\",\n onClick: ()=>updateCurrentView('vfl'),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-black text-lg\",\n children: \"可视故障定位\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 525,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-3 h-3 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/arrow.png'),\n alt: \"箭头\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 527,\n columnNumber: 33\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 526,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 521,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 453,\n columnNumber: 21\n }, this);\n case 'ref-copper':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/ref-copper.png'),\n alt: \"铜缆参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 543,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 542,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 541,\n columnNumber: 21\n }, this);\n case 'ref-copper-setting':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/testing.gif'),\n alt: \"测试中\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 558,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 557,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 556,\n columnNumber: 21\n }, this);\n case 'ref-copper-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/ref-copper-ok.png'),\n alt: \"铜缆参照设置完成\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 573,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 572,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 571,\n columnNumber: 21\n }, this);\n case 'ref-cfp':\n case 'ref-cfp2':\n case 'ref-cfp3':\n case 'ref-cfp4':\n case 'ref-cfp5':\n case 'ref-cfp6':\n case 'ref-cfp7':\n case 'ref-cfp8':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/ref-cfp${view === 'ref-cfp' ? '1' : view.slice(-1)}${isMultiMode ? '-mm' : '-sm'}.png`),\n alt: \"光纤参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 595,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 594,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 593,\n columnNumber: 21\n }, this);\n case 'ref-cfp-setting':\n case 'ref-cfp-settrc':\n case 'ref-cfp-settrc-no50':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/testing.gif'),\n alt: \"测试中\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 612,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 611,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 610,\n columnNumber: 21\n }, this);\n case 'ref-cfp-trc':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/ref-cfp-trc${isMultiMode ? '-mm' : '-sm'}.png`),\n alt: `TRC验证 - ${isMultiMode ? '多模' : '单模'}`,\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 627,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 626,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 625,\n columnNumber: 21\n }, this);\n case 'ref-cfp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/ref-cfp-ok${isMultiMode ? '-mm' : '-sm'}.png`),\n alt: `光纤参照设置完成 - ${isMultiMode ? '多模' : '单模'}`,\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 642,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 641,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 640,\n columnNumber: 21\n }, this);\n case 'ref-ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(`/${ofpBackground}`),\n alt: \"OTDR参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 657,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 656,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex items-end justify-end px-20\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex flex-col items-start space-y-20\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col space-y-4 mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"text-white text-xl flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n name: \"compensation\",\n value: \"lead\",\n defaultChecked: true,\n onChange: (e)=>handleCompensationChange(e.target.value),\n className: \"mr-3 w-5 h-5\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 669,\n columnNumber: 37\n }, this),\n \"仅前导\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 668,\n columnNumber: 33\n }, this),\n faultScenario !== 'DataCenter' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"text-white text-xl flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"radio\",\n name: \"compensation\",\n value: \"both\",\n onChange: (e)=>handleCompensationChange(e.target.value),\n className: \"mr-3 w-5 h-5\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 681,\n columnNumber: 41\n }, this),\n \"前导+末尾\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 680,\n columnNumber: 37\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 667,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-white text-m mb-4\",\n children: [\n \"光纤类型:\",\n currentConfig?.params?.cableType\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 692,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 666,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 665,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 655,\n columnNumber: 21\n }, this);\n case 'ref-ofp-setting':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/refeset-testing.gif'),\n alt: \"OTDR测试中\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 704,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 703,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 702,\n columnNumber: 21\n }, this);\n case 'ref-ofp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(ofpBackground === 'ref-ofp.png' ? '/ref-ofp-ok.png' : '/ref-ofp-ok-end.png'),\n alt: \"OTDR参照设置\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 719,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_SubTitleBar__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n title: ofpBackground === 'ref-ofp.png' ? '选择前导事件' : '选择前导和末尾事件'\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 726,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 718,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 717,\n columnNumber: 21\n }, this);\n case 'tone':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)('/tone.gif'),\n alt: \"音频发生器\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 735,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 734,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 733,\n columnNumber: 21\n }, this);\n case 'vfl':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-[#D5DFEB] flex flex-col\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_image__WEBPACK_IMPORTED_MODULE_2___default()), {\n src: (0,_utils_asset__WEBPACK_IMPORTED_MODULE_9__.getAssetUrl)(vflStatus ? '/vfl-on.png' : '/vfl-off.png'),\n alt: \"可视故障定位\",\n fill: true,\n className: \"object-contain\",\n sizes: \"100vw\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 749,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 748,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 747,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const renderFooter = ()=>{\n switch(view){\n case 'ref-copper':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: RefCopperButtonClick,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 770,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 769,\n columnNumber: 21\n }, this);\n case 'ref-cfp-setting':\n case 'ref-cfp-settrc':\n case 'ref-cfp-settrc-no50':\n case 'ref-copper-setting':\n case 'ref-ofp-setting':\n case 'tone':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 786,\n columnNumber: 21\n }, this);\n case 'vfl':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: SetvflStatus,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"开/关\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 793,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 792,\n columnNumber: 21\n }, this);\n case 'ref-copper-ok':\n case 'ref-cfp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>navigateTo('home', 'main'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"主页\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 806,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 805,\n columnNumber: 21\n }, this);\n case 'ref-cfp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('ref-cfp2'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 818,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 817,\n columnNumber: 21\n }, this);\n case 'ref-cfp2':\n case 'ref-cfp4':\n case 'ref-cfp5':\n case 'ref-cfp6':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView(`ref-cfp${parseInt(view.slice(-1)) + 1}`),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 832,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 831,\n columnNumber: 21\n }, this);\n case 'ref-cfp-trc':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-between px-4\",\n children: [\n showRetryButtons ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n RefCfpRefButtonClick();\n },\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"重新验证\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 846,\n columnNumber: 33\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n updateCurrentView('ref-cfp');\n },\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"重新开始\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 854,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 864,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n updateCurrentView('ref-cfp8');\n },\n className: \"w-[100px] h-[40px] rounded-sm flex items-center justify-center text-white font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 866,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 843,\n columnNumber: 21\n }, this);\n case 'ref-cfp3':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: RefCfpButtonClick,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"设置参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 880,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 879,\n columnNumber: 21\n }, this);\n case 'ref-cfp7':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: RefCfpRefButtonClick,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"TRC验证\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 892,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 891,\n columnNumber: 21\n }, this);\n case 'ref-cfp8':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('ref-cfp-ok'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"下一个\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 904,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 903,\n columnNumber: 21\n }, this);\n case 'ref-ofp':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleRefOFPTest,\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 918,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 917,\n columnNumber: 21\n }, this);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>updateCurrentView('ref-ofp-setting'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"测试\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 928,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 927,\n columnNumber: 21\n }, this);\n case 'ref-ofp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[60px] bg-[#132843] flex items-center justify-end px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>navigateTo('home', 'main'),\n className: \"w-[100px] h-[40px] bg-gradient-to-b from-[#b6dae7] to-[#65dfff] rounded-sm flex items-center justify-center text-black font-bold shadow-lg\",\n children: \"保存\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 940,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 939,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n const renderTitleBar = ()=>{\n switch(view){\n case 'ref-copper-setting':\n case 'ref-cfp-setting':\n case 'ref-cfp-settrc':\n case 'ref-cfp-settrc-no50':\n case 'ref-ofp-setting':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"进程\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 963,\n columnNumber: 24\n }, this);\n case 'ref-copper-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置基准\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 966,\n columnNumber: 24\n }, this);\n case 'ref-cfp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置参照\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 968,\n columnNumber: 24\n }, this);\n case 'ref-copper':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置基准\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 971,\n columnNumber: 24\n }, this);\n case 'ref-cfp':\n case 'ref-cfp2':\n case 'ref-cfp3':\n case 'ref-cfp4':\n case 'ref-cfp5':\n case 'ref-cfp6':\n case 'ref-cfp7':\n case 'ref-cfp8':\n case 'ref-cfp-trc':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置参照\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 982,\n columnNumber: 24\n }, this);\n case 'ref-ofp':\n case 'ref-ofp-ok':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"设置补偿\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 986,\n columnNumber: 24\n }, this);\n case 'tone':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"音频发生器\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 988,\n columnNumber: 24\n }, this);\n case 'vfl':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"可视故障定位\",\n backTo: \"tools\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 990,\n columnNumber: 24\n }, this);\n default:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_TitleBar__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n title: \"工具\",\n backTo: \"home\",\n view: \"main\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 993,\n columnNumber: 24\n }, this);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_lib_StatusBar__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 999,\n columnNumber: 13\n }, this),\n renderTitleBar(),\n renderContent(),\n renderFooter()\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/general/Tools.js\",\n lineNumber: 998,\n columnNumber: 9\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9Ub29scy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW9EO0FBQ3JCO0FBQ3FCO0FBQ0Y7QUFDTTtBQUNMO0FBQ0Y7QUFDVDtBQUNJO0FBQ1U7QUFFdkMsU0FBU1k7SUFDcEIsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR04sb0VBQXdCLEdBQUdRLFVBQVUsQ0FBQ0MsT0FBTztJQUM5RCxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsaUJBQWlCLEVBQUVDLGlCQUFpQixFQUFDQyxTQUFTLEVBQUNDLGVBQWUsRUFBRSxHQUFHZCwrREFBZUE7SUFDdEcsTUFBTWUsaUJBQWlCSDtJQUN2QixNQUFNSSxnQkFBZ0JELGdCQUFnQkUsV0FBVyxDQUFDakIsb0VBQXdCLEdBQUdrQixlQUFlLENBQUNDLGVBQWUsQ0FBQztJQUM3RyxNQUFNQyxnQkFBZ0JuQixtRUFBdUIsR0FBR29CLGNBQWM7SUFDOUQsU0FBUztJQUNULE1BQU0sRUFBRUMsZ0JBQWdCLEVBQUVDLG9CQUFvQixFQUFFLEdBQUd0Qiw4REFBY0E7SUFDakUsTUFBTXVCLGdCQUFnQkYsa0JBQWtCRyxXQUFXLENBQUNDLE9BQU9DLElBQUksQ0FBQ0wsaUJBQWlCRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRUc7SUFDakcsTUFBTUMsY0FBY1Asa0JBQWtCRyxXQUFXLENBQUNDLE9BQU9DLElBQUksQ0FBQ0wsaUJBQWlCRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRUs7SUFDL0YsTUFBTUMsV0FBV1Qsa0JBQWtCRyxXQUFXLENBQUNDLE9BQU9DLElBQUksQ0FBQ0wsaUJBQWlCRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRU87SUFDNUYsTUFBTUMsYUFBYVgsa0JBQWtCRyxXQUFXLENBQUMsV0FBVyxFQUFFSyxPQUFPO0lBQ3JFLE1BQU0sQ0FBQ0ksZUFBZUMsaUJBQWlCLEdBQUcx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Ozs7WUFFdEQsS0FBSztZQUNMLEtBQUs7Z0JBQ0QscUJBQU8sOERBQUNSLGdFQUFRQTtvQkFBQ29KLE9BQU07b0JBQU9JLFFBQU87b0JBQVFoSixNQUFLOzs7Ozs7WUFDdEQsS0FBSztnQkFDRCxxQkFBTyw4REFBQ1IsZ0VBQVFBO29CQUFDb0osT0FBTTtvQkFBUUksUUFBTztvQkFBUWhKLE1BQUs7Ozs7OztZQUN2RCxLQUFLO2dCQUNELHFCQUFPLDhEQUFDUixnRUFBUUE7b0JBQUNvSixPQUFNO29CQUFTSSxRQUFPO29CQUFRaEosTUFBSzs7Ozs7O1lBRXhEO2dCQUNJLHFCQUFPLDhEQUFDUixnRUFBUUE7b0JBQUNvSixPQUFNO29CQUFLSSxRQUFPO29CQUFPaEosTUFBSzs7Ozs7O1FBQ3ZEO0lBQ0o7SUFFQSxxQkFDSSw4REFBQzBIO1FBQUlDLFdBQVU7OzBCQUNYLDhEQUFDcEksaUVBQVNBOzs7OztZQUNUd0o7WUFDQXRCO1lBQ0FvQjs7Ozs7OztBQUdiIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvZ2VuZXJhbC9Ub29scy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBJbWFnZSBmcm9tICduZXh0L2ltYWdlJztcclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICdAL2NvbXBvbmVudHMvbGliLy9TdGF0dXNCYXInO1xyXG5pbXBvcnQgVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vVGl0bGVCYXInO1xyXG5pbXBvcnQgU3ViVGl0bGVCYXIgZnJvbSAnQC9jb21wb25lbnRzL2xpYi8vU3ViVGl0bGVCYXInO1xyXG5pbXBvcnQgdXNlRGlzcGxheVN0b3JlIGZyb20gJ0Avc3RvcmUvZGlzcGxheVN0b3JlJztcclxuaW1wb3J0IHVzZURldmljZVN0b3JlIGZyb20gJ0Avc3RvcmUvZGV2aWNlU3RvcmUnO1xyXG5pbXBvcnQgeyBBUElfVVJMUyB9IGZyb20gJ0AvY29uZmlnL2FwaSc7XHJcbmltcG9ydCB7IGdldEFzc2V0VXJsIH0gZnJvbSAnQC91dGlscy9hc3NldCc7XHJcbmltcG9ydCB7IHVzZUF1ZGlvIH0gZnJvbSAnQC9jb21wb25lbnRzL0F1ZGlvUHJvdmlkZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVG9vbHMoKSB7XHJcbiAgICBjb25zdCB7IHZpZXcgfSA9IHVzZURpc3BsYXlTdG9yZS5nZXRTdGF0ZSgpLm5hdmlnYXRpb24uY3VycmVudDtcclxuICAgIGNvbnN0IHsgbmF2aWdhdGVUbywgdXBkYXRlQ3VycmVudFZpZXcsIGdldEN1cnJlbnRQcm9qZWN0LHVwZGF0YVJlZixzZXRUb2FzdE1lc3NhZ2UgfSA9IHVzZURpc3BsYXlTdG9yZSgpO1xyXG4gICAgY29uc3QgY3VycmVudFByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdCgpO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IGN1cnJlbnRQcm9qZWN0Py50ZXN0Q29uZmlnc1t1c2VEaXNwbGF5U3RvcmUuZ2V0U3RhdGUoKS5zZWxlY3RlZEluZGV4ZXMudGVzdENvbmZpZ0luZGV4XTtcclxuICAgIGNvbnN0IGZhdWx0U2NlbmFyaW8gPSB1c2VEZXZpY2VTdG9yZS5nZXRTdGF0ZSgpLmZhdWx0U2NlbmFyaW9zO1xyXG4gICAgLy8g6I635Y+W6L+e5o6l54q25oCBXHJcbiAgICBjb25zdCB7IGNvbm5lY3Rpb25TdGF0dXMsIHNldFRvdGFsVG9hc3RNZXNzYWdlIH0gPSB1c2VEZXZpY2VTdG9yZSgpO1xyXG4gICAgY29uc3QgbWFpblBvcnRTdGFydCA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uW09iamVjdC5rZXlzKGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzKVswXV0/LnN0YXJ0O1xyXG4gICAgY29uc3QgbWFpblBvcnRFbmQgPSBjb25uZWN0aW9uU3RhdHVzPy5tYWluUGF0aHM/LltPYmplY3Qua2V5cyhjb25uZWN0aW9uU3RhdHVzLm1haW5QYXRocylbMF1dPy5lbmQ7XHJcbiAgICBjb25zdCBtYWlucGF0aCA9IGNvbm5lY3Rpb25TdGF0dXM/Lm1haW5QYXRocz8uW09iamVjdC5rZXlzKGNvbm5lY3Rpb25TdGF0dXMubWFpblBhdGhzKVswXV0/LnBhdGg7XHJcbiAgICBjb25zdCBtYWluVkZMRW5kID0gY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bJ21haW4tdmZsJ10/LmVuZCB8fCBudWxsO1xyXG4gICAgY29uc3QgW2Nvbm5lY3Rpb25NYXAsIHNldENvbm5lY3Rpb25NYXBdID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgY29ubmVjdGlvbk1hcFJlZiA9IHVzZVJlZihudWxsKTsgIC8vIOa3u+WKoHJlZueUqOS6jue8k+WtmGNvbm5lY3Rpb25NYXBcclxuICAgIGNvbnN0IGNhYmxlVHlwZSA9IGN1cnJlbnRDb25maWcucGFyYW1zLmNhYmxlVHlwZTtcclxuICAgIGNvbnN0IGlzTXVsdGlNb2RlID0gY2FibGVUeXBlLmluY2x1ZGVzKCdPTScpO1xyXG4gICAgY29uc3QgeyBwbGF5IH0gPSB1c2VBdWRpbygpO1xyXG4gICAgXHJcbiAgICAvLyBWRkznirbmgIFcclxuICAgIGNvbnN0IFt2ZmxTdGF0dXMsIHNldFZmbFN0YXR1c10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gICAgICAgIC8vIOiOt+WPlui/nuaOpemFjee9rlxyXG4gICAgICAgIGNvbnN0IGZldGNoQ29ubmVjdGlvbk1hcCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIOWmguaenOW3sue7j+aciee8k+WtmOeahGNvbm5lY3Rpb25NYXDvvIznm7TmjqXov5Tlm55cclxuICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uTWFwUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRDb25uZWN0aW9uTWFwKGNvbm5lY3Rpb25NYXBSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcGlVcmwgPSBBUElfVVJMUy5DT05ORUNUSU9OLk1BUF9XSVRIX1NDRU5FKGZhdWx0U2NlbmFyaW8pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGlVcmwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign6I635Y+W6L+e5o6l6YWN572u5aSx6LSlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbk1hcFJlZi5jdXJyZW50ID0gZGF0YSB8fCB7fTsgIC8vIOe8k+WtmGNvbm5lY3Rpb25NYXBcclxuICAgICAgICAgICAgICAgIHNldENvbm5lY3Rpb25NYXAoZGF0YSB8fCB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfojrflj5bov57mjqXphY3nva7plJnor686JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q29ubmVjdGlvbk1hcCh7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1WRkwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gVkZM5Yqf6IO95Ye95pWwXHJcbiAgICBjb25zdCBoYW5kbGVWZmwgPSAoKSA9PiB7XHJcbiAgICAgICAgZmV0Y2hDb25uZWN0aW9uTWFwKCk7XHJcbiAgICAgICAgaWYgKCFtYWluVkZMRW5kKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2coY29ubmVjdGlvblN0YXR1cz8ubWFpblBhdGhzPy5bJ21haW4tdmZsJ10pO1xyXG5cclxuICAgICAgICAvLyDlnKhjb25uZWN0aW9uTWFw5Lit5p+l5om+5LiObWFpblZGTEVuZOWMuemFjeeahOi/nuaOpVxyXG4gICAgICAgIGxldCBjb25uZWN0ZWRQb3J0ID0gbnVsbDtcclxuICAgICAgICBsZXQgdGFyZ2V0UG9ydElkID0gbnVsbDtcclxuICAgICAgICBcclxuICAgICAgICAvLyDpppblhYjmo4Dmn6VtYWluVkZMRW5k5piv5ZCm5L2c5Li6a2V55a2Y5ZyoXHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25NYXBbbWFpblZGTEVuZF0pIHtcclxuICAgICAgICAgICAgY29ubmVjdGVkUG9ydCA9IG1haW5WRkxFbmQ7XHJcbiAgICAgICAgICAgIHRhcmdldFBvcnRJZCA9IGNvbm5lY3Rpb25NYXBbbWFpblZGTEVuZF0uY29ubmVjdGVkVG87XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piva2V577yM5YiZ5p+l5om+5ZOq5Liqa2V555qEY29ubmVjdGVkVG/nrYnkuo5tYWluVkZMRW5kXHJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kS2V5ID0gT2JqZWN0LmtleXMoY29ubmVjdGlvbk1hcCkuZmluZChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25NYXBba2V5XS5jb25uZWN0ZWRUbyA9PT0gbWFpblZGTEVuZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZEtleSkge1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGVkUG9ydCA9IG1haW5WRkxFbmQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRQb3J0SWQgPSBmb3VuZEtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29ubmVjdGVkUG9ydCAmJiB0YXJnZXRQb3J0SWQpIHtcclxuICAgICAgICAgICAgLy8g5aaC5p6cdGFyZ2V0UG9ydElk5YyF5ZCrLXBvcnR477yIeOS4uuaVsOWtl++8ie+8jOWImeenu+mZpOi/memDqOWIhlxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0UG9ydElkICYmIC8tcG9ydFxcZCskLy50ZXN0KHRhcmdldFBvcnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFBvcnRJZCA9IHRhcmdldFBvcnRJZC5yZXBsYWNlKC8tcG9ydFxcZCskLywgJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldFBvcnRJZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgLy8g5qOA5p+l55uu5qCH5YWD57Sg5piv5ZCm5bey6L+e5o6lXHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2p0ay1jb25uZWN0ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyDojrflj5bnm67moIflhYPntKDnmoTkvY3nva7kv6Hmga9cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDliJvlu7rpl6rng4HnmoTnuqLngrlcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZERvdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgcmVkRG90LnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogJHtyZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMn1weDtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAke3JlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyfXB4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogYmxpbmsgMXMgaW5maW5pdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgei1pbmRleDogOTk5OTtcclxuICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIOa3u+WKoOmXqueDgeWKqOeUu+agt+W8j1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgQGtleWZyYW1lcyBibGluayB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAlIHsgb3BhY2l0eTogMTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwMCUgeyBvcGFjaXR5OiAxOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZWREb3QpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDlnKhWRkznirbmgIHlhbPpl63ml7bnp7vpmaTnuqLngrlcclxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyZWREb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc3R5bGUpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBWRkznirbmgIHliIfmjaLlh73mlbBcclxuICAgIGNvbnN0IFNldHZmbFN0YXR1cyA9ICgpID0+IHtcclxuICAgICAgICBzZXRWZmxTdGF0dXMoIXZmbFN0YXR1cyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOS9v+eUqHVzZVJlZuadpeWtmOWCqOW9k+WJjeeahGNvbm5lY3RlZFBvcnRcclxuICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0ZWRQb3J0UmVmID0gdXNlUmVmKG51bGwpO1xyXG5cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNsZWFudXA7XHJcbiAgICAgICAgaWYgKHZmbFN0YXR1cykge1xyXG4gICAgICAgICAgICAvLyDojrflj5blvZPliY3nmoRjb25uZWN0ZWRQb3J077yM5L2/55So5Y+M5ZCR5p+l5om+6YC76L6RXHJcbiAgICAgICAgICAgIGxldCBjb25uZWN0ZWRQb3J0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25NYXBbbWFpblZGTEVuZF0pIHtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3RlZFBvcnQgPSBtYWluVkZMRW5kO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGVkUG9ydCA9IE9iamVjdC5rZXlzKGNvbm5lY3Rpb25NYXApLmZpbmQoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbk1hcFtrZXldLmNvbm5lY3RlZFRvID09PSBtYWluVkZMRW5kO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOWmguaenGNvbm5lY3RlZFBvcnTlj5HnlJ/lj5jljJbvvIzph43mlrDmiafooYxoYW5kbGVWZmxcclxuICAgICAgICAgICAgaWYgKGNvbm5lY3RlZFBvcnQgIT09IGN1cnJlbnRDb25uZWN0ZWRQb3J0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjbGVhbnVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudENvbm5lY3RlZFBvcnRSZWYuY3VycmVudCA9IGNvbm5lY3RlZFBvcnQ7XHJcbiAgICAgICAgICAgICAgICBjbGVhbnVwID0gaGFuZGxlVmZsKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNsZWFudXApIHtcclxuICAgICAgICAgICAgICAgIC8vIOWmguaenOayoeaciWNsZWFudXDvvIzor7TmmI7ov5jmsqHmnInmiafooYzov4doYW5kbGVWZmxcclxuICAgICAgICAgICAgICAgIGNsZWFudXAgPSBoYW5kbGVWZmwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2xlYW51cCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFt2ZmxTdGF0dXMsIG1haW5WRkxFbmQsIGNvbm5lY3Rpb25NYXBdKTtcclxuXHJcbiAgICAvLyDnm5HlkKzop4blm77lj5jljJbvvIzlvZPnprvlvIB2Zmzop4blm77ml7bph43nva52ZmxTdGF0dXNcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHZpZXcgIT09ICd2ZmwnICYmIHZmbFN0YXR1cykge1xyXG4gICAgICAgICAgICBzZXRWZmxTdGF0dXMoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFt2aWV3XSk7XHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgIFxyXG4gICAgLy8g6ZOc57yG5Z+65YeG5Yik5pat5Ye95pWwIOWvueW6lHJlZi1jb3BwZXLpobXohJrmjInpkq5cclxuICAgIGNvbnN0IFJlZkNvcHBlckJ1dHRvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChtYWluUG9ydFN0YXJ0ID09PSAnbWFpbi1wZXJtYW5lbnQnKSB7XHJcbiAgICAgICAgICAgIGlmIChtYWluUG9ydEVuZCA9PT0gJ3JlbW90ZS1jaGFubmVsJykge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jb3BwZXItc2V0dGluZycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfln7rlh4borr7nva7plJnor6/vvIzor7fmo4Dmn6Xov57mjqXnirbmgIEnKTsgLy8g5Y+v5Lul55So6Ieq5a6a5LmJ55qE5o+Q56S65pa55byP5pu/5LujYWxlcnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgn6YCC6YWN5Zmo5LiN5YW85a6577yM5a+86Ie05Z+65YeG6K6+572u5aSx6LSlJyk7IC8vIOWQjOagt++8jOWPr+S7peeUqOiHquWumuS5ieeahOaPkOekuuaWueW8j+abv+S7o2FsZXJ0XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8v6ZOc57yG5Z+65YeG6K6+572u54q25oCB5pu05paw5Ye95pWwXHJcbiAgICBjb25zdCBSZUZDb3BwZXJVcGRhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgdXBkYXRhUmVmKCdjb3BwZXInLCB7IHN0YXR1czogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjZnDln7rlh4bliKTmlq3lh73mlbAg5a+55bqUY2Zw6aG16ISa5oyJ6ZKuXHJcbiAgICBjb25zdCBSZWZDZnBCdXR0b25DbGljayA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBtYWluUGF0aHMgPSBjb25uZWN0aW9uU3RhdHVzLm1haW5QYXRocyB8fCB7fTtcclxuICAgICAgICBjb25zdCByZW1vdGVQYXRocyA9IGNvbm5lY3Rpb25TdGF0dXMucmVtb3RlUGF0aHMgfHwge307XHJcblxyXG4gICAgICAgIC8vIOajgOafpeerr+WPo+aYr+WQpuWtmOWcqFxyXG4gICAgICAgIGNvbnN0IG1haW5PdXRFeGlzdHMgPSBpc011bHRpTW9kZSBcclxuICAgICAgICAgICAgPyAobWFpblBhdGhzWydtYWluLWNmcC1tbS1vdXQnXSB8fCBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddKVxyXG4gICAgICAgICAgICA6IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J107XHJcbiAgICAgICAgY29uc3QgbWFpbkluRXhpc3RzID0gbWFpblBhdGhzWydtYWluLWNmcC1pbiddO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZU91dEV4aXN0cyA9IGlzTXVsdGlNb2RlXHJcbiAgICAgICAgICAgID8gKHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLW1tLW91dCddIHx8IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLXNtLW91dCddKVxyXG4gICAgICAgICAgICA6IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLXNtLW91dCddO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZUluRXhpc3RzID0gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtaW4nXTtcclxuXHJcbiAgICAgICAgLy8g6I635Y+W56uv54K56L+e5o6lXHJcbiAgICAgICAgY29uc3QgbWFpbk91dEVuZCA9IGlzTXVsdGlNb2RlIFxyXG4gICAgICAgICAgICA/IG1haW5QYXRoc1snbWFpbi1jZnAtbW0tb3V0J10/LmVuZCB8fCBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddPy5lbmRcclxuICAgICAgICAgICAgOiBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddPy5lbmQ7XHJcbiAgICAgICAgY29uc3QgbWFpbkluRW5kID0gbWFpblBhdGhzWydtYWluLWNmcC1pbiddPy5lbmQ7XHJcbiAgICAgICAgY29uc3QgcmVtb3RlT3V0RW5kID0gaXNNdWx0aU1vZGUgXHJcbiAgICAgICAgICAgID8gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtbW0tb3V0J10/LmVuZCB8fCByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1zbS1vdXQnXT8uZW5kXHJcbiAgICAgICAgICAgIDogcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J10/LmVuZDtcclxuICAgICAgICBjb25zdCByZW1vdGVJbkVuZCA9IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLWluJ10/LmVuZDtcclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5omA5pyJ56uv5Y+j5piv5ZCm5a2Y5ZyoXHJcbiAgICAgICAgaWYgKCFtYWluT3V0RXhpc3RzIHx8ICFtYWluSW5FeGlzdHMgfHwgIXJlbW90ZU91dEV4aXN0cyB8fCAhcmVtb3RlSW5FeGlzdHMpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfor7fmo4Dmn6Xnq6/lj6Pov57mjqUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm5pyJ5pyq6L+e5o6l55qE56uv5Y+jXHJcbiAgICAgICAgaWYgKCFtYWluT3V0RW5kIHx8ICFtYWluSW5FbmQgfHwgIXJlbW90ZU91dEVuZCB8fCAhcmVtb3RlSW5FbmQpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfor7fmo4Dmn6Xnq6/lj6Pov57mjqUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g6aqM6K+B56uv5Y+j6L+e5o6l5piv5ZCm5q2j56GuXHJcbiAgICAgICAgY29uc3QgaXNDb25uZWN0aW9uQ29ycmVjdCA9IFxyXG4gICAgICAgICAgICBtYWluT3V0RW5kID09PSAncmVtb3RlLWNmcC1pbicgJiZcclxuICAgICAgICAgICAgbWFpbkluRW5kID09PSAoaXNNdWx0aU1vZGUgPyAncmVtb3RlLWNmcC1tbS1vdXQnIDogJ3JlbW90ZS1jZnAtc20tb3V0JykgJiZcclxuICAgICAgICAgICAgcmVtb3RlT3V0RW5kID09PSAnbWFpbi1jZnAtaW4nICYmXHJcbiAgICAgICAgICAgIHJlbW90ZUluRW5kID09PSAoaXNNdWx0aU1vZGUgPyAnbWFpbi1jZnAtbW0tb3V0JyA6ICdtYWluLWNmcC1zbS1vdXQnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzQ29ubmVjdGlvbkNvcnJlY3QpIHtcclxuICAgICAgICAgICAgdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jZnAtc2V0dGluZycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCfor7fkvb/nlKjot7Pnur/orr7nva7ln7rlh4YnKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBjb25zdCBbc2hvd1JldHJ5QnV0dG9ucywgc2V0U2hvd1JldHJ5QnV0dG9uc10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gICAgXHJcbiAgICBjb25zdCBSZWZDZnBSZWZCdXR0b25DbGljayA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBtYWluUGF0aHMgPSBjb25uZWN0aW9uU3RhdHVzLm1haW5QYXRocyB8fCB7fTtcclxuICAgICAgICBjb25zdCByZW1vdGVQYXRocyA9IGNvbm5lY3Rpb25TdGF0dXMucmVtb3RlUGF0aHMgfHwge307XHJcblxyXG4gICAgICAgIC8vIOajgOafpeerr+WPo+aYr+WQpuWtmOWcqFxyXG4gICAgICAgIGNvbnN0IG1haW5PdXRFeGlzdHMgPSBpc011bHRpTW9kZSBcclxuICAgICAgICAgICAgPyAobWFpblBhdGhzWydtYWluLWNmcC1tbS1vdXQnXSB8fCBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddKVxyXG4gICAgICAgICAgICA6IG1haW5QYXRoc1snbWFpbi1jZnAtc20tb3V0J107XHJcbiAgICAgICAgY29uc3QgbWFpbkluRXhpc3RzID0gbWFpblBhdGhzWydtYWluLWNmcC1pbiddO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZU91dEV4aXN0cyA9IGlzTXVsdGlNb2RlXHJcbiAgICAgICAgICAgID8gKHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLW1tLW91dCddIHx8IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLXNtLW91dCddKVxyXG4gICAgICAgICAgICA6IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLXNtLW91dCddO1xyXG4gICAgICAgIGNvbnN0IHJlbW90ZUluRXhpc3RzID0gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtaW4nXTtcclxuXHJcbiAgICAgICAgLy8g6I635Y+W56uv54K56L+e5o6lXHJcbiAgICAgICAgY29uc3QgbWFpbk91dEVuZCA9IGlzTXVsdGlNb2RlIFxyXG4gICAgICAgICAgICA/IG1haW5QYXRoc1snbWFpbi1jZnAtbW0tb3V0J10/LmVuZCB8fCBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddPy5lbmRcclxuICAgICAgICAgICAgOiBtYWluUGF0aHNbJ21haW4tY2ZwLXNtLW91dCddPy5lbmQ7XHJcbiAgICAgICAgY29uc3QgbWFpbkluRW5kID0gbWFpblBhdGhzWydtYWluLWNmcC1pbiddPy5lbmQ7XHJcbiAgICAgICAgY29uc3QgcmVtb3RlT3V0RW5kID0gaXNNdWx0aU1vZGUgXHJcbiAgICAgICAgICAgID8gcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtbW0tb3V0J10/LmVuZCB8fCByZW1vdGVQYXRoc1sncmVtb3RlLWNmcC1zbS1vdXQnXT8uZW5kXHJcbiAgICAgICAgICAgIDogcmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtc20tb3V0J10/LmVuZDtcclxuICAgICAgICBjb25zdCByZW1vdGVJbkVuZCA9IHJlbW90ZVBhdGhzWydyZW1vdGUtY2ZwLWluJ10/LmVuZDtcclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5omA5pyJ56uv5Y+j5piv5ZCm5a2Y5ZyoXHJcbiAgICAgICAgaWYgKCFtYWluT3V0RXhpc3RzIHx8ICFtYWluSW5FeGlzdHMgfHwgIXJlbW90ZU91dEV4aXN0cyB8fCAhcmVtb3RlSW5FeGlzdHMpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfor7fmo4Dmn6Xnq6/lj6Pov57mjqUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm5pyJ5pyq6L+e5o6l55qE56uv5Y+jXHJcbiAgICAgICAgaWYgKCFtYWluT3V0RW5kIHx8ICFtYWluSW5FbmQgfHwgIXJlbW90ZU91dEVuZCB8fCAhcmVtb3RlSW5FbmQpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfor7fmo4Dmn6Xnq6/lj6Pov57mjqUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+l56uv5Y+j6L+e5o6l5piv5ZCm5q2j56GuXHJcbiAgICAgICAgY29uc3QgaXNDb25uZWN0aW9uQ29ycmVjdCA9IFxyXG4gICAgICAgICAgICBtYWluT3V0RW5kID09PSAncmVtb3RlLWNmcC1pbicgJiZcclxuICAgICAgICAgICAgbWFpbkluRW5kID09PSAoaXNNdWx0aU1vZGUgPyAncmVtb3RlLWNmcC1tbS1vdXQnIDogJ3JlbW90ZS1jZnAtc20tb3V0JykgJiZcclxuICAgICAgICAgICAgcmVtb3RlT3V0RW5kID09PSAnbWFpbi1jZnAtaW4nICYmXHJcbiAgICAgICAgICAgIHJlbW90ZUluRW5kID09PSAoaXNNdWx0aU1vZGUgPyAnbWFpbi1jZnAtbW0tb3V0JyA6ICdtYWluLWNmcC1zbS1vdXQnKTtcclxuICAgICAgICBpZiAoIWlzQ29ubmVjdGlvbkNvcnJlY3QpIHtcclxuICAgICAgICAgICAgc2V0VG9hc3RNZXNzYWdlKCfor7fmo4Dmn6Xnq6/lj6Pov57mjqUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5qOA5p+lVFJD6ZW/5bqmXHJcbiAgICAgICAgY29uc3QgbWFpblRyY0NvdW50ID0gKG1haW5QYXRoc1snbWFpbi1jZnAtaW4nXT8ucGF0aD8uZmlsdGVyKHAgPT4gXHJcbiAgICAgICAgICAgIGlzTXVsdGlNb2RlID8gcC5pbmNsdWRlcygnbW0tbGMtbGMnKSA6IHAuaW5jbHVkZXMoJ3NtLWxjLWxjJylcclxuICAgICAgICApPy5sZW5ndGggfHwgMCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcmVtb3RlVHJjQ291bnQgPSAocmVtb3RlUGF0aHNbJ3JlbW90ZS1jZnAtaW4nXT8ucGF0aD8uZmlsdGVyKHAgPT4gXHJcbiAgICAgICAgICAgIGlzTXVsdGlNb2RlID8gcC5pbmNsdWRlcygnbW0tbGMtbGMnKSA6IHAuaW5jbHVkZXMoJ3NtLWxjLWxjJylcclxuICAgICAgICApPy5sZW5ndGggfHwgMCk7XHJcblxyXG4gICAgICAgIGlmIChtYWluVHJjQ291bnQgPCA0IHx8IHJlbW90ZVRyY0NvdW50IDwgNCkge1xyXG4gICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcC1zZXR0cmMtbm81MCcpO1xyXG4gICAgICAgICAgICBzZXRTaG93UmV0cnlCdXR0b25zKHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICBpZiAoaXNDb25uZWN0aW9uQ29ycmVjdCkge1xyXG4gICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcC1zZXR0cmMnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+ivt+ajgOafpeerr+WPo+i/nuaOpScpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vQ0ZQ5Z+65YeG6K6+572u54q25oCB5pu05paw5Ye95pWwXHJcbiAgICBjb25zdCBSZUZDRlBVcGRhdGEgPSAoKSA9PiB7XHJcbiAgICAgICAgdXBkYXRhUmVmKCdjZnAnLCB7IHN0YXR1czogdHJ1ZSB9KTtcclxuICAgICAgICB1cGRhdGFSZWYoJ2NmcCcsIHsgY29ubmVjdFN0YXR1czogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9PRlDln7rlh4borr7nva7nirbmgIHmm7TmlrDlh73mlbBcclxuICAgIGNvbnN0IFJlRk9GUFVwZGF0YSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBzdGF0dXNWYWx1ZSA9IG9mcEJhY2tncm91bmQgPT09ICdyZWYtb2ZwLnBuZycgPyAnc3RhcnQnIDogJ2VuZCc7XHJcbiAgICAgICAgdXBkYXRhUmVmKCdvZnAnLCB7IHN0YXR1czogc3RhdHVzVmFsdWUgfSk7XHJcbiAgICAgICAgdXBkYXRhUmVmKCdvZnAnLCB7IGNvbm5lY3RTdGF0dXM6IHRydWUgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgLy8gT0ZQ6KGl5YG/5qOA5rWL5Ye95pWwXHJcbiAgICBjb25zdCBoYW5kbGVSZWZPRlBUZXN0ID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIOiOt+WPluW9k+WJjemAieaLqeeahOWFiee6pOexu+Wei1xyXG4gICAgICAgIGNvbnN0IGNhYmxlVHlwZSA9IGN1cnJlbnRDb25maWc/LnBhcmFtcz8uY2FibGVUeXBlO1xyXG4gICAgICAgIC8vIOiOt+WPluW9k+WJjemAieaLqeeahOihpeWBv+aWueW8j++8iOS7heWJjeWvvCBvciDliY3lr7wr5pyr5bC+77yJXHJcbiAgICAgICAgY29uc3QgaXNMZWFkT25seSA9IG9mcEJhY2tncm91bmQgPT09ICdyZWYtb2ZwLnBuZyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5Yik5pat5piv5ZCm5Li65aSa5qih5YWJ57qkXHJcbiAgICAgICAgY29uc3QgaXNNdWx0aU1vZGUgPSBjYWJsZVR5cGUuaW5jbHVkZXMoJ09NJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5qOA5p+lbWFpbnBhdGjnmoTnrKzkuIDkuKrmjqXlj6PmmK/lkKbljLnphY3lvZPliY3lhYnnuqTnsbvlnotcclxuICAgICAgICBjb25zdCBmaXJzdFBvcnQgPSBtYWlucGF0aD8uWzBdO1xyXG4gICAgICAgIGlmICghZmlyc3RQb3J0IHx8IFxyXG4gICAgICAgICAgICAoaXNNdWx0aU1vZGUgJiYgIWZpcnN0UG9ydC5pbmNsdWRlcygnbW0tb3V0JykpIHx8IFxyXG4gICAgICAgICAgICAoIWlzTXVsdGlNb2RlICYmICFmaXJzdFBvcnQuaW5jbHVkZXMoJ3NtLW91dCcpKSkge1xyXG4gICAgICAgICAgICBzZXRUb2FzdE1lc3NhZ2UoJ+acquajgOa1i+WIsOWJjeWvvOWFiee6pCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOajgOafpeihpeWBv+WFiee6pOexu+Wei+aYr+WQpuWMuemFjVxyXG4gICAgICAgIGNvbnN0IGhhc0ludmFsaWRGaWJlciA9IG1haW5wYXRoPy5zb21lKHBhdGggPT4ge1xyXG4gICAgICAgICAgICBpZiAocGF0aC5pbmNsdWRlcygnbW1jLScpIHx8IHBhdGguaW5jbHVkZXMoJ3NtYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChpc011bHRpTW9kZSAmJiBwYXRoLmluY2x1ZGVzKCdzbWMtJykpIHx8ICghaXNNdWx0aU1vZGUgJiYgcGF0aC5pbmNsdWRlcygnbW1jLScpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGhhc0ludmFsaWRGaWJlcikge1xyXG4gICAgICAgICAgICBzZXRUb3RhbFRvYXN0TWVzc2FnZShpc011bHRpTW9kZSA/ICfor7fkvb/nlKjlpJrmqKHooaXlgb/lhYnnuqQnIDogJ+ivt+S9v+eUqOWNleaooeihpeWBv+WFiee6pCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOajgOafpei3r+W+hOmVv+W6puWSjOe7hOaIkFxyXG4gICAgICAgIGlmIChpc0xlYWRPbmx5KSB7XHJcbiAgICAgICAgICAgIC8vIOS7heWJjeWvvOaooeW8j++8muW6lOivpeWPquacieS4u+acum91dOerr+WPo+WSjOS4gOS4quihpeWBv+WFiee6pFxyXG4gICAgICAgICAgICBpZiAobWFpbnBhdGg/Lmxlbmd0aCAhPT0gMiB8fCBcclxuICAgICAgICAgICAgICAgICFtYWlucGF0aFsxXS5pbmNsdWRlcyhpc011bHRpTW9kZSA/ICdtbWMtJyA6ICdzbWMtJykpIHtcclxuICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCfor7fnoa7kv53mraPnoa7ov57mjqXliY3lr7zlhYnnuqQnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIOWJjeWvvCvmnKvlsL7mqKHlvI/vvJrlupTor6XmnInkuLvmnLpvdXTnq6/lj6PjgIHkuKTkuKrooaXlgb/lhYnnuqTlkozkuIDkuKrov57mjqXlmahcclxuICAgICAgICAgICAgaWYgKG1haW5wYXRoPy5sZW5ndGggIT09IDYgfHwgXHJcbiAgICAgICAgICAgICAgICAhbWFpbnBhdGhbMV0uaW5jbHVkZXMoaXNNdWx0aU1vZGUgPyAnbW1jLScgOiAnc21jLScpIHx8IFxyXG4gICAgICAgICAgICAgICAgIW1haW5wYXRoWzVdLmluY2x1ZGVzKGlzTXVsdGlNb2RlID8gJ21tYy0nIDogJ3NtYy0nKSkgIHtcclxuICAgICAgICAgICAgICAgIHNldFRvdGFsVG9hc3RNZXNzYWdlKCfor7fnoa7kv53mraPnoa7ov57mjqXliY3lr7zlhYnnuqQnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyDmiYDmnInmo4Dmn6XpgJrov4fvvIzmm7TmlrDop4blm75cclxuICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLW9mcC1zZXR0aW5nJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIOWkhOeQhuWumuaXtuWZqOaViOaenFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodmlldyA9PT0gJ3JlZi1jb3BwZXItc2V0dGluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHBsYXkoJ3Bhc3MnKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY29wcGVyLW9rJyk7XHJcbiAgICAgICAgICAgICAgICBSZUZDb3BwZXJVcGRhdGEoKTsgLy/mm7TmlrDnirbmgIFcclxuICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldyA9PT0gJ3JlZi1jZnAtc2V0dGluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwNCcpO1xyXG4gICAgICAgICAgICB9LCAzMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2aWV3ID09PSAncmVmLWNmcC1zZXR0cmMnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcC10cmMnKTtcclxuICAgICAgICAgICAgICAgIFJlRkNGUFVwZGF0YSgpOyBcclxuICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmlldyA9PT0gJ3JlZi1jZnAtc2V0dHJjLW5vNTAnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcC10cmMnKTtcclxuICAgICAgICAgICAgICAgIHNldFRvYXN0TWVzc2FnZSgnVFJD6ZW/5bqm5LiN6LazNTBjbSzor7fph43mlrDmtYvor5UnKTtcclxuICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g6YeN572uc2hvd1JldHJ5QnV0dG9uc+eKtuaAgVxyXG4gICAgICAgIGlmICh2aWV3ICE9PSAncmVmLWNmcC1zZXR0cmMtbm81MCcgJiYgdmlldyAhPT0gJ3JlZi1jZnAtdHJjJykge1xyXG4gICAgICAgICAgICBzZXRTaG93UmV0cnlCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXcgPT09ICdyZWYtb2ZwLXNldHRpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLW9mcC1vaycpO1xyXG4gICAgICAgICAgICAgICAgUmVGT0ZQVXBkYXRhKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW3ZpZXddKTtcclxuXHJcbiAgICBjb25zdCBbb2ZwQmFja2dyb3VuZCwgc2V0T2ZwQmFja2dyb3VuZF0gPSB1c2VTdGF0ZSgncmVmLW9mcC5wbmcnKTtcclxuXHJcbiAgICAvLyDnm5HlkKx2aWV35Y+Y5YyW77yM5b2T6L+b5YWlcmVmLW9mcOinhuWbvuaXtumHjee9ruiDjOaZr+WbvueJh1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodmlldyA9PT0gJ3JlZi1vZnAnKSB7XHJcbiAgICAgICAgICAgIHNldE9mcEJhY2tncm91bmQoJ3JlZi1vZnAucG5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW3ZpZXddKTtcclxuXHJcbiAgICAvLyDlpITnkIbljZXpgInmoYbliIfmjaLkuovku7ZcclxuICAgIGNvbnN0IGhhbmRsZUNvbXBlbnNhdGlvbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHNldE9mcEJhY2tncm91bmQodmFsdWUgPT09ICdsZWFkJyA/ICdyZWYtb2ZwLnBuZycgOiAncmVmLW9mcC1lbmQucG5nJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ21haW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBiZy1bI0Q1REZFQl0gcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Q29uZmlnPy5tb2R1bGVUeXBlID09PSAnODAwMCcgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY29wcGVyJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7orr7nva7ln7rlh4Y8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudENvbmZpZz8ubW9kdWxlVHlwZSA9PT0gJ2NmcCcgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWJsYWNrIHRleHQtbGdcIj7orr7nva7lj4Lnhac8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvYXJyb3cucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRDb25maWc/Lm1vZHVsZVR5cGUgPT09ICdvZnAnICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtWzUwcHhdIGJnLVsjRjhGNkY3XSByb3VuZGVkLXNtIHAtNCBzaGFkb3ctbGcgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygncmVmLW9mcCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+6K6+572u6KGl5YG/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbXQtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygndG9uZScpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtYmxhY2sgdGV4dC1sZ1wiPumfs+mikeWPkeeUn+WZqDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTMgaC0zIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9hcnJvdy5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi566t5aS0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNTBweF0gYmctWyNGOEY2RjddIHJvdW5kZWQtc20gcC00IHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbXQtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygndmZsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1ibGFjayB0ZXh0LWxnXCI+5Y+v6KeG5pWF6Zqc5a6a5L2NPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXtnZXRBc3NldFVybCgnL2Fycm93LnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLnrq3lpLRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9yZWYtY29wcGVyLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumTnOe8huWPgueFp+iuvue9rlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jb3BwZXItc2V0dGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdGVzdGluZy5naWYnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLmtYvor5XkuK1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyLW9rJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwoJy9yZWYtY29wcGVyLW9rLnBuZycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIumTnOe8huWPgueFp+iuvue9ruWujOaIkFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwMic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAzJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDQnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA2JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwOCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvcmVmLWNmcCR7dmlldyA9PT0gJ3JlZi1jZnAnID8gJzEnIDogdmlldy5zbGljZSgtMSl9JHtpc011bHRpTW9kZSA/ICctbW0nIDogJy1zbSd9LnBuZ2ApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuWFiee6pOWPgueFp+iuvue9rlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9iamVjdC1jb250YWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplcz1cIjEwMHZ3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcC1zZXR0cmMtbm81MCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdGVzdGluZy5naWYnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLmtYvor5XkuK1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwLXRyYyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvcmVmLWNmcC10cmMke2lzTXVsdGlNb2RlID8gJy1tbScgOiAnLXNtJ30ucG5nYCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PXtgVFJD6aqM6K+BIC0gJHtpc011bHRpTW9kZSA/ICflpJrmqKEnIDogJ+WNleaooSd9YH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcC1vayc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvcmVmLWNmcC1vayR7aXNNdWx0aU1vZGUgPyAnLW1tJyA6ICctc20nfS5wbmdgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9e2DlhYnnuqTlj4Lnhaforr7nva7lrozmiJAgLSAke2lzTXVsdGlNb2RlID8gJ+WkmuaooScgOiAn5Y2V5qihJ31gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIGZsZXggZmxleC1jb2wgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKGAvJHtvZnBCYWNrZ3JvdW5kfWApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIk9URFLlj4Lnhaforr7nva5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4ICBpdGVtcy1lbmQganVzdGlmeS1lbmQgcHgtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IHNwYWNlLXktMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQteGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29tcGVuc2F0aW9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImxlYWRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDb21wZW5zYXRpb25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMyB3LTUgaC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS7heWJjeWvvFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZhdWx0U2NlbmFyaW8gIT09ICdEYXRhQ2VudGVyJyAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIHRleHQteGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29tcGVuc2F0aW9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJib3RoXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDb21wZW5zYXRpb25DaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTMgdy01IGgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWJjeWvvCvmnKvlsL5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtd2hpdGUgdGV4dC1tIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlhYnnuqTnsbvlnovvvJp7Y3VycmVudENvbmZpZz8ucGFyYW1zPy5jYWJsZVR5cGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1vZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvcmVmZXNldC10ZXN0aW5nLmdpZicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIk9URFLmtYvor5XkuK1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwLW9rJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgYmctWyNENURGRUJdIGZsZXggZmxleC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17Z2V0QXNzZXRVcmwob2ZwQmFja2dyb3VuZCA9PT0gJ3JlZi1vZnAucG5nJyA/ICcvcmVmLW9mcC1vay5wbmcnIDogJy9yZWYtb2ZwLW9rLWVuZC5wbmcnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJPVERS5Y+C54Wn6K6+572uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdWJUaXRsZUJhciB0aXRsZT17b2ZwQmFja2dyb3VuZCA9PT0gJ3JlZi1vZnAucG5nJyA/ICfpgInmi6nliY3lr7zkuovku7YnIDogJ+mAieaLqeWJjeWvvOWSjOacq+WwvuS6i+S7tid9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAndG9uZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKCcvdG9uZS5naWYnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLpn7PpopHlj5HnlJ/lmahcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvYmplY3QtY29udGFpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM9XCIxMDB2d1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZmbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2dldEFzc2V0VXJsKHZmbFN0YXR1cyA/ICcvdmZsLW9uLnBuZycgOiAnL3ZmbC1vZmYucG5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwi5Y+v6KeG5pWF6Zqc5a6a5L2NXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib2JqZWN0LWNvbnRhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzPVwiMTAwdndcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNvcHBlcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e1JlZkNvcHBlckJ1dHRvbkNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5rWL6K+VXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjJzogICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjLW5vNTAnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY29wcGVyLXNldHRpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwLXNldHRpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICd0b25lJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3ZmbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtTZXR2ZmxTdGF0dXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNiNmRhZTddIHRvLVsjNjVkZmZmXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDlvIAv5YWzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7IFxyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLWNvcHBlci1vayc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtb2snOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvKCdob21lJywgJ21haW4nKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNiNmRhZTddIHRvLVsjNjVkZmZmXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOS4u+mhtVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdXBkYXRlQ3VycmVudFZpZXcoJ3JlZi1jZnAyJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjZkYWU3XSB0by1bIzY1ZGZmZl0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDkuIvkuIDkuKpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwMic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA0JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDUnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHVwZGF0ZUN1cnJlbnRWaWV3KGByZWYtY2ZwJHtwYXJzZUludCh2aWV3LnNsaWNlKC0xKSkgKyAxfWApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5LiL5LiA5LiqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtdHJjJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dSZXRyeUJ1dHRvbnMgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZkNmcFJlZkJ1dHRvbkNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNiNmRhZTddIHRvLVsjNjVkZmZmXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDph43mlrDpqozor4FcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOmHjeaWsOW8gOWni1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRWaWV3KCdyZWYtY2ZwOCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSAgcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDkuIvkuIDkuKpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDMnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtSZWZDZnBCdXR0b25DbGlja31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctWzEwMHB4XSBoLVs0MHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tWyNiNmRhZTddIHRvLVsjNjVkZmZmXSByb3VuZGVkLXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmxhY2sgZm9udC1ib2xkIHNoYWRvdy1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOiuvue9ruWPgueFp1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e1JlZkNmcFJlZkJ1dHRvbkNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJD6aqM6K+BXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA4JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVs2MHB4XSBiZy1bIzEzMjg0M10gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgcHgtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygncmVmLWNmcC1vaycpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5LiL5LiA5LiqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLW9mcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVJlZk9GUFRlc3R9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjZkYWU3XSB0by1bIzY1ZGZmZl0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDmtYvor5VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzYwcHhdIGJnLVsjMTMyODQzXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBweC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB1cGRhdGVDdXJyZW50VmlldygncmVmLW9mcC1zZXR0aW5nJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LVsxMDBweF0gaC1bNDBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjYjZkYWU3XSB0by1bIzY1ZGZmZl0gcm91bmRlZC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsYWNrIGZvbnQtYm9sZCBzaGFkb3ctbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDmtYvor5VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAncmVmLW9mcC1vayc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bNjBweF0gYmctWyMxMzI4NDNdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG8oJ2hvbWUnLCAnbWFpbicpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1bMTAwcHhdIGgtWzQwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2I2ZGFlN10gdG8tWyM2NWRmZmZdIHJvdW5kZWQtc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibGFjayBmb250LWJvbGQgc2hhZG93LWxnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVuZGVyVGl0bGVCYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jb3BwZXItc2V0dGluZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtc2V0dHJjJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcC1zZXR0cmMtbm81MCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1vZnAtc2V0dGluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi6L+b56iLXCIgYmFja1RvPVwidG9vbHNcIiB2aWV3PVwibWFpblwiIC8+O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNvcHBlci1vayc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi6K6+572u5Z+65YeGXCIgIC8+O1xyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwLW9rJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8VGl0bGVCYXIgdGl0bGU9XCLorr7nva7lj4LnhadcIiAvPjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jb3BwZXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxUaXRsZUJhciB0aXRsZT1cIuiuvue9ruWfuuWHhlwiIGJhY2tUbz1cInRvb2xzXCIgdmlldz1cIm1haW5cIiAvPjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwMic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAzJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDQnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwNSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnA2JzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLWNmcDcnOlxyXG4gICAgICAgICAgICBjYXNlICdyZWYtY2ZwOCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlZi1jZnAtdHJjJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8VGl0bGVCYXIgdGl0bGU9XCLorr7nva7lj4LnhadcIiBiYWNrVG89XCJ0b29sc1wiIHZpZXc9XCJtYWluXCIgLz47XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjYXNlICdyZWYtb2ZwJzpcclxuICAgICAgICAgICAgY2FzZSAncmVmLW9mcC1vayc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi6K6+572u6KGl5YG/XCIgYmFja1RvPVwidG9vbHNcIiB2aWV3PVwibWFpblwiIC8+O1xyXG4gICAgICAgICAgICBjYXNlICd0b25lJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8VGl0bGVCYXIgdGl0bGU9XCLpn7PpopHlj5HnlJ/lmahcIiBiYWNrVG89XCJ0b29sc1wiIHZpZXc9XCJtYWluXCIgLz47XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZmbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPFRpdGxlQmFyIHRpdGxlPVwi5Y+v6KeG5pWF6Zqc5a6a5L2NXCIgYmFja1RvPVwidG9vbHNcIiB2aWV3PVwibWFpblwiIC8+O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiA8VGl0bGVCYXIgdGl0bGU9XCLlt6XlhbdcIiBiYWNrVG89XCJob21lXCIgdmlldz1cIm1haW5cIiAvPjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxTdGF0dXNCYXIgLz5cclxuICAgICAgICAgICAge3JlbmRlclRpdGxlQmFyKCl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJGb290ZXIoKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICk7XHJcbn1cclxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiSW1hZ2UiLCJTdGF0dXNCYXIiLCJUaXRsZUJhciIsIlN1YlRpdGxlQmFyIiwidXNlRGlzcGxheVN0b3JlIiwidXNlRGV2aWNlU3RvcmUiLCJBUElfVVJMUyIsImdldEFzc2V0VXJsIiwidXNlQXVkaW8iLCJUb29scyIsInZpZXciLCJnZXRTdGF0ZSIsIm5hdmlnYXRpb24iLCJjdXJyZW50IiwibmF2aWdhdGVUbyIsInVwZGF0ZUN1cnJlbnRWaWV3IiwiZ2V0Q3VycmVudFByb2plY3QiLCJ1cGRhdGFSZWYiLCJzZXRUb2FzdE1lc3NhZ2UiLCJjdXJyZW50UHJvamVjdCIsImN1cnJlbnRDb25maWciLCJ0ZXN0Q29uZmlncyIsInNlbGVjdGVkSW5kZXhlcyIsInRlc3RDb25maWdJbmRleCIsImZhdWx0U2NlbmFyaW8iLCJmYXVsdFNjZW5hcmlvcyIsImNvbm5lY3Rpb25TdGF0dXMiLCJzZXRUb3RhbFRvYXN0TWVzc2FnZSIsIm1haW5Qb3J0U3RhcnQiLCJtYWluUGF0aHMiLCJPYmplY3QiLCJrZXlzIiwic3RhcnQiLCJtYWluUG9ydEVuZCIsImVuZCIsIm1haW5wYXRoIiwicGF0aCIsIm1haW5WRkxFbmQiLCJjb25uZWN0aW9uTWFwIiwic2V0Q29ubmVjdGlvbk1hcCIsImNvbm5lY3Rpb25NYXBSZWYiLCJjYWJsZVR5cGUiLCJwYXJhbXMiLCJpc011bHRpTW9kZSIsImluY2x1ZGVzIiwicGxheSIsInZmbFN0YXR1cyIsInNldFZmbFN0YXR1cyIsImZldGNoQ29ubmVjdGlvbk1hcCIsImFwaVVybCIsIkNPTk5FQ1RJT04iLCJNQVBfV0lUSF9TQ0VORSIsInJlc3BvbnNlIiwiZmV0Y2giLCJvayIsIkVycm9yIiwiZGF0YSIsImpzb24iLCJlcnJvciIsImNvbnNvbGUiLCJoYW5kbGVWZmwiLCJsb2ciLCJjb25uZWN0ZWRQb3J0IiwidGFyZ2V0UG9ydElkIiwiY29ubmVjdGVkVG8iLCJmb3VuZEtleSIsImZpbmQiLCJrZXkiLCJ0ZXN0IiwicmVwbGFjZSIsInRhcmdldEVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicmVkRG90IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiY3NzVGV4dCIsInRvcCIsImhlaWdodCIsImxlZnQiLCJ3aWR0aCIsInRleHRDb250ZW50IiwiaGVhZCIsImFwcGVuZENoaWxkIiwiYm9keSIsInJlbW92ZUNoaWxkIiwiU2V0dmZsU3RhdHVzIiwiY3VycmVudENvbm5lY3RlZFBvcnRSZWYiLCJjbGVhbnVwIiwiUmVmQ29wcGVyQnV0dG9uQ2xpY2siLCJSZUZDb3BwZXJVcGRhdGEiLCJzdGF0dXMiLCJSZWZDZnBCdXR0b25DbGljayIsInJlbW90ZVBhdGhzIiwibWFpbk91dEV4aXN0cyIsIm1haW5JbkV4aXN0cyIsInJlbW90ZU91dEV4aXN0cyIsInJlbW90ZUluRXhpc3RzIiwibWFpbk91dEVuZCIsIm1haW5JbkVuZCIsInJlbW90ZU91dEVuZCIsInJlbW90ZUluRW5kIiwiaXNDb25uZWN0aW9uQ29ycmVjdCIsInNob3dSZXRyeUJ1dHRvbnMiLCJzZXRTaG93UmV0cnlCdXR0b25zIiwiUmVmQ2ZwUmVmQnV0dG9uQ2xpY2siLCJtYWluVHJjQ291bnQiLCJmaWx0ZXIiLCJwIiwibGVuZ3RoIiwicmVtb3RlVHJjQ291bnQiLCJSZUZDRlBVcGRhdGEiLCJjb25uZWN0U3RhdHVzIiwiUmVGT0ZQVXBkYXRhIiwic3RhdHVzVmFsdWUiLCJvZnBCYWNrZ3JvdW5kIiwiaGFuZGxlUmVmT0ZQVGVzdCIsImlzTGVhZE9ubHkiLCJmaXJzdFBvcnQiLCJoYXNJbnZhbGlkRmliZXIiLCJzb21lIiwidGltZXIiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0T2ZwQmFja2dyb3VuZCIsImhhbmRsZUNvbXBlbnNhdGlvbkNoYW5nZSIsInZhbHVlIiwicmVuZGVyQ29udGVudCIsImRpdiIsImNsYXNzTmFtZSIsIm1vZHVsZVR5cGUiLCJidXR0b24iLCJvbkNsaWNrIiwic3JjIiwiYWx0IiwiZmlsbCIsInNpemVzIiwic2xpY2UiLCJsYWJlbCIsImlucHV0IiwidHlwZSIsIm5hbWUiLCJkZWZhdWx0Q2hlY2tlZCIsIm9uQ2hhbmdlIiwiZSIsInRhcmdldCIsInRpdGxlIiwicmVuZGVyRm9vdGVyIiwicGFyc2VJbnQiLCJyZW5kZXJUaXRsZUJhciIsImJhY2tUbyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/general/Tools.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/dsxpage/index.js":
/*!*****************************************!*\
!*** ./src/components/dsxpage/index.js ***!
\*****************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CableId: () => (/* binding */ CableId),\n/* harmony export */ CopperPerformance: () => (/* binding */ CopperPerformance),\n/* harmony export */ HomePage: () => (/* binding */ HomePage),\n/* harmony export */ MenuList: () => (/* binding */ MenuList),\n/* harmony export */ Operators: () => (/* binding */ Operators),\n/* harmony export */ Project: () => (/* binding */ Project),\n/* harmony export */ Result: () => (/* binding */ Result),\n/* harmony export */ ResultInfo: () => (/* binding */ ResultInfo),\n/* harmony export */ TestConfig: () => (/* binding */ TestConfig),\n/* harmony export */ Testing: () => (/* binding */ Testing),\n/* harmony export */ Tools: () => (/* binding */ Tools)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var _general_HomePage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./general/HomePage */ \"(pages-dir-node)/./src/components/dsxpage/general/HomePage.js\");\n/* harmony import */ var _general_Project__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./general/Project */ \"(pages-dir-node)/./src/components/dsxpage/general/Project.js\");\n/* harmony import */ var _general_Operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./general/Operators */ \"(pages-dir-node)/./src/components/dsxpage/general/Operators.js\");\n/* harmony import */ var _general_CableId__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./general/CableId */ \"(pages-dir-node)/./src/components/dsxpage/general/CableId.js\");\n/* harmony import */ var _general_Tools__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./general/Tools */ \"(pages-dir-node)/./src/components/dsxpage/general/Tools.js\");\n/* harmony import */ var _general_Result__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./general/Result */ \"(pages-dir-node)/./src/components/dsxpage/general/Result.js\");\n/* harmony import */ var _general_TestConfig__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./general/TestConfig */ \"(pages-dir-node)/./src/components/dsxpage/general/TestConfig.js\");\n/* harmony import */ var _general_MenuList__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./general/MenuList */ \"(pages-dir-node)/./src/components/dsxpage/general/MenuList.js\");\n/* harmony import */ var _general_Testing__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./general/Testing */ \"(pages-dir-node)/./src/components/dsxpage/general/Testing.js\");\n/* harmony import */ var _general_ResultInfo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./general/ResultInfo */ \"(pages-dir-node)/./src/components/dsxpage/general/ResultInfo.js\");\n/* harmony import */ var _general_CopperPerformance__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./general/CopperPerformance */ \"(pages-dir-node)/./src/components/dsxpage/general/CopperPerformance.js\");\n/* harmony import */ var _fluke_HomePage__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./fluke/HomePage */ \"(pages-dir-node)/./src/components/dsxpage/fluke/HomePage.js\");\n/* harmony import */ var _fluke_Project__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./fluke/Project */ \"(pages-dir-node)/./src/components/dsxpage/fluke/Project.js\");\n/* harmony import */ var _fluke_Operators__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./fluke/Operators */ \"(pages-dir-node)/./src/components/dsxpage/fluke/Operators.js\");\n/* harmony import */ var _fluke_CableId__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./fluke/CableId */ \"(pages-dir-node)/./src/components/dsxpage/fluke/CableId.js\");\n/* harmony import */ var _fluke_Tools__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./fluke/Tools */ \"(pages-dir-node)/./src/components/dsxpage/fluke/Tools.js\");\n/* harmony import */ var _fluke_Result__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./fluke/Result */ \"(pages-dir-node)/./src/components/dsxpage/fluke/Result.js\");\n/* harmony import */ var _fluke_TestConfig__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fluke/TestConfig */ \"(pages-dir-node)/./src/components/dsxpage/fluke/TestConfig.js\");\n/* harmony import */ var _fluke_MenuList__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fluke/MenuList */ \"(pages-dir-node)/./src/components/dsxpage/fluke/MenuList.js\");\n/* harmony import */ var _fluke_Testing__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./fluke/Testing */ \"(pages-dir-node)/./src/components/dsxpage/fluke/Testing.js\");\n/* harmony import */ var _fluke_ResultInfo__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./fluke/ResultInfo */ \"(pages-dir-node)/./src/components/dsxpage/fluke/ResultInfo.js\");\n/* harmony import */ var _fluke_CopperPerformance__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./fluke/CopperPerformance */ \"(pages-dir-node)/./src/components/dsxpage/fluke/CopperPerformance.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, _general_HomePage__WEBPACK_IMPORTED_MODULE_3__, _general_Project__WEBPACK_IMPORTED_MODULE_4__, _general_Operators__WEBPACK_IMPORTED_MODULE_5__, _general_CableId__WEBPACK_IMPORTED_MODULE_6__, _general_Tools__WEBPACK_IMPORTED_MODULE_7__, _general_Result__WEBPACK_IMPORTED_MODULE_8__, _general_TestConfig__WEBPACK_IMPORTED_MODULE_9__, _general_MenuList__WEBPACK_IMPORTED_MODULE_10__, _general_Testing__WEBPACK_IMPORTED_MODULE_11__, _general_ResultInfo__WEBPACK_IMPORTED_MODULE_12__, _general_CopperPerformance__WEBPACK_IMPORTED_MODULE_13__, _fluke_HomePage__WEBPACK_IMPORTED_MODULE_14__, _fluke_Project__WEBPACK_IMPORTED_MODULE_15__, _fluke_Operators__WEBPACK_IMPORTED_MODULE_16__, _fluke_CableId__WEBPACK_IMPORTED_MODULE_17__, _fluke_Tools__WEBPACK_IMPORTED_MODULE_18__, _fluke_Result__WEBPACK_IMPORTED_MODULE_19__, _fluke_TestConfig__WEBPACK_IMPORTED_MODULE_20__, _fluke_MenuList__WEBPACK_IMPORTED_MODULE_21__, _fluke_Testing__WEBPACK_IMPORTED_MODULE_22__, _fluke_ResultInfo__WEBPACK_IMPORTED_MODULE_23__, _fluke_CopperPerformance__WEBPACK_IMPORTED_MODULE_24__]);\n([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, _general_HomePage__WEBPACK_IMPORTED_MODULE_3__, _general_Project__WEBPACK_IMPORTED_MODULE_4__, _general_Operators__WEBPACK_IMPORTED_MODULE_5__, _general_CableId__WEBPACK_IMPORTED_MODULE_6__, _general_Tools__WEBPACK_IMPORTED_MODULE_7__, _general_Result__WEBPACK_IMPORTED_MODULE_8__, _general_TestConfig__WEBPACK_IMPORTED_MODULE_9__, _general_MenuList__WEBPACK_IMPORTED_MODULE_10__, _general_Testing__WEBPACK_IMPORTED_MODULE_11__, _general_ResultInfo__WEBPACK_IMPORTED_MODULE_12__, _general_CopperPerformance__WEBPACK_IMPORTED_MODULE_13__, _fluke_HomePage__WEBPACK_IMPORTED_MODULE_14__, _fluke_Project__WEBPACK_IMPORTED_MODULE_15__, _fluke_Operators__WEBPACK_IMPORTED_MODULE_16__, _fluke_CableId__WEBPACK_IMPORTED_MODULE_17__, _fluke_Tools__WEBPACK_IMPORTED_MODULE_18__, _fluke_Result__WEBPACK_IMPORTED_MODULE_19__, _fluke_TestConfig__WEBPACK_IMPORTED_MODULE_20__, _fluke_MenuList__WEBPACK_IMPORTED_MODULE_21__, _fluke_Testing__WEBPACK_IMPORTED_MODULE_22__, _fluke_ResultInfo__WEBPACK_IMPORTED_MODULE_23__, _fluke_CopperPerformance__WEBPACK_IMPORTED_MODULE_24__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n// general 版本组件\n\n\n\n\n\n\n\n\n\n\n\n// fluke 版本组件\n\n\n\n\n\n\n\n\n\n\n\nconst variantsGeneral = {\n HomePage: _general_HomePage__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n Project: _general_Project__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n Operators: _general_Operators__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n CableId: _general_CableId__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n Tools: _general_Tools__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n Result: _general_Result__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n TestConfig: _general_TestConfig__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n MenuList: _general_MenuList__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n Testing: _general_Testing__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n ResultInfo: _general_ResultInfo__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n CopperPerformance: _general_CopperPerformance__WEBPACK_IMPORTED_MODULE_13__[\"default\"]\n};\nconst variantsFluke = {\n HomePage: _fluke_HomePage__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n Project: _fluke_Project__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n Operators: _fluke_Operators__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n CableId: _fluke_CableId__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n Tools: _fluke_Tools__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n Result: _fluke_Result__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n TestConfig: _fluke_TestConfig__WEBPACK_IMPORTED_MODULE_20__[\"default\"],\n MenuList: _fluke_MenuList__WEBPACK_IMPORTED_MODULE_21__[\"default\"],\n Testing: _fluke_Testing__WEBPACK_IMPORTED_MODULE_22__[\"default\"],\n ResultInfo: _fluke_ResultInfo__WEBPACK_IMPORTED_MODULE_23__[\"default\"],\n CopperPerformance: _fluke_CopperPerformance__WEBPACK_IMPORTED_MODULE_24__[\"default\"]\n};\nfunction make(name) {\n return function VariantWrapper(props) {\n const estmodel = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])({\n \"make.VariantWrapper.useDeviceStore[estmodel]\": (s)=>s.estmodel\n }[\"make.VariantWrapper.useDeviceStore[estmodel]\"]);\n const table = estmodel === 'fluke' ? variantsFluke : variantsGeneral;\n const Comp = table[name] || variantsGeneral[name];\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Comp, {\n ...props\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/dsxpage/index.js\",\n lineNumber: 63,\n columnNumber: 12\n }, this);\n };\n}\n// 导出与现有一致的同名组件\nconst HomePage = make('HomePage');\nconst Project = make('Project');\nconst Operators = make('Operators');\nconst CableId = make('CableId');\nconst Tools = make('Tools');\nconst Result = make('Result');\nconst TestConfig = make('TestConfig');\nconst MenuList = make('MenuList');\nconst Testing = make('Testing');\nconst ResultInfo = make('ResultInfo');\nconst CopperPerformance = make('CopperPerformance');\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2RzeHBhZ2UvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTBCO0FBQ3VCO0FBRWpELGVBQWU7QUFDa0M7QUFDRjtBQUNJO0FBQ0o7QUFDSjtBQUNFO0FBQ1E7QUFDSjtBQUNGO0FBQ007QUFDYztBQUVuRSxhQUFhO0FBQ2dDO0FBQ0Y7QUFDSTtBQUNKO0FBQ0o7QUFDRTtBQUNRO0FBQ0o7QUFDRjtBQUNNO0FBQ2M7QUFFL0QsTUFBTXdCLGtCQUFrQjtJQUN0QkMsVUFBVXZCLHlEQUFlQTtJQUN6QndCLFNBQVN2Qix3REFBY0E7SUFDdkJ3QixXQUFXdkIsMERBQWdCQTtJQUMzQndCLFNBQVN2Qix3REFBY0E7SUFDdkJ3QixPQUFPdkIsc0RBQVlBO0lBQ25Cd0IsUUFBUXZCLHVEQUFhQTtJQUNyQndCLFlBQVl2QiwyREFBaUJBO0lBQzdCd0IsVUFBVXZCLDBEQUFlQTtJQUN6QndCLFNBQVN2Qix5REFBY0E7SUFDdkJ3QixZQUFZdkIsNERBQWlCQTtJQUM3QndCLG1CQUFtQnZCLG1FQUF3QkE7QUFDN0M7QUFFQSxNQUFNd0IsZ0JBQWdCO0lBQ3BCWCxVQUFVWix3REFBYUE7SUFDdkJhLFNBQVNaLHVEQUFZQTtJQUNyQmEsV0FBV1oseURBQWNBO0lBQ3pCYSxTQUFTWix1REFBWUE7SUFDckJhLE9BQU9aLHFEQUFVQTtJQUNqQmEsUUFBUVosc0RBQVdBO0lBQ25CYSxZQUFZWiwwREFBZUE7SUFDM0JhLFVBQVVaLHdEQUFhQTtJQUN2QmEsU0FBU1osdURBQVlBO0lBQ3JCYSxZQUFZWiwwREFBZUE7SUFDM0JhLG1CQUFtQlosaUVBQXNCQTtBQUMzQztBQUVBLFNBQVNjLEtBQUtDLElBQUk7SUFDaEIsT0FBTyxTQUFTQyxlQUFlQyxLQUFLO1FBQ2xDLE1BQU1DLFdBQVd4Qyw4REFBY0E7NERBQUMsQ0FBQ3lDLElBQU1BLEVBQUVELFFBQVE7O1FBQ2pELE1BQU1FLFFBQVFGLGFBQWEsVUFBVUwsZ0JBQWdCWjtRQUNyRCxNQUFNb0IsT0FBT0QsS0FBSyxDQUFDTCxLQUFLLElBQUlkLGVBQWUsQ0FBQ2MsS0FBSztRQUNqRCxxQkFBTyw4REFBQ007WUFBTSxHQUFHSixLQUFLOzs7Ozs7SUFDeEI7QUFDRjtBQUVBLGVBQWU7QUFDUixNQUFNZixXQUFXWSxLQUFLLFlBQVk7QUFDbEMsTUFBTVgsVUFBVVcsS0FBSyxXQUFXO0FBQ2hDLE1BQU1WLFlBQVlVLEtBQUssYUFBYTtBQUNwQyxNQUFNVCxVQUFVUyxLQUFLLFdBQVc7QUFDaEMsTUFBTVIsUUFBUVEsS0FBSyxTQUFTO0FBQzVCLE1BQU1QLFNBQVNPLEtBQUssVUFBVTtBQUM5QixNQUFNTixhQUFhTSxLQUFLLGNBQWM7QUFDdEMsTUFBTUwsV0FBV0ssS0FBSyxZQUFZO0FBQ2xDLE1BQU1KLFVBQVVJLEtBQUssV0FBVztBQUNoQyxNQUFNSCxhQUFhRyxLQUFLLGNBQWM7QUFDdEMsTUFBTUYsb0JBQW9CRSxLQUFLLHFCQUFxQiIsInNvdXJjZXMiOlsiL29wdC9kZXYvZXN0LWRzeC9zcmMvY29tcG9uZW50cy9kc3hwYWdlL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEZXZpY2VTdG9yZSBmcm9tICdAL3N0b3JlL2RldmljZVN0b3JlJztcclxuXHJcbi8vIGdlbmVyYWwg54mI5pys57uE5Lu2XHJcbmltcG9ydCBHZW5lcmFsSG9tZVBhZ2UgZnJvbSAnLi9nZW5lcmFsL0hvbWVQYWdlJztcclxuaW1wb3J0IEdlbmVyYWxQcm9qZWN0IGZyb20gJy4vZ2VuZXJhbC9Qcm9qZWN0JztcclxuaW1wb3J0IEdlbmVyYWxPcGVyYXRvcnMgZnJvbSAnLi9nZW5lcmFsL09wZXJhdG9ycyc7XHJcbmltcG9ydCBHZW5lcmFsQ2FibGVJZCBmcm9tICcuL2dlbmVyYWwvQ2FibGVJZCc7XHJcbmltcG9ydCBHZW5lcmFsVG9vbHMgZnJvbSAnLi9nZW5lcmFsL1Rvb2xzJztcclxuaW1wb3J0IEdlbmVyYWxSZXN1bHQgZnJvbSAnLi9nZW5lcmFsL1Jlc3VsdCc7XHJcbmltcG9ydCBHZW5lcmFsVGVzdENvbmZpZyBmcm9tICcuL2dlbmVyYWwvVGVzdENvbmZpZyc7XHJcbmltcG9ydCBHZW5lcmFsTWVudUxpc3QgZnJvbSAnLi9nZW5lcmFsL01lbnVMaXN0JztcclxuaW1wb3J0IEdlbmVyYWxUZXN0aW5nIGZyb20gJy4vZ2VuZXJhbC9UZXN0aW5nJztcclxuaW1wb3J0IEdlbmVyYWxSZXN1bHRJbmZvIGZyb20gJy4vZ2VuZXJhbC9SZXN1bHRJbmZvJztcclxuaW1wb3J0IEdlbmVyYWxDb3BwZXJQZXJmb3JtYW5jZSBmcm9tICcuL2dlbmVyYWwvQ29wcGVyUGVyZm9ybWFuY2UnO1xyXG5cclxuLy8gZmx1a2Ug54mI5pys57uE5Lu2XHJcbmltcG9ydCBGbHVrZUhvbWVQYWdlIGZyb20gJy4vZmx1a2UvSG9tZVBhZ2UnO1xyXG5pbXBvcnQgRmx1a2VQcm9qZWN0IGZyb20gJy4vZmx1a2UvUHJvamVjdCc7XHJcbmltcG9ydCBGbHVrZU9wZXJhdG9ycyBmcm9tICcuL2ZsdWtlL09wZXJhdG9ycyc7XHJcbmltcG9ydCBGbHVrZUNhYmxlSWQgZnJvbSAnLi9mbHVrZS9DYWJsZUlkJztcclxuaW1wb3J0IEZsdWtlVG9vbHMgZnJvbSAnLi9mbHVrZS9Ub29scyc7XHJcbmltcG9ydCBGbHVrZVJlc3VsdCBmcm9tICcuL2ZsdWtlL1Jlc3VsdCc7XHJcbmltcG9ydCBGbHVrZVRlc3RDb25maWcgZnJvbSAnLi9mbHVrZS9UZXN0Q29uZmlnJztcclxuaW1wb3J0IEZsdWtlTWVudUxpc3QgZnJvbSAnLi9mbHVrZS9NZW51TGlzdCc7XHJcbmltcG9ydCBGbHVrZVRlc3RpbmcgZnJvbSAnLi9mbHVrZS9UZXN0aW5nJztcclxuaW1wb3J0IEZsdWtlUmVzdWx0SW5mbyBmcm9tICcuL2ZsdWtlL1Jlc3VsdEluZm8nO1xyXG5pbXBvcnQgRmx1a2VDb3BwZXJQZXJmb3JtYW5jZSBmcm9tICcuL2ZsdWtlL0NvcHBlclBlcmZvcm1hbmNlJztcclxuXHJcbmNvbnN0IHZhcmlhbnRzR2VuZXJhbCA9IHtcclxuICBIb21lUGFnZTogR2VuZXJhbEhvbWVQYWdlLFxyXG4gIFByb2plY3Q6IEdlbmVyYWxQcm9qZWN0LFxyXG4gIE9wZXJhdG9yczogR2VuZXJhbE9wZXJhdG9ycyxcclxuICBDYWJsZUlkOiBHZW5lcmFsQ2FibGVJZCxcclxuICBUb29sczogR2VuZXJhbFRvb2xzLFxyXG4gIFJlc3VsdDogR2VuZXJhbFJlc3VsdCxcclxuICBUZXN0Q29uZmlnOiBHZW5lcmFsVGVzdENvbmZpZyxcclxuICBNZW51TGlzdDogR2VuZXJhbE1lbnVMaXN0LFxyXG4gIFRlc3Rpbmc6IEdlbmVyYWxUZXN0aW5nLFxyXG4gIFJlc3VsdEluZm86IEdlbmVyYWxSZXN1bHRJbmZvLFxyXG4gIENvcHBlclBlcmZvcm1hbmNlOiBHZW5lcmFsQ29wcGVyUGVyZm9ybWFuY2UsXHJcbn07XHJcblxyXG5jb25zdCB2YXJpYW50c0ZsdWtlID0ge1xyXG4gIEhvbWVQYWdlOiBGbHVrZUhvbWVQYWdlLFxyXG4gIFByb2plY3Q6IEZsdWtlUHJvamVjdCxcclxuICBPcGVyYXRvcnM6IEZsdWtlT3BlcmF0b3JzLFxyXG4gIENhYmxlSWQ6IEZsdWtlQ2FibGVJZCxcclxuICBUb29sczogRmx1a2VUb29scyxcclxuICBSZXN1bHQ6IEZsdWtlUmVzdWx0LFxyXG4gIFRlc3RDb25maWc6IEZsdWtlVGVzdENvbmZpZyxcclxuICBNZW51TGlzdDogRmx1a2VNZW51TGlzdCxcclxuICBUZXN0aW5nOiBGbHVrZVRlc3RpbmcsXHJcbiAgUmVzdWx0SW5mbzogRmx1a2VSZXN1bHRJbmZvLFxyXG4gIENvcHBlclBlcmZvcm1hbmNlOiBGbHVrZUNvcHBlclBlcmZvcm1hbmNlLFxyXG59O1xyXG5cclxuZnVuY3Rpb24gbWFrZShuYW1lKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIFZhcmlhbnRXcmFwcGVyKHByb3BzKSB7XHJcbiAgICBjb25zdCBlc3Rtb2RlbCA9IHVzZURldmljZVN0b3JlKChzKSA9PiBzLmVzdG1vZGVsKTtcclxuICAgIGNvbnN0IHRhYmxlID0gZXN0bW9kZWwgPT09ICdmbHVrZScgPyB2YXJpYW50c0ZsdWtlIDogdmFyaWFudHNHZW5lcmFsO1xyXG4gICAgY29uc3QgQ29tcCA9IHRhYmxlW25hbWVdIHx8IHZhcmlhbnRzR2VuZXJhbFtuYW1lXTtcclxuICAgIHJldHVybiA8Q29tcCB7Li4ucHJvcHN9IC8+O1xyXG4gIH07XHJcbn1cclxuXHJcbi8vIOWvvOWHuuS4jueOsOacieS4gOiHtOeahOWQjOWQjee7hOS7tlxyXG5leHBvcnQgY29uc3QgSG9tZVBhZ2UgPSBtYWtlKCdIb21lUGFnZScpO1xyXG5leHBvcnQgY29uc3QgUHJvamVjdCA9IG1ha2UoJ1Byb2plY3QnKTtcclxuZXhwb3J0IGNvbnN0IE9wZXJhdG9ycyA9IG1ha2UoJ09wZXJhdG9ycycpO1xyXG5leHBvcnQgY29uc3QgQ2FibGVJZCA9IG1ha2UoJ0NhYmxlSWQnKTtcclxuZXhwb3J0IGNvbnN0IFRvb2xzID0gbWFrZSgnVG9vbHMnKTtcclxuZXhwb3J0IGNvbnN0IFJlc3VsdCA9IG1ha2UoJ1Jlc3VsdCcpO1xyXG5leHBvcnQgY29uc3QgVGVzdENvbmZpZyA9IG1ha2UoJ1Rlc3RDb25maWcnKTtcclxuZXhwb3J0IGNvbnN0IE1lbnVMaXN0ID0gbWFrZSgnTWVudUxpc3QnKTtcclxuZXhwb3J0IGNvbnN0IFRlc3RpbmcgPSBtYWtlKCdUZXN0aW5nJyk7XHJcbmV4cG9ydCBjb25zdCBSZXN1bHRJbmZvID0gbWFrZSgnUmVzdWx0SW5mbycpO1xyXG5leHBvcnQgY29uc3QgQ29wcGVyUGVyZm9ybWFuY2UgPSBtYWtlKCdDb3BwZXJQZXJmb3JtYW5jZScpOyJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZURldmljZVN0b3JlIiwiR2VuZXJhbEhvbWVQYWdlIiwiR2VuZXJhbFByb2plY3QiLCJHZW5lcmFsT3BlcmF0b3JzIiwiR2VuZXJhbENhYmxlSWQiLCJHZW5lcmFsVG9vbHMiLCJHZW5lcmFsUmVzdWx0IiwiR2VuZXJhbFRlc3RDb25maWciLCJHZW5lcmFsTWVudUxpc3QiLCJHZW5lcmFsVGVzdGluZyIsIkdlbmVyYWxSZXN1bHRJbmZvIiwiR2VuZXJhbENvcHBlclBlcmZvcm1hbmNlIiwiRmx1a2VIb21lUGFnZSIsIkZsdWtlUHJvamVjdCIsIkZsdWtlT3BlcmF0b3JzIiwiRmx1a2VDYWJsZUlkIiwiRmx1a2VUb29scyIsIkZsdWtlUmVzdWx0IiwiRmx1a2VUZXN0Q29uZmlnIiwiRmx1a2VNZW51TGlzdCIsIkZsdWtlVGVzdGluZyIsIkZsdWtlUmVzdWx0SW5mbyIsIkZsdWtlQ29wcGVyUGVyZm9ybWFuY2UiLCJ2YXJpYW50c0dlbmVyYWwiLCJIb21lUGFnZSIsIlByb2plY3QiLCJPcGVyYXRvcnMiLCJDYWJsZUlkIiwiVG9vbHMiLCJSZXN1bHQiLCJUZXN0Q29uZmlnIiwiTWVudUxpc3QiLCJUZXN0aW5nIiwiUmVzdWx0SW5mbyIsIkNvcHBlclBlcmZvcm1hbmNlIiwidmFyaWFudHNGbHVrZSIsIm1ha2UiLCJuYW1lIiwiVmFyaWFudFdyYXBwZXIiLCJwcm9wcyIsImVzdG1vZGVsIiwicyIsInRhYmxlIiwiQ29tcCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/dsxpage/index.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/lib/CopperResultMain.js":
/*!************************************************!*\
!*** ./src/components/lib/CopperResultMain.js ***!
\************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CopperResultMain)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _WireMapView__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./WireMapView */ \"(pages-dir-node)/./src/components/lib/WireMapView.js\");\n/* harmony import */ var _PerformanceView__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PerformanceView */ \"(pages-dir-node)/./src/components/lib/PerformanceView.js\");\n/* harmony import */ var _DiagnosticView__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DiagnosticView */ \"(pages-dir-node)/./src/components/lib/DiagnosticView.js\");\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! uuid */ \"uuid\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_WireMapView__WEBPACK_IMPORTED_MODULE_2__, _PerformanceView__WEBPACK_IMPORTED_MODULE_3__, _DiagnosticView__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__, uuid__WEBPACK_IMPORTED_MODULE_7__]);\n([_WireMapView__WEBPACK_IMPORTED_MODULE_2__, _PerformanceView__WEBPACK_IMPORTED_MODULE_3__, _DiagnosticView__WEBPACK_IMPORTED_MODULE_4__, _store_displayStore__WEBPACK_IMPORTED_MODULE_5__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_6__, uuid__WEBPACK_IMPORTED_MODULE_7__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\n\n\nfunction CopperResultMain({ testResult: initialTestResult }) {\n const { navigation, navigateTo, getCurrentTestConfig } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const { estmodel } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const [activeTab, setActiveTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(navigation.current.params.activeTab || '布线图');\n const [testResult, setTestResult] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialTestResult);\n const [resultData, setResultData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const currentConfig = getCurrentTestConfig();\n const cableType = currentConfig?.params?.cableType;\n const wireOrder = currentConfig?.params?.wireOrder;\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CopperResultMain.useEffect\": ()=>{\n const loadTestResult = {\n \"CopperResultMain.useEffect.loadTestResult\": async ()=>{\n if (initialTestResult.CopperWiremapResultStatus === 'fail') {\n setResultData({\n result: 'fail'\n });\n } else if (initialTestResult.CopperWiremapResultStatus === 'pass') {\n try {\n const response = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.*\\\\.json$\")(`./${initialTestResult.CopperPerformanceStatus}.json`);\n const data = response.default;\n // 加载限制数据\n const limitValue = initialTestResult.testconfig?.params?.limitValue;\n let limitdata;\n try {\n // 从limitValue中提取基础名称(移除+PoE和+ALL后缀)\n const baseName = limitValue.split(' (+')[0];\n // 使用基础名称加载带有(+ALL)后缀的文件\n const limitResponse = await __webpack_require__(\"(pages-dir-node)/./src/store/COPPER lazy recursive ^\\\\.\\\\/.* \\\\(\\\\+ALL\\\\)\\\\.json$\")(`./${baseName} (+ALL).json`);\n limitdata = limitResponse;\n // 计算所有参数的余量\n const paramTitles = [\n '插入损耗',\n '回波损耗',\n 'NEXT',\n 'PS NEXT',\n 'ACR-N',\n 'PS ACR-N',\n 'ACR-F',\n 'PS ACR-F',\n 'CDNEXT',\n 'CMRL',\n 'TCL',\n 'ELTCTL'\n ];\n const dataGroupMap = {\n '插入损耗': 'Insertion Loss (dB)',\n '回波损耗': 'RL (dB)',\n 'NEXT': 'NEXT (dB)',\n 'PS NEXT': 'PS NEXT (dB)',\n 'ACR-N': 'ACR-N (dB)',\n 'PS ACR-N': 'PS ACR-N (dB)',\n 'ACR-F': 'ACR-F (dB)',\n 'PS ACR-F': 'PS ACR-F (dB)',\n 'CDNEXT': 'CDNEXT (dB)',\n 'CMRL': 'CMRL (dB)',\n 'TCL': 'TCL (dB)',\n 'ELTCTL': 'ELTCTL (dB)'\n };\n let hasNegativeMargin = false;\n // 长度判断\n if (limitdata.LENGTH && data.performance.LENGTH) {\n const lengthPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of lengthPairs){\n if (data.performance.LENGTH[pair] > limitdata.LENGTH) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n // 电阻判断\n if (limitdata.LOOP && data.performance.OHM?.LOOP) {\n const loopPairs = [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n for (const pair of loopPairs){\n if (data.performance.OHM.LOOP[pair] > limitdata.LOOP) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n for (const paramTitle of paramTitles){\n const dataGroup = dataGroupMap[paramTitle];\n if (!dataGroup || !data?.performance?.data?.[dataGroup] || !limitdata?.[dataGroup]) continue;\n const testData = data.performance.data[dataGroup];\n const limitValues = limitdata[dataGroup]?.['PAIRLimit (dB)'] || [];\n const getPairsByWireOrder = {\n \"CopperResultMain.useEffect.loadTestResult.getPairsByWireOrder\": ()=>{\n if (wireOrder === 'Ethernet Two-Pair' || wireOrder === 'M12-D Two-Pair') {\n return [\n 'NEXT (dB)',\n 'ACR-N (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236'\n ] : [\n 'ACR-F (dB)',\n 'CDNEXT (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR3612'\n ] : [\n 'PAIR12',\n 'PAIR36'\n ];\n }\n // 默认返回所有线对\n return [\n 'NEXT (dB)',\n 'ACR-N (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4578'\n ] : [\n 'ACR-F (dB)',\n 'CDNEXT (dB)'\n ].includes(dataGroup) ? [\n 'PAIR1236',\n 'PAIR1245',\n 'PAIR1278',\n 'PAIR3612',\n 'PAIR3645',\n 'PAIR3678',\n 'PAIR4512',\n 'PAIR4535',\n 'PAIR4578',\n 'PAIR7812',\n 'PAIR7936',\n 'PAIR7845'\n ] : [\n 'PAIR12',\n 'PAIR36',\n 'PAIR45',\n 'PAIR78'\n ];\n }\n }[\"CopperResultMain.useEffect.loadTestResult.getPairsByWireOrder\"];\n const pairs = getPairsByWireOrder();\n for(let index = 0; index < limitValues.length && !hasNegativeMargin; index++){\n const limitValue = limitValues[index];\n if (limitValue === undefined || limitValue === null) break;\n for (const pair of pairs){\n const actualValue = testData[pair]?.[index];\n if (actualValue !== undefined && actualValue !== null) {\n const margin = paramTitle === '插入损耗' ? Math.abs(limitValue) - Math.abs(actualValue) : Math.abs(actualValue) - limitValue;\n if (margin < 0) {\n hasNegativeMargin = true;\n break;\n }\n }\n }\n }\n }\n data.result = hasNegativeMargin ? 'fail' : 'pass';\n setResultData(data);\n } catch (error) {\n console.error('Error calculating margins:', error);\n setResultData({\n result: 'fail'\n });\n }\n } catch (error) {\n console.error('加载测试结果失败:', error);\n setResultData({\n result: 'fail'\n });\n }\n }\n }\n }[\"CopperResultMain.useEffect.loadTestResult\"];\n loadTestResult();\n }\n }[\"CopperResultMain.useEffect\"], [\n initialTestResult\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CopperResultMain.useEffect\": ()=>{\n if (resultData) {\n setTestResult({\n ...initialTestResult,\n resultdata: resultData\n });\n }\n }\n }[\"CopperResultMain.useEffect\"], [\n resultData\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CopperResultMain.useEffect\": ()=>{\n navigateTo(navigation.current.name, navigation.current.view, {\n ...navigation.current.params,\n activeTab\n });\n }\n }[\"CopperResultMain.useEffect\"], [\n activeTab\n ]);\n const tabs = testResult?.CopperWiremapResultStatus === 'pass' ? testResult?.resultdata?.result === 'pass' ? [\n '布线图',\n '性能'\n ] : [\n '布线图',\n '性能',\n '诊断'\n ] : [\n '布线图'\n ];\n //console.log(testResult);\n const renderContent = ()=>{\n switch(activeTab){\n case '布线图':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_WireMapView__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n testResult: testResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 161,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 160,\n columnNumber: 21\n }, this);\n case '性能':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_PerformanceView__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n testResult: testResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 167,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 166,\n columnNumber: 21\n }, this);\n case '诊断':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_DiagnosticView__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n testResult: testResult\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 173,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 172,\n columnNumber: 21\n }, this);\n default:\n return null;\n }\n };\n return estmodel === 'general' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[1/100] flex\",\n children: tabs.map((tab)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setActiveTab(tab),\n className: `flex-1 h-full flex items-center justify-center font-bold text-lg\n ${activeTab === tab ? 'bg-gradient-to-b from-[#d5dfeb] via-[#f8f6f7] to-[#d5dfeb] text-black' : 'bg-[#132843] text-[#fffe92]'}`,\n children: tab\n }, tab, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 186,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 184,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-white\",\n children: renderContent()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 198,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 183,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[490px] flex flex-col overflow-hidden\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[1/100] flex\",\n children: tabs.map((tab)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setActiveTab(tab),\n className: `flex-1 h-full flex items-center justify-center font-bold text-lg\n ${activeTab === tab ? 'bg-gradient-to-b from-[#b0b0b0] via-[#e0e4e0] to-[#b0b0b0] text-black' : 'bg-[#303030] text-[#fffe92]'}`,\n children: tab\n }, tab, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 206,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 204,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1 bg-white\",\n children: renderContent()\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 218,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CopperResultMain.js\",\n lineNumber: 203,\n columnNumber: 13\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2xpYi9Db3BwZXJSZXN1bHRNYWluLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtRDtBQUNYO0FBQ1E7QUFDRjtBQUNLO0FBQ0Y7QUFDYjtBQUVyQixTQUFTVSxpQkFBaUIsRUFBRUMsWUFBWUMsaUJBQWlCLEVBQUU7SUFDdEUsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsb0JBQW9CLEVBQUUsR0FBR1QsK0RBQWVBO0lBQ3hFLE1BQU0sRUFBRVUsUUFBUSxFQUFFLEdBQUdULDhEQUFjQTtJQUNuQyxNQUFNLENBQUNVLFdBQVdDLGFBQWEsR0FBR2pCLCtDQUFRQSxDQUFDWSxXQUFXTSxPQUFPLENBQUNDLE1BQU0sQ0FBQ0gsU0FBUyxJQUFJO0lBQ2xGLE1BQU0sQ0FBQ04sWUFBWVUsY0FBYyxHQUFHcEIsK0NBQVFBLENBQUNXO0lBQzdDLE1BQU0sQ0FBQ1UsWUFBWUMsY0FBYyxHQUFHdEIsK0NBQVFBLENBQUM7SUFDN0MsTUFBTXVCLGdCQUFnQlQ7SUFDdEIsTUFBTVUsWUFBWUQsZUFBZUosUUFBUUs7SUFDekMsTUFBTUMsWUFBWUYsZUFBZUosUUFBUU07SUFFekN4QixnREFBU0E7c0NBQUM7WUFDTixNQUFNeUI7NkRBQWlCO29CQUNuQixJQUFJZixrQkFBa0JnQix5QkFBeUIsS0FBSyxRQUFRO3dCQUN4REwsY0FBYzs0QkFBRU0sUUFBUTt3QkFBTztvQkFDbkMsT0FBTyxJQUFJakIsa0JBQWtCZ0IseUJBQXlCLEtBQUssUUFBUTt3QkFDL0QsSUFBSTs0QkFDQSxNQUFNRSxXQUFXLE1BQU0sNEZBQU8sR0FBZ0IsRUFBRWxCLGtCQUFrQm1CLHVCQUF1QixDQUFDLE1BQU0sQ0FBQzs0QkFDakcsTUFBTUMsT0FBT0YsU0FBU0csT0FBTzs0QkFFN0IsU0FBUzs0QkFDVCxNQUFNQyxhQUFhdEIsa0JBQWtCdUIsVUFBVSxFQUFFZixRQUFRYzs0QkFDekQsSUFBSUU7NEJBQ0os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dkQsY0FBY3lELE1BQ1YsMEVBQ0EsK0JBQStCO2tDQUV4Q0E7dUJBUElBOzs7Ozs7Ozs7OzBCQVdqQiw4REFBQ0g7Z0JBQUlDLFdBQVU7MEJBQ1ZGOzs7Ozs7Ozs7Ozs7QUFNakIiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvbGliL0NvcHBlclJlc3VsdE1haW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgV2lyZU1hcFZpZXcgZnJvbSAnLi9XaXJlTWFwVmlldyc7XG5pbXBvcnQgUGVyZm9ybWFuY2VWaWV3IGZyb20gJy4vUGVyZm9ybWFuY2VWaWV3JztcbmltcG9ydCBEaWFnbm9zdGljVmlldyBmcm9tICcuL0RpYWdub3N0aWNWaWV3JztcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xuaW1wb3J0IHVzZURldmljZVN0b3JlIGZyb20gJ0Avc3RvcmUvZGV2aWNlU3RvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvcHBlclJlc3VsdE1haW4oeyB0ZXN0UmVzdWx0OiBpbml0aWFsVGVzdFJlc3VsdCB9KSB7XG4gICAgY29uc3QgeyBuYXZpZ2F0aW9uLCBuYXZpZ2F0ZVRvLCBnZXRDdXJyZW50VGVzdENvbmZpZyB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XG4gICAgY29uc3QgeyBlc3Rtb2RlbCB9ID0gdXNlRGV2aWNlU3RvcmUoKTtcbiAgICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gdXNlU3RhdGUobmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtcy5hY3RpdmVUYWIgfHwgJ+W4g+e6v+WbvicpO1xuICAgIGNvbnN0IFt0ZXN0UmVzdWx0LCBzZXRUZXN0UmVzdWx0XSA9IHVzZVN0YXRlKGluaXRpYWxUZXN0UmVzdWx0KTtcbiAgICBjb25zdCBbcmVzdWx0RGF0YSwgc2V0UmVzdWx0RGF0YV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q3VycmVudFRlc3RDb25maWcoKTtcbiAgICBjb25zdCBjYWJsZVR5cGUgPSBjdXJyZW50Q29uZmlnPy5wYXJhbXM/LmNhYmxlVHlwZTtcbiAgICBjb25zdCB3aXJlT3JkZXIgPSBjdXJyZW50Q29uZmlnPy5wYXJhbXM/LndpcmVPcmRlcjtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRUZXN0UmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluaXRpYWxUZXN0UmVzdWx0LkNvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMgPT09ICdmYWlsJykge1xuICAgICAgICAgICAgICAgIHNldFJlc3VsdERhdGEoeyByZXN1bHQ6ICdmYWlsJyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbFRlc3RSZXN1bHQuQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbXBvcnQoYEAvc3RvcmUvQ09QUEVSLyR7aW5pdGlhbFRlc3RSZXN1bHQuQ29wcGVyUGVyZm9ybWFuY2VTdGF0dXN9Lmpzb25gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyDliqDovb3pmZDliLbmlbDmja5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGluaXRpYWxUZXN0UmVzdWx0LnRlc3Rjb25maWc/LnBhcmFtcz8ubGltaXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbWl0ZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS7jmxpbWl0VmFsdWXkuK3mj5Dlj5bln7rnoYDlkI3np7Ao56e76ZmkK1BvReWSjCtBTEzlkI7nvIApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGxpbWl0VmFsdWUuc3BsaXQoJyAoKycpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2/55So5Z+656GA5ZCN56ew5Yqg6L295bim5pyJKCtBTEwp5ZCO57yA55qE5paH5Lu2XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlc3BvbnNlID0gYXdhaXQgaW1wb3J0KGBAL3N0b3JlL0NPUFBFUi8ke2Jhc2VOYW1lfSAoK0FMTCkuanNvbmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRkYXRhID0gbGltaXRSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6K6h566X5omA5pyJ5Y+C5pWw55qE5L2Z6YePXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVRpdGxlcyA9IFsn5o+S5YWl5o2f6ICXJywgJ+WbnuazouaNn+iAlycsICdORVhUJywgJ1BTIE5FWFQnLCAnQUNSLU4nLCAnUFMgQUNSLU4nLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FDUi1GJywgJ1BTIEFDUi1GJywgJ0NETkVYVCcsICdDTVJMJywgJ1RDTCcsICdFTFRDVEwnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFHcm91cE1hcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAn5o+S5YWl5o2f6ICXJzogJ0luc2VydGlvbiBMb3NzIChkQiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICflm57ms6LmjZ/ogJcnOiAnUkwgKGRCKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05FWFQnOiAnTkVYVCAoZEIpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFMgTkVYVCc6ICdQUyBORVhUIChkQiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBQ1ItTic6ICdBQ1ItTiAoZEIpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUFMgQUNSLU4nOiAnUFMgQUNSLU4gKGRCKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FDUi1GJzogJ0FDUi1GIChkQiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQUyBBQ1ItRic6ICdQUyBBQ1ItRiAoZEIpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ0RORVhUJzogJ0NETkVYVCAoZEIpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ01STCc6ICdDTVJMIChkQiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUQ0wnOiAnVENMIChkQiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFTFRDVEwnOiAnRUxUQ1RMIChkQiknXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzTmVnYXRpdmVNYXJnaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6ZW/5bqm5Yik5patXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGltaXRkYXRhLkxFTkdUSCAmJiBkYXRhLnBlcmZvcm1hbmNlLkxFTkdUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aFBhaXJzID0gWydQQUlSMTInLCAnUEFJUjM2JywgJ1BBSVI0NScsICdQQUlSNzgnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgbGVuZ3RoUGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucGVyZm9ybWFuY2UuTEVOR1RIW3BhaXJdID4gbGltaXRkYXRhLkxFTkdUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmVnYXRpdmVNYXJnaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUtemYu+WIpOaWrVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbWl0ZGF0YS5MT09QICYmIGRhdGEucGVyZm9ybWFuY2UuT0hNPy5MT09QKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9vcFBhaXJzID0gWydQQUlSMTInLCAnUEFJUjM2JywgJ1BBSVI0NScsICdQQUlSNzgnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgbG9vcFBhaXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBlcmZvcm1hbmNlLk9ITS5MT09QW3BhaXJdID4gbGltaXRkYXRhLkxPT1ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05lZ2F0aXZlTWFyZ2luID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtVGl0bGUgb2YgcGFyYW1UaXRsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhR3JvdXAgPSBkYXRhR3JvdXBNYXBbcGFyYW1UaXRsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhR3JvdXAgfHwgIWRhdGE/LnBlcmZvcm1hbmNlPy5kYXRhPy5bZGF0YUdyb3VwXSB8fCAhbGltaXRkYXRhPy5bZGF0YUdyb3VwXSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSBkYXRhLnBlcmZvcm1hbmNlLmRhdGFbZGF0YUdyb3VwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFZhbHVlcyA9IGxpbWl0ZGF0YVtkYXRhR3JvdXBdPy5bJ1BBSVJMaW1pdCAoZEIpJ10gfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0UGFpcnNCeVdpcmVPcmRlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpcmVPcmRlciA9PT0gJ0V0aGVybmV0IFR3by1QYWlyJyB8fCB3aXJlT3JkZXIgPT09ICdNMTItRCBUd28tUGFpcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ05FWFQgKGRCKScsICdBQ1ItTiAoZEIpJ10uaW5jbHVkZXMoZGF0YUdyb3VwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTIzNiddIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0FDUi1GIChkQiknLCAnQ0RORVhUIChkQiknXS5pbmNsdWRlcyhkYXRhR3JvdXApID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTIzNicsICdQQUlSMzYxMiddIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTInLCAnUEFJUjM2J107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6buY6K6k6L+U5Zue5omA5pyJ57q/5a+5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ05FWFQgKGRCKScsICdBQ1ItTiAoZEIpJ10uaW5jbHVkZXMoZGF0YUdyb3VwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ1BBSVIxMjM2JywgJ1BBSVIxMjQ1JywgJ1BBSVIxMjc4JywgJ1BBSVIzNjQ1JywgJ1BBSVIzNjc4JywgJ1BBSVI0NTc4J10gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydBQ1ItRiAoZEIpJywgJ0NETkVYVCAoZEIpJ10uaW5jbHVkZXMoZGF0YUdyb3VwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydQQUlSMTIzNicsICdQQUlSMTI0NScsICdQQUlSMTI3OCcsICdQQUlSMzYxMicsICdQQUlSMzY0NScsICdQQUlSMzY3OCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQUlSNDUxMicsICdQQUlSNDUzNScsICdQQUlSNDU3OCcsICdQQUlSNzgxMicsICdQQUlSNzkzNicsICdQQUlSNzg0NSddIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ1BBSVIxMicsICdQQUlSMzYnLCAnUEFJUjQ1JywgJ1BBSVI3OCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFpcnMgPSBnZXRQYWlyc0J5V2lyZU9yZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbWl0VmFsdWVzLmxlbmd0aCAmJiAhaGFzTmVnYXRpdmVNYXJnaW47IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXRWYWx1ZSA9IGxpbWl0VmFsdWVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbWl0VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBsaW1pdFZhbHVlID09PSBudWxsKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSB0ZXN0RGF0YVtwYWlyXT8uW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gcGFyYW1UaXRsZSA9PT0gJ+aPkuWFpeaNn+iAlycgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhsaW1pdFZhbHVlKSAtIE1hdGguYWJzKGFjdHVhbFZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGFjdHVhbFZhbHVlKSAtIGxpbWl0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmdpbiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmVnYXRpdmVNYXJnaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0ID0gaGFzTmVnYXRpdmVNYXJnaW4gPyAnZmFpbCcgOiAncGFzcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY2FsY3VsYXRpbmcgbWFyZ2luczonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHREYXRhKHsgcmVzdWx0OiAnZmFpbCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfliqDovb3mtYvor5Xnu5PmnpzlpLHotKU6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHREYXRhKHsgcmVzdWx0OiAnZmFpbCcgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgbG9hZFRlc3RSZXN1bHQoKTtcbiAgICB9LCBbaW5pdGlhbFRlc3RSZXN1bHRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHREYXRhKSB7XG4gICAgICAgICAgICBzZXRUZXN0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAuLi5pbml0aWFsVGVzdFJlc3VsdCxcbiAgICAgICAgICAgICAgICByZXN1bHRkYXRhOiByZXN1bHREYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtyZXN1bHREYXRhXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbmF2aWdhdGVUbyhuYXZpZ2F0aW9uLmN1cnJlbnQubmFtZSwgbmF2aWdhdGlvbi5jdXJyZW50LnZpZXcsIHsgLi4ubmF2aWdhdGlvbi5jdXJyZW50LnBhcmFtcywgYWN0aXZlVGFiIH0pO1xuICAgIH0sIFthY3RpdmVUYWJdKTtcbiAgICBjb25zdCB0YWJzID0gdGVzdFJlc3VsdD8uQ29wcGVyV2lyZW1hcFJlc3VsdFN0YXR1cyA9PT0gJ3Bhc3MnID8gKHRlc3RSZXN1bHQ/LnJlc3VsdGRhdGE/LnJlc3VsdCA9PT0gJ3Bhc3MnID8gWyfluIPnur/lm74nLCAn5oCn6IO9J10gOiBbJ+W4g+e6v+WbvicsICfmgKfog70nLCAn6K+K5patJ10pIDogWyfluIPnur/lm74nXTtcblxuICAgIC8vY29uc29sZS5sb2codGVzdFJlc3VsdCk7XG4gICAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3RpdmVUYWIpIHtcbiAgICAgICAgICAgIGNhc2UgJ+W4g+e6v+Wbvic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8V2lyZU1hcFZpZXcgdGVzdFJlc3VsdD17dGVzdFJlc3VsdH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgJ+aAp+iDvSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVyZm9ybWFuY2VWaWV3IHRlc3RSZXN1bHQ9e3Rlc3RSZXN1bHR9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlICfor4rmlq0nOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWdub3N0aWNWaWV3IHRlc3RSZXN1bHQ9e3Rlc3RSZXN1bHR9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIGVzdG1vZGVsID09PSAnZ2VuZXJhbCcgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF0gZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtWzEvMTAwXSBmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXt0YWJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0QWN0aXZlVGFiKHRhYil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmb250LWJvbGQgdGV4dC1sZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2FjdGl2ZVRhYiA9PT0gdGFiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctZ3JhZGllbnQtdG8tYiBmcm9tLVsjZDVkZmViXSB2aWEtWyNmOGY2ZjddIHRvLVsjZDVkZmViXSB0ZXh0LWJsYWNrJyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLVsjMTMyODQzXSB0ZXh0LVsjZmZmZTkyXSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGFifVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTooXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0OTBweF0gZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1bMS8xMDBdIGZsZXhcIj5cbiAgICAgICAgICAgICAgICB7dGFicy5tYXAoKHRhYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3RhYn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYih0YWIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleC0xIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmb250LWJvbGQgdGV4dC1sZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YWN0aXZlVGFiID09PSB0YWIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLWdyYWRpZW50LXRvLWIgZnJvbS1bI2IwYjBiMF0gdmlhLVsjZTBlNGUwXSB0by1bI2IwYjBiMF0gdGV4dC1ibGFjaycgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLVsjMzAzMDMwXSB0ZXh0LVsjZmZmZTkyXSd9YH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3RhYn1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICk7XG5cbn1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiV2lyZU1hcFZpZXciLCJQZXJmb3JtYW5jZVZpZXciLCJEaWFnbm9zdGljVmlldyIsInVzZURpc3BsYXlTdG9yZSIsInVzZURldmljZVN0b3JlIiwidjQiLCJ1dWlkdjQiLCJDb3BwZXJSZXN1bHRNYWluIiwidGVzdFJlc3VsdCIsImluaXRpYWxUZXN0UmVzdWx0IiwibmF2aWdhdGlvbiIsIm5hdmlnYXRlVG8iLCJnZXRDdXJyZW50VGVzdENvbmZpZyIsImVzdG1vZGVsIiwiYWN0aXZlVGFiIiwic2V0QWN0aXZlVGFiIiwiY3VycmVudCIsInBhcmFtcyIsInNldFRlc3RSZXN1bHQiLCJyZXN1bHREYXRhIiwic2V0UmVzdWx0RGF0YSIsImN1cnJlbnRDb25maWciLCJjYWJsZVR5cGUiLCJ3aXJlT3JkZXIiLCJsb2FkVGVzdFJlc3VsdCIsIkNvcHBlcldpcmVtYXBSZXN1bHRTdGF0dXMiLCJyZXN1bHQiLCJyZXNwb25zZSIsIkNvcHBlclBlcmZvcm1hbmNlU3RhdHVzIiwiZGF0YSIsImRlZmF1bHQiLCJsaW1pdFZhbHVlIiwidGVzdGNvbmZpZyIsImxpbWl0ZGF0YSIsImJhc2VOYW1lIiwic3BsaXQiLCJsaW1pdFJlc3BvbnNlIiwicGFyYW1UaXRsZXMiLCJkYXRhR3JvdXBNYXAiLCJoYXNOZWdhdGl2ZU1hcmdpbiIsIkxFTkdUSCIsInBlcmZvcm1hbmNlIiwibGVuZ3RoUGFpcnMiLCJwYWlyIiwiTE9PUCIsIk9ITSIsImxvb3BQYWlycyIsInBhcmFtVGl0bGUiLCJkYXRhR3JvdXAiLCJ0ZXN0RGF0YSIsImxpbWl0VmFsdWVzIiwiZ2V0UGFpcnNCeVdpcmVPcmRlciIsImluY2x1ZGVzIiwicGFpcnMiLCJpbmRleCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImFjdHVhbFZhbHVlIiwibWFyZ2luIiwiTWF0aCIsImFicyIsImVycm9yIiwiY29uc29sZSIsInJlc3VsdGRhdGEiLCJuYW1lIiwidmlldyIsInRhYnMiLCJyZW5kZXJDb250ZW50IiwiZGl2IiwiY2xhc3NOYW1lIiwibWFwIiwidGFiIiwiYnV0dG9uIiwib25DbGljayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/lib/CopperResultMain.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/lib/CurveChart.js":
/*!******************************************!*\
!*** ./src/components/lib/CurveChart.js ***!
\******************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\n/* harmony import */ var echarts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! echarts */ \"echarts\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, echarts__WEBPACK_IMPORTED_MODULE_3__]);\n([_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__, echarts__WEBPACK_IMPORTED_MODULE_3__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n// 生成OTDR曲线数据\nconst generateOTDRData = (events, wavelength)=>{\n const points = [];\n // 根据波长设置不同参数\n let samplingInterval, baseAttenuation, noiseRange, reflectionDecay;\n if (wavelength === '850') {\n samplingInterval = 0.5; // 采样间隔更密\n baseAttenuation = 3.0; // 多模850nm衰减更大\n noiseRange = 0.15; // 噪声更大\n reflectionDecay = 0.5; // 反射衰减更快\n } else if (wavelength === '1300') {\n samplingInterval = 0.6;\n baseAttenuation = 1.0; // 多模1300nm衰减适中\n noiseRange = 0.12;\n reflectionDecay = 0.45;\n } else if (wavelength === '1310') {\n samplingInterval = 0.8;\n baseAttenuation = 0.35; // 单模1310nm衰减较小\n noiseRange = 0.1;\n reflectionDecay = 0.4;\n } else {\n samplingInterval = 1.0; // 采样间隔更大\n baseAttenuation = 0.2; // 单模1550nm衰减最小\n noiseRange = 0.08; // 噪声更小\n reflectionDecay = 0.35; // 反射衰减更慢\n }\n // 获取首个和最后一个事件的距离\n const eventDistances = Object.values(events).map((event)=>event.distance);\n const minDistance = Math.min(...eventDistances) - 20; // 首个事件前20米\n const maxDistance = Math.max(...eventDistances) + 20; // 最后事件后20米\n let currentDistance = minDistance;\n let currentDB = 0;\n // 生成基础曲线数据\n while(currentDistance <= maxDistance){\n // 添加随机噪声\n const noise = (Math.random() - 0.5) * noiseRange;\n // 计算基础衰减\n const attenuation = currentDistance * baseAttenuation / 1000;\n points.push([\n currentDistance,\n currentDB - attenuation + noise\n ]);\n currentDistance += samplingInterval;\n }\n // 添加事件特征\n Object.values(events).forEach((event)=>{\n const eventIndex = Math.floor((event.distance - minDistance) / samplingInterval);\n if (eventIndex >= 0 && eventIndex < points.length) {\n if (event.type === 'Reflector' || event.type === 'Start' || event.type === 'End' || event.type === 'StartRef' || event.type === 'EndRef' || event.type === 'EndNoRef') {\n // 反射事件:添加尖峰\n const peakHeight = event.reflLoss ? -event.reflLoss : 10;\n // 前面1个点快速升高\n if (eventIndex > 0) {\n points[eventIndex - 1][1] = peakHeight / 3;\n }\n // 峰值点\n points[eventIndex][1] = peakHeight;\n // 后面20个点平滑回落,使用指数衰减函数\n for(let i = eventIndex + 1; i < Math.min(points.length, eventIndex + 20); i++){\n const distance = i - eventIndex;\n points[i][1] = peakHeight * Math.exp(-distance * reflectionDecay);\n }\n } else if (event.type === 'Splice' || event.spliceLoss) {\n // 非反射事件:添加阶跃式衰减\n const loss = event.spliceLoss || 0.2;\n for(let i = eventIndex; i < points.length; i++){\n points[i][1] -= loss;\n }\n }\n }\n });\n return points;\n};\nconst CurveChart = ({ testResult })=>{\n const { connectionStatus } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const [eventData, setEventData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [currentWavelength, setCurrentWavelength] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [wavelengthData, setWavelengthData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n // 判断是否为多模光纤\n const isMultiMode = testResult?.testconfig?.params?.cableType.includes('OM');\n // 加载事件数据\n // 初始化echarts实例\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CurveChart.useEffect\": ()=>{\n const chartDom = document.getElementById('otdrChart');\n if (!chartDom) return;\n const myChart = echarts__WEBPACK_IMPORTED_MODULE_3__.init(chartDom);\n // 监听窗口大小变化\n const handleResize = {\n \"CurveChart.useEffect.handleResize\": ()=>{\n myChart.resize();\n }\n }[\"CurveChart.useEffect.handleResize\"];\n window.addEventListener('resize', handleResize);\n // 设置初始图表配置\n const option = {\n // title: {\n // text: 'OTDR曲线图',\n // left: 'center'\n // },\n // tooltip: {\n // trigger: 'axis',\n // formatter: function(params) {\n // return `距离: ${params[0].data[0].toFixed(2)}m
dB: ${params[0].data[1].toFixed(2)}`;\n // }\n // },\n grid: {\n left: '3%',\n right: '3%',\n bottom: '5%',\n top: '3%',\n containLabel: true\n },\n xAxis: {\n type: 'value',\n // name: '距离(m)',\n // nameLocation: 'middle',\n // nameGap: 30,\n min: {\n \"CurveChart.useEffect\": function(value) {\n return value.min - 20;\n }\n }[\"CurveChart.useEffect\"],\n max: {\n \"CurveChart.useEffect\": function(value) {\n return value.max + 20;\n }\n }[\"CurveChart.useEffect\"],\n axisLine: {\n show: false\n },\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n color: '#E0E0E0'\n }\n }\n },\n yAxis: {\n type: 'value',\n name: 'dB',\n nameLocation: 'middle',\n nameGap: 50,\n min: -10,\n max: 40,\n axisLine: {\n show: false\n },\n splitLine: {\n show: true,\n lineStyle: {\n type: 'dashed',\n color: '#E0E0E0'\n }\n }\n },\n series: [\n {\n type: 'line',\n data: [],\n showSymbol: false,\n lineStyle: {\n width: 1\n },\n areaStyle: {\n color: new echarts__WEBPACK_IMPORTED_MODULE_3__.graphic.LinearGradient(0, 0, 0, 1, [\n {\n offset: 0,\n color: 'rgba(58,77,233,0.8)'\n },\n {\n offset: 1,\n color: 'rgba(58,77,233,0.1)'\n }\n ])\n }\n }\n ]\n };\n myChart.setOption(option);\n return ({\n \"CurveChart.useEffect\": ()=>{\n window.removeEventListener('resize', handleResize);\n myChart.dispose();\n }\n })[\"CurveChart.useEffect\"];\n }\n }[\"CurveChart.useEffect\"], []);\n // 更新图表数据\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"CurveChart.useEffect\": ()=>{\n const loadTraceData = {\n \"CurveChart.useEffect.loadTraceData\": async ()=>{\n try {\n const wavelength1 = isMultiMode ? '850' : '1310';\n const wavelength2 = isMultiMode ? '1300' : '1550';\n const [data1, data2] = await Promise.all([\n __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${testResult.ofpResult}/${wavelength1}-dump.json`),\n __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${testResult.ofpResult}/${wavelength2}-dump.json`)\n ]);\n // 根据基准设置重新创建事件数据\n const processWavelengthData = {\n \"CurveChart.useEffect.loadTraceData.processWavelengthData\": (data)=>{\n const mergedEvents = {};\n // 1. 首先添加原始事件数据\n Object.keys(data.event).forEach({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData\": (eventKey)=>{\n mergedEvents[eventKey] = {\n ...data.event[eventKey]\n };\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData\"]);\n // 2. 根据基准设置调整事件类型\n const lastEventKey = Object.keys(mergedEvents)[Object.keys(mergedEvents).length - 1];\n if (!testResult.ofpRefStatus) {\n // 无基准设置\n // 判断首根光纤类型\n if (connectionStatus.OFPoutRefStatus?.includes('sm-') || connectionStatus.OFPoutRefStatus?.includes('mm-')) {\n // 短跳线\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -35.25\n };\n mergedEvents['event1'] = {\n type: \"Hidden\",\n distance: 2,\n reflLoss: -14.18,\n spliceLoss: null\n };\n // 调整所有其他事件的位置,增加2米\n Object.keys(mergedEvents).forEach({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData\": (key)=>{\n if (key !== 'event0' && key !== 'event1') {\n mergedEvents[key] = {\n ...mergedEvents[key],\n distance: mergedEvents[key].distance + 2\n };\n }\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData\"]);\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n spliceLoss: null\n };\n } else if (connectionStatus.OFPoutRefStatus?.includes('smc-') || connectionStatus.OFPoutRefStatus?.includes('mmc-')) {\n // 补偿光纤\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -35.25\n };\n // 调整所有其他事件的位置,增加161.15米\n Object.keys(mergedEvents).forEach({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData\": (key)=>{\n if (key !== 'event0') {\n mergedEvents[key] = {\n ...mergedEvents[key],\n distance: mergedEvents[key].distance + 161.15\n };\n }\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData\"]);\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n spliceLoss: null\n };\n }\n // 判断最后连接的光纤类型\n if (!connectionStatus.OFPConnectedToRefStatus) {\n // 无连接,不操作\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-')) {\n // 短跳线\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-')) {\n // 补偿光纤\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 161.15,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n }\n } else if (testResult.ofpRefStatus === 'start') {\n // 仅前导基准\n // 判断首根光纤类型\n if (connectionStatus.OFPoutRefStatus?.includes('sm-') || connectionStatus.OFPoutRefStatus?.includes('mm-')) {\n // 短跳线\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -19.44\n };\n mergedEvents['event1'] = {\n type: \"Hidden\",\n distance: 2,\n reflLoss: -33.44,\n spliceLoss: null\n };\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n } else if (connectionStatus.OFPoutRefStatus?.includes('smc-') || connectionStatus.OFPoutRefStatus?.includes('mmc-')) {\n // 补偿光纤\n mergedEvents['event0'] = {\n type: \"StartRef\",\n distance: -161.15,\n reflLoss: -33.79\n };\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n }\n // 判断最后连接的光纤类型\n if (!connectionStatus.OFPConnectedToRefStatus) {\n // 无连接,不操作\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-')) {\n // 短跳线\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-')) {\n // 补偿光纤\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: 0.1\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 161.15,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n }\n } else if (testResult.ofpRefStatus === 'end') {\n // 前导和末导基准\n // 判断首根光纤类型\n if (connectionStatus.OFPoutRefStatus?.includes('sm-') || connectionStatus.OFPoutRefStatus?.includes('mm-')) {\n // 短跳线\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -19.44\n };\n mergedEvents['event1'] = {\n type: \"Hidden\",\n distance: 2,\n reflLoss: -33.44,\n spliceLoss: null\n };\n // 调整所有其他事件的位置,增加2米\n Object.keys(mergedEvents).forEach({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData\": (key)=>{\n if (key !== 'event0' && key !== 'event1') {\n mergedEvents[key] = {\n ...mergedEvents[key],\n distance: mergedEvents[key].distance + 2\n };\n }\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData\"]);\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n } else if (connectionStatus.OFPoutRefStatus?.includes('smc-') || connectionStatus.OFPoutRefStatus?.includes('mmc-')) {\n // 补偿光纤\n mergedEvents['event0'] = {\n type: \"StartRef\",\n distance: -161.15,\n reflLoss: -33.79\n };\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n }\n // 判断最后连接的光纤类型\n if (!connectionStatus.OFPConnectedToRefStatus) {\n // 无连接\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"EndNoRef\",\n spliceLoss: null\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-')) {\n // 短跳线\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-')) {\n // 补偿光纤\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加末尾补偿事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"EndRef\",\n distance: lastEvent.distance + 161.15,\n reflLoss: -28.54\n };\n }\n }\n // 更新summary信息\n const eventKeys = Object.keys(mergedEvents).sort({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData.eventKeys\": (a, b)=>{\n const numA = parseInt(a.replace('event', ''));\n const numB = parseInt(b.replace('event', ''));\n return numA - numB;\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData.eventKeys\"]);\n const summarylastEventKey = eventKeys[eventKeys.length - 1];\n const lastEvent = mergedEvents[summarylastEventKey];\n // 计算总损耗\n let totalLoss = null;\n const allSpliceLossNull = Object.values(mergedEvents).every({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData.allSpliceLossNull\": (event)=>event.spliceLoss === null || event.spliceLoss === undefined\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData.allSpliceLossNull\"]);\n if (!allSpliceLossNull) {\n totalLoss = Object.values(mergedEvents).reduce({\n \"CurveChart.useEffect.loadTraceData.processWavelengthData\": (sum, event)=>{\n const loss = event.spliceLoss;\n if (loss === null || loss === undefined) return sum;\n return sum + loss;\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData\"], 0);\n }\n // 获取正确的distance值\n let finalDistance = lastEvent.distance;\n if (testResult.ofpRefStatus === 'end' && (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-'))) {\n // 如果是末导基准且连接了补偿光纤,使用倒数第二个事件的distance\n const secondLastEventKey = eventKeys[eventKeys.length - 2];\n const secondLastEvent = mergedEvents[secondLastEventKey];\n finalDistance = secondLastEvent.distance;\n }\n const updatedSummary = {\n ...data1.Summary,\n totalDistance: finalDistance,\n totalLoss: totalLoss\n };\n return {\n events: mergedEvents,\n summary: updatedSummary\n };\n }\n }[\"CurveChart.useEffect.loadTraceData.processWavelengthData\"];\n const processedData1 = processWavelengthData(data1);\n const processedData2 = processWavelengthData(data2);\n setWavelengthData({\n [wavelength1]: processedData1,\n [wavelength2]: processedData2\n });\n setCurrentWavelength(wavelength1);\n setEventData(processedData1);\n // 获取当前波长的事件数据\n const currentEvents = processedData1.events;\n // 生成OTDR曲线数据,不再传入 totalDistance 参数,让 generateOTDRData 自己计算范围\n const otdrData = generateOTDRData(currentEvents);\n // 更新echarts图表\n const chartDom = document.getElementById('otdrChart');\n if (!chartDom) return;\n const myChart = echarts__WEBPACK_IMPORTED_MODULE_3__.getInstanceByDom(chartDom);\n if (myChart) {\n // 从事件数据中获取距离范围\n const eventDistances = Object.values(currentEvents).map({\n \"CurveChart.useEffect.loadTraceData.eventDistances\": (event)=>event.distance\n }[\"CurveChart.useEffect.loadTraceData.eventDistances\"]);\n const minDistance = Math.min(...eventDistances) - 20; // 首个事件前20米\n const maxDistance = Math.max(...eventDistances) + 20; // 最后事件后20米\n myChart.setOption({\n xAxis: {\n min: minDistance,\n max: maxDistance\n },\n series: [\n {\n data: otdrData\n }\n ]\n });\n }\n } catch (error) {\n console.error('Failed to load trace data:', error);\n }\n }\n }[\"CurveChart.useEffect.loadTraceData\"];\n loadTraceData();\n }\n }[\"CurveChart.useEffect\"], [\n testResult\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-full flex flex-col bg-white p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n id: \"otdrChart\",\n style: {\n width: '100%',\n height: '100%'\n }\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CurveChart.js\",\n lineNumber: 548,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-[10%] flex items-center justify-center space-x-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n const wavelengths = Object.keys(wavelengthData);\n const currentIndex = wavelengths.indexOf(currentWavelength);\n const prevWavelength = wavelengths[(currentIndex - 1 + wavelengths.length) % wavelengths.length];\n setCurrentWavelength(prevWavelength);\n const prevData = wavelengthData[prevWavelength];\n setEventData(prevData);\n // 重新生成OTDR曲线数据\n const otdrData = generateOTDRData(prevData.events, prevWavelength);\n // 更新echarts图表\n const chartDom = document.getElementById('otdrChart');\n if (!chartDom) return;\n const myChart = echarts__WEBPACK_IMPORTED_MODULE_3__.getInstanceByDom(chartDom);\n if (myChart) {\n // 从事件数据中获取距离范围\n const eventDistances = Object.values(prevData.events).map((event)=>event.distance);\n const minDistance = Math.min(...eventDistances) - 20;\n const maxDistance = Math.max(...eventDistances) + 20;\n myChart.setOption({\n xAxis: {\n min: minDistance,\n max: maxDistance\n },\n series: [\n {\n data: otdrData\n }\n ]\n });\n }\n },\n className: \"p-2 rounded-full bg-gray-300 hover:bg-gray-400\",\n children: \"◀\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CurveChart.js\",\n lineNumber: 552,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-lg font-semibold\",\n children: [\n currentWavelength,\n \"nm\"\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CurveChart.js\",\n lineNumber: 590,\n columnNumber: 17\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n const wavelengths = Object.keys(wavelengthData);\n const currentIndex = wavelengths.indexOf(currentWavelength);\n const nextWavelength = wavelengths[(currentIndex + 1) % wavelengths.length];\n setCurrentWavelength(nextWavelength);\n const nextData = wavelengthData[nextWavelength];\n setEventData(nextData);\n // 重新生成OTDR曲线数据\n const otdrData = generateOTDRData(nextData.events, nextWavelength);\n // 更新echarts图表\n const chartDom = document.getElementById('otdrChart');\n if (!chartDom) return;\n const myChart = echarts__WEBPACK_IMPORTED_MODULE_3__.getInstanceByDom(chartDom);\n if (myChart) {\n // 从事件数据中获取距离范围\n const eventDistances = Object.values(nextData.events).map((event)=>event.distance);\n const minDistance = Math.min(...eventDistances) - 20;\n const maxDistance = Math.max(...eventDistances) + 20;\n myChart.setOption({\n xAxis: {\n min: minDistance,\n max: maxDistance\n },\n series: [\n {\n data: otdrData\n }\n ]\n });\n }\n },\n className: \"p-2 rounded-full bg-gray-300 hover:bg-gray-400\",\n children: \"▶\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CurveChart.js\",\n lineNumber: 591,\n columnNumber: 17\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CurveChart.js\",\n lineNumber: 551,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/CurveChart.js\",\n lineNumber: 547,\n columnNumber: 9\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CurveChart);\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2xpYi9DdXJ2ZUNoYXJ0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0Y7QUFDZDtBQUVuQyxhQUFhO0FBQ2IsTUFBTUssbUJBQW1CLENBQUNDLFFBQVFDO0lBQzlCLE1BQU1DLFNBQVMsRUFBRTtJQUVqQixhQUFhO0lBQ2IsSUFBSUMsa0JBQWtCQyxpQkFBaUJDLFlBQVlDO0lBQ25ELElBQUlMLGVBQWUsT0FBTztRQUN0QkUsbUJBQW1CLEtBQU0sU0FBUztRQUNsQ0Msa0JBQWtCLEtBQU8sY0FBYztRQUN2Q0MsYUFBYSxNQUFZLE9BQU87UUFDaENDLGtCQUFrQixLQUFPLFNBQVM7SUFDdEMsT0FBTyxJQUFJTCxlQUFlLFFBQVE7UUFDOUJFLG1CQUFtQjtRQUNuQkMsa0JBQWtCLEtBQU8sZUFBZTtRQUN4Q0MsYUFBYTtRQUNiQyxrQkFBa0I7SUFDdEIsT0FBTyxJQUFJTCxlQUFlLFFBQVE7UUFDOUJFLG1CQUFtQjtRQUNuQkMsa0JBQWtCLE1BQU8sZUFBZTtRQUN4Q0MsYUFBYTtRQUNiQyxrQkFBa0I7SUFDdEIsT0FBTztRQUNISCxtQkFBbUIsS0FBTSxTQUFTO1FBQ2xDQyxrQkFBa0IsS0FBTyxlQUFlO1FBQ3hDQyxhQUFhLE1BQVksT0FBTztRQUNoQ0Msa0JBQWtCLE1BQU8sU0FBUztJQUN0QztJQUVBLGlCQUFpQjtJQUNqQixNQUFNQyxpQkFBaUJDLE9BQU9DLE1BQU0sQ0FBQ1QsUUFBUVUsR0FBRyxDQUFDQyxDQUFBQSxRQUFTQSxNQUFNQyxRQUFRO0lBQ3hFLE1BQU1DLGNBQWNDLEtBQUtDLEdBQUcsSUFBSVIsa0JBQWtCLElBQUksV0FBVztJQUNqRSxNQUFNUyxjQUFjRixLQUFLRyxHQUFHLElBQUlWLGtCQUFrQixJQUFJLFdBQVc7SUFFakUsSUFBSVcsa0JBQWtCTDtJQUN0QixJQUFJTSxZQUFZO0lBRWhCLFdBQVc7SUFDWCxNQUFPRCxtQkFBbUJGLFlBQWE7UUFDbkMs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LFVBQVU7NEJBRWYsTUFBTUcsVUFBVXRELHFEQUF3QixDQUFDbUQ7NEJBQ3pDLElBQUlHLFNBQVM7Z0NBQ1QsZUFBZTtnQ0FDZixNQUFNN0MsaUJBQWlCQyxPQUFPQyxNQUFNLENBQUMySSxTQUFTcEosTUFBTSxFQUFFVSxHQUFHLENBQUNDLENBQUFBLFFBQVNBLE1BQU1DLFFBQVE7Z0NBQ2pGLE1BQU1DLGNBQWNDLEtBQUtDLEdBQUcsSUFBSVIsa0JBQWtCO2dDQUNsRCxNQUFNUyxjQUFjRixLQUFLRyxHQUFHLElBQUlWLGtCQUFrQjtnQ0FFbEQ2QyxRQUFRZ0MsU0FBUyxDQUFDO29DQUNkbkIsT0FBTzt3Q0FDSGxELEtBQUtGO3dDQUNMSSxLQUFLRDtvQ0FDVDtvQ0FDQTRELFFBQVE7d0NBQUM7NENBQ0xDLE1BQU1xRDt3Q0FDVjtxQ0FBRTtnQ0FDTjs0QkFDSjt3QkFDSjt3QkFDQUssV0FBVTtrQ0FDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTWpCO0FBRUEsaUVBQWVwRyxVQUFVQSxFQUFDIiwic291cmNlcyI6WyIvb3B0L2Rldi9lc3QtZHN4L3NyYy9jb21wb25lbnRzL2xpYi9DdXJ2ZUNoYXJ0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcbmltcG9ydCAqIGFzIGVjaGFydHMgZnJvbSAnZWNoYXJ0cyc7XHJcblxyXG4vLyDnlJ/miJBPVERS5puy57q/5pWw5o2uXHJcbmNvbnN0IGdlbmVyYXRlT1REUkRhdGEgPSAoZXZlbnRzLCB3YXZlbGVuZ3RoKSA9PiB7XHJcbiAgICBjb25zdCBwb2ludHMgPSBbXTtcclxuICAgIFxyXG4gICAgLy8g5qC55o2u5rOi6ZW/6K6+572u5LiN5ZCM5Y+C5pWwXHJcbiAgICBsZXQgc2FtcGxpbmdJbnRlcnZhbCwgYmFzZUF0dGVudWF0aW9uLCBub2lzZVJhbmdlLCByZWZsZWN0aW9uRGVjYXk7XHJcbiAgICBpZiAod2F2ZWxlbmd0aCA9PT0gJzg1MCcpIHtcclxuICAgICAgICBzYW1wbGluZ0ludGVydmFsID0gMC41OyAgLy8g6YeH5qC36Ze06ZqU5pu05a+GXHJcbiAgICAgICAgYmFzZUF0dGVudWF0aW9uID0gMy4wOyAgIC8vIOWkmuaooTg1MG5t6KGw5YeP5pu05aSnXHJcbiAgICAgICAgbm9pc2VSYW5nZSA9IDAuMTU7ICAgICAgIC8vIOWZquWjsOabtOWkp1xyXG4gICAgICAgIHJlZmxlY3Rpb25EZWNheSA9IDAuNTsgICAvLyDlj43lsIToobDlh4/mm7Tlv6tcclxuICAgIH0gZWxzZSBpZiAod2F2ZWxlbmd0aCA9PT0gJzEzMDAnKSB7XHJcbiAgICAgICAgc2FtcGxpbmdJbnRlcnZhbCA9IDAuNjtcclxuICAgICAgICBiYXNlQXR0ZW51YXRpb24gPSAxLjA7ICAgLy8g5aSa5qihMTMwMG5t6KGw5YeP6YCC5LitXHJcbiAgICAgICAgbm9pc2VSYW5nZSA9IDAuMTI7XHJcbiAgICAgICAgcmVmbGVjdGlvbkRlY2F5ID0gMC40NTtcclxuICAgIH0gZWxzZSBpZiAod2F2ZWxlbmd0aCA9PT0gJzEzMTAnKSB7XHJcbiAgICAgICAgc2FtcGxpbmdJbnRlcnZhbCA9IDAuODtcclxuICAgICAgICBiYXNlQXR0ZW51YXRpb24gPSAwLjM1OyAgLy8g5Y2V5qihMTMxMG5t6KGw5YeP6L6D5bCPXHJcbiAgICAgICAgbm9pc2VSYW5nZSA9IDAuMTtcclxuICAgICAgICByZWZsZWN0aW9uRGVjYXkgPSAwLjQ7XHJcbiAgICB9IGVsc2UgeyAvLyAxNTUwbm1cclxuICAgICAgICBzYW1wbGluZ0ludGVydmFsID0gMS4wOyAgLy8g6YeH5qC36Ze06ZqU5pu05aSnXHJcbiAgICAgICAgYmFzZUF0dGVudWF0aW9uID0gMC4yOyAgIC8vIOWNleaooTE1NTBubeihsOWHj+acgOWwj1xyXG4gICAgICAgIG5vaXNlUmFuZ2UgPSAwLjA4OyAgICAgICAvLyDlmarlo7Dmm7TlsI9cclxuICAgICAgICByZWZsZWN0aW9uRGVjYXkgPSAwLjM1OyAgLy8g5Y+N5bCE6KGw5YeP5pu05oWiXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIOiOt+WPlummluS4quWSjOacgOWQjuS4gOS4quS6i+S7tueahOi3neemu1xyXG4gICAgY29uc3QgZXZlbnREaXN0YW5jZXMgPSBPYmplY3QudmFsdWVzKGV2ZW50cykubWFwKGV2ZW50ID0+IGV2ZW50LmRpc3RhbmNlKTtcclxuICAgIGNvbnN0IG1pbkRpc3RhbmNlID0gTWF0aC5taW4oLi4uZXZlbnREaXN0YW5jZXMpIC0gMjA7IC8vIOmmluS4quS6i+S7tuWJjTIw57GzXHJcbiAgICBjb25zdCBtYXhEaXN0YW5jZSA9IE1hdGgubWF4KC4uLmV2ZW50RGlzdGFuY2VzKSArIDIwOyAvLyDmnIDlkI7kuovku7blkI4yMOexs1xyXG4gICAgXHJcbiAgICBsZXQgY3VycmVudERpc3RhbmNlID0gbWluRGlzdGFuY2U7XHJcbiAgICBsZXQgY3VycmVudERCID0gMDtcclxuXHJcbiAgICAvLyDnlJ/miJDln7rnoYDmm7Lnur/mlbDmja5cclxuICAgIHdoaWxlIChjdXJyZW50RGlzdGFuY2UgPD0gbWF4RGlzdGFuY2UpIHtcclxuICAgICAgICAvLyDmt7vliqDpmo/mnLrlmarlo7BcclxuICAgICAgICBjb25zdCBub2lzZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIG5vaXNlUmFuZ2U7XHJcbiAgICAgICAgLy8g6K6h566X5Z+656GA6KGw5YePXHJcbiAgICAgICAgY29uc3QgYXR0ZW51YXRpb24gPSAoY3VycmVudERpc3RhbmNlICogYmFzZUF0dGVudWF0aW9uKSAvIDEwMDA7XHJcbiAgICAgICAgcG9pbnRzLnB1c2goW2N1cnJlbnREaXN0YW5jZSwgY3VycmVudERCIC0gYXR0ZW51YXRpb24gKyBub2lzZV0pO1xyXG4gICAgICAgIGN1cnJlbnREaXN0YW5jZSArPSBzYW1wbGluZ0ludGVydmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOa3u+WKoOS6i+S7tueJueW+gVxyXG4gICAgT2JqZWN0LnZhbHVlcyhldmVudHMpLmZvckVhY2goZXZlbnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBNYXRoLmZsb29yKChldmVudC5kaXN0YW5jZSAtIG1pbkRpc3RhbmNlKSAvIHNhbXBsaW5nSW50ZXJ2YWwpO1xyXG4gICAgICAgIGlmIChldmVudEluZGV4ID49IDAgJiYgZXZlbnRJbmRleCA8IHBvaW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdSZWZsZWN0b3InIHx8IGV2ZW50LnR5cGUgPT09ICdTdGFydCcgfHwgZXZlbnQudHlwZSA9PT0gJ0VuZCcgfHwgXHJcbiAgICAgICAgICAgICAgICBldmVudC50eXBlID09PSAnU3RhcnRSZWYnIHx8IGV2ZW50LnR5cGUgPT09ICdFbmRSZWYnfHwgZXZlbnQudHlwZSA9PT0gJ0VuZE5vUmVmJykge1xyXG4gICAgICAgICAgICAgICAgLy8g5Y+N5bCE5LqL5Lu277ya5re75Yqg5bCW5bOwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZWFrSGVpZ2h0ID0gZXZlbnQucmVmbExvc3MgPyAtZXZlbnQucmVmbExvc3MgOiAxMDtcclxuICAgICAgICAgICAgICAgIC8vIOWJjemdojHkuKrngrnlv6vpgJ/ljYfpq5hcclxuICAgICAgICAgICAgICAgIGlmIChldmVudEluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50c1tldmVudEluZGV4IC0gMV1bMV0gPSBwZWFrSGVpZ2h0IC8gMztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIOWzsOWAvOeCuVxyXG4gICAgICAgICAgICAgICAgcG9pbnRzW2V2ZW50SW5kZXhdWzFdID0gcGVha0hlaWdodDtcclxuICAgICAgICAgICAgICAgIC8vIOWQjumdojIw5Liq54K55bmz5ruR5Zue6JC977yM5L2/55So5oyH5pWw6KGw5YeP5Ye95pWwXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZXZlbnRJbmRleCArIDE7IGkgPCBNYXRoLm1pbihwb2ludHMubGVuZ3RoLCBldmVudEluZGV4ICsgMjApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGkgLSBldmVudEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50c1tpXVsxXSA9IHBlYWtIZWlnaHQgKiBNYXRoLmV4cCgtZGlzdGFuY2UgKiByZWZsZWN0aW9uRGVjYXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdTcGxpY2UnIHx8IGV2ZW50LnNwbGljZUxvc3MpIHtcclxuICAgICAgICAgICAgICAgIC8vIOmdnuWPjeWwhOS6i+S7tu+8mua3u+WKoOmYtui3g+W8j+ihsOWHj1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9zcyA9IGV2ZW50LnNwbGljZUxvc3MgfHwgMC4yO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGV2ZW50SW5kZXg7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHNbaV1bMV0gLT0gbG9zcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwb2ludHM7XHJcbn07XHJcblxyXG5cclxuY29uc3QgQ3VydmVDaGFydCA9ICh7IHRlc3RSZXN1bHQgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBjb25uZWN0aW9uU3RhdHVzIH0gPSB1c2VEZXZpY2VTdG9yZSgpO1xyXG4gICAgY29uc3QgW2V2ZW50RGF0YSwgc2V0RXZlbnREYXRhXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRXYXZlbGVuZ3RoLCBzZXRDdXJyZW50V2F2ZWxlbmd0aF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFt3YXZlbGVuZ3RoRGF0YSwgc2V0V2F2ZWxlbmd0aERhdGFdID0gdXNlU3RhdGUoe30pO1xyXG5cclxuICAgIC8vIOWIpOaWreaYr+WQpuS4uuWkmuaooeWFiee6pFxyXG4gICAgY29uc3QgaXNNdWx0aU1vZGUgPSB0ZXN0UmVzdWx0Py50ZXN0Y29uZmlnPy5wYXJhbXM/LmNhYmxlVHlwZS5pbmNsdWRlcygnT00nKTtcclxuXHJcbiAgICAvLyDliqDovb3kuovku7bmlbDmja5cclxuICAgIC8vIOWIneWni+WMlmVjaGFydHPlrp7kvotcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hhcnREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3RkckNoYXJ0Jyk7XHJcbiAgICAgICAgaWYgKCFjaGFydERvbSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBteUNoYXJ0ID0gZWNoYXJ0cy5pbml0KGNoYXJ0RG9tKTtcclxuXHJcbiAgICAgICAgLy8g55uR5ZCs56qX5Y+j5aSn5bCP5Y+Y5YyWXHJcbiAgICAgICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBteUNoYXJ0LnJlc2l6ZSgpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XHJcblxyXG4gICAgICAgIC8vIOiuvue9ruWIneWni+WbvuihqOmFjee9rlxyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgICAgLy8gdGl0bGU6IHtcclxuICAgICAgICAgICAgLy8gICAgIHRleHQ6ICdPVERS5puy57q/5Zu+JyxcclxuICAgICAgICAgICAgLy8gICAgIGxlZnQ6ICdjZW50ZXInXHJcbiAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgIC8vIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgLy8gICAgIHRyaWdnZXI6ICdheGlzJyxcclxuICAgICAgICAgICAgLy8gICAgIGZvcm1hdHRlcjogZnVuY3Rpb24ocGFyYW1zKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIGDot53nprs6ICR7cGFyYW1zWzBdLmRhdGFbMF0udG9GaXhlZCgyKX1tPGJyLz5kQjogJHtwYXJhbXNbMF0uZGF0YVsxXS50b0ZpeGVkKDIpfWA7XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAgIGdyaWQ6IHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6ICczJScsXHJcbiAgICAgICAgICAgICAgICByaWdodDogJzMlJyxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogJzUlJyxcclxuICAgICAgICAgICAgICAgIHRvcDogJzMlJyxcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5MYWJlbDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB4QXhpczoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgIC8vIG5hbWU6ICfot53nprsobSknLFxyXG4gICAgICAgICAgICAgICAgLy8gbmFtZUxvY2F0aW9uOiAnbWlkZGxlJyxcclxuICAgICAgICAgICAgICAgIC8vIG5hbWVHYXA6IDMwLFxyXG4gICAgICAgICAgICAgICAgbWluOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5taW4gLSAyMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtYXg6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1heCArIDIwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGF4aXNMaW5lOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzcGxpdExpbmU6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVTdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGFzaGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjRTBFMEUwJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeUF4aXM6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZEInLFxyXG4gICAgICAgICAgICAgICAgbmFtZUxvY2F0aW9uOiAnbWlkZGxlJyxcclxuICAgICAgICAgICAgICAgIG5hbWVHYXA6IDUwLFxyXG4gICAgICAgICAgICAgICAgbWluOiAtMTAsXHJcbiAgICAgICAgICAgICAgICBtYXg6IDQwLFxyXG4gICAgICAgICAgICAgICAgYXhpc0xpbmU6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaG93OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNwbGl0TGluZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZVN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYXNoZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNFMEUwRTAnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXJpZXM6IFt7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZScsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBbXSxcclxuICAgICAgICAgICAgICAgIHNob3dTeW1ib2w6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGluZVN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhcmVhU3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogbmV3IGVjaGFydHMuZ3JhcGhpYy5MaW5lYXJHcmFkaWVudCgwLCAwLCAwLCAxLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSg1OCw3NywyMzMsMC44KSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDU4LDc3LDIzMywwLjEpJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfV1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBteUNoYXJ0LnNldE9wdGlvbihvcHRpb24pO1xyXG5cclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcclxuICAgICAgICAgICAgbXlDaGFydC5kaXNwb3NlKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuXHJcbiAgICAvLyDmm7TmlrDlm77ooajmlbDmja5cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbG9hZFRyYWNlRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdhdmVsZW5ndGgxID0gaXNNdWx0aU1vZGUgPyAnODUwJyA6ICcxMzEwJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdhdmVsZW5ndGgyID0gaXNNdWx0aU1vZGUgPyAnMTMwMCcgOiAnMTU1MCc7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgW2RhdGExLCBkYXRhMl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0KGBAL3N0b3JlL0ZJQkVSLyR7dGVzdFJlc3VsdC5vZnBSZXN1bHR9LyR7d2F2ZWxlbmd0aDF9LWR1bXAuanNvbmApLFxyXG4gICAgICAgICAgICAgICAgICAgIGltcG9ydChgQC9zdG9yZS9GSUJFUi8ke3Rlc3RSZXN1bHQub2ZwUmVzdWx0fS8ke3dhdmVsZW5ndGgyfS1kdW1wLmpzb25gKVxyXG4gICAgICAgICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5qC55o2u5Z+65YeG6K6+572u6YeN5paw5Yib5bu65LqL5Lu25pWw5o2uXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzV2F2ZWxlbmd0aERhdGEgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEV2ZW50cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDEuIOmmluWFiOa3u+WKoOWOn+Wni+S6i+S7tuaVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGEuZXZlbnQpLmZvckVhY2goZXZlbnRLZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbZXZlbnRLZXldID0gey4uLmRhdGEuZXZlbnRbZXZlbnRLZXldfTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgIC8vIDIuIOagueaNruWfuuWHhuiuvue9ruiwg+aVtOS6i+S7tuexu+Wei1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudEtleSA9IE9iamVjdC5rZXlzKG1lcmdlZEV2ZW50cylbT2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXN0UmVzdWx0Lm9mcFJlZlN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaXoOWfuuWHhuiuvue9rlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIpOaWremmluagueWFiee6pOexu+Wei1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ3NtLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzPy5pbmNsdWRlcygnbW0tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g55+t6Lez57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1snZXZlbnQwJ10gPSB7IHR5cGU6IFwiU3RhcnRcIiwgZGlzdGFuY2U6IDAsIHJlZmxMb3NzOiAtMzUuMjUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzWydldmVudDEnXSA9IHsgdHlwZTogXCJIaWRkZW5cIiwgZGlzdGFuY2U6IDIsIHJlZmxMb3NzOiAtMTQuMTgsIHNwbGljZUxvc3M6IG51bGwgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiwg+aVtOaJgOacieWFtuS7luS6i+S7tueahOS9jee9ru+8jOWinuWKoDLnsbNcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnZXZlbnQwJyAmJiBrZXkgIT09ICdldmVudDEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm1lcmdlZEV2ZW50c1trZXldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogbWVyZ2VkRXZlbnRzW2tleV0uZGlzdGFuY2UgKyAyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDkv67mlLnmnIDlkI7kuIDkuKrkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEV2ZW50ID0gbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUxvc3M6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzPy5pbmNsdWRlcygnc21jLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQb3V0UmVmU3RhdHVzPy5pbmNsdWRlcygnbW1jLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihpeWBv+WFiee6pFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbJ2V2ZW50MCddID0geyB0eXBlOiBcIlN0YXJ0XCIsIGRpc3RhbmNlOiAwLCByZWZsTG9zczogLTM1LjI1IH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDosIPmlbTmiYDmnInlhbbku5bkuovku7bnmoTkvY3nva7vvIzlop7liqAxNjEuMTXnsbNcclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnZXZlbnQwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5tZXJnZWRFdmVudHNba2V5XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IG1lcmdlZEV2ZW50c1trZXldLmRpc3RhbmNlICsgMTYxLjE1XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDkv67mlLnmnIDlkI7kuIDkuKrkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEV2ZW50ID0gbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUxvc3M6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIpOaWreacgOWQjui/nuaOpeeahOWFiee6pOexu+Wei1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDml6Dov57mjqXvvIzkuI3mk43kvZxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnbW0tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g55+t6Lez57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlsIbmnIDlkI7kuIDkuKrkuovku7bmlLnkuLrlj43lsITlmahcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5sYXN0RXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIlJlZmxlY3RvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmt7vliqDmlrDnmoTnu5PmnZ/kuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2BldmVudCR7T2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5sZW5ndGh9YF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkVuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGxhc3RFdmVudC5kaXN0YW5jZSArIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VMb3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbExvc3M6IGxhc3RFdmVudC5yZWZsTG9zcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uOiBsYXN0RXZlbnQuYXR0ZW51YXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ21tYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDooaXlgb/lhYnnuqRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEV2ZW50ID0gbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWwhuacgOWQjuS4gOS4quS6i+S7tuaUueS4uuWPjeWwhOWZqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbbGFzdEV2ZW50S2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxhc3RFdmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUmVmbGVjdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VMb3NzOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa3u+WKoOaWsOeahOe7k+adn+S6i+S7tlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbYGV2ZW50JHtPYmplY3Qua2V5cyhtZXJnZWRFdmVudHMpLmxlbmd0aH1gXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogbGFzdEV2ZW50LmRpc3RhbmNlICsgMTYxLjE1LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxMb3NzOiBsYXN0RXZlbnQucmVmbExvc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogbGFzdEV2ZW50LmF0dGVudWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5vZnBSZWZTdGF0dXMgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuF5YmN5a+85Z+65YeGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIpOaWremmluagueWFiee6pOexu+Wei1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXM/LmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ21tLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnn63ot7Pnur9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1snZXZlbnQwJ10gPSB7IHR5cGU6IFwiU3RhcnRcIiwgZGlzdGFuY2U6IDAsIHJlZmxMb3NzOiAtMTkuNDQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1snZXZlbnQxJ10gPSB7IHR5cGU6IFwiSGlkZGVuXCIsIGRpc3RhbmNlOiAyLCByZWZsTG9zczogLTMzLjQ0LCBzcGxpY2VMb3NzOiBudWxsIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv67mlLnmnIDlkI7kuIDkuKrkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGxhc3RFdmVudC5kaXN0YW5jZSArIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ21tYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGl5YG/5YWJ57qkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbJ2V2ZW50MCddID0geyB0eXBlOiBcIlN0YXJ0UmVmXCIsIGRpc3RhbmNlOiAtMTYxLjE1LCByZWZsTG9zczogLTMzLjc5IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv67mlLnmnIDlkI7kuIDkuKrkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGxhc3RFdmVudC5kaXN0YW5jZSArIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yik5pat5pyA5ZCO6L+e5o6l55qE5YWJ57qk57G75Z6LXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5peg6L+e5o6l77yM5LiN5pON5L2cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ3NtLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdtbS0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g55+t6Lez57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0RXZlbnQgPSBtZXJnZWRFdmVudHNbbGFzdEV2ZW50S2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWwhuacgOWQjuS4gOS4quS6i+S7tuaUueS4uuWPjeWwhOWZqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUmVmbGVjdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa3u+WKoOaWsOeahOe7k+adn+S6i+S7tlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2BldmVudCR7T2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5sZW5ndGh9YF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogbGFzdEV2ZW50LmRpc3RhbmNlICsgMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VMb3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxMb3NzOiBsYXN0RXZlbnQucmVmbExvc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW51YXRpb246IGxhc3RFdmVudC5hdHRlbnVhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnc21jLScpIHx8IGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdtbWMtJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOihpeWBv+WFiee6pFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEV2ZW50ID0gbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlsIbmnIDlkI7kuIDkuKrkuovku7bmlLnkuLrlj43lsITlmahcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxhc3RFdmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIlJlZmxlY3RvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUxvc3M6IDAuMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa3u+WKoOaWsOeahOe7k+adn+S6i+S7tlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2BldmVudCR7T2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5sZW5ndGh9YF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogbGFzdEV2ZW50LmRpc3RhbmNlICsgMTYxLjE1LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUxvc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbExvc3M6IGxhc3RFdmVudC5yZWZsTG9zcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogbGFzdEV2ZW50LmF0dGVudWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0Lm9mcFJlZlN0YXR1cyA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YmN5a+85ZKM5pyr5a+85Z+65YeGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIpOaWremmluagueWFiee6pOexu+Wei1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblN0YXR1cy5PRlBvdXRSZWZTdGF0dXM/LmluY2x1ZGVzKCdzbS0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ21tLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnn63ot7Pnur9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1snZXZlbnQwJ10gPSB7IHR5cGU6IFwiU3RhcnRcIiwgZGlzdGFuY2U6IDAsIHJlZmxMb3NzOiAtMTkuNDQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1snZXZlbnQxJ10gPSB7IHR5cGU6IFwiSGlkZGVuXCIsIGRpc3RhbmNlOiAyLCByZWZsTG9zczogLTMzLjQ0LCBzcGxpY2VMb3NzOiBudWxsIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDosIPmlbTmiYDmnInlhbbku5bkuovku7bnmoTkvY3nva7vvIzlop7liqAy57GzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtZXJnZWRFdmVudHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnZXZlbnQwJyAmJiBrZXkgIT09ICdldmVudDEnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubWVyZ2VkRXZlbnRzW2tleV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogbWVyZ2VkRXZlbnRzW2tleV0uZGlzdGFuY2UgKyAyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv67mlLnmnIDlkI7kuIDkuKrkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGxhc3RFdmVudC5kaXN0YW5jZSArIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ3NtYy0nKSB8fCBjb25uZWN0aW9uU3RhdHVzLk9GUG91dFJlZlN0YXR1cz8uaW5jbHVkZXMoJ21tYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGl5YG/5YWJ57qkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbJ2V2ZW50MCddID0geyB0eXBlOiBcIlN0YXJ0UmVmXCIsIGRpc3RhbmNlOiAtMTYxLjE1LCByZWZsTG9zczogLTMzLjc5IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkv67mlLnmnIDlkI7kuIDkuKrkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IGxhc3RFdmVudC5kaXN0YW5jZSArIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yik5pat5pyA5ZCO6L+e5o6l55qE5YWJ57qk57G75Z6LXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5peg6L+e5o6lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0RXZlbnQgPSBtZXJnZWRFdmVudHNbbGFzdEV2ZW50S2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxhc3RFdmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkVuZE5vUmVmXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25uZWN0aW9uU3RhdHVzLk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzPy5pbmNsdWRlcygnc20tJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ21tLScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDnn63ot7Pnur9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tsYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5bCG5pyA5ZCO5LiA5Liq5LqL5Lu25pS55Li65Y+N5bCE5ZmoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbbGFzdEV2ZW50S2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5sYXN0RXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJSZWZsZWN0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VMb3NzOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5re75Yqg5paw55qE57uT5p2f5LqL5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWRFdmVudHNbYGV2ZW50JHtPYmplY3Qua2V5cyhtZXJnZWRFdmVudHMpLmxlbmd0aH1gXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkVuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBsYXN0RXZlbnQuZGlzdGFuY2UgKyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZUxvc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbExvc3M6IGxhc3RFdmVudC5yZWZsTG9zcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogbGFzdEV2ZW50LmF0dGVudWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdzbWMtJykgfHwgY29ubmVjdGlvblN0YXR1cy5PRlBDb25uZWN0ZWRUb1JlZlN0YXR1cz8uaW5jbHVkZXMoJ21tYy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGl5YG/5YWJ57qkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0RXZlbnQgPSBtZXJnZWRFdmVudHNbbGFzdEV2ZW50S2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWwhuacgOWQjuS4gOS4quS6i+S7tuaUueS4uuWPjeWwhOWZqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2xhc3RFdmVudEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubGFzdEV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUmVmbGVjdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlTG9zczogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa3u+WKoOacq+WwvuihpeWBv+S6i+S7tlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VkRXZlbnRzW2BldmVudCR7T2JqZWN0LmtleXMobWVyZ2VkRXZlbnRzKS5sZW5ndGh9YF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJFbmRSZWZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZTogbGFzdEV2ZW50LmRpc3RhbmNlICsgMTYxLjE1LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxMb3NzOiAtMjguNTRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5pu05pawc3VtbWFyeeS/oeaBr1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50S2V5cyA9IE9iamVjdC5rZXlzKG1lcmdlZEV2ZW50cykuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1BID0gcGFyc2VJbnQoYS5yZXBsYWNlKCdldmVudCcsICcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bUIgPSBwYXJzZUludChiLnJlcGxhY2UoJ2V2ZW50JywgJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bUEgLSBudW1CO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlsYXN0RXZlbnRLZXkgPSBldmVudEtleXNbZXZlbnRLZXlzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tzdW1tYXJ5bGFzdEV2ZW50S2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyDorqHnrpfmgLvmjZ/ogJdcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG90YWxMb3NzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxTcGxpY2VMb3NzTnVsbCA9IE9iamVjdC52YWx1ZXMobWVyZ2VkRXZlbnRzKS5ldmVyeShldmVudCA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3BsaWNlTG9zcyA9PT0gbnVsbCB8fCBldmVudC5zcGxpY2VMb3NzID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsU3BsaWNlTG9zc051bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMb3NzID0gT2JqZWN0LnZhbHVlcyhtZXJnZWRFdmVudHMpLnJlZHVjZSgoc3VtLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9zcyA9IGV2ZW50LnNwbGljZUxvc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9zcyA9PT0gbnVsbCB8fCBsb3NzID09PSB1bmRlZmluZWQpIHJldHVybiBzdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VtICsgbG9zcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPluato+ehrueahGRpc3RhbmNl5YC8XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsRGlzdGFuY2UgPSBsYXN0RXZlbnQuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQub2ZwUmVmU3RhdHVzID09PSAnZW5kJyAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdzbWMtJykgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25TdGF0dXMuT0ZQQ29ubmVjdGVkVG9SZWZTdGF0dXM/LmluY2x1ZGVzKCdtbWMtJykpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOaYr+acq+WvvOWfuuWHhuS4lOi/nuaOpeS6huihpeWBv+WFiee6pO+8jOS9v+eUqOWAkuaVsOesrOS6jOS4quS6i+S7tueahGRpc3RhbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZExhc3RFdmVudEtleSA9IGV2ZW50S2V5c1tldmVudEtleXMubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZExhc3RFdmVudCA9IG1lcmdlZEV2ZW50c1tzZWNvbmRMYXN0RXZlbnRLZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbERpc3RhbmNlID0gc2Vjb25kTGFzdEV2ZW50LmRpc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkU3VtbWFyeSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YTEuU3VtbWFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxEaXN0YW5jZTogZmluYWxEaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMb3NzOiB0b3RhbExvc3NcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50czogbWVyZ2VkRXZlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB1cGRhdGVkU3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZERhdGExID0gcHJvY2Vzc1dhdmVsZW5ndGhEYXRhKGRhdGExKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZERhdGEyID0gcHJvY2Vzc1dhdmVsZW5ndGhEYXRhKGRhdGEyKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2V0V2F2ZWxlbmd0aERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgIFt3YXZlbGVuZ3RoMV06IHByb2Nlc3NlZERhdGExLFxyXG4gICAgICAgICAgICAgICAgICAgIFt3YXZlbGVuZ3RoMl06IHByb2Nlc3NlZERhdGEyXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRDdXJyZW50V2F2ZWxlbmd0aCh3YXZlbGVuZ3RoMSk7XHJcbiAgICAgICAgICAgICAgICBzZXRFdmVudERhdGEocHJvY2Vzc2VkRGF0YTEpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeazoumVv+eahOS6i+S7tuaVsOaNrlxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEV2ZW50cyA9IHByb2Nlc3NlZERhdGExLmV2ZW50cztcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8g55Sf5oiQT1REUuabsue6v+aVsOaNru+8jOS4jeWGjeS8oOWFpSB0b3RhbERpc3RhbmNlIOWPguaVsO+8jOiuqSBnZW5lcmF0ZU9URFJEYXRhIOiHquW3seiuoeeul+iMg+WbtFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3RkckRhdGEgPSBnZW5lcmF0ZU9URFJEYXRhKGN1cnJlbnRFdmVudHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOabtOaWsGVjaGFydHPlm77ooahcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJ0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ290ZHJDaGFydCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGFydERvbSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG15Q2hhcnQgPSBlY2hhcnRzLmdldEluc3RhbmNlQnlEb20oY2hhcnREb20pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG15Q2hhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDku47kuovku7bmlbDmja7kuK3ojrflj5bot53nprvojIPlm7RcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudERpc3RhbmNlcyA9IE9iamVjdC52YWx1ZXMoY3VycmVudEV2ZW50cykubWFwKGV2ZW50ID0+IGV2ZW50LmRpc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5EaXN0YW5jZSA9IE1hdGgubWluKC4uLmV2ZW50RGlzdGFuY2VzKSAtIDIwOyAvLyDpppbkuKrkuovku7bliY0yMOexs1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERpc3RhbmNlID0gTWF0aC5tYXgoLi4uZXZlbnREaXN0YW5jZXMpICsgMjA7IC8vIOacgOWQjuS6i+S7tuWQjjIw57GzXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG15Q2hhcnQuc2V0T3B0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeEF4aXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogbWluRGlzdGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heERpc3RhbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG90ZHJEYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCB0cmFjZSBkYXRhOicsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxvYWRUcmFjZURhdGEoKTtcclxuICAgIH0sIFt0ZXN0UmVzdWx0XSk7XHJcblxyXG5cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIGJnLXdoaXRlIHAtNFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMVwiIGlkPVwib3RkckNoYXJ0XCIgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScgfX0+XHJcbiAgICAgICAgICAgICAgICB7Lyog5puy57q/5Zu+5pi+56S65Yy6ICovfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLVsxMCVdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2F2ZWxlbmd0aHMgPSBPYmplY3Qua2V5cyh3YXZlbGVuZ3RoRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHdhdmVsZW5ndGhzLmluZGV4T2YoY3VycmVudFdhdmVsZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2V2F2ZWxlbmd0aCA9IHdhdmVsZW5ndGhzWyhjdXJyZW50SW5kZXggLSAxICsgd2F2ZWxlbmd0aHMubGVuZ3RoKSAlIHdhdmVsZW5ndGhzLmxlbmd0aF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRXYXZlbGVuZ3RoKHByZXZXYXZlbGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkRhdGEgPSB3YXZlbGVuZ3RoRGF0YVtwcmV2V2F2ZWxlbmd0aF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEV2ZW50RGF0YShwcmV2RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDph43mlrDnlJ/miJBPVERS5puy57q/5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90ZHJEYXRhID0gZ2VuZXJhdGVPVERSRGF0YShwcmV2RGF0YS5ldmVudHMsIHByZXZXYXZlbGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsGVjaGFydHPlm77ooahcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcnREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3RkckNoYXJ0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcnREb20pIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG15Q2hhcnQgPSBlY2hhcnRzLmdldEluc3RhbmNlQnlEb20oY2hhcnREb20pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlDaGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuO5LqL5Lu25pWw5o2u5Lit6I635Y+W6Led56a76IyD5Zu0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudERpc3RhbmNlcyA9IE9iamVjdC52YWx1ZXMocHJldkRhdGEuZXZlbnRzKS5tYXAoZXZlbnQgPT4gZXZlbnQuZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluRGlzdGFuY2UgPSBNYXRoLm1pbiguLi5ldmVudERpc3RhbmNlcykgLSAyMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERpc3RhbmNlID0gTWF0aC5tYXgoLi4uZXZlbnREaXN0YW5jZXMpICsgMjA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Q2hhcnQuc2V0T3B0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4QXhpczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW46IG1pbkRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG1heERpc3RhbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXM6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG90ZHJEYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgcm91bmRlZC1mdWxsIGJnLWdyYXktMzAwIGhvdmVyOmJnLWdyYXktNDAwXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAmIzk2NjQ7XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZFwiPntjdXJyZW50V2F2ZWxlbmd0aH1ubTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhdmVsZW5ndGhzID0gT2JqZWN0LmtleXMod2F2ZWxlbmd0aERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB3YXZlbGVuZ3Rocy5pbmRleE9mKGN1cnJlbnRXYXZlbGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFdhdmVsZW5ndGggPSB3YXZlbGVuZ3Roc1soY3VycmVudEluZGV4ICsgMSkgJSB3YXZlbGVuZ3Rocy5sZW5ndGhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50V2F2ZWxlbmd0aChuZXh0V2F2ZWxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXRhID0gd2F2ZWxlbmd0aERhdGFbbmV4dFdhdmVsZW5ndGhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFdmVudERhdGEobmV4dERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6YeN5paw55Sf5oiQT1REUuabsue6v+aVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdGRyRGF0YSA9IGdlbmVyYXRlT1REUkRhdGEobmV4dERhdGEuZXZlbnRzLCBuZXh0V2F2ZWxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrBlY2hhcnRz5Zu+6KGoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJ0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ290ZHJDaGFydCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJ0RG9tKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBteUNoYXJ0ID0gZWNoYXJ0cy5nZXRJbnN0YW5jZUJ5RG9tKGNoYXJ0RG9tKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15Q2hhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS7juS6i+S7tuaVsOaNruS4reiOt+WPlui3neemu+iMg+WbtFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZlbnREaXN0YW5jZXMgPSBPYmplY3QudmFsdWVzKG5leHREYXRhLmV2ZW50cykubWFwKGV2ZW50ID0+IGV2ZW50LmRpc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRpc3RhbmNlID0gTWF0aC5taW4oLi4uZXZlbnREaXN0YW5jZXMpIC0gMjA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhEaXN0YW5jZSA9IE1hdGgubWF4KC4uLmV2ZW50RGlzdGFuY2VzKSArIDIwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUNoYXJ0LnNldE9wdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeEF4aXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBtaW5EaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBtYXhEaXN0YW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWVzOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBvdGRyRGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0yIHJvdW5kZWQtZnVsbCBiZy1ncmF5LTMwMCBob3ZlcjpiZy1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgJiM5NjU0O1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEN1cnZlQ2hhcnQ7Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VEZXZpY2VTdG9yZSIsImVjaGFydHMiLCJnZW5lcmF0ZU9URFJEYXRhIiwiZXZlbnRzIiwid2F2ZWxlbmd0aCIsInBvaW50cyIsInNhbXBsaW5nSW50ZXJ2YWwiLCJiYXNlQXR0ZW51YXRpb24iLCJub2lzZVJhbmdlIiwicmVmbGVjdGlvbkRlY2F5IiwiZXZlbnREaXN0YW5jZXMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJtYXAiLCJldmVudCIsImRpc3RhbmNlIiwibWluRGlzdGFuY2UiLCJNYXRoIiwibWluIiwibWF4RGlzdGFuY2UiLCJtYXgiLCJjdXJyZW50RGlzdGFuY2UiLCJjdXJyZW50REIiLCJub2lzZSIsInJhbmRvbSIsImF0dGVudWF0aW9uIiwicHVzaCIsImZvckVhY2giLCJldmVudEluZGV4IiwiZmxvb3IiLCJsZW5ndGgiLCJ0eXBlIiwicGVha0hlaWdodCIsInJlZmxMb3NzIiwiaSIsImV4cCIsInNwbGljZUxvc3MiLCJsb3NzIiwiQ3VydmVDaGFydCIsInRlc3RSZXN1bHQiLCJjb25uZWN0aW9uU3RhdHVzIiwiZXZlbnREYXRhIiwic2V0RXZlbnREYXRhIiwiY3VycmVudFdhdmVsZW5ndGgiLCJzZXRDdXJyZW50V2F2ZWxlbmd0aCIsIndhdmVsZW5ndGhEYXRhIiwic2V0V2F2ZWxlbmd0aERhdGEiLCJpc011bHRpTW9kZSIsInRlc3Rjb25maWciLCJwYXJhbXMiLCJjYWJsZVR5cGUiLCJpbmNsdWRlcyIsImNoYXJ0RG9tIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIm15Q2hhcnQiLCJpbml0IiwiaGFuZGxlUmVzaXplIiwicmVzaXplIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9wdGlvbiIsImdyaWQiLCJsZWZ0IiwicmlnaHQiLCJib3R0b20iLCJ0b3AiLCJjb250YWluTGFiZWwiLCJ4QXhpcyIsInZhbHVlIiwiYXhpc0xpbmUiLCJzaG93Iiwic3BsaXRMaW5lIiwibGluZVN0eWxlIiwiY29sb3IiLCJ5QXhpcyIsIm5hbWUiLCJuYW1lTG9jYXRpb24iLCJuYW1lR2FwIiwic2VyaWVzIiwiZGF0YSIsInNob3dTeW1ib2wiLCJ3aWR0aCIsImFyZWFTdHlsZSIsImdyYXBoaWMiLCJMaW5lYXJHcmFkaWVudCIsIm9mZnNldCIsInNldE9wdGlvbiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkaXNwb3NlIiwibG9hZFRyYWNlRGF0YSIsIndhdmVsZW5ndGgxIiwid2F2ZWxlbmd0aDIiLCJkYXRhMSIsImRhdGEyIiwiUHJvbWlzZSIsImFsbCIsIm9mcFJlc3VsdCIsInByb2Nlc3NXYXZlbGVuZ3RoRGF0YSIsIm1lcmdlZEV2ZW50cyIsImtleXMiLCJldmVudEtleSIsImxhc3RFdmVudEtleSIsIm9mcFJlZlN0YXR1cyIsIk9GUG91dFJlZlN0YXR1cyIsImtleSIsImxhc3RFdmVudCIsIk9GUENvbm5lY3RlZFRvUmVmU3RhdHVzIiwiZXZlbnRLZXlzIiwic29ydCIsImEiLCJiIiwibnVtQSIsInBhcnNlSW50IiwicmVwbGFjZSIsIm51bUIiLCJzdW1tYXJ5bGFzdEV2ZW50S2V5IiwidG90YWxMb3NzIiwiYWxsU3BsaWNlTG9zc051bGwiLCJldmVyeSIsInVuZGVmaW5lZCIsInJlZHVjZSIsInN1bSIsImZpbmFsRGlzdGFuY2UiLCJzZWNvbmRMYXN0RXZlbnRLZXkiLCJzZWNvbmRMYXN0RXZlbnQiLCJ1cGRhdGVkU3VtbWFyeSIsIlN1bW1hcnkiLCJ0b3RhbERpc3RhbmNlIiwic3VtbWFyeSIsInByb2Nlc3NlZERhdGExIiwicHJvY2Vzc2VkRGF0YTIiLCJjdXJyZW50RXZlbnRzIiwib3RkckRhdGEiLCJnZXRJbnN0YW5jZUJ5RG9tIiwiZXJyb3IiLCJjb25zb2xlIiwiZGl2IiwiY2xhc3NOYW1lIiwiaWQiLCJzdHlsZSIsImhlaWdodCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJ3YXZlbGVuZ3RocyIsImN1cnJlbnRJbmRleCIsImluZGV4T2YiLCJwcmV2V2F2ZWxlbmd0aCIsInByZXZEYXRhIiwic3BhbiIsIm5leHRXYXZlbGVuZ3RoIiwibmV4dERhdGEiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/lib/CurveChart.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/lib/DiagnosticView.js":
/*!**********************************************!*\
!*** ./src/components/lib/DiagnosticView.js ***!
\**********************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DiagnosticView)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var _store_deviceStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/store/deviceStore */ \"(pages-dir-node)/./src/store/deviceStore.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_displayStore__WEBPACK_IMPORTED_MODULE_2__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_3__]);\n([_store_displayStore__WEBPACK_IMPORTED_MODULE_2__, _store_deviceStore__WEBPACK_IMPORTED_MODULE_3__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\nfunction DiagnosticView({ testResult }) {\n const { navigateTo } = (0,_store_displayStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const { estmodel } = (0,_store_deviceStore__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n const handleRowClick = (curtitle)=>{\n navigateTo('copperperformance', 'HDTD', {\n testResult,\n curtitle\n });\n };\n const renderRow = (title)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full flex items-center justify-between p-3 mb-2 rounded-md bg-[#F8F6F7] shadow-md cursor-pointer\",\n onClick: ()=>handleRowClick(title),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-lg font-medium text-black\",\n children: title === 'HDTDR' ? '回波损耗分析' : title === 'HDTDX' ? '串扰分析' : title\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/DiagnosticView.js\",\n lineNumber: 19,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/DiagnosticView.js\",\n lineNumber: 15,\n columnNumber: 9\n }, this);\n return estmodel === 'general' ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[470px] bg-[#D5DFEB] flex flex-col p-4 overflow-y-auto\",\n style: {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none'\n },\n children: [\n renderRow('HDTDR'),\n renderRow('HDTDX')\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/DiagnosticView.js\",\n lineNumber: 28,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full h-[470px] bg-[#6b6d6b] flex flex-col p-4 overflow-y-auto\",\n style: {\n scrollbarWidth: 'none',\n msOverflowStyle: 'none'\n },\n children: [\n renderRow('HDTDR'),\n renderRow('HDTDX')\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/DiagnosticView.js\",\n lineNumber: 33,\n columnNumber: 13\n }, this);\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1ub2RlKS8uL3NyYy9jb21wb25lbnRzL2xpYi9EaWFnbm9zdGljVmlldy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUEwQjtBQUN5QjtBQUNGO0FBR2xDLFNBQVNHLGVBQWUsRUFBRUMsVUFBVSxFQUFFO0lBQ2pELE1BQU0sRUFBRUMsVUFBVSxFQUFFLEdBQUdKLCtEQUFlQTtJQUN0QyxNQUFNLEVBQUVLLFFBQVEsRUFBRSxHQUFHSiw4REFBY0E7SUFFbkMsTUFBTUssaUJBQWlCLENBQUNDO1FBQ3BCSCxXQUFXLHFCQUFxQixRQUFRO1lBQUVEO1lBQVlJO1FBQVM7SUFDbkU7SUFFQSxNQUFNQyxZQUFZLENBQUNDLHNCQUNmLDhEQUFDQztZQUNHQyxXQUFVO1lBQ1ZDLFNBQVMsSUFBTU4sZUFBZUc7c0JBRTlCLDRFQUFDSTtnQkFBS0YsV0FBVTswQkFDWEYsVUFBVSxVQUFVLFdBQVdBLFVBQVUsVUFBVSxTQUFTQTs7Ozs7Ozs7Ozs7SUFNekUsT0FDSUosYUFBYSwwQkFDVCw4REFBQ0s7UUFBSUMsV0FBVTtRQUFrRUcsT0FBTztZQUFFQyxnQkFBZ0I7WUFBUUMsaUJBQWlCO1FBQU87O1lBQ3JJUixVQUFVO1lBQ1ZBLFVBQVU7Ozs7Ozs2QkFHZiw4REFBQ0U7UUFBSUMsV0FBVTtRQUFrRUcsT0FBTztZQUFFQyxnQkFBZ0I7WUFBUUMsaUJBQWlCO1FBQU87O1lBQ3JJUixVQUFVO1lBQ1ZBLFVBQVU7Ozs7Ozs7QUFJM0IiLCJzb3VyY2VzIjpbIi9vcHQvZGV2L2VzdC1kc3gvc3JjL2NvbXBvbmVudHMvbGliL0RpYWdub3N0aWNWaWV3LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB1c2VEaXNwbGF5U3RvcmUgZnJvbSAnQC9zdG9yZS9kaXNwbGF5U3RvcmUnO1xyXG5pbXBvcnQgdXNlRGV2aWNlU3RvcmUgZnJvbSAnQC9zdG9yZS9kZXZpY2VTdG9yZSc7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlhZ25vc3RpY1ZpZXcoeyB0ZXN0UmVzdWx0IH0pIHtcclxuICAgIGNvbnN0IHsgbmF2aWdhdGVUbyB9ID0gdXNlRGlzcGxheVN0b3JlKCk7XHJcbiAgICBjb25zdCB7IGVzdG1vZGVsIH0gPSB1c2VEZXZpY2VTdG9yZSgpO1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gKGN1cnRpdGxlKSA9PiB7XHJcbiAgICAgICAgbmF2aWdhdGVUbygnY29wcGVycGVyZm9ybWFuY2UnLCAnSERURCcsIHsgdGVzdFJlc3VsdCwgY3VydGl0bGUgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlbmRlclJvdyA9ICh0aXRsZSkgPT4gKFxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcC0zIG1iLTIgcm91bmRlZC1tZCBiZy1bI0Y4RjZGN10gc2hhZG93LW1kIGN1cnNvci1wb2ludGVyXCIgXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVJvd0NsaWNrKHRpdGxlKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ibGFja1wiPlxyXG4gICAgICAgICAgICAgICAge3RpdGxlID09PSAnSERURFInID8gJ+WbnuazouaNn+iAl+WIhuaekCcgOiB0aXRsZSA9PT0gJ0hEVERYJyA/ICfkuLLmibDliIbmnpAnIDogdGl0bGV9XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgZXN0bW9kZWwgPT09ICdnZW5lcmFsJyA/IChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bNDcwcHhdIGJnLVsjRDVERkVCXSBmbGV4IGZsZXgtY29sIHAtNCBvdmVyZmxvdy15LWF1dG9cIiBzdHlsZT17eyBzY3JvbGxiYXJXaWR0aDogJ25vbmUnLCBtc092ZXJmbG93U3R5bGU6ICdub25lJyB9fT5cclxuICAgICAgICAgICAgICAgIHtyZW5kZXJSb3coJ0hEVERSJyl9XHJcbiAgICAgICAgICAgICAgICB7cmVuZGVyUm93KCdIRFREWCcpfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApIDogKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBoLVs0NzBweF0gYmctWyM2YjZkNmJdIGZsZXggZmxleC1jb2wgcC00IG92ZXJmbG93LXktYXV0b1wiIHN0eWxlPXt7IHNjcm9sbGJhcldpZHRoOiAnbm9uZScsIG1zT3ZlcmZsb3dTdHlsZTogJ25vbmUnIH19PlxyXG4gICAgICAgICAgICAgICAge3JlbmRlclJvdygnSERURFInKX1cclxuICAgICAgICAgICAgICAgIHtyZW5kZXJSb3coJ0hEVERYJyl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIClcclxuICAgICk7XHJcbn1cclxuXHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZURpc3BsYXlTdG9yZSIsInVzZURldmljZVN0b3JlIiwiRGlhZ25vc3RpY1ZpZXciLCJ0ZXN0UmVzdWx0IiwibmF2aWdhdGVUbyIsImVzdG1vZGVsIiwiaGFuZGxlUm93Q2xpY2siLCJjdXJ0aXRsZSIsInJlbmRlclJvdyIsInRpdGxlIiwiZGl2IiwiY2xhc3NOYW1lIiwib25DbGljayIsInNwYW4iLCJzdHlsZSIsInNjcm9sbGJhcldpZHRoIiwibXNPdmVyZmxvd1N0eWxlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-node)/./src/components/lib/DiagnosticView.js\n");
/***/ }),
/***/ "(pages-dir-node)/./src/components/lib/EventMapView.js":
/*!********************************************!*\
!*** ./src/components/lib/EventMapView.js ***!
\********************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ EventMapView)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_displayStore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/displayStore */ \"(pages-dir-node)/./src/store/displayStore.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/image */ \"(pages-dir-node)/./node_modules/next/image.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_image__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_asset__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils/asset */ \"(pages-dir-node)/./src/utils/asset.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_store_displayStore__WEBPACK_IMPORTED_MODULE_2__, _utils_asset__WEBPACK_IMPORTED_MODULE_4__]);\n([_store_displayStore__WEBPACK_IMPORTED_MODULE_2__, _utils_asset__WEBPACK_IMPORTED_MODULE_4__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n\n\n\n\nfunction EventMapView({ testResult }) {\n const connectionStatus = testResult.ofpConnectionStatus;\n const { view } = _store_displayStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState().navigation.current;\n const currentCableId = _store_displayStore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getState().getCurrentCableId();\n const [selectedEvent, setSelectedEvent] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [eventData, setEventData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const eventRefs = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)({});\n const isMultiMode = testResult?.testconfig?.params?.cableType.includes('OM');\n // 加载事件数据\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"EventMapView.useEffect\": ()=>{\n const loadTraceData = {\n \"EventMapView.useEffect.loadTraceData\": async ()=>{\n try {\n const wavelength1 = isMultiMode ? '850' : '1310';\n const wavelength2 = isMultiMode ? '1300' : '1550';\n const [data1, data2] = await Promise.all([\n __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${testResult.ofpResult}/${wavelength1}-dump.json`),\n __webpack_require__(\"(pages-dir-node)/./src/store/FIBER lazy recursive ^\\\\.\\\\/.*\\\\/.*\\\\-dump\\\\.json$\")(`./${testResult.ofpResult}/${wavelength2}-dump.json`)\n ]);\n // 根据基准设置重新创建事件数据\n const mergedEvents = {};\n let firstEvent = null;\n // 1. 首先添加原始事件数据\n Object.keys(data1.event).forEach({\n \"EventMapView.useEffect.loadTraceData\": (eventKey)=>{\n mergedEvents[eventKey] = {\n ...data1.event[eventKey]\n }; // 使用展开运算符创建新对象\n }\n }[\"EventMapView.useEffect.loadTraceData\"]);\n // 2. 添加第二个波长的特殊事件\n Object.keys(data2.event).forEach({\n \"EventMapView.useEffect.loadTraceData\": (eventKey)=>{\n const event1 = data1.event[eventKey];\n const event2 = data2.event[eventKey];\n if (event2 && (!event1 || event2.type !== event1.type)) {\n mergedEvents[eventKey] = {\n ...event2\n }; // 使用展开运算符创建新对象\n }\n }\n }[\"EventMapView.useEffect.loadTraceData\"]);\n // 3. 根据当前基准设置完全重新组织事件结构\n const lastEventKey = Object.keys(mergedEvents)[Object.keys(mergedEvents).length - 1];\n const firstEventKey = Object.keys(mergedEvents)[0];\n if (!testResult.ofpRefStatus) {\n // 无基准设置\n // 判断首根光纤类型\n if (connectionStatus.OFPoutRefStatus?.includes('sm-') || connectionStatus.OFPoutRefStatus?.includes('mm-')) {\n // 短跳线\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -35.25\n };\n mergedEvents['event1'] = {\n type: \"Hidden\",\n distance: 2,\n reflLoss: -14.18,\n spliceLoss: null\n };\n // 调整所有其他事件的位置,增加2米\n Object.keys(mergedEvents).forEach({\n \"EventMapView.useEffect.loadTraceData\": (key)=>{\n if (key !== 'event0' && key !== 'event1') {\n mergedEvents[key] = {\n ...mergedEvents[key],\n distance: mergedEvents[key].distance + 2\n };\n }\n }\n }[\"EventMapView.useEffect.loadTraceData\"]);\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n spliceLoss: null\n };\n } else if (connectionStatus.OFPoutRefStatus?.includes('smc-') || connectionStatus.OFPoutRefStatus?.includes('mmc-')) {\n // 补偿光纤\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -35.25\n };\n // 调整所有其他事件的位置,增加161.15米\n Object.keys(mergedEvents).forEach({\n \"EventMapView.useEffect.loadTraceData\": (key)=>{\n if (key !== 'event0') {\n mergedEvents[key] = {\n ...mergedEvents[key],\n distance: mergedEvents[key].distance + 161.15\n };\n }\n }\n }[\"EventMapView.useEffect.loadTraceData\"]);\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n spliceLoss: null\n };\n }\n // 判断最后连接的光纤类型\n if (!connectionStatus.OFPConnectedToRefStatus) {\n // 无连接,不操作\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-')) {\n // 短跳线\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-')) {\n // 补偿光纤\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 161.15,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n }\n } else if (testResult.ofpRefStatus === 'start') {\n // 仅前导基准\n // 判断首根光纤类型\n if (connectionStatus.OFPoutRefStatus?.includes('sm-') || connectionStatus.OFPoutRefStatus?.includes('mm-')) {\n // 短跳线\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -19.44\n };\n mergedEvents['event1'] = {\n type: \"Hidden\",\n distance: 2,\n reflLoss: -33.44,\n spliceLoss: null\n };\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n } else if (connectionStatus.OFPoutRefStatus?.includes('smc-') || connectionStatus.OFPoutRefStatus?.includes('mmc-')) {\n // 补偿光纤\n mergedEvents['event0'] = {\n type: \"StartRef\",\n distance: -161.15,\n reflLoss: -33.79\n };\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n }\n // 判断最后连接的光纤类型\n if (!connectionStatus.OFPConnectedToRefStatus) {\n // 无连接,不操作\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-')) {\n // 短跳线\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-')) {\n // 补偿光纤\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: 0.1\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 161.15,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n }\n } else if (testResult.ofpRefStatus === 'end') {\n // 前导和末导基准\n // 判断首根光纤类型\n if (connectionStatus.OFPoutRefStatus?.includes('sm-') || connectionStatus.OFPoutRefStatus?.includes('mm-')) {\n // 短跳线\n mergedEvents['event0'] = {\n type: \"Start\",\n distance: 0,\n reflLoss: -19.44\n };\n mergedEvents['event1'] = {\n type: \"Hidden\",\n distance: 2,\n reflLoss: -33.44,\n spliceLoss: null\n };\n // 调整所有其他事件的位置,增加2米\n Object.keys(mergedEvents).forEach({\n \"EventMapView.useEffect.loadTraceData\": (key)=>{\n if (key !== 'event0' && key !== 'event1') {\n mergedEvents[key] = {\n ...mergedEvents[key],\n distance: mergedEvents[key].distance + 2\n };\n }\n }\n }[\"EventMapView.useEffect.loadTraceData\"]);\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n } else if (connectionStatus.OFPoutRefStatus?.includes('smc-') || connectionStatus.OFPoutRefStatus?.includes('mmc-')) {\n // 补偿光纤\n mergedEvents['event0'] = {\n type: \"StartRef\",\n distance: -161.15,\n reflLoss: -33.79\n };\n // 修改最后一个事件\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null\n };\n }\n // 判断最后连接的光纤类型\n if (!connectionStatus.OFPConnectedToRefStatus) {\n // 无连接\n const lastEvent = mergedEvents[lastEventKey];\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"EndNoRef\",\n spliceLoss: null\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('sm-') || connectionStatus.OFPConnectedToRefStatus?.includes('mm-')) {\n // 短跳线\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加新的结束事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"End\",\n distance: lastEvent.distance + 2,\n spliceLoss: null,\n reflLoss: lastEvent.reflLoss,\n attenuation: lastEvent.attenuation\n };\n } else if (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-')) {\n // 补偿光纤\n const lastEvent = mergedEvents[lastEventKey];\n // 将最后一个事件改为反射器\n mergedEvents[lastEventKey] = {\n ...lastEvent,\n type: \"Reflector\",\n spliceLoss: null\n };\n // 添加末尾补偿事件\n mergedEvents[`event${Object.keys(mergedEvents).length}`] = {\n type: \"EndRef\",\n distance: lastEvent.distance + 161.15,\n reflLoss: -28.54\n };\n }\n }\n // 更新summary信息\n const eventKeys = Object.keys(mergedEvents).sort({\n \"EventMapView.useEffect.loadTraceData.eventKeys\": (a, b)=>{\n const numA = parseInt(a.replace('event', ''));\n const numB = parseInt(b.replace('event', ''));\n return numA - numB;\n }\n }[\"EventMapView.useEffect.loadTraceData.eventKeys\"]);\n const summarylastEventKey = eventKeys[eventKeys.length - 1];\n const lastEvent = mergedEvents[summarylastEventKey];\n // 计算总损耗\n let totalLoss = null;\n const allSpliceLossNull = Object.values(mergedEvents).every({\n \"EventMapView.useEffect.loadTraceData.allSpliceLossNull\": (event)=>event.spliceLoss === null || event.spliceLoss === undefined\n }[\"EventMapView.useEffect.loadTraceData.allSpliceLossNull\"]);\n if (!allSpliceLossNull) {\n totalLoss = Object.values(mergedEvents).reduce({\n \"EventMapView.useEffect.loadTraceData\": (sum, event)=>{\n const loss = event.spliceLoss;\n if (loss === null || loss === undefined) return sum;\n return sum + loss;\n }\n }[\"EventMapView.useEffect.loadTraceData\"], 0).toFixed(2); // 总损耗保留两位小数\n }\n // 获取正确的distance值\n let finalDistance = lastEvent.distance;\n if (testResult.ofpRefStatus === 'end' && (connectionStatus.OFPConnectedToRefStatus?.includes('smc-') || connectionStatus.OFPConnectedToRefStatus?.includes('mmc-'))) {\n // 如果是末导基准且连接了补偿光纤,使用倒数第二个事件的distance\n const secondLastEventKey = eventKeys[eventKeys.length - 2];\n const secondLastEvent = mergedEvents[secondLastEventKey];\n finalDistance = secondLastEvent.distance;\n }\n const updatedSummary = {\n ...data1.Summary,\n totalDistance: Number(finalDistance.toFixed(2)),\n totalLoss: totalLoss !== null ? Number(totalLoss) : null // 如果有损耗值则转为数字\n };\n setEventData({\n events: mergedEvents,\n summary: updatedSummary\n });\n // 获取第一个事件\n firstEvent = mergedEvents[Object.keys(mergedEvents)[0]];\n // 设置第一个事件为选中状态\n setSelectedEvent(firstEvent);\n } catch (error) {\n console.error('Error loading trace data:', error);\n }\n }\n }[\"EventMapView.useEffect.loadTraceData\"];\n if (testResult?.ofpResult) {\n loadTraceData();\n }\n }\n }[\"EventMapView.useEffect\"], [\n testResult,\n isMultiMode\n ]);\n const processedEvents = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)({\n \"EventMapView.useMemo[processedEvents]\": ()=>{\n if (!eventData?.events) return [];\n return Object.entries(eventData.events).sort({\n \"EventMapView.useMemo[processedEvents]\": (a, b)=>parseInt(a[0].replace('event', '')) - parseInt(b[0].replace('event', ''))\n }[\"EventMapView.useMemo[processedEvents]\"]).reverse();\n }\n }[\"EventMapView.useMemo[processedEvents]\"], [\n eventData?.events\n ]);\n const getEventStatus = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)({\n \"EventMapView.useCallback[getEventStatus]\": (event, nextEvent, prevEvent)=>{\n if (event.type === 'Reflector') {\n if (event.spliceLoss > 0.75) return 'fail';\n if (nextEvent?.type === 'StartRef') return 'leading';\n if (prevEvent?.type === 'EndRef') return 'trailing';\n return 'normal';\n }\n if (event.type === 'Splice') {\n return event.spliceLoss > 0.35 ? 'fail' : 'normal';\n }\n return 'normal';\n }\n }[\"EventMapView.useCallback[getEventStatus]\"], []);\n const getConnectionLineHeight = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)({\n \"EventMapView.useCallback[getConnectionLineHeight]\": (eventsLength)=>{\n if (eventsLength <= 3) return '130px';\n if (eventsLength <= 4) return '100px';\n if (eventsLength <= 5) return '80px';\n if (eventsLength <= 6) return '65px';\n return '45px';\n }\n }[\"EventMapView.useCallback[getConnectionLineHeight]\"], []);\n const renderEventComponent = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)({\n \"EventMapView.useCallback[renderEventComponent]\": (event, status)=>{\n switch(event.type){\n case 'End':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(StartPoint, {\n status: \"normal\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 374,\n columnNumber: 24\n }, this);\n case 'EndRef':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(EndRef, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 375,\n columnNumber: 27\n }, this);\n case 'EndNoRef':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(EndNoRef, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 376,\n columnNumber: 29\n }, this);\n case 'EndNoFiber':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(EndNoFiber, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 377,\n columnNumber: 31\n }, this);\n case 'Reflector':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Reflector, {\n status: status\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 378,\n columnNumber: 30\n }, this);\n case 'Hidden':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Reflector, {\n status: \"hidden\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 379,\n columnNumber: 27\n }, this);\n case 'Splice':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(SplicePoint, {\n status: status\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 380,\n columnNumber: 27\n }, this);\n case 'Bend':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(BendEvent, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 381,\n columnNumber: 25\n }, this);\n case 'Start':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(StartPoint, {\n status: \"normal\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 382,\n columnNumber: 26\n }, this);\n case 'StartRef':\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(StartRef, {}, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 383,\n columnNumber: 29\n }, this);\n default:\n return null;\n }\n }\n }[\"EventMapView.useCallback[renderEventComponent]\"], []);\n // 反射器样式\n const Reflector = ({ status = 'normal' })=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center items-center w-[8%] min-w-[15px] max-w-[20px] flex-shrink-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `w-[80%] h-0 pb-[120%] relative \n ${status === 'hidden' ? 'border-1 border-blue-500 bg-white' : ''}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `w-[133%] h-[20%] absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-10\n ${status === 'hidden' ? 'border-1 border-blue-500 bg-white' : status === 'fail' ? 'bg-gradient-to-r from-[#8b0000] to-[#cc0000]' : status === 'leading' ? 'bg-gradient-to-r from-[#1a365d] to-[#2a4a7f]' : status === 'trailing' ? 'bg-gradient-to-r from-[#1a365d] to-[#2a4a7f]' : 'bg-gradient-to-r from-[#1a365d] to-[#2a4a7f]'}`\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 398,\n columnNumber: 15\n }, this),\n status !== 'hidden' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `absolute top-0 left-0 right-0 h-[50%] \n ${status === 'fail' ? 'bg-[#8b0000]' : status === 'leading' ? 'bg-[#1a365d]' : status === 'trailing' ? 'bg-[#949294]' : 'bg-[#1a365d]'}`\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 409,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `absolute bottom-0 left-0 right-0 h-[50%] \n ${status === 'fail' ? 'bg-[#cc0000]' : status === 'leading' ? 'bg-[#949294]' : status === 'trailing' ? 'bg-[#2a4a7f]' : 'bg-[#2a4a7f]'}`\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 417,\n columnNumber: 19\n }, this),\n status === 'fail' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-[80%] h-[80%] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-10\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-[3px] bg-white top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-[1.5px] rotate-45\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 426,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute w-full h-[3px] bg-white top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-[1.5px] -rotate-45\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 427,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 425,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true)\n ]\n }, void 0, true, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 394,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 393,\n columnNumber: 11\n }, this);\n };\n //起始点样式\n const StartPoint = ({ status = 'normal' })=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-center items-center w-[8%] min-w-[15px] max-w-[20px] flex-shrink-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-[80%] h-0 pb-[60%] relative\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `absolute top-0 left-0 right-0 h-full \n ${status === 'unnormal' ? 'bg-[#949294]' : 'bg-[#1a365d]'}`\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 442,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 440,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 439,\n columnNumber: 11\n }, this);\n };\n //前导样式\n const StartRef = ()=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(StartPoint, {\n status: \"normal\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 453,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 452,\n columnNumber: 9\n }, this);\n };\n //末导样式\n const EndRef = ()=>{\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(StartPoint, {\n status: \"unnormal\"\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 462,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/opt/dev/est-dsx/src/components/lib/EventMapView.js\",\n lineNumber: 461,\n columnNumber: 11\n }, this);\n };\n // 无末导事件样式\n const EndNoRef = ()=>{\n return(//