diff --git a/.next/cache/webpack/client-development/0.pack.gz b/.next/cache/webpack/client-development/0.pack.gz index 7da8a724..17dfaf9f 100644 Binary files a/.next/cache/webpack/client-development/0.pack.gz and b/.next/cache/webpack/client-development/0.pack.gz differ diff --git a/.next/cache/webpack/client-development/5.pack.gz b/.next/cache/webpack/client-development/5.pack.gz index a12262dc..6869ba8f 100644 Binary files a/.next/cache/webpack/client-development/5.pack.gz and b/.next/cache/webpack/client-development/5.pack.gz differ diff --git a/.next/cache/webpack/client-development/7.pack.gz b/.next/cache/webpack/client-development/7.pack.gz new file mode 100644 index 00000000..8c03fed8 Binary files /dev/null and b/.next/cache/webpack/client-development/7.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz b/.next/cache/webpack/client-development/index.pack.gz index c611062a..f783ffd5 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz and b/.next/cache/webpack/client-development/index.pack.gz differ diff --git a/.next/cache/webpack/client-development/index.pack.gz.old b/.next/cache/webpack/client-development/index.pack.gz.old index 7fcbe268..c611062a 100644 Binary files a/.next/cache/webpack/client-development/index.pack.gz.old and b/.next/cache/webpack/client-development/index.pack.gz.old differ diff --git a/.next/cache/webpack/server-development/1.pack.gz b/.next/cache/webpack/server-development/1.pack.gz index 6eb2774a..4c90265e 100644 Binary files a/.next/cache/webpack/server-development/1.pack.gz and b/.next/cache/webpack/server-development/1.pack.gz differ diff --git a/.next/cache/webpack/server-development/5.pack.gz b/.next/cache/webpack/server-development/5.pack.gz index c81bb857..436b2747 100644 Binary files a/.next/cache/webpack/server-development/5.pack.gz and b/.next/cache/webpack/server-development/5.pack.gz differ diff --git a/.next/cache/webpack/server-development/7.pack.gz b/.next/cache/webpack/server-development/7.pack.gz new file mode 100644 index 00000000..e3ea8e69 Binary files /dev/null and b/.next/cache/webpack/server-development/7.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz b/.next/cache/webpack/server-development/index.pack.gz index 544c4277..5e4f53c5 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz and b/.next/cache/webpack/server-development/index.pack.gz differ diff --git a/.next/cache/webpack/server-development/index.pack.gz.old b/.next/cache/webpack/server-development/index.pack.gz.old index dd14ea07..544c4277 100644 Binary files a/.next/cache/webpack/server-development/index.pack.gz.old and b/.next/cache/webpack/server-development/index.pack.gz.old differ diff --git a/.next/server/app/page.js b/.next/server/app/page.js index d31ff1a8..db5e2771 100644 --- a/.next/server/app/page.js +++ b/.next/server/app/page.js @@ -156,7 +156,7 @@ eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__web /***/ ((__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 */ HeartbeatMonitor)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\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 */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/activity.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\nfunction HeartbeatMonitor() {\n const [apps, setApps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [checking, setChecking] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showAddApp, setShowAddApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [newApp, setNewApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HeartbeatMonitor.useEffect\": ()=>{\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return ({\n \"HeartbeatMonitor.useEffect\": ()=>clearInterval(interval)\n })[\"HeartbeatMonitor.useEffect\"];\n }\n }[\"HeartbeatMonitor.useEffect\"], []);\n async function fetchData() {\n try {\n const res = await fetch(\"/api/monitor\");\n const data = await res.json();\n setApps(data.apps || []);\n setStatus(data.status || []);\n } catch (err) {\n console.error(\"Failed to fetch data:\", err);\n } finally{\n setLoading(false);\n }\n }\n async function checkApp(app) {\n setChecking(app.id);\n try {\n const start = Date.now();\n await fetch(app.url, {\n method: \"HEAD\",\n mode: \"no-cors\"\n });\n const responseTime = Date.now() - start;\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"up\",\n responseTime\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } catch {\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"down\"\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } finally{\n setChecking(null);\n }\n }\n async function addApp(e) {\n e.preventDefault();\n if (!newApp.name || !newApp.url) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"addApp\",\n app: newApp\n })\n });\n setNewApp({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n setShowAddApp(false);\n fetchData();\n }\n async function deleteApp(id) {\n if (!confirm(\"Delete this app from monitoring?\")) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"deleteApp\",\n id\n })\n });\n fetchData();\n }\n function getAppStatus(appId) {\n const appStatus = status.filter((s)=>s.appId === appId);\n const latest = appStatus[appStatus.length - 1];\n const isUp = latest?.status === \"up\";\n const uptime = appStatus.length > 0 ? Math.round(appStatus.filter((s)=>s.status === \"up\").length / appStatus.length * 100) : 100;\n return {\n latest,\n isUp,\n uptime\n };\n }\n const totalApps = apps.length;\n const onlineApps = apps.filter((app)=>getAppStatus(app.id).isUp).length;\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-slate-400\",\n children: \"Loading...\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 155,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 154,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 text-slate-100 p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"w-8 h-8 text-emerald-500\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 166,\n columnNumber: 13\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)(\"h1\", {\n className: \"text-2xl font-bold\",\n children: \"Heartbeat Monitor\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 168,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-400\",\n children: [\n onlineApps,\n \" of \",\n totalApps,\n \" services online\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 169,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 167,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 165,\n columnNumber: 11\n }, this),\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)(\"button\", {\n onClick: fetchData,\n className: \"p-2 bg-slate-800 rounded-lg text-slate-400 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 177,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 173,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAddApp(true),\n className: \"flex items-center gap-2 bg-emerald-500 hover:bg-emerald-600 text-white px-4 py-2 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this),\n \"Add App\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 172,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 164,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 163,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"bg-slate-800 text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 196,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 197,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 198,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 199,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 200,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 201,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 195,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: apps.map((app)=>{\n const { isUp, uptime, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-t border-slate-800 hover:bg-slate-800/50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${isUp ? \"bg-emerald-500/20 text-emerald-400\" : \"bg-red-500/20 text-red-400\"}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `w-1.5 h-1.5 rounded-full ${isUp ? \"bg-emerald-400\" : \"bg-red-400\"}`\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 217,\n columnNumber: 25\n }, this),\n isUp ? \"ONLINE\" : \"OFFLINE\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 212,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 211,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__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)(\"p\", {\n className: \"font-medium text-white\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 223,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: app.description\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 224,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 222,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 221,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-emerald-400 hover:text-emerald-300 text-sm\",\n children: app.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 228,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 227,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 text-slate-300 font-mono\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `font-mono ${uptime >= 90 ? \"text-emerald-400\" : \"text-yellow-400\"}`,\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 239,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 238,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 text-slate-300 font-mono\",\n children: latest?.responseTime ? `${latest.responseTime}ms` : \"--\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 243,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\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)(\"button\", {\n onClick: ()=>checkApp(app),\n disabled: checking === app.id,\n className: \"p-1.5 text-slate-400 hover:text-white hover:bg-slate-700 rounded\",\n title: \"Check now\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: `w-4 h-4 ${checking === app.id ? \"animate-spin\" : \"\"}`\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 254,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 248,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"p-1.5 text-slate-400 hover:text-white hover:bg-slate-700 rounded\",\n title: \"Open app\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 256,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteApp(app.id),\n className: \"p-1.5 text-slate-400 hover:text-red-400 hover:bg-slate-700 rounded\",\n title: \"Delete\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 270,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 265,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 247,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 246,\n columnNumber: 21\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 210,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 205,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 191,\n columnNumber: 7\n }, this),\n showAddApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg p-6 w-full max-w-md border border-slate-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-bold text-white mb-4\",\n children: \"Add New App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 286,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: addApp,\n className: \"space-y-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 text-slate-400 mb-1\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 289,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.name,\n onChange: (e)=>setNewApp({\n ...newApp,\n name: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 290,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 288,\n columnNumber: 15\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)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.description,\n onChange: (e)=>setNewApp({\n ...newApp,\n description: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 300,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 298,\n columnNumber: 15\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 children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.url,\n onChange: (e)=>setNewApp({\n ...newApp,\n url: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 308,\n columnNumber: 17\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)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 319,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n value: newApp.port,\n onChange: (e)=>setNewApp({\n ...newApp,\n port: parseInt(e.target.value)\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 320,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 318,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setShowAddApp(false),\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2 rounded-lg\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"flex-1 bg-emerald-500 hover:bg-emerald-600 text-white py-2 rounded-lg font-medium\",\n children: \"Add App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 329,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 287,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 285,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 284,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 161,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7Ozs7OztBQVVqQiIsInNvdXJjZXMiOlsiL1VzZXJzL21hdHRicnVjZS9Eb2N1bWVudHMvUHJvamVjdHMvT3BlbkNsYXcvV2ViL2hlYXJ0YmVhdC1tb25pdG9yL3NyYy9hcHAvcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGl2aXR5LCBQbHVzLCBSZWZyZXNoQ3csIFRyYXNoMiwgRXh0ZXJuYWxMaW5rIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuXG5pbnRlcmZhY2UgQXBwIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFN0YXR1c0VudHJ5IHtcbiAgYXBwSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHN0YXR1czogXCJ1cFwiIHwgXCJkb3duXCI7XG4gIHJlc3BvbnNlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSGVhcnRiZWF0TW9uaXRvcigpIHtcbiAgY29uc3QgW2FwcHMsIHNldEFwcHNdID0gdXNlU3RhdGU8QXBwW10+KFtdKTtcbiAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlPFN0YXR1c0VudHJ5W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtjaGVja2luZywgc2V0Q2hlY2tpbmddID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzaG93QWRkQXBwLCBzZXRTaG93QWRkQXBwXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW25ld0FwcCwgc2V0TmV3QXBwXSA9IHVzZVN0YXRlPFBhcnRpYWw8QXBwPj4oe1xuICAgIG5hbWU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgcG9ydDogMzAwMCxcbiAgICBwYXRoOiBcIlwiLFxuICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICBjYXRlZ29yeTogXCJPdGhlclwiLFxuICAgIGNvbG9yOiBcIiMyMkM1NUVcIixcbiAgICBlbmFibGVkOiB0cnVlLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoRGF0YSgpO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoZmV0Y2hEYXRhLCAzMDAwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9LCBbXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgc2V0QXBwcyhkYXRhLmFwcHMgfHwgW10pO1xuICAgICAgc2V0U3RhdHVzKGRhdGEuc3RhdHVzIHx8IFtdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggZGF0YTpcIiwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tBcHAoYXBwOiBBcHApIHtcbiAgICBzZXRDaGVja2luZyhhcHAuaWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICBhd2FpdCBmZXRjaChhcHAudXJsLCB7IG1ldGhvZDogXCJIRUFEXCIsIG1vZGU6IFwibm8tY29yc1wiIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgXG4gICAgICBjb25zdCBlbnRyeTogU3RhdHVzRW50cnkgPSB7XG4gICAgICAgIGFwcElkOiBhcHAuaWQsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6IFwidXBcIixcbiAgICAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcInJlY29yZFN0YXR1c1wiLCBlbnRyeSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBmZXRjaERhdGEoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IGVudHJ5OiBTdGF0dXNFbnRyeSA9IHtcbiAgICAgICAgYXBwSWQ6IGFwcC5pZCxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXR1czogXCJkb3duXCIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwicmVjb3JkU3RhdHVzXCIsIGVudHJ5IH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGZldGNoRGF0YSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDaGVja2luZyhudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRBcHAoZTogUmVhY3QuRm9ybUV2ZW50KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghbmV3QXBwLm5hbWUgfHwgIW5ld0FwcC51cmwpIHJldHVybjtcblxuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJhZGRBcHBcIiwgYXBwOiBuZXdBcHAgfSksXG4gICAgfSk7XG5cbiAgICBzZXROZXdBcHAoe1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgICBwb3J0OiAzMDAwLFxuICAgICAgcGF0aDogXCJcIixcbiAgICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICAgIGNhdGVnb3J5OiBcIk90aGVyXCIsXG4gICAgICBjb2xvcjogXCIjMjJDNTVFXCIsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuICAgIHNldFNob3dBZGRBcHAoZmFsc2UpO1xuICAgIGZldGNoRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQXBwKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbmZpcm0oXCJEZWxldGUgdGhpcyBhcHAgZnJvbSBtb25pdG9yaW5nP1wiKSkgcmV0dXJuO1xuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJkZWxldGVBcHBcIiwgaWQgfSksXG4gICAgfSk7XG4gICAgZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBcHBTdGF0dXMoYXBwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFwcFN0YXR1cyA9IHN0YXR1cy5maWx0ZXIoKHMpID0+IHMuYXBwSWQgPT09IGFwcElkKTtcbiAgICBjb25zdCBsYXRlc3QgPSBhcHBTdGF0dXNbYXBwU3RhdHVzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGlzVXAgPSBsYXRlc3Q/LnN0YXR1cyA9PT0gXCJ1cFwiO1xuICAgIGNvbnN0IHVwdGltZSA9IGFwcFN0YXR1cy5sZW5ndGggPiAwIFxuICAgICAgPyBNYXRoLnJvdW5kKChhcHBTdGF0dXMuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09IFwidXBcIikubGVuZ3RoIC8gYXBwU3RhdHVzLmxlbmd0aCkgKiAxMDApXG4gICAgICA6IDEwMDtcbiAgICBcbiAgICByZXR1cm4geyBsYXRlc3QsIGlzVXAsIHVwdGltZSB9O1xuICB9XG5cbiAgY29uc3QgdG90YWxBcHBzID0gYXBwcy5sZW5ndGg7XG4gIGNvbnN0IG9ubGluZUFwcHMgPSBhcHBzLmZpbHRlcigoYXBwKSA9PiBnZXRBcHBTdGF0dXMoYXBwLmlkKS5pc1VwKS5sZW5ndGg7XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctc2xhdGUtOTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS00MDBcIj5Mb2FkaW5nLi4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1zbGF0ZS05NTAgdGV4dC1zbGF0ZS0xMDAgcC02XCI+XG4gICAgICB7LyogSGVhZGVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy02eGwgbXgtYXV0byBtYi02XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgPEFjdGl2aXR5IGNsYXNzTmFtZT1cInctOCBoLTggdGV4dC1lbWVyYWxkLTUwMFwiIC8+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkXCI+SGVhcnRiZWF0IE1vbml0b3I8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNsYXRlLTQwMFwiPntvbmxpbmVBcHBzfSBvZiB7dG90YWxBcHBzfSBzZXJ2aWNlcyBvbmxpbmU8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2ZldGNoRGF0YX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0yIGJnLXNsYXRlLTgwMCByb3VuZGVkLWxnIHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8UmVmcmVzaEN3IGNsYXNzTmFtZT1cInctNSBoLTVcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dBZGRBcHAodHJ1ZSl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJnLWVtZXJhbGQtNTAwIGhvdmVyOmJnLWVtZXJhbGQtNjAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8UGx1cyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgQWRkIEFwcFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBUYWJsZSAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctNnhsIG14LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTgwMCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidy1mdWxsXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJiZy1zbGF0ZS04MDAgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwXCI+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5OYW1lPC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5VUkw8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMFwiPlBvcnQ8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMFwiPlVwdGltZTwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwXCI+UmVzcG9uc2U8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMFwiPkFjdGlvbnM8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAge2FwcHMubWFwKChhcHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVXAsIHVwdGltZSwgbGF0ZXN0IH0gPSBnZXRBcHBTdGF0dXMoYXBwLmlkKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPHRyIGtleT17YXBwLmlkfSBjbGFzc05hbWU9XCJib3JkZXItdCBib3JkZXItc2xhdGUtODAwIGhvdmVyOmJnLXNsYXRlLTgwMC81MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcHgtMi41IHB5LTEgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVXAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy1lbWVyYWxkLTUwMC8yMCB0ZXh0LWVtZXJhbGQtNDAwXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1yZWQtNTAwLzIwIHRleHQtcmVkLTQwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgdy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsICR7aXNVcCA/IFwiYmctZW1lcmFsZC00MDBcIiA6IFwiYmctcmVkLTQwMFwifWB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNVcCA/IFwiT05MSU5FXCIgOiBcIk9GRkxJTkVcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdGV4dC13aGl0ZVwiPnthcHAubmFtZX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCI+e2FwcC5kZXNjcmlwdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2FwcC51cmx9IFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZW1lcmFsZC00MDAgaG92ZXI6dGV4dC1lbWVyYWxkLTMwMCB0ZXh0LXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YXBwLnVybH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbGF0ZS0zMDAgZm9udC1tb25vXCI+e2FwcC5wb3J0fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Bmb250LW1vbm8gJHt1cHRpbWUgPj0gOTAgPyBcInRleHQtZW1lcmFsZC00MDBcIiA6IFwidGV4dC15ZWxsb3ctNDAwXCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dXB0aW1lfSVcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbGF0ZS0zMDAgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2xhdGVzdD8ucmVzcG9uc2VUaW1lID8gYCR7bGF0ZXN0LnJlc3BvbnNlVGltZX1tc2AgOiBcIi0tXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNoZWNrQXBwKGFwcCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjaGVja2luZyA9PT0gYXBwLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTEuNSB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLXNsYXRlLTcwMCByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDaGVjayBub3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVmcmVzaEN3IGNsYXNzTmFtZT17YHctNCBoLTQgJHtjaGVja2luZyA9PT0gYXBwLmlkID8gXCJhbmltYXRlLXNwaW5cIiA6IFwiXCJ9YH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YXBwLnVybH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInAtMS41IHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6Ymctc2xhdGUtNzAwIHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gYXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGVsZXRlQXBwKGFwcC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInAtMS41IHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtcmVkLTQwMCBob3ZlcjpiZy1zbGF0ZS03MDAgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoMiBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEFkZCBBcHAgTW9kYWwgKi99XG4gICAgICB7c2hvd0FkZEFwcCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZml4ZWQgaW5zZXQtMCBiZy1ibGFjay81MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwIHAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctc2xhdGUtOTAwIHJvdW5kZWQtbGcgcC02IHctZnVsbCBtYXgtdy1tZCBib3JkZXIgYm9yZGVyLXNsYXRlLTgwMFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1ib2xkIHRleHQtd2hpdGUgbWItNFwiPkFkZCBOZXcgQXBwPC9oMj5cbiAgICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXthZGRBcHB9IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIHRleHQtc2xhdGUtNDAwIG1iLTFcIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAubmFtZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBuYW1lOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIgdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIHRleHQtc2xhdGUtNDAwIG1iLTFcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIGRlc2NyaXB0aW9uOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIgdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSB0ZXh0LXNsYXRlLTQwMCBtYi0xXCI+VVJMPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgdXJsOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLXNsYXRlLTgwMCBib3JkZXIgYm9yZGVyLXNsYXRlLTcwMCByb3VuZGVkLWxnIHB4LTMgcHktMiB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIHRleHQtc2xhdGUtNDAwIG1iLTFcIj5Qb3J0PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e25ld0FwcC5wb3J0fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgcG9ydDogcGFyc2VJbnQoZS50YXJnZXQudmFsdWUpIH0pfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMyBwdC0yXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWRkQXBwKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1zbGF0ZS04MDAgaG92ZXI6Ymctc2xhdGUtNzAwIHRleHQtc2xhdGUtMzAwIHB5LTIgcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYmctZW1lcmFsZC01MDAgaG92ZXI6YmctZW1lcmFsZC02MDAgdGV4dC13aGl0ZSBweS0yIHJvdW5kZWQtbGcgZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCBBcHBcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkFjdGl2aXR5IiwiUGx1cyIsIlJlZnJlc2hDdyIsIlRyYXNoMiIsIkV4dGVybmFsTGluayIsIkhlYXJ0YmVhdE1vbml0b3IiLCJhcHBzIiwic2V0QXBwcyIsInN0YXR1cyIsInNldFN0YXR1cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiY2hlY2tpbmciLCJzZXRDaGVja2luZyIsInNob3dBZGRBcHAiLCJzZXRTaG93QWRkQXBwIiwibmV3QXBwIiwic2V0TmV3QXBwIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidXJsIiwicG9ydCIsInBhdGgiLCJjb21tYW5kIiwiY2F0ZWdvcnkiLCJjb2xvciIsImVuYWJsZWQiLCJmZXRjaERhdGEiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInJlcyIsImZldGNoIiwiZGF0YSIsImpzb24iLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjaGVja0FwcCIsImFwcCIsImlkIiwic3RhcnQiLCJEYXRlIiwibm93IiwibWV0aG9kIiwibW9kZSIsInJlc3BvbnNlVGltZSIsImVudHJ5IiwiYXBwSWQiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFjdGlvbiIsImFkZEFwcCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRlbGV0ZUFwcCIsImNvbmZpcm0iLCJnZXRBcHBTdGF0dXMiLCJhcHBTdGF0dXMiLCJmaWx0ZXIiLCJzIiwibGF0ZXN0IiwibGVuZ3RoIiwiaXNVcCIsInVwdGltZSIsIk1hdGgiLCJyb3VuZCIsInRvdGFsQXBwcyIsIm9ubGluZUFwcHMiLCJkaXYiLCJjbGFzc05hbWUiLCJoMSIsInAiLCJidXR0b24iLCJvbkNsaWNrIiwidGFibGUiLCJ0aGVhZCIsInRyIiwidGgiLCJ0Ym9keSIsIm1hcCIsInRkIiwic3BhbiIsImEiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwiZGlzYWJsZWQiLCJ0aXRsZSIsImgyIiwiZm9ybSIsIm9uU3VibWl0IiwibGFiZWwiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwicmVxdWlyZWQiLCJwYXJzZUludCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./src/app/page.tsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HeartbeatMonitor)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\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 */ \"(ssr)/./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/activity.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(ssr)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\nfunction HeartbeatMonitor() {\n const [apps, setApps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [checking, setChecking] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showAddApp, setShowAddApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [newApp, setNewApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HeartbeatMonitor.useEffect\": ()=>{\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return ({\n \"HeartbeatMonitor.useEffect\": ()=>clearInterval(interval)\n })[\"HeartbeatMonitor.useEffect\"];\n }\n }[\"HeartbeatMonitor.useEffect\"], []);\n async function fetchData() {\n try {\n const res = await fetch(\"/api/monitor\");\n const data = await res.json();\n setApps(data.apps || []);\n setStatus(data.status || []);\n } catch (err) {\n console.error(\"Failed to fetch data:\", err);\n } finally{\n setLoading(false);\n }\n }\n async function checkApp(app) {\n setChecking(app.id);\n try {\n const start = Date.now();\n await fetch(app.url, {\n method: \"HEAD\",\n mode: \"no-cors\"\n });\n const responseTime = Date.now() - start;\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"up\",\n responseTime\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } catch {\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"down\"\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } finally{\n setChecking(null);\n }\n }\n async function addApp(e) {\n e.preventDefault();\n if (!newApp.name || !newApp.url) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"addApp\",\n app: newApp\n })\n });\n setNewApp({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n setShowAddApp(false);\n fetchData();\n }\n async function deleteApp(id) {\n if (!confirm(\"Delete this app from monitoring?\")) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"deleteApp\",\n id\n })\n });\n fetchData();\n }\n function getAppStatus(appId) {\n const appStatus = status.filter((s)=>s.appId === appId);\n const latest = appStatus[appStatus.length - 1];\n const isUp = latest?.status === \"up\";\n const uptime = appStatus.length > 0 ? Math.round(appStatus.filter((s)=>s.status === \"up\").length / appStatus.length * 100) : 100;\n return {\n latest,\n isUp,\n uptime\n };\n }\n const totalApps = apps.length;\n const onlineApps = apps.filter((app)=>getAppStatus(app.id).isUp).length;\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 flex items-center justify-center\",\n role: \"status\",\n \"aria-live\": \"polite\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-slate-400\",\n children: \"Loading monitor...\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 155,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 154,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 text-slate-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#main-content\",\n className: \"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:bg-emerald-500 focus:text-white focus:px-4 focus:py-2 focus:rounded-lg\",\n children: \"Skip to main content\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 163,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"border-b border-slate-800 bg-slate-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"w-7 h-7 text-emerald-500\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 175,\n columnNumber: 15\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)(\"h1\", {\n className: \"text-xl font-semibold text-white\",\n children: \"Heartbeat Monitor\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 177,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-400\",\n \"aria-live\": \"polite\",\n children: [\n onlineApps,\n \" of \",\n totalApps,\n \" services online\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 178,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 176,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\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)(\"button\", {\n onClick: fetchData,\n className: \"inline-flex items-center justify-center p-2.5 bg-slate-800 hover:bg-slate-700 text-slate-400 hover:text-white rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Refresh data\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-5 h-5\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 185,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAddApp(true),\n className: \"inline-flex items-center gap-2 bg-emerald-600 hover:bg-emerald-500 text-white px-4 py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 196,\n columnNumber: 17\n }, this),\n \"Add App\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 192,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 173,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 172,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 171,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n id: \"main-content\",\n className: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"w-full text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"bg-slate-800 border-b border-slate-700\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 211,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 212,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 213,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 214,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 215,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 218,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 217,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 210,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-slate-800\",\n children: apps.map((app)=>{\n const { isUp, uptime, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"hover:bg-slate-800/50 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${isUp ? \"bg-emerald-500/10 text-emerald-400 border border-emerald-500/20\" : \"bg-red-500/10 text-red-400 border border-red-500/20\"}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `w-1.5 h-1.5 rounded-full ${isUp ? \"bg-emerald-400\" : \"bg-red-400\"}`,\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 236,\n columnNumber: 25\n }, this),\n isUp ? \"Online\" : \"Offline\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 229,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 228,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__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)(\"p\", {\n className: \"font-medium text-white\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 242,\n columnNumber: 25\n }, this),\n app.description && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: app.description\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 244,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 241,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 240,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-emerald-400 hover:text-emerald-300 hover:underline text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900 rounded\",\n children: app.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 249,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 248,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"text-sm text-slate-300 bg-slate-800 px-2 py-1 rounded\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 259,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 258,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `text-sm font-medium ${uptime >= 90 ? \"text-emerald-400\" : uptime >= 50 ? \"text-yellow-400\" : \"text-red-400\"}`,\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 262,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 261,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-slate-300\",\n children: latest?.responseTime ? `${latest.responseTime}ms` : \"—\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 266,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__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)(\"button\", {\n onClick: ()=>checkApp(app),\n disabled: checking === app.id,\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-white hover:bg-slate-700 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900 disabled:opacity-50 disabled:cursor-not-allowed\",\n \"aria-label\": `Check ${app.name} status`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: `w-4 h-4 ${checking === app.id ? \"animate-spin\" : \"\"}`,\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 279,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 273,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-white hover:bg-slate-700 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": `Open ${app.name}`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 288,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 281,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteApp(app.id),\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-red-400 hover:bg-red-500/10 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": `Delete ${app.name}`,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 295,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 290,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 272,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 271,\n columnNumber: 21\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 227,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 222,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 208,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 207,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this),\n showAddApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4\",\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-labelledby\": \"add-app-title\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 p-6 w-full max-w-md shadow-2xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n id: \"add-app-title\",\n className: \"text-xl font-semibold text-white mb-6\",\n children: \"Add New App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 316,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: addApp,\n className: \"space-y-5\",\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 htmlFor: \"app-name\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"Name \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 320,\n columnNumber: 24\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 319,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-name\",\n type: \"text\",\n value: newApp.name,\n onChange: (e)=>setNewApp({\n ...newApp,\n name: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"My Application\",\n required: true,\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 322,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 318,\n columnNumber: 15\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)(\"label\", {\n htmlFor: \"app-desc\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: \"Description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 334,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-desc\",\n type: \"text\",\n value: newApp.description,\n onChange: (e)=>setNewApp({\n ...newApp,\n description: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"Brief description…\",\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 333,\n columnNumber: 15\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 children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"app-url\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"URL \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 350,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 349,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-url\",\n type: \"url\",\n value: newApp.url,\n onChange: (e)=>setNewApp({\n ...newApp,\n url: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"http://localhost:3000\",\n required: true,\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 348,\n columnNumber: 17\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)(\"label\", {\n htmlFor: \"app-port\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"Port \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 365,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 364,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-port\",\n type: \"number\",\n value: newApp.port,\n onChange: (e)=>setNewApp({\n ...newApp,\n port: parseInt(e.target.value)\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n required: true,\n min: \"1\",\n max: \"65535\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 367,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 363,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 347,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3 pt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setShowAddApp(false),\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-slate-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 380,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"flex-1 bg-emerald-600 hover:bg-emerald-500 text-white py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: \"Add App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 387,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 379,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 317,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 315,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 309,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 161,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9zcmMvYXBwL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRTRDO0FBQ21DO0FBc0JoRSxTQUFTTztJQUN0QixNQUFNLENBQUNDLE1BQU1DLFFBQVEsR0FBR1QsK0NBQVFBLENBQVEsRUFBRTtJQUMxQyxNQUFNLENBQUNVLFFBQVFDLFVBQVUsR0FBR1gsK0NBQVFBLENBQWdCLEVBQUU7SUFDdEQsTUFBTSxDQUFDWSxTQUFTQyxXQUFXLEdBQUdiLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2MsVUFBVUMsWUFBWSxHQUFHZiwrQ0FBUUEsQ0FBZ0I7SUFDeEQsTUFBTSxDQUFDZ0IsWUFBWUMsY0FBYyxHQUFHakIsK0NBQVFBLENBQUM7SUFDN0MsTUFBTSxDQUFDa0IsUUFBUUMsVUFBVSxHQUFHbkIsK0NBQVFBLENBQWU7UUFDakRvQixNQUFNO1FBQ05DLGFBQWE7UUFDYkMsS0FBSztRQUNMQyxNQUFNO1FBQ05DLE1BQU07UUFDTkMsU0FBUztRQUNUQyxVQUFVO1FBQ1ZDLE9BQU87UUFDUEMsU0FBUztJQUNYO0lBRUEzQixnREFBU0E7c0NBQUM7WUFDUjRCO1lBQ0EsTUFBTUMsV0FBV0MsWUFBWUYsV0FBVztZQUN4Qzs4Q0FBTyxJQUFNRyxjQUFjRjs7UUFDN0I7cUNBQUcsRUFBRTtJQUVMLGVBQWVEO1FBQ2IsSUFBSTtZQUNGLE1BQU1JLE1BQU0sTUFBTUMsTUFBTTtZQUN4QixNQUFNQyxPQUFPLE1BQU1GLElBQUlHLElBQUk7WUFDM0IzQixRQUFRMEIsS0FBSzNCLElBQUksSUFBSSxFQUFFO1lBQ3ZCRyxVQUFVd0IsS0FBS3pCLE1BQU0sSUFBSSxFQUFFO1FBQzdCLEVBQUUsT0FBTzJCLEtBQUs7WUFDWkMsUUFBUUMsS0FBSyxDQUFDLHlCQUF5QkY7UUFDekMsU0FBVTtZQUNSeEIsV0FBVztRQUNiO0lBQ0Y7SUFFQSxlQUFlMkIsU0FBU0MsR0FBUTtRQUM5QjFCLFlBQVkwQixJQUFJQyxFQUFFO1FBQ2xCLElBQUk7WUFDRixNQUFNQyxRQUFRQyxLQUFLQyxHQUFHO1lBQ3RCLE1BQU1YLE1BQU1PLElBQUluQixHQUFHLEVBQUU7Z0JBQUV3QixRQUFRO2dCQUFRQyxNQUFNO1lBQVU7WUFDdkQsTUFBTUMsZUFBZUosS0FBS0MsR0FBRyxLQUFLRjtZQUVsQyxNQUFNTSxRQUFxQjtnQkFDekJDLE9BQU9ULElBQUlDLEVBQUU7Z0JBQ2JTLFdBQVcsSUFBSVAsT0FBT1EsV0FBVztnQkFDakMxQyxRQUFRO2dCQUNSc0M7WUFDRjtZQUVBLE1BQU1kLE1BQU0sZ0JBQWdCO2dCQUMxQlksUUFBUTtnQkFDUk8sU0FBUztvQkFBRSxnQkFBZ0I7Z0JBQW1CO2dCQUM5Q0MsTUFBTUMsS0FBS0MsU0FBUyxDQUFDO29CQUFFQyxRQUFRO29CQUFnQlI7Z0JBQU07WUFDdkQ7WUFFQXBCO1FBQ0YsRUFBRSxPQUFNO1lBQ04sTUFBTW9CLFFBQXFCO2dCQUN6QkMsT0FBT1QsSUFBSUMsRUFBRTtnQkFDYlMsV0FBVyxJQUFJUCxPQUFPUSxXQUFXO2dCQUNqQzFDLFFBQVE7WUFDVjtZQUVBLE1BQU13QixNQUFNLGdCQUFnQjtnQkFDMUJZLFFBQVE7Z0JBQ1JPLFNBQVM7b0JBQUUsZ0JBQWdCO2dCQUFtQjtnQkFDOUNDLE1BQU1DLEtBQUtDLFNBQVMsQ0FBQztvQkFBRUMsUUFBUTtvQkFBZ0JSO2dCQUFNO1lBQ3ZEO1lBRUFwQjtRQUNGLFNBQVU7WUFDUmQsWUFBWTtRQUNkO0lBQ0Y7SUFFQSxlQUFlMkMsT0FBT0MsQ0FBa0I7UUFDdENBLEVBQUVDLGNBQWM7UUFDaEIsSUFBSSxDQUFDMUMsT0FBT0UsSUFBSSxJQUFJLENBQUNGLE9BQU9JLEdBQUcsRUFBRTtRQUVqQyxNQUFNWSxNQUFNLGdCQUFnQjtZQUMxQlksUUFBUTtZQUNSTyxTQUFTO2dCQUFFLGdCQUFnQjtZQUFtQjtZQUM5Q0MsTUFBTUMsS0FBS0MsU0FBUyxDQUFDO2dCQUFFQyxRQUFRO2dCQUFVaEIsS0FBS3ZCO1lBQU87UUFDdkQ7UUFFQUMsVUFBVTtZQUNSQyxNQUFNO1lBQ05DLGFBQWE7WUFDYkMsS0FBSztZQUNMQyxNQUFNO1lBQ05DLE1BQU07WUFDTkMsU0FBUztZQUNUQyxVQUFVO1lBQ1ZDLE9BQU87WUFDUEMsU0FBUztRQUNYO1FBQ0FYLGNBQWM7UUFDZFk7SUFDRjtJQUVBLGVBQWVnQyxVQUFVbkIsRUFBVTtRQUNqQyxJQUFJLENBQUNvQixRQUFRLHFDQUFxQztRQUNsRCxNQUFNNUIsTUFBTSxnQkFBZ0I7WUFDMUJZLFFBQVE7WUFDUk8sU0FBUztnQkFBRSxnQkFBZ0I7WUFBbUI7WUFDOUNDLE1BQU1DLEtBQUtDLFNBQVMsQ0FBQztnQkFBRUMsUUFBUTtnQkFBYWY7WUFBRztRQUNqRDtRQUNBYjtJQUNGO0lBRUEsU0FBU2tDLGFBQWFiLEtBQWE7UUFDakMsTUFBTWMsWUFBWXRELE9BQU91RCxNQUFNLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRWhCLEtBQUssS0FBS0E7UUFDbkQsTUFBTWlCLFNBQVNILFNBQVMsQ0FBQ0EsVUFBVUksTUFBTSxHQUFHLEVBQUU7UUFDOUMsTUFBTUMsT0FBT0YsUUFBUXpELFdBQVc7UUFDaEMsTUFBTTRELFNBQVNOLFVBQVVJLE1BQU0sR0FBRyxJQUM5QkcsS0FBS0MsS0FBSyxDQUFDLFVBQVdQLE1BQU0sQ0FBQ0MsQ0FBQUEsSUFBS0EsRUFBRXhELE1BQU0sS0FBSyxNQUFNMEQsTUFBTSxHQUFHSixVQUFVSSxNQUFNLEdBQUksT0FDbEY7UUFFSixPQUFPO1lBQUVEO1lBQVFFO1lBQU1DO1FBQU87SUFDaEM7SUFFQSxNQUFNRyxZQUFZakUsS0FBSzRELE1BQU07SUFDN0IsTUFBTU0sYUFBYWxFLEtBQUt5RCxNQUFNLENBQUMsQ0FBQ3hCLE1BQVFzQixhQUFhdEIsSUFBSUMsRUFBRSxFQUFFMkIsSUFBSSxFQUFFRCxNQUFNO0lBRXpFLElBQUl4RCxTQUFTO1FBQ1gscUJBQ0UsOERBQUMrRDtZQUFJQyxXQUFVO1lBQTZEQyxNQUFLO1lBQVNDLGFBQVU7c0JBQ2xHLDRFQUFDSDtnQkFBSUMsV0FBVTswQkFBaUI7Ozs7Ozs7Ozs7O0lBR3RDO0lBRUEscUJBQ0UsOERBQUNEO1FBQUlDLFdBQVU7OzBCQUViLDhEQUFDRztnQkFDQ0MsTUFBSztnQkFDTEosV0FBVTswQkFDWDs7Ozs7OzBCQUtELDhEQUFDSztnQkFBT0wsV0FBVTswQkFDaEIsNEVBQUNEO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDRDt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNEO2dDQUFJQyxXQUFVOztrREFDYiw4REFBQzFFLHVIQUFRQTt3Q0FBQzBFLFdBQVU7d0NBQTJCTSxlQUFZOzs7Ozs7a0RBQzNELDhEQUFDUDs7MERBQ0MsOERBQUNRO2dEQUFHUCxXQUFVOzBEQUFtQzs7Ozs7OzBEQUNqRCw4REFBQ1E7Z0RBQUVSLFdBQVU7Z0RBQXlCRSxhQUFVOztvREFDN0NKO29EQUFXO29EQUFLRDtvREFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0FLakMsOERBQUNFO2dDQUFJQyxXQUFVOztrREFDYiw4REFBQ1M7d0NBQ0NDLFNBQVN6RDt3Q0FDVCtDLFdBQVU7d0NBQ1ZXLGNBQVc7a0RBRVgsNEVBQUNuRix1SEFBU0E7NENBQUN3RSxXQUFVOzRDQUFVTSxlQUFZOzs7Ozs7Ozs7OztrREFFN0MsOERBQUNHO3dDQUNDQyxTQUFTLElBQU1yRSxjQUFjO3dDQUM3QjJELFdBQVU7OzBEQUVWLDhEQUFDekUsdUhBQUlBO2dEQUFDeUUsV0FBVTtnREFBVU0sZUFBWTs7Ozs7OzRDQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFTekQsOERBQUNNO2dCQUFLOUMsSUFBRztnQkFBZWtDLFdBQVU7MEJBRWhDLDRFQUFDRDtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ2E7d0JBQU1iLFdBQVU7OzBDQUNmLDhEQUFDYzswQ0FDQyw0RUFBQ0M7b0NBQUdmLFdBQVU7O3NEQUNaLDhEQUFDZ0I7NENBQUdDLE9BQU07NENBQU1qQixXQUFVO3NEQUEwRTs7Ozs7O3NEQUNwRyw4REFBQ2dCOzRDQUFHQyxPQUFNOzRDQUFNakIsV0FBVTtzREFBMEU7Ozs7OztzREFDcEcsOERBQUNnQjs0Q0FBR0MsT0FBTTs0Q0FBTWpCLFdBQVU7c0RBQTBFOzs7Ozs7c0RBQ3BHLDhEQUFDZ0I7NENBQUdDLE9BQU07NENBQU1qQixXQUFVO3NEQUEwRTs7Ozs7O3NEQUNwRyw4REFBQ2dCOzRDQUFHQyxPQUFNOzRDQUFNakIsV0FBVTtzREFBMEU7Ozs7OztzREFDcEcsOERBQUNnQjs0Q0FBR0MsT0FBTTs0Q0FBTWpCLFdBQVU7c0RBQTBFOzs7Ozs7c0RBQ3BHLDhEQUFDZ0I7NENBQUdDLE9BQU07NENBQU1qQixXQUFVO3NEQUN4Qiw0RUFBQ2tCO2dEQUFLbEIsV0FBVTswREFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0FJaEMsOERBQUNtQjtnQ0FBTW5CLFdBQVU7MENBQ2RwRSxLQUFLd0YsR0FBRyxDQUFDLENBQUN2RDtvQ0FDVCxNQUFNLEVBQUU0QixJQUFJLEVBQUVDLE1BQU0sRUFBRUgsTUFBTSxFQUFFLEdBQUdKLGFBQWF0QixJQUFJQyxFQUFFO29DQUVwRCxxQkFDRSw4REFBQ2lEO3dDQUFnQmYsV0FBVTs7MERBQ3pCLDhEQUFDcUI7Z0RBQUdyQixXQUFVOzBEQUNaLDRFQUFDa0I7b0RBQ0NsQixXQUFXLENBQUMsOEVBQThFLEVBQ3hGUCxPQUNJLG9FQUNBLHVEQUNKOztzRUFFRiw4REFBQ3lCOzREQUFLbEIsV0FBVyxDQUFDLHlCQUF5QixFQUFFUCxPQUFPLG1CQUFtQixjQUFjOzREQUFFYSxlQUFZOzs7Ozs7d0RBQ2xHYixPQUFPLFdBQVc7Ozs7Ozs7Ozs7OzswREFHdkIsOERBQUM0QjtnREFBR3JCLFdBQVU7MERBQ1osNEVBQUNEOztzRUFDQyw4REFBQ1M7NERBQUVSLFdBQVU7c0VBQTBCbkMsSUFBSXJCLElBQUk7Ozs7Ozt3REFDOUNxQixJQUFJcEIsV0FBVyxrQkFDZCw4REFBQytEOzREQUFFUixXQUFVO3NFQUEwQm5DLElBQUlwQixXQUFXOzs7Ozs7Ozs7Ozs7Ozs7OzswREFJNUQsOERBQUM0RTtnREFBR3JCLFdBQVU7MERBQ1osNEVBQUNHO29EQUNDQyxNQUFNdkMsSUFBSW5CLEdBQUc7b0RBQ2I0RSxRQUFPO29EQUNQQyxLQUFJO29EQUNKdkIsV0FBVTs4REFFVG5DLElBQUluQixHQUFHOzs7Ozs7Ozs7OzswREFHWiw4REFBQzJFO2dEQUFHckIsV0FBVTswREFDWiw0RUFBQ3dCO29EQUFLeEIsV0FBVTs4REFBeURuQyxJQUFJbEIsSUFBSTs7Ozs7Ozs7Ozs7MERBRW5GLDhEQUFDMEU7Z0RBQUdyQixXQUFVOzBEQUNaLDRFQUFDa0I7b0RBQUtsQixXQUFXLENBQUMsb0JBQW9CLEVBQUVOLFVBQVUsS0FBSyxxQkFBcUJBLFVBQVUsS0FBSyxvQkFBb0IsZ0JBQWdCOzt3REFDNUhBO3dEQUFPOzs7Ozs7Ozs7Ozs7MERBR1osOERBQUMyQjtnREFBR3JCLFdBQVU7MERBQ1osNEVBQUNrQjtvREFBS2xCLFdBQVU7OERBQ2JULFFBQVFuQixlQUFlLEdBQUdtQixPQUFPbkIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHOzs7Ozs7Ozs7OzswREFHekQsOERBQUNpRDtnREFBR3JCLFdBQVU7MERBQ1osNEVBQUNEO29EQUFJQyxXQUFVOztzRUFDYiw4REFBQ1M7NERBQ0NDLFNBQVMsSUFBTTlDLFNBQVNDOzREQUN4QjRELFVBQVV2RixhQUFhMkIsSUFBSUMsRUFBRTs0REFDN0JrQyxXQUFVOzREQUNWVyxjQUFZLENBQUMsTUFBTSxFQUFFOUMsSUFBSXJCLElBQUksQ0FBQyxPQUFPLENBQUM7c0VBRXRDLDRFQUFDaEIsdUhBQVNBO2dFQUFDd0UsV0FBVyxDQUFDLFFBQVEsRUFBRTlELGFBQWEyQixJQUFJQyxFQUFFLEdBQUcsaUJBQWlCLElBQUk7Z0VBQUV3QyxlQUFZOzs7Ozs7Ozs7OztzRUFFNUYsOERBQUNIOzREQUNDQyxNQUFNdkMsSUFBSW5CLEdBQUc7NERBQ2I0RSxRQUFPOzREQUNQQyxLQUFJOzREQUNKdkIsV0FBVTs0REFDVlcsY0FBWSxDQUFDLEtBQUssRUFBRTlDLElBQUlyQixJQUFJLEVBQUU7c0VBRTlCLDRFQUFDZCx1SEFBWUE7Z0VBQUNzRSxXQUFVO2dFQUFVTSxlQUFZOzs7Ozs7Ozs7OztzRUFFaEQsOERBQUNHOzREQUNDQyxTQUFTLElBQU16QixVQUFVcEIsSUFBSUMsRUFBRTs0REFDL0JrQyxXQUFVOzREQUNWVyxjQUFZLENBQUMsT0FBTyxFQUFFOUMsSUFBSXJCLElBQUksRUFBRTtzRUFFaEMsNEVBQUNmLHVIQUFNQTtnRUFBQ3VFLFdBQVU7Z0VBQVVNLGVBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VDQXBFdkN6QyxJQUFJQyxFQUFFOzs7OztnQ0EwRW5COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBT1AxQiw0QkFDQyw4REFBQzJEO2dCQUNDQyxXQUFVO2dCQUNWQyxNQUFLO2dCQUNMeUIsY0FBVztnQkFDWEMsbUJBQWdCOzBCQUVoQiw0RUFBQzVCO29CQUFJQyxXQUFVOztzQ0FDYiw4REFBQzRCOzRCQUFHOUQsSUFBRzs0QkFBZ0JrQyxXQUFVO3NDQUF3Qzs7Ozs7O3NDQUN6RSw4REFBQzZCOzRCQUFLQyxVQUFVaEQ7NEJBQVFrQixXQUFVOzs4Q0FDaEMsOERBQUNEOztzREFDQyw4REFBQ2dDOzRDQUFNQyxTQUFROzRDQUFXaEMsV0FBVTs7Z0RBQWdEOzhEQUM3RSw4REFBQ2tCO29EQUFLbEIsV0FBVTs4REFBZTs7Ozs7Ozs7Ozs7O3NEQUV0Qyw4REFBQ2lDOzRDQUNDbkUsSUFBRzs0Q0FDSG9FLE1BQUs7NENBQ0xDLE9BQU83RixPQUFPRSxJQUFJOzRDQUNsQjRGLFVBQVUsQ0FBQ3JELElBQU14QyxVQUFVO29EQUFFLEdBQUdELE1BQU07b0RBQUVFLE1BQU11QyxFQUFFdUMsTUFBTSxDQUFDYSxLQUFLO2dEQUFDOzRDQUM3RG5DLFdBQVU7NENBQ1ZxQyxhQUFZOzRDQUNaQyxRQUFROzRDQUNSQyxjQUFhOzs7Ozs7Ozs7Ozs7OENBR2pCLDhEQUFDeEM7O3NEQUNDLDhEQUFDZ0M7NENBQU1DLFNBQVE7NENBQVdoQyxXQUFVO3NEQUFnRDs7Ozs7O3NEQUdwRiw4REFBQ2lDOzRDQUNDbkUsSUFBRzs0Q0FDSG9FLE1BQUs7NENBQ0xDLE9BQU83RixPQUFPRyxXQUFXOzRDQUN6QjJGLFVBQVUsQ0FBQ3JELElBQU14QyxVQUFVO29EQUFFLEdBQUdELE1BQU07b0RBQUVHLGFBQWFzQyxFQUFFdUMsTUFBTSxDQUFDYSxLQUFLO2dEQUFDOzRDQUNwRW5DLFdBQVU7NENBQ1ZxQyxhQUFZOzRDQUNaRSxjQUFhOzs7Ozs7Ozs7Ozs7OENBR2pCLDhEQUFDeEM7b0NBQUlDLFdBQVU7O3NEQUNiLDhEQUFDRDs7OERBQ0MsOERBQUNnQztvREFBTUMsU0FBUTtvREFBVWhDLFdBQVU7O3dEQUFnRDtzRUFDN0UsOERBQUNrQjs0REFBS2xCLFdBQVU7c0VBQWU7Ozs7Ozs7Ozs7Ozs4REFFckMsOERBQUNpQztvREFDQ25FLElBQUc7b0RBQ0hvRSxNQUFLO29EQUNMQyxPQUFPN0YsT0FBT0ksR0FBRztvREFDakIwRixVQUFVLENBQUNyRCxJQUFNeEMsVUFBVTs0REFBRSxHQUFHRCxNQUFNOzREQUFFSSxLQUFLcUMsRUFBRXVDLE1BQU0sQ0FBQ2EsS0FBSzt3REFBQztvREFDNURuQyxXQUFVO29EQUNWcUMsYUFBWTtvREFDWkMsUUFBUTtvREFDUkMsY0FBYTs7Ozs7Ozs7Ozs7O3NEQUdqQiw4REFBQ3hDOzs4REFDQyw4REFBQ2dDO29EQUFNQyxTQUFRO29EQUFXaEMsV0FBVTs7d0RBQWdEO3NFQUM3RSw4REFBQ2tCOzREQUFLbEIsV0FBVTtzRUFBZTs7Ozs7Ozs7Ozs7OzhEQUV0Qyw4REFBQ2lDO29EQUNDbkUsSUFBRztvREFDSG9FLE1BQUs7b0RBQ0xDLE9BQU83RixPQUFPSyxJQUFJO29EQUNsQnlGLFVBQVUsQ0FBQ3JELElBQU14QyxVQUFVOzREQUFFLEdBQUdELE1BQU07NERBQUVLLE1BQU02RixTQUFTekQsRUFBRXVDLE1BQU0sQ0FBQ2EsS0FBSzt3REFBRTtvREFDdkVuQyxXQUFVO29EQUNWc0MsUUFBUTtvREFDUkcsS0FBSTtvREFDSkMsS0FBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhDQUlWLDhEQUFDM0M7b0NBQUlDLFdBQVU7O3NEQUNiLDhEQUFDUzs0Q0FDQ3lCLE1BQUs7NENBQ0x4QixTQUFTLElBQU1yRSxjQUFjOzRDQUM3QjJELFdBQVU7c0RBQ1g7Ozs7OztzREFHRCw4REFBQ1M7NENBQ0N5QixNQUFLOzRDQUNMbEMsV0FBVTtzREFDWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVakIiLCJzb3VyY2VzIjpbIi9Vc2Vycy9tYXR0YnJ1Y2UvRG9jdW1lbnRzL1Byb2plY3RzL09wZW5DbGF3L1dlYi9oZWFydGJlYXQtbW9uaXRvci9zcmMvYXBwL3BhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpdml0eSwgUGx1cywgUmVmcmVzaEN3LCBUcmFzaDIsIEV4dGVybmFsTGluayB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcblxuaW50ZXJmYWNlIEFwcCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbiAgcGF0aDogc3RyaW5nO1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTdGF0dXNFbnRyeSB7XG4gIGFwcElkOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBzdGF0dXM6IFwidXBcIiB8IFwiZG93blwiO1xuICByZXNwb25zZVRpbWU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhlYXJ0YmVhdE1vbml0b3IoKSB7XG4gIGNvbnN0IFthcHBzLCBzZXRBcHBzXSA9IHVzZVN0YXRlPEFwcFtdPihbXSk7XG4gIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZTxTdGF0dXNFbnRyeVtdPihbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbY2hlY2tpbmcsIHNldENoZWNraW5nXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2hvd0FkZEFwcCwgc2V0U2hvd0FkZEFwcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtuZXdBcHAsIHNldE5ld0FwcF0gPSB1c2VTdGF0ZTxQYXJ0aWFsPEFwcD4+KHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgIHVybDogXCJodHRwOi8vbG9jYWxob3N0OlwiLFxuICAgIHBvcnQ6IDMwMDAsXG4gICAgcGF0aDogXCJcIixcbiAgICBjb21tYW5kOiBcIm5wbSBydW4gZGV2XCIsXG4gICAgY2F0ZWdvcnk6IFwiT3RoZXJcIixcbiAgICBjb2xvcjogXCIjMjJDNTVFXCIsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaERhdGEoKTtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKGZldGNoRGF0YSwgMzAwMDApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSwgW10pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIik7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIHNldEFwcHMoZGF0YS5hcHBzIHx8IFtdKTtcbiAgICAgIHNldFN0YXR1cyhkYXRhLnN0YXR1cyB8fCBbXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIGRhdGE6XCIsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNoZWNrQXBwKGFwcDogQXBwKSB7XG4gICAgc2V0Q2hlY2tpbmcoYXBwLmlkKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgYXdhaXQgZmV0Y2goYXBwLnVybCwgeyBtZXRob2Q6IFwiSEVBRFwiLCBtb2RlOiBcIm5vLWNvcnNcIiB9KTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgICAgIFxuICAgICAgY29uc3QgZW50cnk6IFN0YXR1c0VudHJ5ID0ge1xuICAgICAgICBhcHBJZDogYXBwLmlkLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgc3RhdHVzOiBcInVwXCIsXG4gICAgICAgIHJlc3BvbnNlVGltZSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJyZWNvcmRTdGF0dXNcIiwgZW50cnkgfSksXG4gICAgICB9KTtcblxuICAgICAgZmV0Y2hEYXRhKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zdCBlbnRyeTogU3RhdHVzRW50cnkgPSB7XG4gICAgICAgIGFwcElkOiBhcHAuaWQsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6IFwiZG93blwiLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcInJlY29yZFN0YXR1c1wiLCBlbnRyeSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBmZXRjaERhdGEoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0Q2hlY2tpbmcobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYWRkQXBwKGU6IFJlYWN0LkZvcm1FdmVudCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIW5ld0FwcC5uYW1lIHx8ICFuZXdBcHAudXJsKSByZXR1cm47XG5cbiAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwiYWRkQXBwXCIsIGFwcDogbmV3QXBwIH0pLFxuICAgIH0pO1xuXG4gICAgc2V0TmV3QXBwKHtcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgIHVybDogXCJodHRwOi8vbG9jYWxob3N0OlwiLFxuICAgICAgcG9ydDogMzAwMCxcbiAgICAgIHBhdGg6IFwiXCIsXG4gICAgICBjb21tYW5kOiBcIm5wbSBydW4gZGV2XCIsXG4gICAgICBjYXRlZ29yeTogXCJPdGhlclwiLFxuICAgICAgY29sb3I6IFwiIzIyQzU1RVwiLFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB9KTtcbiAgICBzZXRTaG93QWRkQXBwKGZhbHNlKTtcbiAgICBmZXRjaERhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFwcChpZDogc3RyaW5nKSB7XG4gICAgaWYgKCFjb25maXJtKFwiRGVsZXRlIHRoaXMgYXBwIGZyb20gbW9uaXRvcmluZz9cIikpIHJldHVybjtcbiAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwiZGVsZXRlQXBwXCIsIGlkIH0pLFxuICAgIH0pO1xuICAgIGZldGNoRGF0YSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXBwU3RhdHVzKGFwcElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcHBTdGF0dXMgPSBzdGF0dXMuZmlsdGVyKChzKSA9PiBzLmFwcElkID09PSBhcHBJZCk7XG4gICAgY29uc3QgbGF0ZXN0ID0gYXBwU3RhdHVzW2FwcFN0YXR1cy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBpc1VwID0gbGF0ZXN0Py5zdGF0dXMgPT09IFwidXBcIjtcbiAgICBjb25zdCB1cHRpbWUgPSBhcHBTdGF0dXMubGVuZ3RoID4gMCBcbiAgICAgID8gTWF0aC5yb3VuZCgoYXBwU3RhdHVzLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSBcInVwXCIpLmxlbmd0aCAvIGFwcFN0YXR1cy5sZW5ndGgpICogMTAwKVxuICAgICAgOiAxMDA7XG4gICAgXG4gICAgcmV0dXJuIHsgbGF0ZXN0LCBpc1VwLCB1cHRpbWUgfTtcbiAgfVxuXG4gIGNvbnN0IHRvdGFsQXBwcyA9IGFwcHMubGVuZ3RoO1xuICBjb25zdCBvbmxpbmVBcHBzID0gYXBwcy5maWx0ZXIoKGFwcCkgPT4gZ2V0QXBwU3RhdHVzKGFwcC5pZCkuaXNVcCkubGVuZ3RoO1xuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLXNsYXRlLTk1MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNsYXRlLTQwMFwiPkxvYWRpbmcgbW9uaXRvci4uLjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctc2xhdGUtOTUwIHRleHQtc2xhdGUtMTAwXCI+XG4gICAgICB7LyogU2tpcCBMaW5rIGZvciBBY2Nlc3NpYmlsaXR5ICovfVxuICAgICAgPGEgXG4gICAgICAgIGhyZWY9XCIjbWFpbi1jb250ZW50XCIgXG4gICAgICAgIGNsYXNzTmFtZT1cInNyLW9ubHkgZm9jdXM6bm90LXNyLW9ubHkgZm9jdXM6YWJzb2x1dGUgZm9jdXM6dG9wLTQgZm9jdXM6bGVmdC00IGZvY3VzOnotNTAgZm9jdXM6YmctZW1lcmFsZC01MDAgZm9jdXM6dGV4dC13aGl0ZSBmb2N1czpweC00IGZvY3VzOnB5LTIgZm9jdXM6cm91bmRlZC1sZ1wiXG4gICAgICA+XG4gICAgICAgIFNraXAgdG8gbWFpbiBjb250ZW50XG4gICAgICA8L2E+XG5cbiAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci1zbGF0ZS04MDAgYmctc2xhdGUtOTAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctNnhsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBoLTE2XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxBY3Rpdml0eSBjbGFzc05hbWU9XCJ3LTcgaC03IHRleHQtZW1lcmFsZC01MDBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZVwiPkhlYXJ0YmVhdCBNb25pdG9yPC9oMT5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtNDAwXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgICAgICB7b25saW5lQXBwc30gb2Yge3RvdGFsQXBwc30gc2VydmljZXMgb25saW5lXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtmZXRjaERhdGF9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMi41IGJnLXNsYXRlLTgwMCBob3ZlcjpiZy1zbGF0ZS03MDAgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC13aGl0ZSByb3VuZGVkLWxnIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZWZyZXNoIGRhdGFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFJlZnJlc2hDdyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWRkQXBwKHRydWUpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBiZy1lbWVyYWxkLTYwMCBob3ZlcjpiZy1lbWVyYWxkLTUwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMi41IHJvdW5kZWQtbGcgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLWVtZXJhbGQtNTAwIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1cyBjbGFzc05hbWU9XCJ3LTQgaC00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBBZGQgQXBwXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIHsvKiBNYWluIENvbnRlbnQgKi99XG4gICAgICA8bWFpbiBpZD1cIm1haW4tY29udGVudFwiIGNsYXNzTmFtZT1cIm1heC13LTZ4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04IHB5LThcIj5cbiAgICAgICAgey8qIFRhYmxlICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTkwMCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtODAwIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ3LWZ1bGwgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJiZy1zbGF0ZS04MDAgYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTcwMFwiPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlclwiPk5hbWU8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+VVJMPC90aD5cbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlclwiPlBvcnQ8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+VXB0aW1lPC90aD5cbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlclwiPlJlc3BvbnNlPC90aD5cbiAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtc2xhdGUtNDAwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkFjdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3NOYW1lPVwiZGl2aWRlLXkgZGl2aWRlLXNsYXRlLTgwMFwiPlxuICAgICAgICAgICAgICB7YXBwcy5tYXAoKGFwcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNVcCwgdXB0aW1lLCBsYXRlc3QgfSA9IGdldEFwcFN0YXR1cyhhcHAuaWQpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8dHIga2V5PXthcHAuaWR9IGNsYXNzTmFtZT1cImhvdmVyOmJnLXNsYXRlLTgwMC81MCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yLjUgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VwIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy1lbWVyYWxkLTUwMC8xMCB0ZXh0LWVtZXJhbGQtNDAwIGJvcmRlciBib3JkZXItZW1lcmFsZC01MDAvMjBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiYmctcmVkLTUwMC8xMCB0ZXh0LXJlZC00MDAgYm9yZGVyIGJvcmRlci1yZWQtNTAwLzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YHctMS41IGgtMS41IHJvdW5kZWQtZnVsbCAke2lzVXAgPyBcImJnLWVtZXJhbGQtNDAwXCIgOiBcImJnLXJlZC00MDBcIn1gfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzVXAgPyBcIk9ubGluZVwiIDogXCJPZmZsaW5lXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIHRleHQtd2hpdGVcIj57YXBwLm5hbWV9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FwcC5kZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1zbGF0ZS01MDBcIj57YXBwLmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2FwcC51cmx9IFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZW1lcmFsZC00MDAgaG92ZXI6dGV4dC1lbWVyYWxkLTMwMCBob3Zlcjp1bmRlcmxpbmUgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctZW1lcmFsZC01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwIHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1zbGF0ZS0zMDAgYmctc2xhdGUtODAwIHB4LTIgcHktMSByb3VuZGVkXCI+e2FwcC5wb3J0fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YHRleHQtc20gZm9udC1tZWRpdW0gJHt1cHRpbWUgPj0gOTAgPyBcInRleHQtZW1lcmFsZC00MDBcIiA6IHVwdGltZSA+PSA1MCA/IFwidGV4dC15ZWxsb3ctNDAwXCIgOiBcInRleHQtcmVkLTQwMFwifWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3VwdGltZX0lXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTMwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2xhdGVzdD8ucmVzcG9uc2VUaW1lID8gYCR7bGF0ZXN0LnJlc3BvbnNlVGltZX1tc2AgOiBcIuKAlFwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2hlY2tBcHAoYXBwKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NoZWNraW5nID09PSBhcHAuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1zbGF0ZS03MDAgcm91bmRlZC1sZyB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctZW1lcmFsZC01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YENoZWNrICR7YXBwLm5hbWV9IHN0YXR1c2B9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWZyZXNoQ3cgY2xhc3NOYW1lPXtgdy00IGgtNCAke2NoZWNraW5nID09PSBhcHAuaWQgPyBcImFuaW1hdGUtc3BpblwiIDogXCJcIn1gfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXthcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLXNsYXRlLTcwMCByb3VuZGVkLWxnIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgT3BlbiAke2FwcC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxFeHRlcm5hbExpbmsgY2xhc3NOYW1lPVwidy00IGgtNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRlbGV0ZUFwcChhcHAuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtcmVkLTQwMCBob3ZlcjpiZy1yZWQtNTAwLzEwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJlZC01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YERlbGV0ZSAke2FwcC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaDIgY2xhc3NOYW1lPVwidy00IGgtNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYWluPlxuXG4gICAgICB7LyogQWRkIEFwcCBNb2RhbCAqL31cbiAgICAgIHtzaG93QWRkQXBwICYmIChcbiAgICAgICAgPGRpdiBcbiAgICAgICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIGJnLWJsYWNrLzYwIGJhY2tkcm9wLWJsdXItc20gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgei01MCBwLTRcIlxuICAgICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJhZGQtYXBwLXRpdGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctc2xhdGUtOTAwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS04MDAgcC02IHctZnVsbCBtYXgtdy1tZCBzaGFkb3ctMnhsXCI+XG4gICAgICAgICAgICA8aDIgaWQ9XCJhZGQtYXBwLXRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIHRleHQtd2hpdGUgbWItNlwiPkFkZCBOZXcgQXBwPC9oMj5cbiAgICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXthZGRBcHB9IGNsYXNzTmFtZT1cInNwYWNlLXktNVwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiYXBwLW5hbWVcIiBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIE5hbWUgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yZWQtNDAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJhcHAtbmFtZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLm5hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgbmFtZTogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yLjUgdGV4dC13aGl0ZSBwbGFjZWhvbGRlci1zbGF0ZS01MDAgZm9jdXM6Ym9yZGVyLWVtZXJhbGQtNTAwIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWVtZXJhbGQtNTAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTXkgQXBwbGljYXRpb25cIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJhcHAtZGVzY1wiIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJhcHAtZGVzY1wiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIGRlc2NyaXB0aW9uOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCcmllZiBkZXNjcmlwdGlvbuKAplwiXG4gICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJhcHAtdXJsXCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIFVSTCA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC00MDBcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBpZD1cImFwcC11cmxcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidXJsXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e25ld0FwcC51cmx9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCB1cmw6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yLjUgdGV4dC13aGl0ZSBwbGFjZWhvbGRlci1zbGF0ZS01MDAgZm9jdXM6Ym9yZGVyLWVtZXJhbGQtNTAwIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWVtZXJhbGQtNTAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJhcHAtcG9ydFwiIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICBQb3J0IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTQwMFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYXBwLXBvcnRcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e25ld0FwcC5wb3J0fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgcG9ydDogcGFyc2VJbnQoZS50YXJnZXQudmFsdWUpIH0pfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yLjUgdGV4dC13aGl0ZSBwbGFjZWhvbGRlci1zbGF0ZS01MDAgZm9jdXM6Ym9yZGVyLWVtZXJhbGQtNTAwIGZvY3VzOnJpbmctMSBmb2N1czpyaW5nLWVtZXJhbGQtNTAwIHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgIG1heD1cIjY1NTM1XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTMgcHQtNFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZEFwcChmYWxzZSl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYmctc2xhdGUtODAwIGhvdmVyOmJnLXNsYXRlLTcwMCB0ZXh0LXNsYXRlLTMwMCBweS0yLjUgcm91bmRlZC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctc2xhdGUtNTAwIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgYmctZW1lcmFsZC02MDAgaG92ZXI6YmctZW1lcmFsZC01MDAgdGV4dC13aGl0ZSBweS0yLjUgcm91bmRlZC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctZW1lcmFsZC01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBBZGQgQXBwXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJBY3Rpdml0eSIsIlBsdXMiLCJSZWZyZXNoQ3ciLCJUcmFzaDIiLCJFeHRlcm5hbExpbmsiLCJIZWFydGJlYXRNb25pdG9yIiwiYXBwcyIsInNldEFwcHMiLCJzdGF0dXMiLCJzZXRTdGF0dXMiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImNoZWNraW5nIiwic2V0Q2hlY2tpbmciLCJzaG93QWRkQXBwIiwic2V0U2hvd0FkZEFwcCIsIm5ld0FwcCIsInNldE5ld0FwcCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInVybCIsInBvcnQiLCJwYXRoIiwiY29tbWFuZCIsImNhdGVnb3J5IiwiY29sb3IiLCJlbmFibGVkIiwiZmV0Y2hEYXRhIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJyZXMiLCJmZXRjaCIsImRhdGEiLCJqc29uIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiY2hlY2tBcHAiLCJhcHAiLCJpZCIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsIm1ldGhvZCIsIm1vZGUiLCJyZXNwb25zZVRpbWUiLCJlbnRyeSIsImFwcElkIiwidGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY3Rpb24iLCJhZGRBcHAiLCJlIiwicHJldmVudERlZmF1bHQiLCJkZWxldGVBcHAiLCJjb25maXJtIiwiZ2V0QXBwU3RhdHVzIiwiYXBwU3RhdHVzIiwiZmlsdGVyIiwicyIsImxhdGVzdCIsImxlbmd0aCIsImlzVXAiLCJ1cHRpbWUiLCJNYXRoIiwicm91bmQiLCJ0b3RhbEFwcHMiLCJvbmxpbmVBcHBzIiwiZGl2IiwiY2xhc3NOYW1lIiwicm9sZSIsImFyaWEtbGl2ZSIsImEiLCJocmVmIiwiaGVhZGVyIiwiYXJpYS1oaWRkZW4iLCJoMSIsInAiLCJidXR0b24iLCJvbkNsaWNrIiwiYXJpYS1sYWJlbCIsIm1haW4iLCJ0YWJsZSIsInRoZWFkIiwidHIiLCJ0aCIsInNjb3BlIiwic3BhbiIsInRib2R5IiwibWFwIiwidGQiLCJ0YXJnZXQiLCJyZWwiLCJjb2RlIiwiZGlzYWJsZWQiLCJhcmlhLW1vZGFsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiaDIiLCJmb3JtIiwib25TdWJtaXQiLCJsYWJlbCIsImh0bWxGb3IiLCJpbnB1dCIsInR5cGUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsImF1dG9Db21wbGV0ZSIsInBhcnNlSW50IiwibWluIiwibWF4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./src/app/page.tsx\n"); /***/ }), diff --git a/.next/server/webpack-runtime.js b/.next/server/webpack-runtime.js index ba0ac3d4..62704db1 100644 --- a/.next/server/webpack-runtime.js +++ b/.next/server/webpack-runtime.js @@ -130,7 +130,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("175a446eeb5052e2") +/******/ __webpack_require__.h = () => ("1930de2390f27e98") /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ diff --git a/.next/static/chunks/app/page.js b/.next/static/chunks/app/page.js index e055a82a..8effcdbc 100644 --- a/.next/static/chunks/app/page.js +++ b/.next/static/chunks/app/page.js @@ -25,7 +25,7 @@ eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpa /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HeartbeatMonitor)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/activity.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction HeartbeatMonitor() {\n _s();\n const [apps, setApps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [checking, setChecking] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showAddApp, setShowAddApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [newApp, setNewApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HeartbeatMonitor.useEffect\": ()=>{\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return ({\n \"HeartbeatMonitor.useEffect\": ()=>clearInterval(interval)\n })[\"HeartbeatMonitor.useEffect\"];\n }\n }[\"HeartbeatMonitor.useEffect\"], []);\n async function fetchData() {\n try {\n const res = await fetch(\"/api/monitor\");\n const data = await res.json();\n setApps(data.apps || []);\n setStatus(data.status || []);\n } catch (err) {\n console.error(\"Failed to fetch data:\", err);\n } finally{\n setLoading(false);\n }\n }\n async function checkApp(app) {\n setChecking(app.id);\n try {\n const start = Date.now();\n await fetch(app.url, {\n method: \"HEAD\",\n mode: \"no-cors\"\n });\n const responseTime = Date.now() - start;\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"up\",\n responseTime\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } catch (e) {\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"down\"\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } finally{\n setChecking(null);\n }\n }\n async function addApp(e) {\n e.preventDefault();\n if (!newApp.name || !newApp.url) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"addApp\",\n app: newApp\n })\n });\n setNewApp({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n setShowAddApp(false);\n fetchData();\n }\n async function deleteApp(id) {\n if (!confirm(\"Delete this app from monitoring?\")) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"deleteApp\",\n id\n })\n });\n fetchData();\n }\n function getAppStatus(appId) {\n const appStatus = status.filter((s)=>s.appId === appId);\n const latest = appStatus[appStatus.length - 1];\n const isUp = (latest === null || latest === void 0 ? void 0 : latest.status) === \"up\";\n const uptime = appStatus.length > 0 ? Math.round(appStatus.filter((s)=>s.status === \"up\").length / appStatus.length * 100) : 100;\n return {\n latest,\n isUp,\n uptime\n };\n }\n const totalApps = apps.length;\n const onlineApps = apps.filter((app)=>getAppStatus(app.id).isUp).length;\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-slate-400\",\n children: \"Loading...\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 155,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 154,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 text-slate-100 p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"w-8 h-8 text-emerald-500\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 166,\n columnNumber: 13\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)(\"h1\", {\n className: \"text-2xl font-bold\",\n children: \"Heartbeat Monitor\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 168,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-400\",\n children: [\n onlineApps,\n \" of \",\n totalApps,\n \" services online\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 169,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 167,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 165,\n columnNumber: 11\n }, this),\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)(\"button\", {\n onClick: fetchData,\n className: \"p-2 bg-slate-800 rounded-lg text-slate-400 hover:text-white\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 177,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 173,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAddApp(true),\n className: \"flex items-center gap-2 bg-emerald-500 hover:bg-emerald-600 text-white px-4 py-2 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 183,\n columnNumber: 15\n }, this),\n \"Add App\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 179,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 172,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 164,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 163,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"w-full\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"bg-slate-800 text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 196,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 197,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 198,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 199,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 200,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 201,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 text-sm font-medium text-slate-400\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 195,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n children: apps.map((app)=>{\n const { isUp, uptime, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"border-t border-slate-800 hover:bg-slate-800/50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium \".concat(isUp ? \"bg-emerald-500/20 text-emerald-400\" : \"bg-red-500/20 text-red-400\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-1.5 h-1.5 rounded-full \".concat(isUp ? \"bg-emerald-400\" : \"bg-red-400\")\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 217,\n columnNumber: 25\n }, this),\n isUp ? \"ONLINE\" : \"OFFLINE\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 212,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 211,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__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)(\"p\", {\n className: \"font-medium text-white\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 223,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: app.description\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 224,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 222,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 221,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-emerald-400 hover:text-emerald-300 text-sm\",\n children: app.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 228,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 227,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 text-slate-300 font-mono\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 237,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-mono \".concat(uptime >= 90 ? \"text-emerald-400\" : \"text-yellow-400\"),\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 239,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 238,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 text-slate-300 font-mono\",\n children: (latest === null || latest === void 0 ? void 0 : latest.responseTime) ? \"\".concat(latest.responseTime, \"ms\") : \"--\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 243,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\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)(\"button\", {\n onClick: ()=>checkApp(app),\n disabled: checking === app.id,\n className: \"p-1.5 text-slate-400 hover:text-white hover:bg-slate-700 rounded\",\n title: \"Check now\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-4 h-4 \".concat(checking === app.id ? \"animate-spin\" : \"\")\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 254,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 248,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"p-1.5 text-slate-400 hover:text-white hover:bg-slate-700 rounded\",\n title: \"Open app\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 263,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 256,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteApp(app.id),\n className: \"p-1.5 text-slate-400 hover:text-red-400 hover:bg-slate-700 rounded\",\n title: \"Delete\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 270,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 265,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 247,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 246,\n columnNumber: 21\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 210,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 205,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 191,\n columnNumber: 7\n }, this),\n showAddApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg p-6 w-full max-w-md border border-slate-800\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-bold text-white mb-4\",\n children: \"Add New App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 286,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: addApp,\n className: \"space-y-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 text-slate-400 mb-1\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 289,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.name,\n onChange: (e)=>setNewApp({\n ...newApp,\n name: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 290,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 288,\n columnNumber: 15\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)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 299,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.description,\n onChange: (e)=>setNewApp({\n ...newApp,\n description: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 300,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 298,\n columnNumber: 15\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 children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 309,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: newApp.url,\n onChange: (e)=>setNewApp({\n ...newApp,\n url: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 310,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 308,\n columnNumber: 17\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)(\"label\", {\n className: \"block text-sm text-slate-400 mb-1\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 319,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n value: newApp.port,\n onChange: (e)=>setNewApp({\n ...newApp,\n port: parseInt(e.target.value)\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white\",\n required: true\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 320,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 318,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 307,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setShowAddApp(false),\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2 rounded-lg\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 330,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"flex-1 bg-emerald-500 hover:bg-emerald-600 text-white py-2 rounded-lg font-medium\",\n children: \"Add App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 329,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 287,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 285,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 284,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 161,\n columnNumber: 5\n }, this);\n}\n_s(HeartbeatMonitor, \"P2SiA3jWi2qbhDtBgJbGhzf0uqY=\");\n_c = HeartbeatMonitor;\nvar _c;\n$RefreshReg$(_c, \"HeartbeatMonitor\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVWpCO0dBcFV3QnJFO0tBQUFBIiwic291cmNlcyI6WyIvVXNlcnMvbWF0dGJydWNlL0RvY3VtZW50cy9Qcm9qZWN0cy9PcGVuQ2xhdy9XZWIvaGVhcnRiZWF0LW1vbml0b3Ivc3JjL2FwcC9wYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIFBsdXMsIFJlZnJlc2hDdywgVHJhc2gyLCBFeHRlcm5hbExpbmsgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCI7XG5cbmludGVyZmFjZSBBcHAge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHBhdGg6IHN0cmluZztcbiAgY29tbWFuZDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU3RhdHVzRW50cnkge1xuICBhcHBJZDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgc3RhdHVzOiBcInVwXCIgfCBcImRvd25cIjtcbiAgcmVzcG9uc2VUaW1lPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIZWFydGJlYXRNb25pdG9yKCkge1xuICBjb25zdCBbYXBwcywgc2V0QXBwc10gPSB1c2VTdGF0ZTxBcHBbXT4oW10pO1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8U3RhdHVzRW50cnlbXT4oW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2NoZWNraW5nLCBzZXRDaGVja2luZ10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3Nob3dBZGRBcHAsIHNldFNob3dBZGRBcHBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbmV3QXBwLCBzZXROZXdBcHBdID0gdXNlU3RhdGU8UGFydGlhbDxBcHA+Pih7XG4gICAgbmFtZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICB1cmw6IFwiaHR0cDovL2xvY2FsaG9zdDpcIixcbiAgICBwb3J0OiAzMDAwLFxuICAgIHBhdGg6IFwiXCIsXG4gICAgY29tbWFuZDogXCJucG0gcnVuIGRldlwiLFxuICAgIGNhdGVnb3J5OiBcIk90aGVyXCIsXG4gICAgY29sb3I6IFwiIzIyQzU1RVwiLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hEYXRhKCk7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmZXRjaERhdGEsIDMwMDAwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH0sIFtdKTtcblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBzZXRBcHBzKGRhdGEuYXBwcyB8fCBbXSk7XG4gICAgICBzZXRTdGF0dXMoZGF0YS5zdGF0dXMgfHwgW10pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCBkYXRhOlwiLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjaGVja0FwcChhcHA6IEFwcCkge1xuICAgIHNldENoZWNraW5nKGFwcC5pZCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGF3YWl0IGZldGNoKGFwcC51cmwsIHsgbWV0aG9kOiBcIkhFQURcIiwgbW9kZTogXCJuby1jb3JzXCIgfSk7XG4gICAgICBjb25zdCByZXNwb25zZVRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICBcbiAgICAgIGNvbnN0IGVudHJ5OiBTdGF0dXNFbnRyeSA9IHtcbiAgICAgICAgYXBwSWQ6IGFwcC5pZCxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXR1czogXCJ1cFwiLFxuICAgICAgICByZXNwb25zZVRpbWUsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwicmVjb3JkU3RhdHVzXCIsIGVudHJ5IH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGZldGNoRGF0YSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgZW50cnk6IFN0YXR1c0VudHJ5ID0ge1xuICAgICAgICBhcHBJZDogYXBwLmlkLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgc3RhdHVzOiBcImRvd25cIixcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJyZWNvcmRTdGF0dXNcIiwgZW50cnkgfSksXG4gICAgICB9KTtcblxuICAgICAgZmV0Y2hEYXRhKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldENoZWNraW5nKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFkZEFwcChlOiBSZWFjdC5Gb3JtRXZlbnQpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFuZXdBcHAubmFtZSB8fCAhbmV3QXBwLnVybCkgcmV0dXJuO1xuXG4gICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcImFkZEFwcFwiLCBhcHA6IG5ld0FwcCB9KSxcbiAgICB9KTtcblxuICAgIHNldE5ld0FwcCh7XG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2xvY2FsaG9zdDpcIixcbiAgICAgIHBvcnQ6IDMwMDAsXG4gICAgICBwYXRoOiBcIlwiLFxuICAgICAgY29tbWFuZDogXCJucG0gcnVuIGRldlwiLFxuICAgICAgY2F0ZWdvcnk6IFwiT3RoZXJcIixcbiAgICAgIGNvbG9yOiBcIiMyMkM1NUVcIixcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgfSk7XG4gICAgc2V0U2hvd0FkZEFwcChmYWxzZSk7XG4gICAgZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVBcHAoaWQ6IHN0cmluZykge1xuICAgIGlmICghY29uZmlybShcIkRlbGV0ZSB0aGlzIGFwcCBmcm9tIG1vbml0b3Jpbmc/XCIpKSByZXR1cm47XG4gICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcImRlbGV0ZUFwcFwiLCBpZCB9KSxcbiAgICB9KTtcbiAgICBmZXRjaERhdGEoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFwcFN0YXR1cyhhcHBJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYXBwU3RhdHVzID0gc3RhdHVzLmZpbHRlcigocykgPT4gcy5hcHBJZCA9PT0gYXBwSWQpO1xuICAgIGNvbnN0IGxhdGVzdCA9IGFwcFN0YXR1c1thcHBTdGF0dXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgaXNVcCA9IGxhdGVzdD8uc3RhdHVzID09PSBcInVwXCI7XG4gICAgY29uc3QgdXB0aW1lID0gYXBwU3RhdHVzLmxlbmd0aCA+IDAgXG4gICAgICA/IE1hdGgucm91bmQoKGFwcFN0YXR1cy5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gXCJ1cFwiKS5sZW5ndGggLyBhcHBTdGF0dXMubGVuZ3RoKSAqIDEwMClcbiAgICAgIDogMTAwO1xuICAgIFxuICAgIHJldHVybiB7IGxhdGVzdCwgaXNVcCwgdXB0aW1lIH07XG4gIH1cblxuICBjb25zdCB0b3RhbEFwcHMgPSBhcHBzLmxlbmd0aDtcbiAgY29uc3Qgb25saW5lQXBwcyA9IGFwcHMuZmlsdGVyKChhcHApID0+IGdldEFwcFN0YXR1cyhhcHAuaWQpLmlzVXApLmxlbmd0aDtcblxuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1zbGF0ZS05NTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNsYXRlLTQwMFwiPkxvYWRpbmcuLi48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLXNsYXRlLTk1MCB0ZXh0LXNsYXRlLTEwMCBwLTZcIj5cbiAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTZ4bCBteC1hdXRvIG1iLTZcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICA8QWN0aXZpdHkgY2xhc3NOYW1lPVwidy04IGgtOCB0ZXh0LWVtZXJhbGQtNTAwXCIgLz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGRcIj5IZWFydGJlYXQgTW9uaXRvcjwvaDE+XG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwXCI+e29ubGluZUFwcHN9IG9mIHt0b3RhbEFwcHN9IHNlcnZpY2VzIG9ubGluZTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17ZmV0Y2hEYXRhfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgYmctc2xhdGUtODAwIHJvdW5kZWQtbGcgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC13aGl0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxSZWZyZXNoQ3cgY2xhc3NOYW1lPVwidy01IGgtNVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZEFwcCh0cnVlKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgYmctZW1lcmFsZC01MDAgaG92ZXI6YmctZW1lcmFsZC02MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZC1sZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICBBZGQgQXBwXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIFRhYmxlICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy02eGwgbXgtYXV0b1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTkwMCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtODAwIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMCB0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5TdGF0dXM8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMFwiPk5hbWU8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMFwiPlVSTDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwXCI+UG9ydDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwXCI+VXB0aW1lPC90aD5cbiAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDBcIj5SZXNwb25zZTwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwXCI+QWN0aW9uczwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICB7YXBwcy5tYXAoKGFwcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNVcCwgdXB0aW1lLCBsYXRlc3QgfSA9IGdldEFwcFN0YXR1cyhhcHAuaWQpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8dHIga2V5PXthcHAuaWR9IGNsYXNzTmFtZT1cImJvcmRlci10IGJvcmRlci1zbGF0ZS04MDAgaG92ZXI6Ymctc2xhdGUtODAwLzUwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yLjUgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNVcCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLWVtZXJhbGQtNTAwLzIwIHRleHQtZW1lcmFsZC00MDBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImJnLXJlZC01MDAvMjAgdGV4dC1yZWQtNDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICB9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2B3LTEuNSBoLTEuNSByb3VuZGVkLWZ1bGwgJHtpc1VwID8gXCJiZy1lbWVyYWxkLTQwMFwiIDogXCJiZy1yZWQtNDAwXCJ9YH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1VwID8gXCJPTkxJTkVcIiA6IFwiT0ZGTElORVwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJmb250LW1lZGl1bSB0ZXh0LXdoaXRlXCI+e2FwcC5uYW1lfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1zbGF0ZS01MDBcIj57YXBwLmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIFxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YXBwLnVybH0gXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1lbWVyYWxkLTQwMCBob3Zlcjp0ZXh0LWVtZXJhbGQtMzAwIHRleHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNsYXRlLTMwMCBmb250LW1vbm9cIj57YXBwLnBvcnR9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZvbnQtbW9ubyAke3VwdGltZSA+PSA5MCA/IFwidGV4dC1lbWVyYWxkLTQwMFwiIDogXCJ0ZXh0LXllbGxvdy00MDBcIn1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt1cHRpbWV9JVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXNsYXRlLTMwMCBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7bGF0ZXN0Py5yZXNwb25zZVRpbWUgPyBgJHtsYXRlc3QucmVzcG9uc2VUaW1lfW1zYCA6IFwiLS1cIn1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2hlY2tBcHAoYXBwKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NoZWNraW5nID09PSBhcHAuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInAtMS41IHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6Ymctc2xhdGUtNzAwIHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNoZWNrIG5vd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWZyZXNoQ3cgY2xhc3NOYW1lPXtgdy00IGgtNCAke2NoZWNraW5nID09PSBhcHAuaWQgPyBcImFuaW1hdGUtc3BpblwiIDogXCJcIn1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXthcHAudXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0xLjUgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1zbGF0ZS03MDAgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBkZWxldGVBcHAoYXBwLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0xLjUgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC1yZWQtNDAwIGhvdmVyOmJnLXNsYXRlLTcwMCByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2gyIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWRkIEFwcCBNb2RhbCAqL31cbiAgICAgIHtzaG93QWRkQXBwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIGJnLWJsYWNrLzUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHotNTAgcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAgcm91bmRlZC1sZyBwLTYgdy1mdWxsIG1heC13LW1kIGJvcmRlciBib3JkZXItc2xhdGUtODAwXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGQgdGV4dC13aGl0ZSBtYi00XCI+QWRkIE5ldyBBcHA8L2gyPlxuICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2FkZEFwcH0gY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gdGV4dC1zbGF0ZS00MDAgbWItMVwiPk5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e25ld0FwcC5uYW1lfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIG5hbWU6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLXNsYXRlLTgwMCBib3JkZXIgYm9yZGVyLXNsYXRlLTcwMCByb3VuZGVkLWxnIHB4LTMgcHktMiB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gdGV4dC1zbGF0ZS00MDAgbWItMVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgZGVzY3JpcHRpb246IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLXNsYXRlLTgwMCBib3JkZXIgYm9yZGVyLXNsYXRlLTcwMCByb3VuZGVkLWxnIHB4LTMgcHktMiB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIHRleHQtc2xhdGUtNDAwIG1iLTFcIj5VUkw8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e25ld0FwcC51cmx9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCB1cmw6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgYmctc2xhdGUtODAwIGJvcmRlciBib3JkZXItc2xhdGUtNzAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gdGV4dC1zbGF0ZS00MDAgbWItMVwiPlBvcnQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLnBvcnR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBwb3J0OiBwYXJzZUludChlLnRhcmdldC52YWx1ZSkgfSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIgdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0zIHB0LTJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dBZGRBcHAoZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIGJnLXNsYXRlLTgwMCBob3ZlcjpiZy1zbGF0ZS03MDAgdGV4dC1zbGF0ZS0zMDAgcHktMiByb3VuZGVkLWxnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1lbWVyYWxkLTUwMCBob3ZlcjpiZy1lbWVyYWxkLTYwMCB0ZXh0LXdoaXRlIHB5LTIgcm91bmRlZC1sZyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQWRkIEFwcFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiQWN0aXZpdHkiLCJQbHVzIiwiUmVmcmVzaEN3IiwiVHJhc2gyIiwiRXh0ZXJuYWxMaW5rIiwiSGVhcnRiZWF0TW9uaXRvciIsImFwcHMiLCJzZXRBcHBzIiwic3RhdHVzIiwic2V0U3RhdHVzIiwibG9hZGluZyIsInNldExvYWRpbmciLCJjaGVja2luZyIsInNldENoZWNraW5nIiwic2hvd0FkZEFwcCIsInNldFNob3dBZGRBcHAiLCJuZXdBcHAiLCJzZXROZXdBcHAiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJwb3J0IiwicGF0aCIsImNvbW1hbmQiLCJjYXRlZ29yeSIsImNvbG9yIiwiZW5hYmxlZCIsImZldGNoRGF0YSIsImludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicmVzIiwiZmV0Y2giLCJkYXRhIiwianNvbiIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImNoZWNrQXBwIiwiYXBwIiwiaWQiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJtZXRob2QiLCJtb2RlIiwicmVzcG9uc2VUaW1lIiwiZW50cnkiLCJhcHBJZCIsInRpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiYWN0aW9uIiwiYWRkQXBwIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGVsZXRlQXBwIiwiY29uZmlybSIsImdldEFwcFN0YXR1cyIsImFwcFN0YXR1cyIsImZpbHRlciIsInMiLCJsYXRlc3QiLCJsZW5ndGgiLCJpc1VwIiwidXB0aW1lIiwiTWF0aCIsInJvdW5kIiwidG90YWxBcHBzIiwib25saW5lQXBwcyIsImRpdiIsImNsYXNzTmFtZSIsImgxIiwicCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJ0YWJsZSIsInRoZWFkIiwidHIiLCJ0aCIsInRib2R5IiwibWFwIiwidGQiLCJzcGFuIiwiYSIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJkaXNhYmxlZCIsInRpdGxlIiwiaDIiLCJmb3JtIiwib25TdWJtaXQiLCJsYWJlbCIsImlucHV0IiwidHlwZSIsInZhbHVlIiwib25DaGFuZ2UiLCJyZXF1aXJlZCIsInBhcnNlSW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/page.tsx\n")); +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HeartbeatMonitor)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/activity.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction HeartbeatMonitor() {\n _s();\n const [apps, setApps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [checking, setChecking] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showAddApp, setShowAddApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [newApp, setNewApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HeartbeatMonitor.useEffect\": ()=>{\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return ({\n \"HeartbeatMonitor.useEffect\": ()=>clearInterval(interval)\n })[\"HeartbeatMonitor.useEffect\"];\n }\n }[\"HeartbeatMonitor.useEffect\"], []);\n async function fetchData() {\n try {\n const res = await fetch(\"/api/monitor\");\n const data = await res.json();\n setApps(data.apps || []);\n setStatus(data.status || []);\n } catch (err) {\n console.error(\"Failed to fetch data:\", err);\n } finally{\n setLoading(false);\n }\n }\n async function checkApp(app) {\n setChecking(app.id);\n try {\n const start = Date.now();\n await fetch(app.url, {\n method: \"HEAD\",\n mode: \"no-cors\"\n });\n const responseTime = Date.now() - start;\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"up\",\n responseTime\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } catch (e) {\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"down\"\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } finally{\n setChecking(null);\n }\n }\n async function addApp(e) {\n e.preventDefault();\n if (!newApp.name || !newApp.url) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"addApp\",\n app: newApp\n })\n });\n setNewApp({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n setShowAddApp(false);\n fetchData();\n }\n async function deleteApp(id) {\n if (!confirm(\"Delete this app from monitoring?\")) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"deleteApp\",\n id\n })\n });\n fetchData();\n }\n function getAppStatus(appId) {\n const appStatus = status.filter((s)=>s.appId === appId);\n const latest = appStatus[appStatus.length - 1];\n const isUp = (latest === null || latest === void 0 ? void 0 : latest.status) === \"up\";\n const uptime = appStatus.length > 0 ? Math.round(appStatus.filter((s)=>s.status === \"up\").length / appStatus.length * 100) : 100;\n return {\n latest,\n isUp,\n uptime\n };\n }\n const totalApps = apps.length;\n const onlineApps = apps.filter((app)=>getAppStatus(app.id).isUp).length;\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 flex items-center justify-center\",\n role: \"status\",\n \"aria-live\": \"polite\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-slate-400\",\n children: \"Loading monitor...\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 155,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 154,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 text-slate-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#main-content\",\n className: \"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:bg-emerald-500 focus:text-white focus:px-4 focus:py-2 focus:rounded-lg\",\n children: \"Skip to main content\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 163,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"border-b border-slate-800 bg-slate-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"w-7 h-7 text-emerald-500\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 175,\n columnNumber: 15\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)(\"h1\", {\n className: \"text-xl font-semibold text-white\",\n children: \"Heartbeat Monitor\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 177,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-400\",\n \"aria-live\": \"polite\",\n children: [\n onlineApps,\n \" of \",\n totalApps,\n \" services online\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 178,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 176,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\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)(\"button\", {\n onClick: fetchData,\n className: \"inline-flex items-center justify-center p-2.5 bg-slate-800 hover:bg-slate-700 text-slate-400 hover:text-white rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Refresh data\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-5 h-5\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 185,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAddApp(true),\n className: \"inline-flex items-center gap-2 bg-emerald-600 hover:bg-emerald-500 text-white px-4 py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 196,\n columnNumber: 17\n }, this),\n \"Add App\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 192,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 173,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 172,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 171,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n id: \"main-content\",\n className: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"w-full text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"bg-slate-800 border-b border-slate-700\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 211,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 212,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 213,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 214,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 215,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 218,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 217,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 210,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-slate-800\",\n children: apps.map((app)=>{\n const { isUp, uptime, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"hover:bg-slate-800/50 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium \".concat(isUp ? \"bg-emerald-500/10 text-emerald-400 border border-emerald-500/20\" : \"bg-red-500/10 text-red-400 border border-red-500/20\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-1.5 h-1.5 rounded-full \".concat(isUp ? \"bg-emerald-400\" : \"bg-red-400\"),\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 236,\n columnNumber: 25\n }, this),\n isUp ? \"Online\" : \"Offline\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 229,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 228,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__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)(\"p\", {\n className: \"font-medium text-white\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 242,\n columnNumber: 25\n }, this),\n app.description && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: app.description\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 244,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 241,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 240,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-emerald-400 hover:text-emerald-300 hover:underline text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900 rounded\",\n children: app.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 249,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 248,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"text-sm text-slate-300 bg-slate-800 px-2 py-1 rounded\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 259,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 258,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium \".concat(uptime >= 90 ? \"text-emerald-400\" : uptime >= 50 ? \"text-yellow-400\" : \"text-red-400\"),\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 262,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 261,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-slate-300\",\n children: (latest === null || latest === void 0 ? void 0 : latest.responseTime) ? \"\".concat(latest.responseTime, \"ms\") : \"—\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 266,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__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)(\"button\", {\n onClick: ()=>checkApp(app),\n disabled: checking === app.id,\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-white hover:bg-slate-700 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900 disabled:opacity-50 disabled:cursor-not-allowed\",\n \"aria-label\": \"Check \".concat(app.name, \" status\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-4 h-4 \".concat(checking === app.id ? \"animate-spin\" : \"\"),\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 279,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 273,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-white hover:bg-slate-700 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Open \".concat(app.name),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 288,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 281,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteApp(app.id),\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-red-400 hover:bg-red-500/10 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Delete \".concat(app.name),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 295,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 290,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 272,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 271,\n columnNumber: 21\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 227,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 222,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 208,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 207,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this),\n showAddApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4\",\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-labelledby\": \"add-app-title\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 p-6 w-full max-w-md shadow-2xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n id: \"add-app-title\",\n className: \"text-xl font-semibold text-white mb-6\",\n children: \"Add New App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 316,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: addApp,\n className: \"space-y-5\",\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 htmlFor: \"app-name\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"Name \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 320,\n columnNumber: 24\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 319,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-name\",\n type: \"text\",\n value: newApp.name,\n onChange: (e)=>setNewApp({\n ...newApp,\n name: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"My Application\",\n required: true,\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 322,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 318,\n columnNumber: 15\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)(\"label\", {\n htmlFor: \"app-desc\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: \"Description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 334,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-desc\",\n type: \"text\",\n value: newApp.description,\n onChange: (e)=>setNewApp({\n ...newApp,\n description: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"Brief description…\",\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 333,\n columnNumber: 15\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 children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"app-url\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"URL \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 350,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 349,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-url\",\n type: \"url\",\n value: newApp.url,\n onChange: (e)=>setNewApp({\n ...newApp,\n url: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"http://localhost:3000\",\n required: true,\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 348,\n columnNumber: 17\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)(\"label\", {\n htmlFor: \"app-port\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"Port \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 365,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 364,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-port\",\n type: \"number\",\n value: newApp.port,\n onChange: (e)=>setNewApp({\n ...newApp,\n port: parseInt(e.target.value)\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n required: true,\n min: \"1\",\n max: \"65535\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 367,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 363,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 347,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3 pt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setShowAddApp(false),\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-slate-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 380,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"flex-1 bg-emerald-600 hover:bg-emerald-500 text-white py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: \"Add App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 387,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 379,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 317,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 315,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 309,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 161,\n columnNumber: 5\n }, this);\n}\n_s(HeartbeatMonitor, \"P2SiA3jWi2qbhDtBgJbGhzf0uqY=\");\n_c = HeartbeatMonitor;\nvar _c;\n$RefreshReg$(_c, \"HeartbeatMonitor\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7O3NEQUdELDhEQUFDUzs0Q0FDQ3lCLE1BQUs7NENBQ0xsQyxXQUFVO3NEQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVqQjtHQXRYd0JyRTtLQUFBQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hdHRicnVjZS9Eb2N1bWVudHMvUHJvamVjdHMvT3BlbkNsYXcvV2ViL2hlYXJ0YmVhdC1tb25pdG9yL3NyYy9hcHAvcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGl2aXR5LCBQbHVzLCBSZWZyZXNoQ3csIFRyYXNoMiwgRXh0ZXJuYWxMaW5rIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuXG5pbnRlcmZhY2UgQXBwIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFN0YXR1c0VudHJ5IHtcbiAgYXBwSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHN0YXR1czogXCJ1cFwiIHwgXCJkb3duXCI7XG4gIHJlc3BvbnNlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSGVhcnRiZWF0TW9uaXRvcigpIHtcbiAgY29uc3QgW2FwcHMsIHNldEFwcHNdID0gdXNlU3RhdGU8QXBwW10+KFtdKTtcbiAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlPFN0YXR1c0VudHJ5W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtjaGVja2luZywgc2V0Q2hlY2tpbmddID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzaG93QWRkQXBwLCBzZXRTaG93QWRkQXBwXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW25ld0FwcCwgc2V0TmV3QXBwXSA9IHVzZVN0YXRlPFBhcnRpYWw8QXBwPj4oe1xuICAgIG5hbWU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgcG9ydDogMzAwMCxcbiAgICBwYXRoOiBcIlwiLFxuICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICBjYXRlZ29yeTogXCJPdGhlclwiLFxuICAgIGNvbG9yOiBcIiMyMkM1NUVcIixcbiAgICBlbmFibGVkOiB0cnVlLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoRGF0YSgpO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoZmV0Y2hEYXRhLCAzMDAwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9LCBbXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgc2V0QXBwcyhkYXRhLmFwcHMgfHwgW10pO1xuICAgICAgc2V0U3RhdHVzKGRhdGEuc3RhdHVzIHx8IFtdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggZGF0YTpcIiwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tBcHAoYXBwOiBBcHApIHtcbiAgICBzZXRDaGVja2luZyhhcHAuaWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICBhd2FpdCBmZXRjaChhcHAudXJsLCB7IG1ldGhvZDogXCJIRUFEXCIsIG1vZGU6IFwibm8tY29yc1wiIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgXG4gICAgICBjb25zdCBlbnRyeTogU3RhdHVzRW50cnkgPSB7XG4gICAgICAgIGFwcElkOiBhcHAuaWQsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6IFwidXBcIixcbiAgICAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcInJlY29yZFN0YXR1c1wiLCBlbnRyeSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBmZXRjaERhdGEoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IGVudHJ5OiBTdGF0dXNFbnRyeSA9IHtcbiAgICAgICAgYXBwSWQ6IGFwcC5pZCxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXR1czogXCJkb3duXCIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwicmVjb3JkU3RhdHVzXCIsIGVudHJ5IH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGZldGNoRGF0YSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDaGVja2luZyhudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRBcHAoZTogUmVhY3QuRm9ybUV2ZW50KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghbmV3QXBwLm5hbWUgfHwgIW5ld0FwcC51cmwpIHJldHVybjtcblxuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJhZGRBcHBcIiwgYXBwOiBuZXdBcHAgfSksXG4gICAgfSk7XG5cbiAgICBzZXROZXdBcHAoe1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgICBwb3J0OiAzMDAwLFxuICAgICAgcGF0aDogXCJcIixcbiAgICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICAgIGNhdGVnb3J5OiBcIk90aGVyXCIsXG4gICAgICBjb2xvcjogXCIjMjJDNTVFXCIsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuICAgIHNldFNob3dBZGRBcHAoZmFsc2UpO1xuICAgIGZldGNoRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQXBwKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbmZpcm0oXCJEZWxldGUgdGhpcyBhcHAgZnJvbSBtb25pdG9yaW5nP1wiKSkgcmV0dXJuO1xuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJkZWxldGVBcHBcIiwgaWQgfSksXG4gICAgfSk7XG4gICAgZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBcHBTdGF0dXMoYXBwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFwcFN0YXR1cyA9IHN0YXR1cy5maWx0ZXIoKHMpID0+IHMuYXBwSWQgPT09IGFwcElkKTtcbiAgICBjb25zdCBsYXRlc3QgPSBhcHBTdGF0dXNbYXBwU3RhdHVzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGlzVXAgPSBsYXRlc3Q/LnN0YXR1cyA9PT0gXCJ1cFwiO1xuICAgIGNvbnN0IHVwdGltZSA9IGFwcFN0YXR1cy5sZW5ndGggPiAwIFxuICAgICAgPyBNYXRoLnJvdW5kKChhcHBTdGF0dXMuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09IFwidXBcIikubGVuZ3RoIC8gYXBwU3RhdHVzLmxlbmd0aCkgKiAxMDApXG4gICAgICA6IDEwMDtcbiAgICBcbiAgICByZXR1cm4geyBsYXRlc3QsIGlzVXAsIHVwdGltZSB9O1xuICB9XG5cbiAgY29uc3QgdG90YWxBcHBzID0gYXBwcy5sZW5ndGg7XG4gIGNvbnN0IG9ubGluZUFwcHMgPSBhcHBzLmZpbHRlcigoYXBwKSA9PiBnZXRBcHBTdGF0dXMoYXBwLmlkKS5pc1VwKS5sZW5ndGg7XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctc2xhdGUtOTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwXCI+TG9hZGluZyBtb25pdG9yLi4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1zbGF0ZS05NTAgdGV4dC1zbGF0ZS0xMDBcIj5cbiAgICAgIHsvKiBTa2lwIExpbmsgZm9yIEFjY2Vzc2liaWxpdHkgKi99XG4gICAgICA8YSBcbiAgICAgICAgaHJlZj1cIiNtYWluLWNvbnRlbnRcIiBcbiAgICAgICAgY2xhc3NOYW1lPVwic3Itb25seSBmb2N1czpub3Qtc3Itb25seSBmb2N1czphYnNvbHV0ZSBmb2N1czp0b3AtNCBmb2N1czpsZWZ0LTQgZm9jdXM6ei01MCBmb2N1czpiZy1lbWVyYWxkLTUwMCBmb2N1czp0ZXh0LXdoaXRlIGZvY3VzOnB4LTQgZm9jdXM6cHktMiBmb2N1czpyb3VuZGVkLWxnXCJcbiAgICAgID5cbiAgICAgICAgU2tpcCB0byBtYWluIGNvbnRlbnRcbiAgICAgIDwvYT5cblxuICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTgwMCBiZy1zbGF0ZS05MDBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy02eGwgbXgtYXV0byBweC00IHNtOnB4LTYgbGc6cHgtOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPEFjdGl2aXR5IGNsYXNzTmFtZT1cInctNyBoLTcgdGV4dC1lbWVyYWxkLTUwMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlXCI+SGVhcnRiZWF0IE1vbml0b3I8L2gxPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1zbGF0ZS00MDBcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgICAgICAgIHtvbmxpbmVBcHBzfSBvZiB7dG90YWxBcHBzfSBzZXJ2aWNlcyBvbmxpbmVcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2ZldGNoRGF0YX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yLjUgYmctc2xhdGUtODAwIGhvdmVyOmJnLXNsYXRlLTcwMCB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLWVtZXJhbGQtNTAwIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlZnJlc2ggZGF0YVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UmVmcmVzaEN3IGNsYXNzTmFtZT1cInctNSBoLTVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dBZGRBcHAodHJ1ZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJnLWVtZXJhbGQtNjAwIGhvdmVyOmJnLWVtZXJhbGQtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yLjUgcm91bmRlZC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctZW1lcmFsZC01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cInctNCBoLTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIEFkZCBBcHBcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgey8qIE1haW4gQ29udGVudCAqL31cbiAgICAgIDxtYWluIGlkPVwibWFpbi1jb250ZW50XCIgY2xhc3NOYW1lPVwibWF4LXctNnhsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LTggcHktOFwiPlxuICAgICAgICB7LyogVGFibGUgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctc2xhdGUtOTAwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS04MDAgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cInctZnVsbCB0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMCBib3JkZXItYiBib3JkZXItc2xhdGUtNzAwXCI+XG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIj5TdGF0dXM8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+TmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIj5VUkw8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+UG9ydDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIj5VcHRpbWU8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+UmVzcG9uc2U8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzc05hbWU9XCJkaXZpZGUteSBkaXZpZGUtc2xhdGUtODAwXCI+XG4gICAgICAgICAgICAgIHthcHBzLm1hcCgoYXBwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1VwLCB1cHRpbWUsIGxhdGVzdCB9ID0gZ2V0QXBwU3RhdHVzKGFwcC5pZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2FwcC5pZH0gY2xhc3NOYW1lPVwiaG92ZXI6Ymctc2xhdGUtODAwLzUwIHRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHB4LTIuNSBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLWVtZXJhbGQtNTAwLzEwIHRleHQtZW1lcmFsZC00MDAgYm9yZGVyIGJvcmRlci1lbWVyYWxkLTUwMC8yMFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1yZWQtNTAwLzEwIHRleHQtcmVkLTQwMCBib3JkZXIgYm9yZGVyLXJlZC01MDAvMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgdy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsICR7aXNVcCA/IFwiYmctZW1lcmFsZC00MDBcIiA6IFwiYmctcmVkLTQwMFwifWB9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNVcCA/IFwiT25saW5lXCIgOiBcIk9mZmxpbmVcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdGV4dC13aGl0ZVwiPnthcHAubmFtZX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YXBwLmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTUwMFwiPnthcHAuZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIFxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YXBwLnVybH0gXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1lbWVyYWxkLTQwMCBob3Zlcjp0ZXh0LWVtZXJhbGQtMzAwIGhvdmVyOnVuZGVybGluZSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDAgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FwcC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTMwMCBiZy1zbGF0ZS04MDAgcHgtMiBweS0xIHJvdW5kZWRcIj57YXBwLnBvcnR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgdGV4dC1zbSBmb250LW1lZGl1bSAke3VwdGltZSA+PSA5MCA/IFwidGV4dC1lbWVyYWxkLTQwMFwiIDogdXB0aW1lID49IDUwID8gXCJ0ZXh0LXllbGxvdy00MDBcIiA6IFwidGV4dC1yZWQtNDAwXCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dXB0aW1lfSVcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bGF0ZXN0Py5yZXNwb25zZVRpbWUgPyBgJHtsYXRlc3QucmVzcG9uc2VUaW1lfW1zYCA6IFwi4oCUXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjaGVja0FwcChhcHApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y2hlY2tpbmcgPT09IGFwcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLXNsYXRlLTcwMCByb3VuZGVkLWxnIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgQ2hlY2sgJHthcHAubmFtZX0gc3RhdHVzYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlZnJlc2hDdyBjbGFzc05hbWU9e2B3LTQgaC00ICR7Y2hlY2tpbmcgPT09IGFwcC5pZCA/IFwiYW5pbWF0ZS1zcGluXCIgOiBcIlwifWB9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2FwcC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6Ymctc2xhdGUtNzAwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLWVtZXJhbGQtNTAwIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BPcGVuICR7YXBwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBjbGFzc05hbWU9XCJ3LTQgaC00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGVsZXRlQXBwKGFwcC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC1yZWQtNDAwIGhvdmVyOmJnLXJlZC01MDAvMTAgcm91bmRlZC1sZyB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmVkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgRGVsZXRlICR7YXBwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoMiBjbGFzc05hbWU9XCJ3LTQgaC00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG5cbiAgICAgIHsvKiBBZGQgQXBwIE1vZGFsICovfVxuICAgICAge3Nob3dBZGRBcHAgJiYgKFxuICAgICAgICA8ZGl2IFxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2svNjAgYmFja2Ryb3AtYmx1ci1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwIHAtNFwiXG4gICAgICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFkZC1hcHAtdGl0bGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTgwMCBwLTYgdy1mdWxsIG1heC13LW1kIHNoYWRvdy0yeGxcIj5cbiAgICAgICAgICAgIDxoMiBpZD1cImFkZC1hcHAtdGl0bGVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSBtYi02XCI+QWRkIE5ldyBBcHA8L2gyPlxuICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2FkZEFwcH0gY2xhc3NOYW1lPVwic3BhY2UteS01XCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJhcHAtbmFtZVwiIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgTmFtZSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC00MDBcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImFwcC1uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAubmFtZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBuYW1lOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNeSBBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImFwcC1kZXNjXCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImFwcC1kZXNjXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgZGVzY3JpcHRpb246IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLXNsYXRlLTgwMCBib3JkZXIgYm9yZGVyLXNsYXRlLTcwMCByb3VuZGVkLWxnIHB4LTMgcHktMi41IHRleHQtd2hpdGUgcGxhY2Vob2xkZXItc2xhdGUtNTAwIGZvY3VzOmJvcmRlci1lbWVyYWxkLTUwMCBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1lbWVyYWxkLTUwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJyaWVmIGRlc2NyaXB0aW9u4oCmXCJcbiAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImFwcC11cmxcIiBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgVVJMIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTQwMFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYXBwLXVybFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLnVybH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIHVybDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImFwcC1wb3J0XCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIFBvcnQgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yZWQtNDAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhcHAtcG9ydFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLnBvcnR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBwb3J0OiBwYXJzZUludChlLnRhcmdldC52YWx1ZSkgfSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4PVwiNjU1MzVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMyBwdC00XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWRkQXBwKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1zbGF0ZS04MDAgaG92ZXI6Ymctc2xhdGUtNzAwIHRleHQtc2xhdGUtMzAwIHB5LTIuNSByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1zbGF0ZS01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1lbWVyYWxkLTYwMCBob3ZlcjpiZy1lbWVyYWxkLTUwMCB0ZXh0LXdoaXRlIHB5LTIuNSByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCBBcHBcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkFjdGl2aXR5IiwiUGx1cyIsIlJlZnJlc2hDdyIsIlRyYXNoMiIsIkV4dGVybmFsTGluayIsIkhlYXJ0YmVhdE1vbml0b3IiLCJhcHBzIiwic2V0QXBwcyIsInN0YXR1cyIsInNldFN0YXR1cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiY2hlY2tpbmciLCJzZXRDaGVja2luZyIsInNob3dBZGRBcHAiLCJzZXRTaG93QWRkQXBwIiwibmV3QXBwIiwic2V0TmV3QXBwIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidXJsIiwicG9ydCIsInBhdGgiLCJjb21tYW5kIiwiY2F0ZWdvcnkiLCJjb2xvciIsImVuYWJsZWQiLCJmZXRjaERhdGEiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInJlcyIsImZldGNoIiwiZGF0YSIsImpzb24iLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjaGVja0FwcCIsImFwcCIsImlkIiwic3RhcnQiLCJEYXRlIiwibm93IiwibWV0aG9kIiwibW9kZSIsInJlc3BvbnNlVGltZSIsImVudHJ5IiwiYXBwSWQiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFjdGlvbiIsImFkZEFwcCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRlbGV0ZUFwcCIsImNvbmZpcm0iLCJnZXRBcHBTdGF0dXMiLCJhcHBTdGF0dXMiLCJmaWx0ZXIiLCJzIiwibGF0ZXN0IiwibGVuZ3RoIiwiaXNVcCIsInVwdGltZSIsIk1hdGgiLCJyb3VuZCIsInRvdGFsQXBwcyIsIm9ubGluZUFwcHMiLCJkaXYiLCJjbGFzc05hbWUiLCJyb2xlIiwiYXJpYS1saXZlIiwiYSIsImhyZWYiLCJoZWFkZXIiLCJhcmlhLWhpZGRlbiIsImgxIiwicCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwibWFpbiIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwic2NvcGUiLCJzcGFuIiwidGJvZHkiLCJtYXAiLCJ0ZCIsInRhcmdldCIsInJlbCIsImNvZGUiLCJkaXNhYmxlZCIsImFyaWEtbW9kYWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJoMiIsImZvcm0iLCJvblN1Ym1pdCIsImxhYmVsIiwiaHRtbEZvciIsImlucHV0IiwidHlwZSIsInZhbHVlIiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwiYXV0b0NvbXBsZXRlIiwicGFyc2VJbnQiLCJtaW4iLCJtYXgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/page.tsx\n")); /***/ }), diff --git a/.next/static/chunks/webpack.js b/.next/static/chunks/webpack.js index 1a70137c..fceeace5 100644 --- a/.next/static/chunks/webpack.js +++ b/.next/static/chunks/webpack.js @@ -190,7 +190,7 @@ /******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("1122623f302a8ef0") +/******/ __webpack_require__.h = () => ("946779c75e05dcfd") /******/ })(); /******/ /******/ /* webpack/runtime/global */ diff --git a/.next/static/webpack/1122623f302a8ef0.webpack.hot-update.json b/.next/static/webpack/1122623f302a8ef0.webpack.hot-update.json new file mode 100644 index 00000000..0f7bf617 --- /dev/null +++ b/.next/static/webpack/1122623f302a8ef0.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/page","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/.next/static/webpack/app/page.1122623f302a8ef0.hot-update.js b/.next/static/webpack/app/page.1122623f302a8ef0.hot-update.js new file mode 100644 index 00000000..768c78ff --- /dev/null +++ b/.next/static/webpack/app/page.1122623f302a8ef0.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/page",{ + +/***/ "(app-pages-browser)/./src/app/page.tsx": +/*!**************************!*\ + !*** ./src/app/page.tsx ***! + \**************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ HeartbeatMonitor)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/activity.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/refresh-cw.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\nfunction HeartbeatMonitor() {\n _s();\n const [apps, setApps] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [checking, setChecking] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [showAddApp, setShowAddApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [newApp, setNewApp] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"HeartbeatMonitor.useEffect\": ()=>{\n fetchData();\n const interval = setInterval(fetchData, 30000);\n return ({\n \"HeartbeatMonitor.useEffect\": ()=>clearInterval(interval)\n })[\"HeartbeatMonitor.useEffect\"];\n }\n }[\"HeartbeatMonitor.useEffect\"], []);\n async function fetchData() {\n try {\n const res = await fetch(\"/api/monitor\");\n const data = await res.json();\n setApps(data.apps || []);\n setStatus(data.status || []);\n } catch (err) {\n console.error(\"Failed to fetch data:\", err);\n } finally{\n setLoading(false);\n }\n }\n async function checkApp(app) {\n setChecking(app.id);\n try {\n const start = Date.now();\n await fetch(app.url, {\n method: \"HEAD\",\n mode: \"no-cors\"\n });\n const responseTime = Date.now() - start;\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"up\",\n responseTime\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } catch (e) {\n const entry = {\n appId: app.id,\n timestamp: new Date().toISOString(),\n status: \"down\"\n };\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"recordStatus\",\n entry\n })\n });\n fetchData();\n } finally{\n setChecking(null);\n }\n }\n async function addApp(e) {\n e.preventDefault();\n if (!newApp.name || !newApp.url) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"addApp\",\n app: newApp\n })\n });\n setNewApp({\n name: \"\",\n description: \"\",\n url: \"http://localhost:\",\n port: 3000,\n path: \"\",\n command: \"npm run dev\",\n category: \"Other\",\n color: \"#22C55E\",\n enabled: true\n });\n setShowAddApp(false);\n fetchData();\n }\n async function deleteApp(id) {\n if (!confirm(\"Delete this app from monitoring?\")) return;\n await fetch(\"/api/monitor\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n action: \"deleteApp\",\n id\n })\n });\n fetchData();\n }\n function getAppStatus(appId) {\n const appStatus = status.filter((s)=>s.appId === appId);\n const latest = appStatus[appStatus.length - 1];\n const isUp = (latest === null || latest === void 0 ? void 0 : latest.status) === \"up\";\n const uptime = appStatus.length > 0 ? Math.round(appStatus.filter((s)=>s.status === \"up\").length / appStatus.length * 100) : 100;\n return {\n latest,\n isUp,\n uptime\n };\n }\n const totalApps = apps.length;\n const onlineApps = apps.filter((app)=>getAppStatus(app.id).isUp).length;\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 flex items-center justify-center\",\n role: \"status\",\n \"aria-live\": \"polite\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-slate-400\",\n children: \"Loading monitor...\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 155,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 154,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-slate-950 text-slate-100\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#main-content\",\n className: \"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-50 focus:bg-emerald-500 focus:text-white focus:px-4 focus:py-2 focus:rounded-lg\",\n children: \"Skip to main content\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 163,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"border-b border-slate-800 bg-slate-900\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between h-16\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"w-7 h-7 text-emerald-500\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 175,\n columnNumber: 15\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)(\"h1\", {\n className: \"text-xl font-semibold text-white\",\n children: \"Heartbeat Monitor\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 177,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-400\",\n \"aria-live\": \"polite\",\n children: [\n onlineApps,\n \" of \",\n totalApps,\n \" services online\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 178,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 176,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 174,\n columnNumber: 13\n }, this),\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)(\"button\", {\n onClick: fetchData,\n className: \"inline-flex items-center justify-center p-2.5 bg-slate-800 hover:bg-slate-700 text-slate-400 hover:text-white rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Refresh data\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-5 h-5\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 190,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 185,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAddApp(true),\n className: \"inline-flex items-center gap-2 bg-emerald-600 hover:bg-emerald-500 text-white px-4 py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 196,\n columnNumber: 17\n }, this),\n \"Add App\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 192,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 173,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 172,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 171,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n id: \"main-content\",\n className: \"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"w-full text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"bg-slate-800 border-b border-slate-700\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 211,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Name\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 212,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"URL\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 213,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Port\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 214,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Uptime\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 215,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: \"Response\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 216,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n scope: \"col\",\n className: \"px-4 py-3 text-xs font-semibold text-slate-400 uppercase tracking-wider\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 218,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 217,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 210,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 209,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-slate-800\",\n children: apps.map((app)=>{\n const { isUp, uptime, latest } = getAppStatus(app.id);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"hover:bg-slate-800/50 transition-colors\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium \".concat(isUp ? \"bg-emerald-500/10 text-emerald-400 border border-emerald-500/20\" : \"bg-red-500/10 text-red-400 border border-red-500/20\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"w-1.5 h-1.5 rounded-full \".concat(isUp ? \"bg-emerald-400\" : \"bg-red-400\"),\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 236,\n columnNumber: 25\n }, this),\n isUp ? \"Online\" : \"Offline\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 229,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 228,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__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)(\"p\", {\n className: \"font-medium text-white\",\n children: app.name\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 242,\n columnNumber: 25\n }, this),\n app.description && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-slate-500\",\n children: app.description\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 244,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 241,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 240,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-emerald-400 hover:text-emerald-300 hover:underline text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900 rounded\",\n children: app.url\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 249,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 248,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"code\", {\n className: \"text-sm text-slate-300 bg-slate-800 px-2 py-1 rounded\",\n children: app.port\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 259,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 258,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium \".concat(uptime >= 90 ? \"text-emerald-400\" : uptime >= 50 ? \"text-yellow-400\" : \"text-red-400\"),\n children: [\n uptime,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 262,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 261,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-slate-300\",\n children: (latest === null || latest === void 0 ? void 0 : latest.responseTime) ? \"\".concat(latest.responseTime, \"ms\") : \"—\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 266,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-4\",\n children: /*#__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)(\"button\", {\n onClick: ()=>checkApp(app),\n disabled: checking === app.id,\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-white hover:bg-slate-700 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900 disabled:opacity-50 disabled:cursor-not-allowed\",\n \"aria-label\": \"Check \".concat(app.name, \" status\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"w-4 h-4 \".concat(checking === app.id ? \"animate-spin\" : \"\"),\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 279,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 273,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: app.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-white hover:bg-slate-700 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Open \".concat(app.name),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 288,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 281,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>deleteApp(app.id),\n className: \"inline-flex items-center justify-center p-2 text-slate-400 hover:text-red-400 hover:bg-red-500/10 rounded-lg transition-colors focus-visible:ring-2 focus-visible:ring-red-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n \"aria-label\": \"Delete \".concat(app.name),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Activity_ExternalLink_Plus_RefreshCw_Trash2_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"w-4 h-4\",\n \"aria-hidden\": \"true\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 295,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 290,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 272,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 271,\n columnNumber: 21\n }, this)\n ]\n }, app.id, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 227,\n columnNumber: 19\n }, this);\n })\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 222,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 208,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 207,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 205,\n columnNumber: 7\n }, this),\n showAddApp && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4\",\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-labelledby\": \"add-app-title\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-slate-900 rounded-lg border border-slate-800 p-6 w-full max-w-md shadow-2xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n id: \"add-app-title\",\n className: \"text-xl font-semibold text-white mb-6\",\n children: \"Add New App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 316,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: addApp,\n className: \"space-y-5\",\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 htmlFor: \"app-name\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"Name \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 320,\n columnNumber: 24\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 319,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-name\",\n type: \"text\",\n value: newApp.name,\n onChange: (e)=>setNewApp({\n ...newApp,\n name: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"My Application\",\n required: true,\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 322,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 318,\n columnNumber: 15\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)(\"label\", {\n htmlFor: \"app-desc\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: \"Description\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 334,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-desc\",\n type: \"text\",\n value: newApp.description,\n onChange: (e)=>setNewApp({\n ...newApp,\n description: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"Brief description…\",\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 337,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 333,\n columnNumber: 15\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 children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"app-url\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"URL \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 350,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 349,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-url\",\n type: \"url\",\n value: newApp.url,\n onChange: (e)=>setNewApp({\n ...newApp,\n url: e.target.value\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n placeholder: \"http://localhost:3000\",\n required: true,\n autoComplete: \"off\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 352,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 348,\n columnNumber: 17\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)(\"label\", {\n htmlFor: \"app-port\",\n className: \"block text-sm font-medium text-slate-400 mb-2\",\n children: [\n \"Port \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-400\",\n children: \"*\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 365,\n columnNumber: 26\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 364,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n id: \"app-port\",\n type: \"number\",\n value: newApp.port,\n onChange: (e)=>setNewApp({\n ...newApp,\n port: parseInt(e.target.value)\n }),\n className: \"w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors\",\n required: true,\n min: \"1\",\n max: \"65535\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 367,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 363,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 347,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-3 pt-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>setShowAddApp(false),\n className: \"flex-1 bg-slate-800 hover:bg-slate-700 text-slate-300 py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-slate-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 380,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"flex-1 bg-emerald-600 hover:bg-emerald-500 text-white py-2.5 rounded-lg font-medium transition-colors focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-900\",\n children: \"Add App\"\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 387,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 379,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 317,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 315,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 309,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx\",\n lineNumber: 161,\n columnNumber: 5\n }, this);\n}\n_s(HeartbeatMonitor, \"P2SiA3jWi2qbhDtBgJbGhzf0uqY=\");\n_c = HeartbeatMonitor;\nvar _c;\n$RefreshReg$(_c, \"HeartbeatMonitor\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7O3NEQUdELDhEQUFDUzs0Q0FDQ3lCLE1BQUs7NENBQ0xsQyxXQUFVO3NEQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVqQjtHQXRYd0JyRTtLQUFBQSIsInNvdXJjZXMiOlsiL1VzZXJzL21hdHRicnVjZS9Eb2N1bWVudHMvUHJvamVjdHMvT3BlbkNsYXcvV2ViL2hlYXJ0YmVhdC1tb25pdG9yL3NyYy9hcHAvcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGl2aXR5LCBQbHVzLCBSZWZyZXNoQ3csIFRyYXNoMiwgRXh0ZXJuYWxMaW5rIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuXG5pbnRlcmZhY2UgQXBwIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFN0YXR1c0VudHJ5IHtcbiAgYXBwSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHN0YXR1czogXCJ1cFwiIHwgXCJkb3duXCI7XG4gIHJlc3BvbnNlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSGVhcnRiZWF0TW9uaXRvcigpIHtcbiAgY29uc3QgW2FwcHMsIHNldEFwcHNdID0gdXNlU3RhdGU8QXBwW10+KFtdKTtcbiAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlPFN0YXR1c0VudHJ5W10+KFtdKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtjaGVja2luZywgc2V0Q2hlY2tpbmddID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzaG93QWRkQXBwLCBzZXRTaG93QWRkQXBwXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW25ld0FwcCwgc2V0TmV3QXBwXSA9IHVzZVN0YXRlPFBhcnRpYWw8QXBwPj4oe1xuICAgIG5hbWU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgcG9ydDogMzAwMCxcbiAgICBwYXRoOiBcIlwiLFxuICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICBjYXRlZ29yeTogXCJPdGhlclwiLFxuICAgIGNvbG9yOiBcIiMyMkM1NUVcIixcbiAgICBlbmFibGVkOiB0cnVlLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoRGF0YSgpO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoZmV0Y2hEYXRhLCAzMDAwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9LCBbXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgc2V0QXBwcyhkYXRhLmFwcHMgfHwgW10pO1xuICAgICAgc2V0U3RhdHVzKGRhdGEuc3RhdHVzIHx8IFtdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggZGF0YTpcIiwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2hlY2tBcHAoYXBwOiBBcHApIHtcbiAgICBzZXRDaGVja2luZyhhcHAuaWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICBhd2FpdCBmZXRjaChhcHAudXJsLCB7IG1ldGhvZDogXCJIRUFEXCIsIG1vZGU6IFwibm8tY29yc1wiIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2VUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgXG4gICAgICBjb25zdCBlbnRyeTogU3RhdHVzRW50cnkgPSB7XG4gICAgICAgIGFwcElkOiBhcHAuaWQsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6IFwidXBcIixcbiAgICAgICAgcmVzcG9uc2VUaW1lLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgZmV0Y2goXCIvYXBpL21vbml0b3JcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgYWN0aW9uOiBcInJlY29yZFN0YXR1c1wiLCBlbnRyeSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBmZXRjaERhdGEoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IGVudHJ5OiBTdGF0dXNFbnRyeSA9IHtcbiAgICAgICAgYXBwSWQ6IGFwcC5pZCxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXR1czogXCJkb3duXCIsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmZXRjaChcIi9hcGkvbW9uaXRvclwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBhY3Rpb246IFwicmVjb3JkU3RhdHVzXCIsIGVudHJ5IH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGZldGNoRGF0YSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDaGVja2luZyhudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRBcHAoZTogUmVhY3QuRm9ybUV2ZW50KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghbmV3QXBwLm5hbWUgfHwgIW5ld0FwcC51cmwpIHJldHVybjtcblxuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJhZGRBcHBcIiwgYXBwOiBuZXdBcHAgfSksXG4gICAgfSk7XG5cbiAgICBzZXROZXdBcHAoe1xuICAgICAgbmFtZTogXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIsXG4gICAgICBwb3J0OiAzMDAwLFxuICAgICAgcGF0aDogXCJcIixcbiAgICAgIGNvbW1hbmQ6IFwibnBtIHJ1biBkZXZcIixcbiAgICAgIGNhdGVnb3J5OiBcIk90aGVyXCIsXG4gICAgICBjb2xvcjogXCIjMjJDNTVFXCIsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuICAgIHNldFNob3dBZGRBcHAoZmFsc2UpO1xuICAgIGZldGNoRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQXBwKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbmZpcm0oXCJEZWxldGUgdGhpcyBhcHAgZnJvbSBtb25pdG9yaW5nP1wiKSkgcmV0dXJuO1xuICAgIGF3YWl0IGZldGNoKFwiL2FwaS9tb25pdG9yXCIsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogXCJkZWxldGVBcHBcIiwgaWQgfSksXG4gICAgfSk7XG4gICAgZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBcHBTdGF0dXMoYXBwSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFwcFN0YXR1cyA9IHN0YXR1cy5maWx0ZXIoKHMpID0+IHMuYXBwSWQgPT09IGFwcElkKTtcbiAgICBjb25zdCBsYXRlc3QgPSBhcHBTdGF0dXNbYXBwU3RhdHVzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGlzVXAgPSBsYXRlc3Q/LnN0YXR1cyA9PT0gXCJ1cFwiO1xuICAgIGNvbnN0IHVwdGltZSA9IGFwcFN0YXR1cy5sZW5ndGggPiAwIFxuICAgICAgPyBNYXRoLnJvdW5kKChhcHBTdGF0dXMuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09IFwidXBcIikubGVuZ3RoIC8gYXBwU3RhdHVzLmxlbmd0aCkgKiAxMDApXG4gICAgICA6IDEwMDtcbiAgICBcbiAgICByZXR1cm4geyBsYXRlc3QsIGlzVXAsIHVwdGltZSB9O1xuICB9XG5cbiAgY29uc3QgdG90YWxBcHBzID0gYXBwcy5sZW5ndGg7XG4gIGNvbnN0IG9ubGluZUFwcHMgPSBhcHBzLmZpbHRlcigoYXBwKSA9PiBnZXRBcHBTdGF0dXMoYXBwLmlkKS5pc1VwKS5sZW5ndGg7XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctc2xhdGUtOTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwXCI+TG9hZGluZyBtb25pdG9yLi4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1zbGF0ZS05NTAgdGV4dC1zbGF0ZS0xMDBcIj5cbiAgICAgIHsvKiBTa2lwIExpbmsgZm9yIEFjY2Vzc2liaWxpdHkgKi99XG4gICAgICA8YSBcbiAgICAgICAgaHJlZj1cIiNtYWluLWNvbnRlbnRcIiBcbiAgICAgICAgY2xhc3NOYW1lPVwic3Itb25seSBmb2N1czpub3Qtc3Itb25seSBmb2N1czphYnNvbHV0ZSBmb2N1czp0b3AtNCBmb2N1czpsZWZ0LTQgZm9jdXM6ei01MCBmb2N1czpiZy1lbWVyYWxkLTUwMCBmb2N1czp0ZXh0LXdoaXRlIGZvY3VzOnB4LTQgZm9jdXM6cHktMiBmb2N1czpyb3VuZGVkLWxnXCJcbiAgICAgID5cbiAgICAgICAgU2tpcCB0byBtYWluIGNvbnRlbnRcbiAgICAgIDwvYT5cblxuICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXNsYXRlLTgwMCBiZy1zbGF0ZS05MDBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy02eGwgbXgtYXV0byBweC00IHNtOnB4LTYgbGc6cHgtOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGgtMTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPEFjdGl2aXR5IGNsYXNzTmFtZT1cInctNyBoLTcgdGV4dC1lbWVyYWxkLTUwMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlXCI+SGVhcnRiZWF0IE1vbml0b3I8L2gxPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1zbGF0ZS00MDBcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgICAgICAgIHtvbmxpbmVBcHBzfSBvZiB7dG90YWxBcHBzfSBzZXJ2aWNlcyBvbmxpbmVcbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2ZldGNoRGF0YX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yLjUgYmctc2xhdGUtODAwIGhvdmVyOmJnLXNsYXRlLTcwMCB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLWVtZXJhbGQtNTAwIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlZnJlc2ggZGF0YVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UmVmcmVzaEN3IGNsYXNzTmFtZT1cInctNSBoLTVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dBZGRBcHAodHJ1ZSl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJnLWVtZXJhbGQtNjAwIGhvdmVyOmJnLWVtZXJhbGQtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yLjUgcm91bmRlZC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctZW1lcmFsZC01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cInctNCBoLTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIEFkZCBBcHBcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgey8qIE1haW4gQ29udGVudCAqL31cbiAgICAgIDxtYWluIGlkPVwibWFpbi1jb250ZW50XCIgY2xhc3NOYW1lPVwibWF4LXctNnhsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LTggcHktOFwiPlxuICAgICAgICB7LyogVGFibGUgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctc2xhdGUtOTAwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS04MDAgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cInctZnVsbCB0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMCBib3JkZXItYiBib3JkZXItc2xhdGUtNzAwXCI+XG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIj5TdGF0dXM8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+TmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIj5VUkw8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+UG9ydDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LXNsYXRlLTQwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIj5VcHRpbWU8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+UmVzcG9uc2U8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzTmFtZT1cInB4LTQgcHktMyB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdGV4dC1zbGF0ZS00MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzc05hbWU9XCJkaXZpZGUteSBkaXZpZGUtc2xhdGUtODAwXCI+XG4gICAgICAgICAgICAgIHthcHBzLm1hcCgoYXBwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1VwLCB1cHRpbWUsIGxhdGVzdCB9ID0gZ2V0QXBwU3RhdHVzKGFwcC5pZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2FwcC5pZH0gY2xhc3NOYW1lPVwiaG92ZXI6Ymctc2xhdGUtODAwLzUwIHRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHB4LTIuNSBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJnLWVtZXJhbGQtNTAwLzEwIHRleHQtZW1lcmFsZC00MDAgYm9yZGVyIGJvcmRlci1lbWVyYWxkLTUwMC8yMFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJiZy1yZWQtNTAwLzEwIHRleHQtcmVkLTQwMCBib3JkZXIgYm9yZGVyLXJlZC01MDAvMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgdy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsICR7aXNVcCA/IFwiYmctZW1lcmFsZC00MDBcIiA6IFwiYmctcmVkLTQwMFwifWB9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNVcCA/IFwiT25saW5lXCIgOiBcIk9mZmxpbmVcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdGV4dC13aGl0ZVwiPnthcHAubmFtZX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YXBwLmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTUwMFwiPnthcHAuZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIFxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YXBwLnVybH0gXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1lbWVyYWxkLTQwMCBob3Zlcjp0ZXh0LWVtZXJhbGQtMzAwIGhvdmVyOnVuZGVybGluZSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDAgcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FwcC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTMwMCBiZy1zbGF0ZS04MDAgcHgtMiBweS0xIHJvdW5kZWRcIj57YXBwLnBvcnR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgdGV4dC1zbSBmb250LW1lZGl1bSAke3VwdGltZSA+PSA5MCA/IFwidGV4dC1lbWVyYWxkLTQwMFwiIDogdXB0aW1lID49IDUwID8gXCJ0ZXh0LXllbGxvdy00MDBcIiA6IFwidGV4dC1yZWQtNDAwXCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dXB0aW1lfSVcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtMzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bGF0ZXN0Py5yZXNwb25zZVRpbWUgPyBgJHtsYXRlc3QucmVzcG9uc2VUaW1lfW1zYCA6IFwi4oCUXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjaGVja0FwcChhcHApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y2hlY2tpbmcgPT09IGFwcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiB0ZXh0LXNsYXRlLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLXNsYXRlLTcwMCByb3VuZGVkLWxnIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgQ2hlY2sgJHthcHAubmFtZX0gc3RhdHVzYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlZnJlc2hDdyBjbGFzc05hbWU9e2B3LTQgaC00ICR7Y2hlY2tpbmcgPT09IGFwcC5pZCA/IFwiYW5pbWF0ZS1zcGluXCIgOiBcIlwifWB9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2FwcC51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC0yIHRleHQtc2xhdGUtNDAwIGhvdmVyOnRleHQtd2hpdGUgaG92ZXI6Ymctc2xhdGUtNzAwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLWVtZXJhbGQtNTAwIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LXNsYXRlLTkwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BPcGVuICR7YXBwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBjbGFzc05hbWU9XCJ3LTQgaC00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGVsZXRlQXBwKGFwcC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgdGV4dC1zbGF0ZS00MDAgaG92ZXI6dGV4dC1yZWQtNDAwIGhvdmVyOmJnLXJlZC01MDAvMTAgcm91bmRlZC1sZyB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmVkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgRGVsZXRlICR7YXBwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoMiBjbGFzc05hbWU9XCJ3LTQgaC00XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21haW4+XG5cbiAgICAgIHsvKiBBZGQgQXBwIE1vZGFsICovfVxuICAgICAge3Nob3dBZGRBcHAgJiYgKFxuICAgICAgICA8ZGl2IFxuICAgICAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2svNjAgYmFja2Ryb3AtYmx1ci1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB6LTUwIHAtNFwiXG4gICAgICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImFkZC1hcHAtdGl0bGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTgwMCBwLTYgdy1mdWxsIG1heC13LW1kIHNoYWRvdy0yeGxcIj5cbiAgICAgICAgICAgIDxoMiBpZD1cImFkZC1hcHAtdGl0bGVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSBtYi02XCI+QWRkIE5ldyBBcHA8L2gyPlxuICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2FkZEFwcH0gY2xhc3NOYW1lPVwic3BhY2UteS01XCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJhcHAtbmFtZVwiIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1zbGF0ZS00MDAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgTmFtZSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC00MDBcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImFwcC1uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAubmFtZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBuYW1lOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNeSBBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImFwcC1kZXNjXCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImFwcC1kZXNjXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuZXdBcHAuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5ld0FwcCh7IC4uLm5ld0FwcCwgZGVzY3JpcHRpb246IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGJnLXNsYXRlLTgwMCBib3JkZXIgYm9yZGVyLXNsYXRlLTcwMCByb3VuZGVkLWxnIHB4LTMgcHktMi41IHRleHQtd2hpdGUgcGxhY2Vob2xkZXItc2xhdGUtNTAwIGZvY3VzOmJvcmRlci1lbWVyYWxkLTUwMCBmb2N1czpyaW5nLTEgZm9jdXM6cmluZy1lbWVyYWxkLTUwMCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJyaWVmIGRlc2NyaXB0aW9u4oCmXCJcbiAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImFwcC11cmxcIiBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNDAwIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgVVJMIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTQwMFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYXBwLXVybFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLnVybH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXROZXdBcHAoeyAuLi5uZXdBcHAsIHVybDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImFwcC1wb3J0XCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTQwMCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIFBvcnQgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yZWQtNDAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhcHAtcG9ydFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bmV3QXBwLnBvcnR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0TmV3QXBwKHsgLi4ubmV3QXBwLCBwb3J0OiBwYXJzZUludChlLnRhcmdldC52YWx1ZSkgfSl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBiZy1zbGF0ZS04MDAgYm9yZGVyIGJvcmRlci1zbGF0ZS03MDAgcm91bmRlZC1sZyBweC0zIHB5LTIuNSB0ZXh0LXdoaXRlIHBsYWNlaG9sZGVyLXNsYXRlLTUwMCBmb2N1czpib3JkZXItZW1lcmFsZC01MDAgZm9jdXM6cmluZy0xIGZvY3VzOnJpbmctZW1lcmFsZC01MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4PVwiNjU1MzVcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMyBwdC00XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWRkQXBwKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1zbGF0ZS04MDAgaG92ZXI6Ymctc2xhdGUtNzAwIHRleHQtc2xhdGUtMzAwIHB5LTIuNSByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1zbGF0ZS01MDAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtc2xhdGUtOTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1lbWVyYWxkLTYwMCBob3ZlcjpiZy1lbWVyYWxkLTUwMCB0ZXh0LXdoaXRlIHB5LTIuNSByb3VuZGVkLWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1lbWVyYWxkLTUwMCBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1zbGF0ZS05MDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEFkZCBBcHBcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkFjdGl2aXR5IiwiUGx1cyIsIlJlZnJlc2hDdyIsIlRyYXNoMiIsIkV4dGVybmFsTGluayIsIkhlYXJ0YmVhdE1vbml0b3IiLCJhcHBzIiwic2V0QXBwcyIsInN0YXR1cyIsInNldFN0YXR1cyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiY2hlY2tpbmciLCJzZXRDaGVja2luZyIsInNob3dBZGRBcHAiLCJzZXRTaG93QWRkQXBwIiwibmV3QXBwIiwic2V0TmV3QXBwIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidXJsIiwicG9ydCIsInBhdGgiLCJjb21tYW5kIiwiY2F0ZWdvcnkiLCJjb2xvciIsImVuYWJsZWQiLCJmZXRjaERhdGEiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInJlcyIsImZldGNoIiwiZGF0YSIsImpzb24iLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjaGVja0FwcCIsImFwcCIsImlkIiwic3RhcnQiLCJEYXRlIiwibm93IiwibWV0aG9kIiwibW9kZSIsInJlc3BvbnNlVGltZSIsImVudHJ5IiwiYXBwSWQiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFjdGlvbiIsImFkZEFwcCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRlbGV0ZUFwcCIsImNvbmZpcm0iLCJnZXRBcHBTdGF0dXMiLCJhcHBTdGF0dXMiLCJmaWx0ZXIiLCJzIiwibGF0ZXN0IiwibGVuZ3RoIiwiaXNVcCIsInVwdGltZSIsIk1hdGgiLCJyb3VuZCIsInRvdGFsQXBwcyIsIm9ubGluZUFwcHMiLCJkaXYiLCJjbGFzc05hbWUiLCJyb2xlIiwiYXJpYS1saXZlIiwiYSIsImhyZWYiLCJoZWFkZXIiLCJhcmlhLWhpZGRlbiIsImgxIiwicCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwibWFpbiIsInRhYmxlIiwidGhlYWQiLCJ0ciIsInRoIiwic2NvcGUiLCJzcGFuIiwidGJvZHkiLCJtYXAiLCJ0ZCIsInRhcmdldCIsInJlbCIsImNvZGUiLCJkaXNhYmxlZCIsImFyaWEtbW9kYWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJoMiIsImZvcm0iLCJvblN1Ym1pdCIsImxhYmVsIiwiaHRtbEZvciIsImlucHV0IiwidHlwZSIsInZhbHVlIiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwiYXV0b0NvbXBsZXRlIiwicGFyc2VJbnQiLCJtaW4iLCJtYXgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/app/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/.next/static/webpack/webpack.1122623f302a8ef0.hot-update.js b/.next/static/webpack/webpack.1122623f302a8ef0.hot-update.js new file mode 100644 index 00000000..3fef07fb --- /dev/null +++ b/.next/static/webpack/webpack.1122623f302a8ef0.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("946779c75e05dcfd") +/******/ })(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/.next/trace b/.next/trace index b5ed1981..00f3b9eb 100644 --- a/.next/trace +++ b/.next/trace @@ -9,3 +9,6 @@ [{"name":"optimize","duration":839,"timestamp":59404088944,"id":679,"parentId":677,"tags":{},"startTime":1771443571889,"traceId":"0fd53edc45d38466"},{"name":"module-hash","duration":527,"timestamp":59404090862,"id":684,"parentId":677,"tags":{},"startTime":1771443571891,"traceId":"0fd53edc45d38466"},{"name":"code-generation","duration":2040,"timestamp":59404091395,"id":685,"parentId":677,"tags":{},"startTime":1771443571891,"traceId":"0fd53edc45d38466"},{"name":"hash","duration":2828,"timestamp":59404094888,"id":686,"parentId":677,"tags":{},"startTime":1771443571895,"traceId":"0fd53edc45d38466"},{"name":"code-generation-jobs","duration":61,"timestamp":59404097716,"id":687,"parentId":677,"tags":{},"startTime":1771443571898,"traceId":"0fd53edc45d38466"},{"name":"module-assets","duration":58,"timestamp":59404097772,"id":688,"parentId":677,"tags":{},"startTime":1771443571898,"traceId":"0fd53edc45d38466"},{"name":"create-chunk-assets","duration":5095,"timestamp":59404097833,"id":689,"parentId":677,"tags":{},"startTime":1771443571898,"traceId":"0fd53edc45d38466"},{"name":"NextJsBuildManifest-generateClientManifest","duration":167,"timestamp":59404103980,"id":691,"parentId":665,"tags":{},"startTime":1771443571904,"traceId":"0fd53edc45d38466"},{"name":"NextJsBuildManifest-createassets","duration":354,"timestamp":59404103794,"id":690,"parentId":665,"tags":{},"startTime":1771443571904,"traceId":"0fd53edc45d38466"},{"name":"seal","duration":20126,"timestamp":59404085681,"id":677,"parentId":665,"tags":{},"startTime":1771443571886,"traceId":"0fd53edc45d38466"},{"name":"webpack-compilation","duration":88115,"timestamp":59404017714,"id":665,"parentId":631,"tags":{"name":"client"},"startTime":1771443571818,"traceId":"0fd53edc45d38466"},{"name":"emit","duration":2931,"timestamp":59404105842,"id":692,"parentId":631,"tags":{},"startTime":1771443571906,"traceId":"0fd53edc45d38466"},{"name":"webpack-invalidated-client","duration":266503,"timestamp":59403843373,"id":631,"parentId":3,"tags":{"trigger":"src/app/page.tsx"},"startTime":1771443571643,"traceId":"0fd53edc45d38466"}] [{"name":"client-success","duration":2,"timestamp":59404113892,"id":693,"parentId":3,"tags":{},"startTime":1771443571914,"traceId":"0fd53edc45d38466"},{"name":"client-hmr-latency","duration":284000,"timestamp":59403844137,"id":694,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/lucide-react/dist/esm/icons/circle-check.js","[project]/node_modules/lucide-react/dist/esm/icons/circle-x.js","[project]/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js","[project]/node_modules/lucide-react/dist/esm/icons/server.js","[project]/node_modules/lucide-react/dist/esm/icons/settings.js","[project]/node_modules/lucide-react/dist/esm/icons/trending-up.js","[project]/node_modules/recharts/es6/cartesian/Area.js","[project]/node_modules/recharts/es6/cartesian/CartesianGrid.js","[project]/node_modules/recharts/es6/chart/AreaChart.js","[project]/node_modules/recharts/es6/cartesian/Line.js","[project]/node_modules/recharts/es6/chart/LineChart.js","[project]/src/app/page.tsx","[project]/node_modules/lucide-react/dist/esm/icons/layout-grid.js","[project]/node_modules/lucide-react/dist/esm/icons/list.js"],"page":"/","isPageHidden":true},"startTime":1771443571929,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":168,"timestamp":59404129821,"id":696,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443571930,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":92,"timestamp":59404130169,"id":697,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443571930,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":21204,"timestamp":59404129477,"id":695,"tags":{"url":"/api/monitor"},"startTime":1771443571929,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59404150701,"id":698,"parentId":695,"tags":{"url":"/api/monitor","memory.rss":"863256576","memory.heapUsed":"341628784","memory.heapTotal":"402522112"},"startTime":1771443571951,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":923,"timestamp":59420324921,"id":700,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443588125,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":564,"timestamp":59420326299,"id":701,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443588126,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":108513,"timestamp":59420323936,"id":699,"tags":{"url":"/"},"startTime":1771443588124,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59420432482,"id":702,"parentId":699,"tags":{"url":"/","memory.rss":"804208640","memory.heapUsed":"332341000","memory.heapTotal":"343179264"},"startTime":1771443588232,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":135,"timestamp":59420432972,"id":704,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443588233,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":99,"timestamp":59420433282,"id":705,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443588233,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1687,"timestamp":59420432659,"id":703,"tags":{"url":"/api/monitor"},"startTime":1771443588233,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59420434355,"id":706,"parentId":703,"tags":{"url":"/api/monitor","memory.rss":"804208640","memory.heapUsed":"332797464","memory.heapTotal":"343179264"},"startTime":1771443588234,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":137,"timestamp":59420437778,"id":708,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443588238,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":115,"timestamp":59420438073,"id":709,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443588238,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1448,"timestamp":59420437409,"id":707,"tags":{"url":"/api/monitor"},"startTime":1771443588237,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59420438869,"id":710,"parentId":707,"tags":{"url":"/api/monitor","memory.rss":"804225024","memory.heapUsed":"333226360","memory.heapTotal":"343179264"},"startTime":1771443588239,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":4957,"timestamp":59423904572,"id":712,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443591704,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1168,"timestamp":59423912536,"id":713,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443591712,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":28424,"timestamp":59423902561,"id":711,"tags":{"url":"/"},"startTime":1771443591702,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59423931025,"id":714,"parentId":711,"tags":{"url":"/","memory.rss":"797786112","memory.heapUsed":"326741672","memory.heapTotal":"336101376"},"startTime":1771443591731,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":196,"timestamp":59424128899,"id":716,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443591929,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":139,"timestamp":59424129373,"id":717,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443591929,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2401,"timestamp":59424128086,"id":715,"tags":{"url":"/api/monitor"},"startTime":1771443591928,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59424130503,"id":718,"parentId":715,"tags":{"url":"/api/monitor","memory.rss":"797786112","memory.heapUsed":"326910984","memory.heapTotal":"336101376"},"startTime":1771443591930,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59424130545,"id":719,"parentId":3,"tags":{},"startTime":1771443591930,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":629,"timestamp":59428170885,"id":721,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443595971,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":514,"timestamp":59428172306,"id":722,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443595972,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":7864,"timestamp":59428169337,"id":720,"tags":{"url":"/api/monitor"},"startTime":1771443595969,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59428177265,"id":723,"parentId":720,"tags":{"url":"/api/monitor","memory.rss":"797786112","memory.heapUsed":"327352272","memory.heapTotal":"336101376"},"startTime":1771443595977,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":274,"timestamp":59428935830,"id":725,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443596736,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":177,"timestamp":59428936410,"id":726,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443596736,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2709,"timestamp":59428935243,"id":724,"tags":{"url":"/api/monitor"},"startTime":1771443596735,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59428937976,"id":727,"parentId":724,"tags":{"url":"/api/monitor","memory.rss":"797786112","memory.heapUsed":"327027696","memory.heapTotal":"335052800"},"startTime":1771443596738,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":927,"timestamp":59455005700,"id":729,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443622806,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":556,"timestamp":59455007634,"id":730,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443622807,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":9542,"timestamp":59455003891,"id":728,"tags":{"url":"/api/monitor"},"startTime":1771443622804,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59455013484,"id":731,"parentId":728,"tags":{"url":"/api/monitor","memory.rss":"732594176","memory.heapUsed":"327525560","memory.heapTotal":"335052800"},"startTime":1771443622813,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":607,"timestamp":59485006456,"id":733,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443652806,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":424,"timestamp":59485007956,"id":734,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443652808,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":9354,"timestamp":59485004868,"id":732,"tags":{"url":"/api/monitor"},"startTime":1771443652805,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59485014262,"id":735,"parentId":732,"tags":{"url":"/api/monitor","memory.rss":"797245440","memory.heapUsed":"273333288","memory.heapTotal":"277741568"},"startTime":1771443652814,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":754,"timestamp":59515006913,"id":737,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443682807,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":443,"timestamp":59515008277,"id":738,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443682808,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":6645,"timestamp":59515005242,"id":736,"tags":{"url":"/api/monitor"},"startTime":1771443682805,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59515011939,"id":739,"parentId":736,"tags":{"url":"/api/monitor","memory.rss":"662536192","memory.heapUsed":"273069688","memory.heapTotal":"278528000"},"startTime":1771443682812,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":802,"timestamp":59522972223,"id":741,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443690772,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":400,"timestamp":59522973323,"id":742,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443690773,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":11271,"timestamp":59522971639,"id":740,"tags":{"url":"/"},"startTime":1771443690771,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59522982936,"id":743,"parentId":740,"tags":{"url":"/","memory.rss":"663306240","memory.heapUsed":"273382296","memory.heapTotal":"278790144"},"startTime":1771443690783,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":585,"timestamp":59545005255,"id":745,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443712805,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":315,"timestamp":59545006444,"id":746,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443712806,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":5424,"timestamp":59545003774,"id":744,"tags":{"url":"/api/monitor"},"startTime":1771443712804,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59545009256,"id":747,"parentId":744,"tags":{"url":"/api/monitor","memory.rss":"663306240","memory.heapUsed":"273820584","memory.heapTotal":"279314432"},"startTime":1771443712809,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":989,"timestamp":59547336775,"id":749,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443715137,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":653,"timestamp":59547338365,"id":750,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771443715138,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":14469,"timestamp":59547335649,"id":748,"tags":{"url":"/"},"startTime":1771443715135,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59547350147,"id":751,"parentId":748,"tags":{"url":"/","memory.rss":"663601152","memory.heapUsed":"273803768","memory.heapTotal":"278003712"},"startTime":1771443715150,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":853,"timestamp":59575006915,"id":753,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443742807,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":2173,"timestamp":59575011119,"id":754,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443742811,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":13793,"timestamp":59575004239,"id":752,"tags":{"url":"/api/monitor"},"startTime":1771443742804,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59575018150,"id":755,"parentId":752,"tags":{"url":"/api/monitor","memory.rss":"663666688","memory.heapUsed":"273527064","memory.heapTotal":"277741568"},"startTime":1771443742818,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":890,"timestamp":59605008778,"id":757,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443772809,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":433,"timestamp":59605010376,"id":758,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443772810,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":6901,"timestamp":59605006703,"id":756,"tags":{"url":"/api/monitor"},"startTime":1771443772806,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59605013694,"id":759,"parentId":756,"tags":{"url":"/api/monitor","memory.rss":"663666688","memory.heapUsed":"273966960","memory.heapTotal":"278003712"},"startTime":1771443772813,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":533,"timestamp":59640015750,"id":761,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443807815,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":317,"timestamp":59640016947,"id":762,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443807817,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":7216,"timestamp":59640013226,"id":760,"tags":{"url":"/api/monitor"},"startTime":1771443807813,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59640020489,"id":763,"parentId":760,"tags":{"url":"/api/monitor","memory.rss":"663666688","memory.heapUsed":"273660936","memory.heapTotal":"277741568"},"startTime":1771443807820,"traceId":"0fd53edc45d38466"},{"name":"build-module-tsx","duration":2817,"timestamp":59650138154,"id":770,"parentId":766,"tags":{"name":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx","layer":"rsc"},"startTime":1771443817938,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":11911,"timestamp":59650129859,"id":768,"parentId":767,"tags":{"request":"next-app-loader?name=app%2Fapi%2Fmonitor%2Froute&page=%2Fapi%2Fmonitor%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fmonitor%2Froute.ts&appDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1771443817930,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":12796,"timestamp":59650129907,"id":769,"parentId":767,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1771443817930,"traceId":"0fd53edc45d38466"},{"name":"build-module-tsx","duration":7105,"timestamp":59650147848,"id":781,"parentId":766,"tags":{"name":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx","layer":"ssr"},"startTime":1771443817948,"traceId":"0fd53edc45d38466"},{"name":"build-module-js","duration":4121,"timestamp":59650166753,"id":782,"parentId":781,"tags":{"name":"__barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"ssr"},"startTime":1771443817966,"traceId":"0fd53edc45d38466"},{"name":"make","duration":42781,"timestamp":59650128799,"id":767,"parentId":766,"tags":{},"startTime":1771443817929,"traceId":"0fd53edc45d38466"},{"name":"chunk-graph","duration":1058,"timestamp":59650173132,"id":784,"parentId":783,"tags":{},"startTime":1771443817973,"traceId":"0fd53edc45d38466"},{"name":"optimize-modules","duration":4,"timestamp":59650174214,"id":786,"parentId":783,"tags":{},"startTime":1771443817974,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunks","duration":746,"timestamp":59650174256,"id":787,"parentId":783,"tags":{},"startTime":1771443817974,"traceId":"0fd53edc45d38466"},{"name":"optimize-tree","duration":53,"timestamp":59650175030,"id":788,"parentId":783,"tags":{},"startTime":1771443817975,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunk-modules","duration":4,"timestamp":59650175111,"id":789,"parentId":783,"tags":{},"startTime":1771443817975,"traceId":"0fd53edc45d38466"},{"name":"optimize","duration":1169,"timestamp":59650174204,"id":785,"parentId":783,"tags":{},"startTime":1771443817974,"traceId":"0fd53edc45d38466"},{"name":"module-hash","duration":296,"timestamp":59650176108,"id":790,"parentId":783,"tags":{},"startTime":1771443817976,"traceId":"0fd53edc45d38466"},{"name":"code-generation","duration":1144,"timestamp":59650176415,"id":791,"parentId":783,"tags":{},"startTime":1771443817976,"traceId":"0fd53edc45d38466"},{"name":"hash","duration":1464,"timestamp":59650178544,"id":792,"parentId":783,"tags":{},"startTime":1771443817978,"traceId":"0fd53edc45d38466"},{"name":"code-generation-jobs","duration":76,"timestamp":59650180007,"id":793,"parentId":783,"tags":{},"startTime":1771443817980,"traceId":"0fd53edc45d38466"},{"name":"module-assets","duration":33,"timestamp":59650180078,"id":794,"parentId":783,"tags":{},"startTime":1771443817980,"traceId":"0fd53edc45d38466"},{"name":"create-chunk-assets","duration":2303,"timestamp":59650180114,"id":795,"parentId":783,"tags":{},"startTime":1771443817980,"traceId":"0fd53edc45d38466"},{"name":"seal","duration":15323,"timestamp":59650172735,"id":783,"parentId":766,"tags":{},"startTime":1771443817972,"traceId":"0fd53edc45d38466"},{"name":"webpack-compilation","duration":63455,"timestamp":59650125694,"id":766,"parentId":764,"tags":{"name":"server"},"startTime":1771443817925,"traceId":"0fd53edc45d38466"},{"name":"emit","duration":2859,"timestamp":59650189288,"id":796,"parentId":764,"tags":{},"startTime":1771443817989,"traceId":"0fd53edc45d38466"},{"name":"webpack-invalidated-server","duration":78881,"timestamp":59650113945,"id":764,"parentId":3,"tags":{"trigger":"src/app/page.tsx"},"startTime":1771443817914,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":1817,"timestamp":59650196255,"id":804,"parentId":798,"tags":{"request":"next-flight-client-entry-loader?server=false!"},"startTime":1771443817996,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":2892,"timestamp":59650196214,"id":799,"parentId":798,"tags":{"request":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1771443817996,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":3389,"timestamp":59650196244,"id":801,"parentId":798,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1771443817996,"traceId":"0fd53edc45d38466"},{"name":"build-module-tsx","duration":6756,"timestamp":59650198100,"id":805,"parentId":797,"tags":{"name":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx","layer":"app-pages-browser"},"startTime":1771443817998,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":8840,"timestamp":59650196252,"id":803,"parentId":798,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1771443817996,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":10101,"timestamp":59650196238,"id":800,"parentId":798,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1771443817996,"traceId":"0fd53edc45d38466"},{"name":"build-module-js","duration":2254,"timestamp":59650213462,"id":806,"parentId":805,"tags":{"name":"__barrel_optimize__?names=Activity,ExternalLink,Plus,RefreshCw,Trash2!=!/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/node_modules/lucide-react/dist/esm/lucide-react.js","layer":"app-pages-browser"},"startTime":1771443818013,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":20016,"timestamp":59650196248,"id":802,"parentId":798,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1771443817996,"traceId":"0fd53edc45d38466"}] [{"name":"make","duration":21439,"timestamp":59650194938,"id":798,"parentId":797,"tags":{},"startTime":1771443817995,"traceId":"0fd53edc45d38466"},{"name":"chunk-graph","duration":913,"timestamp":59650217557,"id":808,"parentId":807,"tags":{},"startTime":1771443818017,"traceId":"0fd53edc45d38466"},{"name":"optimize-modules","duration":2,"timestamp":59650218482,"id":810,"parentId":807,"tags":{},"startTime":1771443818018,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunks","duration":16,"timestamp":59650218510,"id":811,"parentId":807,"tags":{},"startTime":1771443818018,"traceId":"0fd53edc45d38466"},{"name":"optimize-tree","duration":3,"timestamp":59650218536,"id":812,"parentId":807,"tags":{},"startTime":1771443818018,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunk-modules","duration":3,"timestamp":59650218546,"id":813,"parentId":807,"tags":{},"startTime":1771443818018,"traceId":"0fd53edc45d38466"},{"name":"optimize","duration":325,"timestamp":59650218477,"id":809,"parentId":807,"tags":{},"startTime":1771443818018,"traceId":"0fd53edc45d38466"},{"name":"module-hash","duration":226,"timestamp":59650219368,"id":814,"parentId":807,"tags":{},"startTime":1771443818019,"traceId":"0fd53edc45d38466"},{"name":"code-generation","duration":948,"timestamp":59650219600,"id":815,"parentId":807,"tags":{},"startTime":1771443818019,"traceId":"0fd53edc45d38466"},{"name":"hash","duration":2185,"timestamp":59650221635,"id":816,"parentId":807,"tags":{},"startTime":1771443818021,"traceId":"0fd53edc45d38466"},{"name":"code-generation-jobs","duration":63,"timestamp":59650223821,"id":817,"parentId":807,"tags":{},"startTime":1771443818024,"traceId":"0fd53edc45d38466"},{"name":"module-assets","duration":32,"timestamp":59650223878,"id":818,"parentId":807,"tags":{},"startTime":1771443818024,"traceId":"0fd53edc45d38466"},{"name":"create-chunk-assets","duration":2525,"timestamp":59650223913,"id":819,"parentId":807,"tags":{},"startTime":1771443818024,"traceId":"0fd53edc45d38466"},{"name":"NextJsBuildManifest-generateClientManifest","duration":280,"timestamp":59650227521,"id":821,"parentId":797,"tags":{},"startTime":1771443818027,"traceId":"0fd53edc45d38466"},{"name":"NextJsBuildManifest-createassets","duration":456,"timestamp":59650227347,"id":820,"parentId":797,"tags":{},"startTime":1771443818027,"traceId":"0fd53edc45d38466"},{"name":"seal","duration":11916,"timestamp":59650217226,"id":807,"parentId":797,"tags":{},"startTime":1771443818017,"traceId":"0fd53edc45d38466"},{"name":"webpack-compilation","duration":34768,"timestamp":59650194393,"id":797,"parentId":765,"tags":{"name":"client"},"startTime":1771443817994,"traceId":"0fd53edc45d38466"},{"name":"emit","duration":6111,"timestamp":59650229172,"id":822,"parentId":765,"tags":{},"startTime":1771443818029,"traceId":"0fd53edc45d38466"},{"name":"webpack-invalidated-client","duration":121780,"timestamp":59650114466,"id":765,"parentId":3,"tags":{"trigger":"src/app/page.tsx"},"startTime":1771443817914,"traceId":"0fd53edc45d38466"}] +[{"name":"client-success","duration":1,"timestamp":59650236828,"id":823,"parentId":3,"tags":{},"startTime":1771443818037,"traceId":"0fd53edc45d38466"},{"name":"client-hmr-latency","duration":135000,"timestamp":59650115248,"id":824,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","[project]/node_modules/@babel/runtime/helpers/esm/extends.js","[project]/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","[project]/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","[project]/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","[project]/node_modules/clsx/dist/clsx.mjs","[project]/node_modules/d3-array/src/ascending.js","[project]/node_modules/d3-array/src/bisect.js","[project]/node_modules/d3-array/src/bisector.js","[project]/node_modules/d3-array/src/descending.js","[project]/node_modules/d3-array/src/greatest.js","[project]/node_modules/d3-array/src/max.js","[project]/node_modules/d3-array/src/maxIndex.js","[project]/node_modules/d3-array/src/min.js","[project]/node_modules/d3-array/src/minIndex.js","[project]/node_modules/d3-array/src/number.js","[project]/node_modules/d3-array/src/permute.js","[project]/node_modules/d3-array/src/quantile.js","[project]/node_modules/d3-array/src/quickselect.js","[project]/node_modules/d3-array/src/range.js","[project]/node_modules/d3-array/src/sort.js","[project]/node_modules/d3-array/src/ticks.js","[project]/node_modules/d3-color/src/color.js","[project]/node_modules/d3-color/src/define.js","[project]/node_modules/d3-format/src/defaultLocale.js","[project]/node_modules/d3-format/src/exponent.js","[project]/node_modules/d3-format/src/formatDecimal.js","[project]/node_modules/d3-format/src/formatGroup.js","[project]/node_modules/d3-format/src/formatNumerals.js","[project]/node_modules/d3-format/src/formatPrefixAuto.js","[project]/node_modules/d3-format/src/formatRounded.js","[project]/node_modules/d3-format/src/formatSpecifier.js","[project]/node_modules/d3-format/src/formatTrim.js","[project]/node_modules/d3-format/src/formatTypes.js","[project]/node_modules/d3-format/src/identity.js","[project]/node_modules/d3-format/src/locale.js","[project]/node_modules/d3-format/src/precisionFixed.js","[project]/node_modules/d3-format/src/precisionPrefix.js","[project]/node_modules/d3-format/src/precisionRound.js","[project]/node_modules/d3-interpolate/src/array.js","[project]/node_modules/d3-interpolate/src/basis.js","[project]/node_modules/d3-interpolate/src/basisClosed.js","[project]/node_modules/d3-interpolate/src/color.js","[project]/node_modules/d3-interpolate/src/constant.js","[project]/node_modules/d3-interpolate/src/date.js","[project]/node_modules/d3-interpolate/src/number.js","[project]/node_modules/d3-interpolate/src/numberArray.js","[project]/node_modules/d3-interpolate/src/object.js","[project]/node_modules/d3-interpolate/src/piecewise.js","[project]/node_modules/d3-interpolate/src/rgb.js","[project]/node_modules/d3-interpolate/src/round.js","[project]/node_modules/d3-interpolate/src/string.js","[project]/node_modules/d3-interpolate/src/value.js","[project]/node_modules/d3-path/src/path.js","[project]/node_modules/d3-scale/src/band.js","[project]/node_modules/d3-scale/src/constant.js","[project]/node_modules/d3-scale/src/continuous.js","[project]/node_modules/d3-scale/src/diverging.js","[project]/node_modules/d3-scale/src/identity.js","[project]/node_modules/d3-scale/src/index.js","[project]/node_modules/d3-scale/src/init.js","[project]/node_modules/d3-scale/src/linear.js","[project]/node_modules/d3-scale/src/log.js","[project]/node_modules/d3-scale/src/nice.js","[project]/node_modules/d3-scale/src/number.js","[project]/node_modules/d3-scale/src/ordinal.js","[project]/node_modules/d3-scale/src/pow.js","[project]/node_modules/d3-scale/src/quantile.js","[project]/node_modules/d3-scale/src/quantize.js","[project]/node_modules/d3-scale/src/radial.js","[project]/node_modules/d3-scale/src/sequential.js","[project]/node_modules/d3-scale/src/sequentialQuantile.js","[project]/node_modules/d3-scale/src/symlog.js","[project]/node_modules/d3-scale/src/threshold.js","[project]/node_modules/d3-scale/src/tickFormat.js","[project]/node_modules/d3-scale/src/time.js","[project]/node_modules/d3-scale/src/utcTime.js","[project]/node_modules/d3-shape/src/arc.js","[project]/node_modules/d3-shape/src/area.js","[project]/node_modules/d3-shape/src/areaRadial.js","[project]/node_modules/d3-shape/src/array.js","[project]/node_modules/d3-shape/src/constant.js","[project]/node_modules/d3-shape/src/curve/basis.js","[project]/node_modules/d3-shape/src/curve/basisClosed.js","[project]/node_modules/d3-shape/src/curve/basisOpen.js","[project]/node_modules/d3-shape/src/curve/bump.js","[project]/node_modules/d3-shape/src/curve/bundle.js","[project]/node_modules/d3-shape/src/curve/cardinal.js","[project]/node_modules/d3-shape/src/curve/cardinalClosed.js","[project]/node_modules/d3-shape/src/curve/cardinalOpen.js","[project]/node_modules/d3-shape/src/curve/catmullRom.js","[project]/node_modules/d3-shape/src/curve/catmullRomClosed.js","[project]/node_modules/d3-shape/src/curve/catmullRomOpen.js","[project]/node_modules/d3-shape/src/curve/linear.js","[project]/node_modules/d3-shape/src/curve/linearClosed.js","[project]/node_modules/d3-shape/src/curve/monotone.js","[project]/node_modules/d3-shape/src/curve/natural.js","[project]/node_modules/d3-shape/src/curve/radial.js","[project]/node_modules/d3-shape/src/curve/step.js","[project]/node_modules/d3-shape/src/descending.js","[project]/node_modules/d3-shape/src/identity.js","[project]/node_modules/d3-shape/src/index.js","[project]/node_modules/d3-shape/src/line.js","[project]/node_modules/d3-shape/src/lineRadial.js","[project]/node_modules/d3-shape/src/link.js","[project]/node_modules/d3-shape/src/math.js","[project]/node_modules/d3-shape/src/noop.js","[project]/node_modules/d3-shape/src/offset/diverging.js","[project]/node_modules/d3-shape/src/offset/expand.js","[project]/node_modules/d3-shape/src/offset/none.js","[project]/node_modules/d3-shape/src/offset/silhouette.js","[project]/node_modules/d3-shape/src/offset/wiggle.js","[project]/node_modules/d3-shape/src/order/appearance.js","[project]/node_modules/d3-shape/src/order/ascending.js","[project]/node_modules/d3-shape/src/order/descending.js","[project]/node_modules/d3-shape/src/order/insideOut.js","[project]/node_modules/d3-shape/src/order/none.js","[project]/node_modules/d3-shape/src/order/reverse.js","[project]/node_modules/d3-shape/src/path.js","[project]/node_modules/d3-shape/src/pie.js","[project]/node_modules/d3-shape/src/point.js","[project]/node_modules/d3-shape/src/pointRadial.js","[project]/node_modules/d3-shape/src/stack.js","[project]/node_modules/d3-shape/src/symbol.js","[project]/node_modules/d3-shape/src/symbol/asterisk.js","[project]/node_modules/d3-shape/src/symbol/circle.js","[project]/node_modules/d3-shape/src/symbol/cross.js","[project]/node_modules/d3-shape/src/symbol/diamond.js","[project]/node_modules/d3-shape/src/symbol/diamond2.js","[project]/node_modules/d3-shape/src/symbol/plus.js","[project]/node_modules/d3-shape/src/symbol/square.js","[project]/node_modules/d3-shape/src/symbol/square2.js","[project]/node_modules/d3-shape/src/symbol/star.js","[project]/node_modules/d3-shape/src/symbol/times.js","[project]/node_modules/d3-shape/src/symbol/triangle.js","[project]/node_modules/d3-shape/src/symbol/triangle2.js","[project]/node_modules/d3-shape/src/symbol/wye.js","[project]/node_modules/d3-time-format/src/defaultLocale.js","[project]/node_modules/d3-time-format/src/locale.js","[project]/node_modules/d3-time/src/day.js","[project]/node_modules/d3-time/src/duration.js","[project]/node_modules/d3-time/src/hour.js","[project]/node_modules/d3-time/src/interval.js","[project]/node_modules/d3-time/src/millisecond.js","[project]/node_modules/d3-time/src/minute.js","[project]/node_modules/d3-time/src/month.js","[project]/node_modules/d3-time/src/second.js","[project]/node_modules/d3-time/src/ticks.js","[project]/node_modules/d3-time/src/week.js","[project]/node_modules/d3-time/src/year.js","[project]/node_modules/decimal.js-light/decimal.js","[project]/node_modules/eventemitter3/index.js","[project]/node_modules/fast-equals/dist/es/index.mjs","[project]/node_modules/internmap/src/index.js","[project]/node_modules/lodash/_DataView.js","[project]/node_modules/lodash/_Hash.js","[project]/node_modules/lodash/_ListCache.js","[project]/node_modules/lodash/_Map.js","[project]/node_modules/lodash/_MapCache.js","[project]/node_modules/lodash/_Promise.js","[project]/node_modules/lodash/_Set.js","[project]/node_modules/lodash/_SetCache.js","[project]/node_modules/lodash/_Stack.js","[project]/node_modules/lodash/_Symbol.js","[project]/node_modules/lodash/_Uint8Array.js","[project]/node_modules/lodash/_WeakMap.js","[project]/node_modules/lodash/_apply.js","[project]/node_modules/lodash/_arrayEvery.js","[project]/node_modules/lodash/_arrayFilter.js","[project]/node_modules/lodash/_arrayIncludes.js","[project]/node_modules/lodash/_arrayIncludesWith.js","[project]/node_modules/lodash/_arrayLikeKeys.js","[project]/node_modules/lodash/_arrayMap.js","[project]/node_modules/lodash/_arrayPush.js","[project]/node_modules/lodash/_arraySome.js","[project]/node_modules/lodash/_asciiToArray.js","[project]/node_modules/lodash/_assocIndexOf.js","[project]/node_modules/lodash/_baseAssignValue.js","[project]/node_modules/lodash/_baseEach.js","[project]/node_modules/lodash/_baseEvery.js","[project]/node_modules/lodash/_baseExtremum.js","[project]/node_modules/lodash/_baseFindIndex.js","[project]/node_modules/lodash/_baseFlatten.js","[project]/node_modules/lodash/_baseFor.js","[project]/node_modules/lodash/_baseForOwn.js","[project]/node_modules/lodash/_baseGet.js","[project]/node_modules/lodash/_baseGetAllKeys.js","[project]/node_modules/lodash/_baseGetTag.js","[project]/node_modules/lodash/_baseGt.js","[project]/node_modules/lodash/_baseHasIn.js","[project]/node_modules/lodash/_baseIndexOf.js","[project]/node_modules/lodash/_baseIsArguments.js","[project]/node_modules/lodash/_baseIsEqual.js","[project]/node_modules/lodash/_baseIsEqualDeep.js","[project]/node_modules/lodash/_baseIsMatch.js","[project]/node_modules/lodash/_baseIsNaN.js","[project]/node_modules/lodash/_baseIsNative.js","[project]/node_modules/lodash/_baseIsTypedArray.js","[project]/node_modules/lodash/_baseIteratee.js","[project]/node_modules/lodash/_baseKeys.js","[project]/node_modules/lodash/_baseLt.js","[project]/node_modules/lodash/_baseMap.js","[project]/node_modules/lodash/_baseMatches.js","[project]/node_modules/lodash/_baseMatchesProperty.js","[project]/node_modules/lodash/_baseOrderBy.js","[project]/node_modules/lodash/_baseProperty.js","[project]/node_modules/lodash/_basePropertyDeep.js","[project]/node_modules/lodash/_baseRange.js","[project]/node_modules/lodash/_baseRest.js","[project]/node_modules/lodash/_baseSetToString.js","[project]/node_modules/lodash/_baseSlice.js","[project]/node_modules/lodash/_baseSome.js","[project]/node_modules/lodash/_baseSortBy.js","[project]/node_modules/lodash/_baseTimes.js","[project]/node_modules/lodash/_baseToString.js","[project]/node_modules/lodash/_baseTrim.js","[project]/node_modules/lodash/_baseUnary.js","[project]/node_modules/lodash/_baseUniq.js","[project]/node_modules/lodash/_cacheHas.js","[project]/node_modules/lodash/_castPath.js","[project]/node_modules/lodash/_castSlice.js","[project]/node_modules/lodash/_compareAscending.js","[project]/node_modules/lodash/_compareMultiple.js","[project]/node_modules/lodash/_coreJsData.js","[project]/node_modules/lodash/_createBaseEach.js","[project]/node_modules/lodash/_createBaseFor.js","[project]/node_modules/lodash/_createCaseFirst.js","[project]/node_modules/lodash/_createFind.js","[project]/node_modules/lodash/_createRange.js","[project]/node_modules/lodash/_createSet.js","[project]/node_modules/lodash/_defineProperty.js","[project]/node_modules/lodash/_equalArrays.js","[project]/node_modules/lodash/_equalByTag.js","[project]/node_modules/lodash/_equalObjects.js","[project]/node_modules/lodash/_freeGlobal.js","[project]/node_modules/lodash/_getAllKeys.js","[project]/node_modules/lodash/_getMapData.js","[project]/node_modules/lodash/_getMatchData.js","[project]/node_modules/lodash/_getNative.js","[project]/node_modules/lodash/_getPrototype.js","[project]/node_modules/lodash/_getRawTag.js","[project]/node_modules/lodash/_getSymbols.js","[project]/node_modules/lodash/_getTag.js","[project]/node_modules/lodash/_getValue.js","[project]/node_modules/lodash/_hasPath.js","[project]/node_modules/lodash/_hasUnicode.js","[project]/node_modules/lodash/_hashClear.js","[project]/node_modules/lodash/_hashDelete.js","[project]/node_modules/lodash/_hashGet.js","[project]/node_modules/lodash/_hashHas.js","[project]/node_modules/lodash/_hashSet.js","[project]/node_modules/lodash/_isFlattenable.js","[project]/node_modules/lodash/_isIndex.js","[project]/node_modules/lodash/_isIterateeCall.js","[project]/node_modules/lodash/_isKey.js","[project]/node_modules/lodash/_isKeyable.js","[project]/node_modules/lodash/_isMasked.js","[project]/node_modules/lodash/_isPrototype.js","[project]/node_modules/lodash/_isStrictComparable.js","[project]/node_modules/lodash/_listCacheClear.js","[project]/node_modules/lodash/_listCacheDelete.js","[project]/node_modules/lodash/_listCacheGet.js","[project]/node_modules/lodash/_listCacheHas.js","[project]/node_modules/lodash/_listCacheSet.js","[project]/node_modules/lodash/_mapCacheClear.js","[project]/node_modules/lodash/_mapCacheDelete.js","[project]/node_modules/lodash/_mapCacheGet.js","[project]/node_modules/lodash/_mapCacheHas.js","[project]/node_modules/lodash/_mapCacheSet.js","[project]/node_modules/lodash/_mapToArray.js","[project]/node_modules/lodash/_matchesStrictComparable.js","[project]/node_modules/lodash/_memoizeCapped.js","[project]/node_modules/lodash/_nativeCreate.js","[project]/node_modules/lodash/_nativeKeys.js","[project]/node_modules/lodash/_nodeUtil.js","[project]/node_modules/lodash/_objectToString.js","[project]/node_modules/lodash/_overArg.js","[project]/node_modules/lodash/_overRest.js","[project]/node_modules/lodash/_root.js","[project]/node_modules/lodash/_setCacheAdd.js","[project]/node_modules/lodash/_setCacheHas.js","[project]/node_modules/lodash/_setToArray.js","[project]/node_modules/lodash/_setToString.js","[project]/node_modules/lodash/_shortOut.js","[project]/node_modules/lodash/_stackClear.js","[project]/node_modules/lodash/_stackDelete.js","[project]/node_modules/lodash/_stackGet.js","[project]/node_modules/lodash/_stackHas.js","[project]/node_modules/lodash/_stackSet.js","[project]/node_modules/lodash/_strictIndexOf.js","[project]/node_modules/lodash/_stringToArray.js","[project]/node_modules/lodash/_stringToPath.js","[project]/node_modules/lodash/_toKey.js","[project]/node_modules/lodash/_toSource.js","[project]/node_modules/lodash/_trimmedEndIndex.js","[project]/node_modules/lodash/_unicodeToArray.js","[project]/node_modules/lodash/constant.js","[project]/node_modules/lodash/debounce.js","[project]/node_modules/lodash/eq.js","[project]/node_modules/lodash/every.js","[project]/node_modules/lodash/find.js","[project]/node_modules/lodash/findIndex.js","[project]/node_modules/lodash/flatMap.js","[project]/node_modules/lodash/get.js","[project]/node_modules/lodash/hasIn.js","[project]/node_modules/lodash/identity.js","[project]/node_modules/lodash/isArguments.js","[project]/node_modules/lodash/isArray.js","[project]/node_modules/lodash/isArrayLike.js","[project]/node_modules/lodash/isBoolean.js","[project]/node_modules/lodash/isBuffer.js","[project]/node_modules/lodash/isEqual.js","[project]/node_modules/lodash/isFunction.js","[project]/node_modules/lodash/isLength.js","[project]/node_modules/lodash/isNaN.js","[project]/node_modules/lodash/isNil.js","[project]/node_modules/lodash/isNumber.js","[project]/node_modules/lodash/isObject.js","[project]/node_modules/lodash/isObjectLike.js","[project]/node_modules/lodash/isPlainObject.js","[project]/node_modules/lodash/isString.js","[project]/node_modules/lodash/isSymbol.js","[project]/node_modules/lodash/isTypedArray.js","[project]/node_modules/lodash/keys.js","[project]/node_modules/lodash/last.js","[project]/node_modules/lodash/map.js","[project]/node_modules/lodash/mapValues.js","[project]/node_modules/lodash/max.js","[project]/node_modules/lodash/memoize.js","[project]/node_modules/lodash/min.js","[project]/node_modules/lodash/noop.js","[project]/node_modules/lodash/now.js","[project]/node_modules/lodash/property.js","[project]/node_modules/lodash/range.js","[project]/node_modules/lodash/some.js","[project]/node_modules/lodash/sortBy.js","[project]/node_modules/lodash/stubArray.js","[project]/node_modules/lodash/stubFalse.js","[project]/node_modules/lodash/throttle.js","[project]/node_modules/lodash/toFinite.js","[project]/node_modules/lodash/toInteger.js","[project]/node_modules/lodash/toNumber.js","[project]/node_modules/lodash/toString.js","[project]/node_modules/lodash/uniqBy.js","[project]/node_modules/lodash/upperFirst.js","[project]/node_modules/lucide-react/dist/esm/icons/layout-grid.js","[project]/node_modules/lucide-react/dist/esm/icons/list.js","[project]/node_modules/next/dist/build/polyfills/object-assign.js","[project]/node_modules/prop-types/checkPropTypes.js","[project]/node_modules/prop-types/factoryWithTypeCheckers.js","[project]/node_modules/prop-types/index.js","[project]/node_modules/prop-types/lib/ReactPropTypesSecret.js","[project]/node_modules/prop-types/lib/has.js","[project]/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js","[project]/node_modules/prop-types/node_modules/react-is/index.js","[project]/node_modules/react-is/cjs/react-is.development.js","[project]/node_modules/react-is/index.js","[project]/node_modules/react-smooth/es6/Animate.js","[project]/node_modules/react-smooth/es6/AnimateGroup.js","[project]/node_modules/react-smooth/es6/AnimateGroupChild.js","[project]/node_modules/react-smooth/es6/AnimateManager.js","[project]/node_modules/react-smooth/es6/configUpdate.js","[project]/node_modules/react-smooth/es6/easing.js","[project]/node_modules/react-smooth/es6/index.js","[project]/node_modules/react-smooth/es6/setRafTimeout.js","[project]/node_modules/react-smooth/es6/util.js","[project]/node_modules/react-transition-group/esm/Transition.js","[project]/node_modules/react-transition-group/esm/TransitionGroup.js","[project]/node_modules/react-transition-group/esm/TransitionGroupContext.js","[project]/node_modules/react-transition-group/esm/config.js","[project]/node_modules/react-transition-group/esm/utils/ChildMapping.js","[project]/node_modules/react-transition-group/esm/utils/PropTypes.js","[project]/node_modules/react-transition-group/esm/utils/reflow.js","[project]/node_modules/recharts-scale/es6/getNiceTickValues.js","[project]/node_modules/recharts-scale/es6/index.js","[project]/node_modules/recharts-scale/es6/util/arithmetic.js","[project]/node_modules/recharts-scale/es6/util/utils.js","[project]/node_modules/recharts/es6/cartesian/Bar.js","[project]/node_modules/recharts/es6/cartesian/Brush.js","[project]/node_modules/recharts/es6/cartesian/CartesianAxis.js","[project]/node_modules/recharts/es6/cartesian/ErrorBar.js","[project]/node_modules/recharts/es6/cartesian/Line.js","[project]/node_modules/recharts/es6/cartesian/ReferenceArea.js","[project]/node_modules/recharts/es6/cartesian/ReferenceDot.js","[project]/node_modules/recharts/es6/cartesian/ReferenceLine.js","[project]/node_modules/recharts/es6/cartesian/XAxis.js","[project]/node_modules/recharts/es6/cartesian/YAxis.js","[project]/node_modules/recharts/es6/cartesian/getEquidistantTicks.js","[project]/node_modules/recharts/es6/cartesian/getTicks.js","[project]/node_modules/recharts/es6/chart/AccessibilityManager.js","[project]/node_modules/recharts/es6/chart/LineChart.js","[project]/node_modules/recharts/es6/chart/generateCategoricalChart.js","[project]/node_modules/recharts/es6/component/Cell.js","[project]/node_modules/recharts/es6/component/Cursor.js","[project]/node_modules/recharts/es6/component/DefaultLegendContent.js","[project]/node_modules/recharts/es6/component/DefaultTooltipContent.js","[project]/node_modules/recharts/es6/component/Label.js","[project]/node_modules/recharts/es6/component/LabelList.js","[project]/node_modules/recharts/es6/component/Legend.js","[project]/node_modules/recharts/es6/component/ResponsiveContainer.js","[project]/node_modules/recharts/es6/component/Text.js","[project]/node_modules/recharts/es6/component/Tooltip.js","[project]/node_modules/recharts/es6/component/TooltipBoundingBox.js","[project]/node_modules/recharts/es6/container/Layer.js","[project]/node_modules/recharts/es6/container/Surface.js","[project]/node_modules/recharts/es6/context/chartLayoutContext.js","[project]/node_modules/recharts/es6/shape/Cross.js","[project]/node_modules/recharts/es6/shape/Curve.js","[project]/node_modules/recharts/es6/shape/Dot.js","[project]/node_modules/recharts/es6/shape/Rectangle.js","[project]/node_modules/recharts/es6/shape/Sector.js","[project]/node_modules/recharts/es6/shape/Symbols.js","[project]/node_modules/recharts/es6/shape/Trapezoid.js","[project]/node_modules/recharts/es6/util/ActiveShapeUtils.js","[project]/node_modules/recharts/es6/util/BarUtils.js","[project]/node_modules/recharts/es6/util/CartesianUtils.js","[project]/node_modules/recharts/es6/util/ChartUtils.js","[project]/node_modules/recharts/es6/util/CssPrefixUtils.js","[project]/node_modules/recharts/es6/util/DOMUtils.js","[project]/node_modules/recharts/es6/util/DataUtils.js","[project]/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js","[project]/node_modules/recharts/es6/util/Events.js","[project]/node_modules/recharts/es6/util/Global.js","[project]/node_modules/recharts/es6/util/IfOverflowMatches.js","[project]/node_modules/recharts/es6/util/LogUtils.js","[project]/node_modules/recharts/es6/util/PolarUtils.js","[project]/node_modules/recharts/es6/util/ReactUtils.js","[project]/node_modules/recharts/es6/util/ReduceCSSCalc.js","[project]/node_modules/recharts/es6/util/ShallowEqual.js","[project]/node_modules/recharts/es6/util/TickUtils.js","[project]/node_modules/recharts/es6/util/calculateViewBox.js","[project]/node_modules/recharts/es6/util/cursor/getCursorPoints.js","[project]/node_modules/recharts/es6/util/cursor/getCursorRectangle.js","[project]/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js","[project]/node_modules/recharts/es6/util/getEveryNthWithCondition.js","[project]/node_modules/recharts/es6/util/getLegendProps.js","[project]/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js","[project]/node_modules/recharts/es6/util/payload/getUniqPayload.js","[project]/node_modules/recharts/es6/util/tooltip/translate.js","[project]/node_modules/recharts/es6/util/types.js","[project]/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","[project]/node_modules/victory-vendor/es/d3-scale.js","[project]/node_modules/victory-vendor/es/d3-shape.js","[project]/src/app/page.tsx"],"page":"/","isPageHidden":true},"startTime":1771443818051,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":154,"timestamp":59650251745,"id":826,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443818051,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":83,"timestamp":59650252280,"id":827,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443818052,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":15098,"timestamp":59650251395,"id":825,"tags":{"url":"/api/monitor"},"startTime":1771443818051,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59650266511,"id":828,"parentId":825,"tags":{"url":"/api/monitor","memory.rss":"752812032","memory.heapUsed":"307600960","memory.heapTotal":"333283328"},"startTime":1771443818066,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":769,"timestamp":59681009390,"id":830,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443848809,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":409,"timestamp":59681010907,"id":831,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443848811,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":10154,"timestamp":59681007343,"id":829,"tags":{"url":"/api/monitor"},"startTime":1771443848807,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59681017596,"id":832,"parentId":829,"tags":{"url":"/api/monitor","memory.rss":"712327168","memory.heapUsed":"287520440","memory.heapTotal":"293388288"},"startTime":1771443848817,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":840,"timestamp":59702267657,"id":834,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443870067,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":457,"timestamp":59702269603,"id":835,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443870069,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":11463,"timestamp":59702265962,"id":833,"tags":{"url":"/api/monitor"},"startTime":1771443870066,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59702277498,"id":836,"parentId":833,"tags":{"url":"/api/monitor","memory.rss":"712589312","memory.heapUsed":"287116000","memory.heapTotal":"292864000"},"startTime":1771443870077,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":695,"timestamp":59711012471,"id":838,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443878812,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":428,"timestamp":59711014199,"id":839,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443878814,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":10691,"timestamp":59711010860,"id":837,"tags":{"url":"/api/monitor"},"startTime":1771443878811,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":4,"timestamp":59711021655,"id":840,"parentId":837,"tags":{"url":"/api/monitor","memory.rss":"775454720","memory.heapUsed":"289518720","memory.heapTotal":"302546944"},"startTime":1771443878821,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":736,"timestamp":59741009022,"id":842,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443908809,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":422,"timestamp":59741010568,"id":843,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443908810,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":8160,"timestamp":59741007357,"id":841,"tags":{"url":"/api/monitor"},"startTime":1771443908807,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59741015587,"id":844,"parentId":841,"tags":{"url":"/api/monitor","memory.rss":"766001152","memory.heapUsed":"290084016","memory.heapTotal":"302546944"},"startTime":1771443908815,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":518,"timestamp":59771008412,"id":846,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443938808,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":238,"timestamp":59771009523,"id":847,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443938809,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":7152,"timestamp":59771006923,"id":845,"tags":{"url":"/api/monitor"},"startTime":1771443938807,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59771014149,"id":848,"parentId":845,"tags":{"url":"/api/monitor","memory.rss":"727384064","memory.heapUsed":"290569896","memory.heapTotal":"302809088"},"startTime":1771443938814,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":750,"timestamp":59801009276,"id":850,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443968809,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":415,"timestamp":59801010786,"id":851,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443968810,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":10842,"timestamp":59801007380,"id":849,"tags":{"url":"/api/monitor"},"startTime":1771443968807,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59801018348,"id":852,"parentId":849,"tags":{"url":"/api/monitor","memory.rss":"727531520","memory.heapUsed":"291052000","memory.heapTotal":"303071232"},"startTime":1771443968818,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":882,"timestamp":59831006481,"id":854,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443998806,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":459,"timestamp":59831008480,"id":855,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771443998808,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":7562,"timestamp":59831004419,"id":853,"tags":{"url":"/api/monitor"},"startTime":1771443998804,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59831012041,"id":856,"parentId":853,"tags":{"url":"/api/monitor","memory.rss":"727613440","memory.heapUsed":"291492872","memory.heapTotal":"303595520"},"startTime":1771443998811,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1919,"timestamp":59858985710,"id":858,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444026784,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":966,"timestamp":59858988510,"id":859,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444026787,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":68332,"timestamp":59858983908,"id":857,"tags":{"url":"/"},"startTime":1771444026782,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59859052262,"id":860,"parentId":857,"tags":{"url":"/","memory.rss":"732413952","memory.heapUsed":"292031520","memory.heapTotal":"300597248"},"startTime":1771444026850,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":194,"timestamp":59859242245,"id":862,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444027040,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":113,"timestamp":59859242683,"id":863,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444027041,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1971,"timestamp":59859241829,"id":861,"tags":{"url":"/api/monitor"},"startTime":1771444027040,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59859243817,"id":864,"parentId":861,"tags":{"url":"/api/monitor","memory.rss":"732430336","memory.heapUsed":"292388448","memory.heapTotal":"302694400"},"startTime":1771444027042,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59859244112,"id":865,"parentId":3,"tags":{},"startTime":1771444027042,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":4201,"timestamp":59859939378,"id":867,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444027738,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1072,"timestamp":59859944645,"id":868,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444027743,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":20937,"timestamp":59859938039,"id":866,"tags":{"url":"/"},"startTime":1771444027736,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59859959085,"id":869,"parentId":866,"tags":{"url":"/","memory.rss":"732430336","memory.heapUsed":"293872928","memory.heapTotal":"304267264"},"startTime":1771444027757,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":178,"timestamp":59860128338,"id":871,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444027927,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":128,"timestamp":59860128707,"id":872,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444027927,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2225,"timestamp":59860127944,"id":870,"tags":{"url":"/api/monitor"},"startTime":1771444027926,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59860130188,"id":873,"parentId":870,"tags":{"url":"/api/monitor","memory.rss":"732430336","memory.heapUsed":"295544136","memory.heapTotal":"305840128"},"startTime":1771444027928,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59860130533,"id":874,"parentId":3,"tags":{},"startTime":1771444027929,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1087,"timestamp":59860684665,"id":876,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444028483,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":792,"timestamp":59860686613,"id":877,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444028485,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":20745,"timestamp":59860683220,"id":875,"tags":{"url":"/"},"startTime":1771444028481,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":3,"timestamp":59860704040,"id":878,"parentId":875,"tags":{"url":"/","memory.rss":"732479488","memory.heapUsed":"297068200","memory.heapTotal":"307412992"},"startTime":1771444028502,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":197,"timestamp":59860884544,"id":880,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444028683,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":146,"timestamp":59860885002,"id":881,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444028683,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1929,"timestamp":59860884112,"id":879,"tags":{"url":"/api/monitor"},"startTime":1771444028682,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59860886062,"id":882,"parentId":879,"tags":{"url":"/api/monitor","memory.rss":"733577216","memory.heapUsed":"292994168","memory.heapTotal":"308199424"},"startTime":1771444028684,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59860886100,"id":883,"parentId":3,"tags":{},"startTime":1771444028684,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1193,"timestamp":59861409183,"id":885,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444029207,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":980,"timestamp":59861410983,"id":886,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444029209,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":17555,"timestamp":59861408187,"id":884,"tags":{"url":"/"},"startTime":1771444029206,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59861425783,"id":887,"parentId":884,"tags":{"url":"/","memory.rss":"733577216","memory.heapUsed":"294473872","memory.heapTotal":"308199424"},"startTime":1771444029224,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":185,"timestamp":59861604331,"id":889,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444029402,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":128,"timestamp":59861604706,"id":890,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444029403,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2491,"timestamp":59861603890,"id":888,"tags":{"url":"/api/monitor"},"startTime":1771444029402,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59861606403,"id":891,"parentId":888,"tags":{"url":"/api/monitor","memory.rss":"733577216","memory.heapUsed":"296140296","memory.heapTotal":"308723712"},"startTime":1771444029405,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":3,"timestamp":59861607039,"id":892,"parentId":3,"tags":{},"startTime":1771444029405,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1602,"timestamp":59861975781,"id":894,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444029774,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":916,"timestamp":59861978272,"id":895,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444029776,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":20555,"timestamp":59861973944,"id":893,"tags":{"url":"/"},"startTime":1771444029772,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59861994587,"id":896,"parentId":893,"tags":{"url":"/","memory.rss":"734560256","memory.heapUsed":"297679672","memory.heapTotal":"310296576"},"startTime":1771444029793,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":176,"timestamp":59862177097,"id":898,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444029975,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":145,"timestamp":59862177484,"id":899,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444029976,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2226,"timestamp":59862176686,"id":897,"tags":{"url":"/api/monitor"},"startTime":1771444029975,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59862178930,"id":900,"parentId":897,"tags":{"url":"/api/monitor","memory.rss":"734986240","memory.heapUsed":"293790792","memory.heapTotal":"310820864"},"startTime":1771444029977,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59862179524,"id":901,"parentId":3,"tags":{},"startTime":1771444029978,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1312,"timestamp":59862697091,"id":903,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444030495,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":879,"timestamp":59862699155,"id":904,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444030497,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":20291,"timestamp":59862695609,"id":902,"tags":{"url":"/"},"startTime":1771444030494,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":3,"timestamp":59862716010,"id":905,"parentId":902,"tags":{"url":"/","memory.rss":"735035392","memory.heapUsed":"295337784","memory.heapTotal":"310820864"},"startTime":1771444030514,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":276,"timestamp":59862897608,"id":907,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444030696,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":183,"timestamp":59862898332,"id":908,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444030696,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2560,"timestamp":59862897085,"id":906,"tags":{"url":"/api/monitor"},"startTime":1771444030695,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59862899670,"id":909,"parentId":906,"tags":{"url":"/api/monitor","memory.rss":"734150656","memory.heapUsed":"269895184","memory.heapTotal":"302727168"},"startTime":1771444030698,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":2,"timestamp":59862899805,"id":910,"parentId":3,"tags":{},"startTime":1771444030698,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1323,"timestamp":59863585225,"id":912,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444031383,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":928,"timestamp":59863587390,"id":913,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444031386,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":19115,"timestamp":59863584103,"id":911,"tags":{"url":"/"},"startTime":1771444031382,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59863603300,"id":914,"parentId":911,"tags":{"url":"/","memory.rss":"734150656","memory.heapUsed":"271464456","memory.heapTotal":"302727168"},"startTime":1771444031401,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":197,"timestamp":59863783669,"id":916,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444031582,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":159,"timestamp":59863784148,"id":917,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444031582,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1904,"timestamp":59863783200,"id":915,"tags":{"url":"/api/monitor"},"startTime":1771444031581,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59863785125,"id":918,"parentId":915,"tags":{"url":"/api/monitor","memory.rss":"734986240","memory.heapUsed":"273133896","memory.heapTotal":"302727168"},"startTime":1771444031583,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59863785166,"id":919,"parentId":3,"tags":{},"startTime":1771444031583,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1406,"timestamp":59864453438,"id":921,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444032252,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":859,"timestamp":59864455639,"id":922,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444032254,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":17046,"timestamp":59864451901,"id":920,"tags":{"url":"/"},"startTime":1771444032250,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59864469072,"id":923,"parentId":920,"tags":{"url":"/","memory.rss":"734986240","memory.heapUsed":"274635272","memory.heapTotal":"302727168"},"startTime":1771444032267,"traceId":"0fd53edc45d38466"}] +[{"name":"ensure-page","duration":181,"timestamp":59864650879,"id":925,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444032449,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":118,"timestamp":59864651284,"id":926,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444032449,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1715,"timestamp":59864650463,"id":924,"tags":{"url":"/api/monitor"},"startTime":1771444032449,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59864652203,"id":927,"parentId":924,"tags":{"url":"/api/monitor","memory.rss":"736165888","memory.heapUsed":"270528032","memory.heapTotal":"302989312"},"startTime":1771444032450,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59864652240,"id":928,"parentId":3,"tags":{},"startTime":1771444032450,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1312,"timestamp":59865126372,"id":930,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444032924,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":877,"timestamp":59865128493,"id":931,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444032927,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":19026,"timestamp":59865125362,"id":929,"tags":{"url":"/"},"startTime":1771444032923,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59865144468,"id":932,"parentId":929,"tags":{"url":"/","memory.rss":"736165888","memory.heapUsed":"272127736","memory.heapTotal":"302989312"},"startTime":1771444032943,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":351,"timestamp":59865328638,"id":934,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444033127,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":149,"timestamp":59865329242,"id":935,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444033127,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2236,"timestamp":59865328240,"id":933,"tags":{"url":"/api/monitor"},"startTime":1771444033126,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59865330495,"id":936,"parentId":933,"tags":{"url":"/api/monitor","memory.rss":"736378880","memory.heapUsed":"273792872","memory.heapTotal":"302989312"},"startTime":1771444033129,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59865330538,"id":937,"parentId":3,"tags":{},"startTime":1771444033129,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1404,"timestamp":59866148126,"id":939,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444033946,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":811,"timestamp":59866150384,"id":940,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444033948,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":18902,"timestamp":59866146519,"id":938,"tags":{"url":"/"},"startTime":1771444033945,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59866165496,"id":941,"parentId":938,"tags":{"url":"/","memory.rss":"736378880","memory.heapUsed":"275278232","memory.heapTotal":"302989312"},"startTime":1771444033964,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":192,"timestamp":59866342411,"id":943,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444034141,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":172,"timestamp":59866342885,"id":944,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444034141,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2861,"timestamp":59866341946,"id":942,"tags":{"url":"/api/monitor"},"startTime":1771444034140,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59866344830,"id":945,"parentId":942,"tags":{"url":"/api/monitor","memory.rss":"736378880","memory.heapUsed":"271344680","memory.heapTotal":"302989312"},"startTime":1771444034143,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":2,"timestamp":59866345704,"id":946,"parentId":3,"tags":{},"startTime":1771444034144,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1079,"timestamp":59867262145,"id":948,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444035060,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":973,"timestamp":59867264088,"id":949,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444035062,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":17864,"timestamp":59867261194,"id":947,"tags":{"url":"/"},"startTime":1771444035059,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59867279135,"id":950,"parentId":947,"tags":{"url":"/","memory.rss":"736378880","memory.heapUsed":"272846296","memory.heapTotal":"302989312"},"startTime":1771444035077,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59867459198,"id":953,"parentId":3,"tags":{},"startTime":1771444035257,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":227,"timestamp":59867459098,"id":952,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444035257,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":158,"timestamp":59867459631,"id":954,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444035258,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2028,"timestamp":59867458592,"id":951,"tags":{"url":"/api/monitor"},"startTime":1771444035257,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59867460636,"id":955,"parentId":951,"tags":{"url":"/api/monitor","memory.rss":"736378880","memory.heapUsed":"274482800","memory.heapTotal":"302989312"},"startTime":1771444035259,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":852,"timestamp":59868183476,"id":957,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444035982,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":979,"timestamp":59868185007,"id":958,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444035983,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":16517,"timestamp":59868182847,"id":956,"tags":{"url":"/"},"startTime":1771444035981,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59868199404,"id":959,"parentId":956,"tags":{"url":"/","memory.rss":"736493568","memory.heapUsed":"270284176","memory.heapTotal":"302989312"},"startTime":1771444035997,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":229,"timestamp":59868370326,"id":961,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444036168,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":130,"timestamp":59868370822,"id":962,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444036169,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1992,"timestamp":59868369884,"id":960,"tags":{"url":"/api/monitor"},"startTime":1771444036168,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59868371891,"id":963,"parentId":960,"tags":{"url":"/api/monitor","memory.rss":"736493568","memory.heapUsed":"271794824","memory.heapTotal":"302989312"},"startTime":1771444036170,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59868371928,"id":964,"parentId":3,"tags":{},"startTime":1771444036170,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1009,"timestamp":59869056429,"id":966,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444036855,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":865,"timestamp":59869058160,"id":967,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444036856,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":13172,"timestamp":59869055151,"id":965,"tags":{"url":"/"},"startTime":1771444036853,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59869068367,"id":968,"parentId":965,"tags":{"url":"/","memory.rss":"736493568","memory.heapUsed":"273282984","memory.heapTotal":"302989312"},"startTime":1771444036866,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59869242549,"id":971,"parentId":3,"tags":{},"startTime":1771444037041,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":360,"timestamp":59869242290,"id":970,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444037040,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":161,"timestamp":59869242972,"id":972,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444037041,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":2341,"timestamp":59869241892,"id":969,"tags":{"url":"/api/monitor"},"startTime":1771444037040,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59869244247,"id":973,"parentId":969,"tags":{"url":"/api/monitor","memory.rss":"736493568","memory.heapUsed":"269855248","memory.heapTotal":"288047104"},"startTime":1771444037042,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":589,"timestamp":59870315349,"id":975,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444038113,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":383,"timestamp":59870316306,"id":976,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444038114,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":12580,"timestamp":59870314750,"id":974,"tags":{"url":"/"},"startTime":1771444038113,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59870327374,"id":977,"parentId":974,"tags":{"url":"/","memory.rss":"736493568","memory.heapUsed":"271413736","memory.heapTotal":"288047104"},"startTime":1771444038125,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":185,"timestamp":59870508841,"id":979,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444038307,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59870509293,"id":980,"parentId":3,"tags":{},"startTime":1771444038307,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":118,"timestamp":59870509343,"id":981,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444038307,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1769,"timestamp":59870508459,"id":978,"tags":{"url":"/api/monitor"},"startTime":1771444038307,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59870510243,"id":982,"parentId":978,"tags":{"url":"/api/monitor","memory.rss":"736493568","memory.heapUsed":"272952208","memory.heapTotal":"288047104"},"startTime":1771444038308,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":923,"timestamp":59871578977,"id":984,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444039377,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1108,"timestamp":59871580663,"id":985,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444039379,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":16991,"timestamp":59871578039,"id":983,"tags":{"url":"/"},"startTime":1771444039376,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59871595117,"id":986,"parentId":983,"tags":{"url":"/","memory.rss":"736493568","memory.heapUsed":"274462808","memory.heapTotal":"288047104"},"startTime":1771444039393,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":192,"timestamp":59871772464,"id":988,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444039571,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":131,"timestamp":59871772861,"id":989,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444039571,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1771,"timestamp":59871772088,"id":987,"tags":{"url":"/api/monitor"},"startTime":1771444039570,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59871773875,"id":990,"parentId":987,"tags":{"url":"/api/monitor","memory.rss":"736493568","memory.heapUsed":"270130568","memory.heapTotal":"288047104"},"startTime":1771444039572,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59871774041,"id":991,"parentId":3,"tags":{},"startTime":1771444039572,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":566,"timestamp":59873836893,"id":993,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444041635,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":430,"timestamp":59873837828,"id":994,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444041636,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":11219,"timestamp":59873836298,"id":992,"tags":{"url":"/"},"startTime":1771444041634,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59873847551,"id":995,"parentId":992,"tags":{"url":"/","memory.rss":"736493568","memory.heapUsed":"271636440","memory.heapTotal":"288047104"},"startTime":1771444041646,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":190,"timestamp":59874036895,"id":997,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444041835,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":130,"timestamp":59874037300,"id":998,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444041835,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1731,"timestamp":59874036496,"id":996,"tags":{"url":"/api/monitor"},"startTime":1771444041835,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59874038241,"id":999,"parentId":996,"tags":{"url":"/api/monitor","memory.rss":"736493568","memory.heapUsed":"273141776","memory.heapTotal":"288047104"},"startTime":1771444041836,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59874038274,"id":1000,"parentId":3,"tags":{},"startTime":1771444041836,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":1176,"timestamp":59874607078,"id":1002,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444042405,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":873,"timestamp":59874608990,"id":1003,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1771444042407,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":15395,"timestamp":59874606060,"id":1001,"tags":{"url":"/"},"startTime":1771444042404,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59874621504,"id":1004,"parentId":1001,"tags":{"url":"/","memory.rss":"736493568","memory.heapUsed":"274623728","memory.heapTotal":"288047104"},"startTime":1771444042420,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":221,"timestamp":59874804335,"id":1006,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444042602,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":152,"timestamp":59874804888,"id":1007,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444042603,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":1939,"timestamp":59874803931,"id":1005,"tags":{"url":"/api/monitor"},"startTime":1771444042602,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":0,"timestamp":59874805884,"id":1008,"parentId":1005,"tags":{"url":"/api/monitor","memory.rss":"736755712","memory.heapUsed":"270657424","memory.heapTotal":"288047104"},"startTime":1771444042604,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":59874805942,"id":1009,"parentId":3,"tags":{},"startTime":1771444042604,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":554,"timestamp":59905005332,"id":1011,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444072803,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":469,"timestamp":59905006639,"id":1012,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444072805,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":6624,"timestamp":59905003961,"id":1010,"tags":{"url":"/api/monitor"},"startTime":1771444072802,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59905010628,"id":1013,"parentId":1010,"tags":{"url":"/api/monitor","memory.rss":"693239808","memory.heapUsed":"271179928","memory.heapTotal":"288309248"},"startTime":1771444072809,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":573,"timestamp":59935006388,"id":1015,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444102804,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":389,"timestamp":59935007748,"id":1016,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444102806,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":6816,"timestamp":59935004969,"id":1014,"tags":{"url":"/api/monitor"},"startTime":1771444102803,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":2,"timestamp":59935011855,"id":1017,"parentId":1014,"tags":{"url":"/api/monitor","memory.rss":"693239808","memory.heapUsed":"271677400","memory.heapTotal":"288309248"},"startTime":1771444102810,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":593,"timestamp":59965004623,"id":1019,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444132802,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":566,"timestamp":59965006036,"id":1020,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444132804,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":7108,"timestamp":59965003300,"id":1018,"tags":{"url":"/api/monitor"},"startTime":1771444132801,"traceId":"0fd53edc45d38466"},{"name":"memory-usage","duration":1,"timestamp":59965010467,"id":1021,"parentId":1018,"tags":{"url":"/api/monitor","memory.rss":"693239808","memory.heapUsed":"272189848","memory.heapTotal":"288309248"},"startTime":1771444132808,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":914,"timestamp":59995005358,"id":1023,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444162803,"traceId":"0fd53edc45d38466"},{"name":"ensure-page","duration":532,"timestamp":59995007287,"id":1024,"parentId":3,"tags":{"inputPage":"/api/monitor/route"},"startTime":1771444162805,"traceId":"0fd53edc45d38466"},{"name":"handle-request","duration":7823,"timestamp":59995003181,"id":1022,"tags":{"url":"/api/monitor"},"startTime":1771444162801,"traceId":"0fd53edc45d38466"}] +[{"name":"memory-usage","duration":1,"timestamp":59995011338,"id":1025,"parentId":1022,"tags":{"url":"/api/monitor","memory.rss":"693256192","memory.heapUsed":"272746408","memory.heapTotal":"288309248"},"startTime":1771444162809,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":9724,"timestamp":60021514220,"id":1035,"parentId":1029,"tags":{"request":"next-flight-client-entry-loader?server=false!"},"startTime":1771444189312,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":15417,"timestamp":60021514148,"id":1030,"parentId":1029,"tags":{"request":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"},"startTime":1771444189312,"traceId":"0fd53edc45d38466"},{"name":"build-module-tsx","duration":20303,"timestamp":60021524133,"id":1036,"parentId":1028,"tags":{"name":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx","layer":"app-pages-browser"},"startTime":1771444189322,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":31159,"timestamp":60021514207,"id":1032,"parentId":1029,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1771444189312,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":33310,"timestamp":60021514216,"id":1034,"parentId":1029,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-page.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fclient-segment.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fhttp-access-fallback%2Ferror-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Flayout-router.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Frender-from-template-context.js%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fnode_modules%2Fnext%2Fdist%2Flib%2Fmetadata%2Fmetadata-boundary.js%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1771444189312,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":33883,"timestamp":60021514199,"id":1031,"parentId":1029,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1771444189312,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":34113,"timestamp":60021514212,"id":1033,"parentId":1029,"tags":{"request":"next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"},"startTime":1771444189312,"traceId":"0fd53edc45d38466"},{"name":"make","duration":34750,"timestamp":60021513648,"id":1029,"parentId":1028,"tags":{},"startTime":1771444189311,"traceId":"0fd53edc45d38466"},{"name":"chunk-graph","duration":2494,"timestamp":60021564790,"id":1038,"parentId":1037,"tags":{},"startTime":1771444189363,"traceId":"0fd53edc45d38466"},{"name":"optimize-modules","duration":12,"timestamp":60021567377,"id":1040,"parentId":1037,"tags":{},"startTime":1771444189365,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunks","duration":159,"timestamp":60021567522,"id":1041,"parentId":1037,"tags":{},"startTime":1771444189365,"traceId":"0fd53edc45d38466"},{"name":"optimize-tree","duration":156,"timestamp":60021567819,"id":1042,"parentId":1037,"tags":{},"startTime":1771444189366,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunk-modules","duration":62,"timestamp":60021568048,"id":1043,"parentId":1037,"tags":{},"startTime":1771444189366,"traceId":"0fd53edc45d38466"},{"name":"optimize","duration":1658,"timestamp":60021567330,"id":1039,"parentId":1037,"tags":{},"startTime":1771444189365,"traceId":"0fd53edc45d38466"},{"name":"module-hash","duration":235,"timestamp":60021569781,"id":1044,"parentId":1037,"tags":{},"startTime":1771444189368,"traceId":"0fd53edc45d38466"},{"name":"code-generation","duration":3065,"timestamp":60021570030,"id":1045,"parentId":1037,"tags":{},"startTime":1771444189368,"traceId":"0fd53edc45d38466"},{"name":"hash","duration":4049,"timestamp":60021576952,"id":1046,"parentId":1037,"tags":{},"startTime":1771444189375,"traceId":"0fd53edc45d38466"},{"name":"code-generation-jobs","duration":106,"timestamp":60021581000,"id":1047,"parentId":1037,"tags":{},"startTime":1771444189379,"traceId":"0fd53edc45d38466"},{"name":"module-assets","duration":36,"timestamp":60021581098,"id":1048,"parentId":1037,"tags":{},"startTime":1771444189379,"traceId":"0fd53edc45d38466"},{"name":"create-chunk-assets","duration":7102,"timestamp":60021581137,"id":1049,"parentId":1037,"tags":{},"startTime":1771444189379,"traceId":"0fd53edc45d38466"},{"name":"NextJsBuildManifest-generateClientManifest","duration":658,"timestamp":60021591189,"id":1051,"parentId":1028,"tags":{},"startTime":1771444189389,"traceId":"0fd53edc45d38466"},{"name":"NextJsBuildManifest-createassets","duration":1099,"timestamp":60021590758,"id":1050,"parentId":1028,"tags":{},"startTime":1771444189389,"traceId":"0fd53edc45d38466"},{"name":"seal","duration":29064,"timestamp":60021564421,"id":1037,"parentId":1028,"tags":{},"startTime":1771444189362,"traceId":"0fd53edc45d38466"},{"name":"webpack-compilation","duration":82870,"timestamp":60021510687,"id":1028,"parentId":1026,"tags":{"name":"client"},"startTime":1771444189308,"traceId":"0fd53edc45d38466"},{"name":"emit","duration":8914,"timestamp":60021593685,"id":1052,"parentId":1026,"tags":{},"startTime":1771444189391,"traceId":"0fd53edc45d38466"},{"name":"webpack-invalidated-client","duration":105082,"timestamp":60021498637,"id":1026,"parentId":3,"tags":{"trigger":"src/app/page.tsx"},"startTime":1771444189296,"traceId":"0fd53edc45d38466"},{"name":"client-success","duration":1,"timestamp":60021608295,"id":1055,"parentId":3,"tags":{},"startTime":1771444189406,"traceId":"0fd53edc45d38466"},{"name":"build-module-tsx","duration":2070,"timestamp":60021612795,"id":1058,"parentId":1053,"tags":{"name":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx","layer":"rsc"},"startTime":1771444189411,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":6518,"timestamp":60021609322,"id":1056,"parentId":1054,"tags":{"request":"next-app-loader?name=app%2Fapi%2Fmonitor%2Froute&page=%2Fapi%2Fmonitor%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fmonitor%2Froute.ts&appDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1771444189407,"traceId":"0fd53edc45d38466"},{"name":"add-entry","duration":6658,"timestamp":60021609360,"id":1057,"parentId":1054,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fmattbruce%2FDocuments%2FProjects%2FOpenClaw%2FWeb%2Fheartbeat-monitor&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1771444189407,"traceId":"0fd53edc45d38466"},{"name":"build-module-tsx","duration":6848,"timestamp":60021621444,"id":1069,"parentId":1053,"tags":{"name":"/Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor/src/app/page.tsx","layer":"ssr"},"startTime":1771444189419,"traceId":"0fd53edc45d38466"},{"name":"client-hmr-latency","duration":129000,"timestamp":60021499658,"id":1070,"parentId":3,"tags":{"updatedModules":["[project]/src/app/page.tsx"],"page":"/","isPageHidden":true},"startTime":1771444189426,"traceId":"0fd53edc45d38466"},{"name":"make","duration":22611,"timestamp":60021607547,"id":1054,"parentId":1053,"tags":{},"startTime":1771444189405,"traceId":"0fd53edc45d38466"},{"name":"chunk-graph","duration":950,"timestamp":60021645846,"id":1072,"parentId":1071,"tags":{},"startTime":1771444189444,"traceId":"0fd53edc45d38466"},{"name":"optimize-modules","duration":8,"timestamp":60021646811,"id":1074,"parentId":1071,"tags":{},"startTime":1771444189445,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunks","duration":1145,"timestamp":60021646866,"id":1075,"parentId":1071,"tags":{},"startTime":1771444189445,"traceId":"0fd53edc45d38466"},{"name":"optimize-tree","duration":11,"timestamp":60021648055,"id":1076,"parentId":1071,"tags":{},"startTime":1771444189446,"traceId":"0fd53edc45d38466"},{"name":"optimize-chunk-modules","duration":12,"timestamp":60021648091,"id":1077,"parentId":1071,"tags":{},"startTime":1771444189446,"traceId":"0fd53edc45d38466"},{"name":"optimize","duration":1712,"timestamp":60021646806,"id":1073,"parentId":1071,"tags":{},"startTime":1771444189445,"traceId":"0fd53edc45d38466"},{"name":"module-hash","duration":339,"timestamp":60021649295,"id":1078,"parentId":1071,"tags":{},"startTime":1771444189447,"traceId":"0fd53edc45d38466"},{"name":"code-generation","duration":1051,"timestamp":60021649641,"id":1079,"parentId":1071,"tags":{},"startTime":1771444189447,"traceId":"0fd53edc45d38466"},{"name":"hash","duration":1747,"timestamp":60021651391,"id":1080,"parentId":1071,"tags":{},"startTime":1771444189449,"traceId":"0fd53edc45d38466"},{"name":"code-generation-jobs","duration":60,"timestamp":60021653138,"id":1081,"parentId":1071,"tags":{},"startTime":1771444189451,"traceId":"0fd53edc45d38466"},{"name":"module-assets","duration":36,"timestamp":60021653189,"id":1082,"parentId":1071,"tags":{},"startTime":1771444189451,"traceId":"0fd53edc45d38466"},{"name":"create-chunk-assets","duration":2045,"timestamp":60021653228,"id":1083,"parentId":1071,"tags":{},"startTime":1771444189451,"traceId":"0fd53edc45d38466"},{"name":"seal","duration":11103,"timestamp":60021645393,"id":1071,"parentId":1053,"tags":{},"startTime":1771444189443,"traceId":"0fd53edc45d38466"},{"name":"webpack-compilation","duration":50620,"timestamp":60021607215,"id":1053,"parentId":1027,"tags":{"name":"server"},"startTime":1771444189405,"traceId":"0fd53edc45d38466"},{"name":"emit","duration":2848,"timestamp":60021657854,"id":1084,"parentId":1027,"tags":{},"startTime":1771444189456,"traceId":"0fd53edc45d38466"},{"name":"webpack-invalidated-server","duration":162481,"timestamp":60021499136,"id":1027,"parentId":3,"tags":{"trigger":"src/app/page.tsx"},"startTime":1771444189297,"traceId":"0fd53edc45d38466"}] diff --git a/src/app/page.tsx b/src/app/page.tsx index a27c8618..d2442098 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -151,123 +151,148 @@ export default function HeartbeatMonitor() { if (loading) { return ( -
-
Loading...
+
+
Loading monitor...
); } return ( -
+
+ {/* Skip Link for Accessibility */} + + Skip to main content + + {/* Header */} -
-
-
- -
-

Heartbeat Monitor

-

{onlineApps} of {totalApps} services online

+
+
+
+
+
+ +
+ +
-
- - -
-
+ - {/* Table */} -
+ {/* Main Content */} +
+ {/* Table */}
- +
- - - - - - - - + + + + + + + + - + {apps.map((app) => { const { isUp, uptime, latest } = getAppStatus(app.id); return ( - - + - - - - + - - @@ -277,66 +302,91 @@ export default function HeartbeatMonitor() {
StatusNameURLPortUptimeResponseActions
StatusNameURLPortUptimeResponse + Actions +
- - - {isUp ? "ONLINE" : "OFFLINE"} +
+ + +

{app.name}

-

{app.description}

+ {app.description && ( +

{app.description}

+ )}
+ {app.url} {app.port} - = 90 ? "text-emerald-400" : "text-yellow-400"}`}> + + {app.port} + + = 90 ? "text-emerald-400" : uptime >= 50 ? "text-yellow-400" : "text-red-400"}`}> {uptime}% - {latest?.responseTime ? `${latest.responseTime}ms` : "--"} + + + {latest?.responseTime ? `${latest.responseTime}ms` : "—"} + -
+
+
- +
-
+ {/* Add App Modal */} {showAddApp && ( -
-
-

Add New App

-
+
+
+

Add New App

+
- + setNewApp({ ...newApp, name: e.target.value })} - className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white" + className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors" + placeholder="My Application" required + autoComplete="off" />
- + setNewApp({ ...newApp, description: e.target.value })} - className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white" + className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors" + placeholder="Brief description…" + autoComplete="off" />
- + setNewApp({ ...newApp, url: e.target.value })} - className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white" + className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors" + placeholder="http://localhost:3000" required + autoComplete="off" />
- + setNewApp({ ...newApp, port: parseInt(e.target.value) })} - className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white" + className="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2.5 text-white placeholder-slate-500 focus:border-emerald-500 focus:ring-1 focus:ring-emerald-500 transition-colors" required + min="1" + max="65535" />
-
+