From f6952e3ed08417084ce3887865fbe41e26429e8e Mon Sep 17 00:00:00 2001 From: Timur Davydov Date: Sat, 14 Feb 2026 00:24:16 +0400 Subject: [PATCH 1/3] chore: finalize release setup, build output and metadata for npm --- docs/webusb/commands.md | 7 +- package-lock.json | 188 ++++++++++-------- package.json | 12 +- packages/core/package.json | 17 +- packages/frontend-core/build_control.sh | 2 +- packages/frontend-core/package.json | 28 ++- .../scripts/generate-webusb-registrations.js | 3 +- packages/frontend-core/scripts/prebuild.js | 1 + packages/frontend-core/src/control/control.js | 2 +- .../frontend-core/src/control/control.wasm | Bin 562787 -> 559751 bytes .../frontend-core/src/webusb/commandQueue.ts | 5 + .../frontend-core/src/webusb/ensureWebUsb.ts | 2 +- .../frontend-core/src/webusb/webUsbBase.ts | 21 +- .../src/webusb/webUsbDeviceManager.ts | 4 +- .../frontend-core/src/webusb/webUsbLimeSdr.ts | 4 +- .../frontend-core/src/webusb/webUsbManager.ts | 15 +- .../frontend-core/src/webusb/webUsbWasm.ts | 10 +- .../frontend-core/src/webusb/webUsbWsdr.ts | 6 +- packages/frontend-core/tsconfig.json | 3 +- packages/nestjs-microservice/package.json | 25 ++- .../nestjs-microservice/src/common/index.ts | 2 +- packages/nestjs-microservice/tsconfig.json | 3 +- packages/vue3-components/package.json | 33 ++- .../src/components/Dropdown.vue | 8 +- .../src/components/SdrInput.vue | 10 +- .../src/components/components.d.ts | 4 + .../vue3-components/src/components/index.ts | 1 + packages/vue3-components/src/index.ts | 1 + packages/vue3-components/src/utils/index.ts | 4 + test-apps/package.json | 19 +- test-apps/usb-test.ts | 16 +- 31 files changed, 295 insertions(+), 161 deletions(-) create mode 100644 packages/vue3-components/src/components/components.d.ts create mode 100644 packages/vue3-components/src/utils/index.ts diff --git a/docs/webusb/commands.md b/docs/webusb/commands.md index 6e9a524..be5a07b 100644 --- a/docs/webusb/commands.md +++ b/docs/webusb/commands.md @@ -357,9 +357,8 @@ Param bitfield (`req_params.param`): - Bits 0..2 (`0x1..0x7`): synchronization selector. Mapped values are: `1` => "1pps", `2` => "rx", `3` => "tx", `5` => "any", `7` => "none" (others => "off"). - Bit 3 (`0x8`): start/stop control. If set, stream is not started; if clear, stream is started. -- Bit 4 (`0x10`): enable RX extended statistics. -Examples: `param=15` => start stream; `param=31` - start stream with extended RX stats. +Examples: `param=15` => start stream without synchronization. Expected response: @@ -367,8 +366,8 @@ Expected response: { "result": 0, "details": { - "wire-block-size": 0, - "wire-bursts": 0 + "wire-block-size": 32768, + "wire-bursts": 1 } } ``` diff --git a/package-lock.json b/package-lock.json index 7f18bf6..32a5489 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "websdr", - "version": "1.0.0", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "websdr", - "version": "1.0.0", + "version": "0.5.0", "license": "MIT", "workspaces": [ "./packages/core", @@ -104,7 +104,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1258,7 +1257,6 @@ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.13.tgz", "integrity": "sha512-ieqWtipT+VlyDWLz5Rvz0f3E5rXcVAnaAi+D53DEHLjc1kmFxCgZ62qVfTX2vwkywwqNkTNXvBgGR72hYqV//Q==", "license": "MIT", - "peer": true, "dependencies": { "file-type": "21.3.0", "iterare": "1.2.1", @@ -1360,7 +1358,6 @@ "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-11.1.13.tgz", "integrity": "sha512-o7KNZlJJe+6Qo/GdUeofIgrUINzSVYkl3UZ5px+e+fHhftDfx+W41QuKu+EXPkOm02R6qApDFp3UeIyJrBdS9g==", "license": "MIT", - "peer": true, "dependencies": { "iterare": "1.2.1", "tslib": "2.8.1" @@ -1456,7 +1453,6 @@ "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-11.1.13.tgz", "integrity": "sha512-8r8EadqBkrTYtH2uog42HfIb5fcP5a3iXymH/ityd9bO/gDson5Q1qbtCQRjuU++6NY12YYteKRu4eP/iErbLw==", "license": "MIT", - "peer": true, "dependencies": { "iterare": "1.2.1", "object-hash": "3.0.0", @@ -1531,6 +1527,7 @@ "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.4.1.tgz", "integrity": "sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==", "license": "MIT", + "peer": true, "dependencies": { "consola": "^3.2.3" }, @@ -1897,6 +1894,7 @@ "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "debug": "^4.4.0", "extract-zip": "^2.0.1", @@ -2513,7 +2511,8 @@ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@topoconfig/extends": { "version": "0.16.2", @@ -3023,9 +3022,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.2.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.2.tgz", - "integrity": "sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==", + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -3212,6 +3211,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -3473,7 +3473,6 @@ "integrity": "sha512-yTX7GVyM19tEbd+y5/gA6MkVKA6K61nVYHYAivD61Hx6odVFmQsaC3/R3cWAHM1P5oVKCevBbumPljbT+tFG2w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-compilation-targets": "^7.12.16", "@soda/friendly-errors-webpack-plugin": "^1.8.0", @@ -4220,7 +4219,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4270,6 +4268,7 @@ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 14" } @@ -4280,7 +4279,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4464,7 +4462,8 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0" + "license": "Python-2.0", + "peer": true }, "node_modules/array-flatten": { "version": "1.1.1", @@ -4499,6 +4498,7 @@ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.0.1" }, @@ -4583,11 +4583,12 @@ } }, "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.4.tgz", + "integrity": "sha512-u20zJLDaSWpxaZ+zaAkEIB2dZZ1o+DF4T/MRbmsvGp9nletHOyiai19OzX1fF8xUBYsO1bPXxODvcd0978pnug==", "dev": true, "license": "Apache-2.0", + "peer": true, "peerDependencies": { "react-native-b4a": "*" }, @@ -4671,6 +4672,7 @@ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -4681,12 +4683,13 @@ } }, "node_modules/bare-fs": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz", - "integrity": "sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz", + "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==", "dev": true, "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", @@ -4713,6 +4716,7 @@ "dev": true, "license": "Apache-2.0", "optional": true, + "peer": true, "engines": { "bare": ">=1.14.0" } @@ -4724,6 +4728,7 @@ "dev": true, "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "bare-os": "^3.0.1" } @@ -4735,6 +4740,7 @@ "dev": true, "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "streamx": "^2.21.0" }, @@ -4758,6 +4764,7 @@ "dev": true, "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "bare-path": "^3.0.0" } @@ -4799,6 +4806,7 @@ "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" } @@ -5009,7 +5017,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -5055,6 +5062,7 @@ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "*" } @@ -5300,6 +5308,7 @@ "integrity": "sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "mitt": "3.0.1", "zod": "3.23.8" @@ -5312,15 +5321,13 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/class-validator": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.3.tgz", "integrity": "sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==", "license": "MIT", - "peer": true, "dependencies": { "@types/validator": "^13.15.3", "libphonenumber-js": "^1.11.1", @@ -5480,6 +5487,7 @@ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5687,6 +5695,7 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "license": "MIT", + "peer": true, "engines": { "node": "^14.18.0 || >=16.10.0" } @@ -5819,6 +5828,7 @@ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -5886,7 +5896,6 @@ "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -5962,7 +5971,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6185,7 +6193,6 @@ "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10" } @@ -6630,7 +6637,6 @@ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -6738,6 +6744,7 @@ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 14" } @@ -6952,6 +6959,7 @@ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -7405,6 +7413,7 @@ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -7544,6 +7553,7 @@ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -7590,6 +7600,7 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -7637,6 +7648,7 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7694,6 +7706,7 @@ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "bare-events": "^2.7.0" } @@ -7817,6 +7830,7 @@ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7844,7 +7858,8 @@ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-glob": { "version": "3.3.3", @@ -7897,7 +7912,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-uri": { "version": "3.1.0", @@ -7945,6 +7961,7 @@ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "pend": "~1.2.0" } @@ -8474,6 +8491,7 @@ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "pump": "^3.0.0" }, @@ -8503,6 +8521,7 @@ "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -8626,9 +8645,9 @@ "license": "MIT" }, "node_modules/happy-dom": { - "version": "20.5.3", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.5.3.tgz", - "integrity": "sha512-xqAxGnkRU0KNhheHpxb3uScqg/aehqUiVto/a9ApWMyNvnH9CAqHYq9dEPAovM6bOGbLstmTfGIln5ZIezEU0g==", + "version": "20.6.1", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.6.1.tgz", + "integrity": "sha512-+0vhESXXhFwkdjZnJ5DlmJIfUYGgIEEjzIjB+aKJbFuqlvvKyOi+XkI1fYbgYR9QCxG5T08koxsQ6HrQfa5gCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8955,6 +8974,7 @@ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -8994,6 +9014,7 @@ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "4" @@ -9156,6 +9177,7 @@ "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 12" } @@ -9479,7 +9501,6 @@ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -9641,6 +9662,7 @@ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -10208,6 +10230,7 @@ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -10345,7 +10368,6 @@ "integrity": "sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.1", @@ -10479,7 +10501,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10593,7 +10614,8 @@ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/mlly": { "version": "1.8.0", @@ -10719,6 +10741,7 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4.0" } @@ -11133,6 +11156,7 @@ "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", @@ -11153,6 +11177,7 @@ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -11397,6 +11422,7 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" @@ -11422,14 +11448,16 @@ "node_modules/pause": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==", + "peer": true }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/picocolors": { "version": "1.1.1", @@ -11600,7 +11628,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12365,6 +12392,7 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -12492,6 +12520,7 @@ "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", @@ -12511,7 +12540,8 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/pseudomap": { "version": "1.0.2", @@ -12571,6 +12601,7 @@ "integrity": "sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@puppeteer/browsers": "2.6.1", "chromium-bidi": "0.11.0", @@ -12584,9 +12615,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -12713,7 +12744,6 @@ "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12724,7 +12754,6 @@ "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -13552,6 +13581,7 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -13585,6 +13615,7 @@ "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" @@ -13600,6 +13631,7 @@ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", @@ -13800,6 +13832,7 @@ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", @@ -14049,7 +14082,6 @@ "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -14098,6 +14130,7 @@ "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -14113,6 +14146,7 @@ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -14179,7 +14213,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -14239,11 +14272,12 @@ "license": "MIT" }, "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.5.tgz", + "integrity": "sha512-ymKEOrjEhNE0+Gehpn2Dw59Vp2fNG0DQvCRAJpCjVqB1Pkj1AMBzDpow4H9kSa6XqO/wZrb5TLxEigx+nEaiBA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "b4a": "^1.6.4" } @@ -14344,7 +14378,8 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/thunky": { "version": "1.1.0", @@ -14411,7 +14446,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -14650,7 +14684,8 @@ "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/typescript": { "version": "5.9.3", @@ -14658,7 +14693,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14704,6 +14738,7 @@ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -14729,6 +14764,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -14908,7 +14944,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -15002,7 +15037,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -15016,7 +15050,6 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", @@ -15162,7 +15195,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.28.tgz", "integrity": "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.28", "@vue/compiler-sfc": "3.5.28", @@ -15317,12 +15349,11 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.105.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", - "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "version": "5.105.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", + "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -15493,7 +15524,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -15611,7 +15641,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -15701,7 +15730,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -15962,6 +15990,7 @@ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15981,6 +16010,7 @@ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -15991,6 +16021,7 @@ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -16002,35 +16033,36 @@ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "packages/core": { "name": "@websdr/core", - "version": "1.0.0", + "version": "0.5.0", "license": "MIT", "devDependencies": { - "@types/node": "^25.2.2" + "@types/node": "^25.2.3" } }, "packages/frontend-core": { "name": "@websdr/frontend-core", - "version": "1.0.0", + "version": "0.5.0", "license": "MIT", "dependencies": { - "@websdr/core": "^1.0.0", + "@websdr/core": "^0.5.0", "usb": "^2.17.0" }, "devDependencies": { "@types/emscripten": "^1.41.5", - "@types/node": "^25.2.2", + "@types/node": "^25.2.3", "@types/w3c-web-usb": "^1.0.13" } }, "packages/nestjs-microservice": { "name": "@websdr/nestjs-microservice", - "version": "1.0.0", + "version": "0.5.0", "license": "MIT", "dependencies": { "@nestjs/common": "^11.1.13", @@ -16040,8 +16072,8 @@ "@nestjs/passport": "^11.0.5", "@nestjs/testing": "^11.1.13", "@nestjs/websockets": "^11.1.13", - "@types/node": "^25.2.2", - "@websdr/core": "^1.0.0", + "@types/node": "^25.2.3", + "@websdr/core": "^0.5.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.3", "passport-jwt": "^4.0.1", @@ -16054,11 +16086,11 @@ }, "packages/vue3-components": { "name": "@websdr/vue3-components", - "version": "1.0.0", + "version": "0.5.0", "license": "MIT", "dependencies": { - "@websdr/core": "^1.0.0", - "@websdr/frontend-core": "^1.0.0", + "@websdr/core": "^0.5.0", + "@websdr/frontend-core": "^0.5.0", "vue": "^3.5.28" }, "devDependencies": { @@ -16066,7 +16098,7 @@ "@vue/cli-plugin-typescript": "^5.0.9", "@vue/cli-service": "^5.0.9", "@vue/test-utils": "^2.4.6", - "happy-dom": "^20.5.3", + "happy-dom": "^20.6.1", "sass": "^1.97.3", "vue-tsc": "^3.2.4" } diff --git a/package.json b/package.json index 1ea8983..b13fdb4 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,21 @@ { "name": "websdr", - "version": "1.0.0", + "version": "0.5.0", "description": "WebSDR package", - "author": "Timur ", + "author": "Timur Davydov ", "license": "MIT", "keywords": [ + "radio", "websdr", + "webusb", "sdr", "wsdr", - "wavelet" + "wavelet", + "usdr", + "xsdr", + "ssdr" ], + "publishConfig": { "access": "public" }, "type": "module", "workspaces": [ "./packages/core", diff --git a/packages/core/package.json b/packages/core/package.json index 02d0760..376a5f0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,10 +1,19 @@ { "name": "@websdr/core", - "version": "1.0.0", + "version": "0.5.0", "description": "This is the core package for WebSDR", - "author": "Timur ", + "author": "Timur Davydov ", "license": "MIT", - "keywords": [], + "keywords": [ + "circular buffer", + "conversion", + "journal", + "logger", + "time" + ], + "publishConfig": { + "access": "public" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "type": "module", @@ -15,7 +24,7 @@ "test:coverage": "vitest run --coverage" }, "devDependencies": { - "@types/node": "^25.2.2" + "@types/node": "^25.2.3" }, "exports": { ".": { diff --git a/packages/frontend-core/build_control.sh b/packages/frontend-core/build_control.sh index 822501a..cd72ba9 100755 --- a/packages/frontend-core/build_control.sh +++ b/packages/frontend-core/build_control.sh @@ -25,4 +25,4 @@ LIB_GIT_BRANCH=${LIB_GIT_BRANCH} \ LIB_CMAKE_PATH=${LIB_CMAKE_PATH} \ EXPORTED_RUNTIME_METHODS=${EXPORTED_RUNTIME_METHODS} \ ASYNCIFY_IMPORTS=${ASYNCIFY_IMPORTS} \ -${BUILD_SCRIPT} +${BUILD_SCRIPT} $@ diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json index 6e33b42..f8286a3 100644 --- a/packages/frontend-core/package.json +++ b/packages/frontend-core/package.json @@ -1,10 +1,23 @@ { "name": "@websdr/frontend-core", - "version": "1.0.0", + "version": "0.5.0", "description": "This is the core frontend package for WebSDR", - "author": "Timur ", + "author": "Timur Davydov ", "license": "MIT", - "keywords": [], + "keywords": [ + "radio", + "websdr", + "webusb", + "sdr", + "wsdr", + "wavelet", + "usdr", + "xsdr", + "ssdr" + ], + "publishConfig": { + "access": "public" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "type": "module", @@ -16,12 +29,12 @@ "test:coverage": "vitest run --coverage" }, "dependencies": { - "@websdr/core": "^1.0.0", + "@websdr/core": "^0.5.0", "usb": "^2.17.0" }, "devDependencies": { "@types/emscripten": "^1.41.5", - "@types/node": "^25.2.2", + "@types/node": "^25.2.3", "@types/w3c-web-usb": "^1.0.13" }, "exports": { @@ -35,11 +48,6 @@ "import": "./dist/common/index.js", "require": "./dist/common/index.js" }, - "./control": { - "types": "./dist/control/control.d.ts", - "import": "./dist/control/control.js", - "require": "./dist/control/control.js" - }, "./services": { "types": "./dist/services/index.d.ts", "import": "./dist/services/index.js", diff --git a/packages/frontend-core/scripts/generate-webusb-registrations.js b/packages/frontend-core/scripts/generate-webusb-registrations.js index a37d43a..0960be8 100644 --- a/packages/frontend-core/scripts/generate-webusb-registrations.js +++ b/packages/frontend-core/scripts/generate-webusb-registrations.js @@ -94,8 +94,9 @@ export function generateWebUsbRegistrations() { } // Allow running directly: `node scripts/generate-webusb-registrations.js` -if (import.meta.url === `file://${__filename}`) { +if (process.argv[1] === __filename) { try { + console.log('Generating WebUSB registrations...'); generateWebUsbRegistrations(); process.exit(0); } catch (e) { diff --git a/packages/frontend-core/scripts/prebuild.js b/packages/frontend-core/scripts/prebuild.js index 9a0c346..ffd988b 100644 --- a/packages/frontend-core/scripts/prebuild.js +++ b/packages/frontend-core/scripts/prebuild.js @@ -22,6 +22,7 @@ function copyDir(src, dest, skipFiles = []) { (function main() { try { + console.log('Generating WebUSB registrations...'); generateWebUsbRegistrations(); console.log('Copying control files...'); copyDir(path.join(pkgRoot, 'src', 'control'), path.join(pkgRoot, 'dist', 'control'), ['pre.js']); diff --git a/packages/frontend-core/src/control/control.js b/packages/frontend-core/src/control/control.js index 618d48a..161a839 100644 --- a/packages/frontend-core/src/control/control.js +++ b/packages/frontend-core/src/control/control.js @@ -2,5 +2,5 @@ /* eslint-disable */ import { write_ep1, write_ep2, read_ep1, read_ep2, write_log_js } from '@/webusb/webUsbControlApi'; -async function Module(moduleArg={}){var moduleRtn;(function(){function humanReadableVersionToPacked(str){str=str.split("-")[0];var vers=str.split(".").slice(0,3);while(vers.length<3)vers.push("00");vers=vers.map((n,i,arr)=>n.padStart(2,"0"));return vers.join("")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(".");var TARGET_NOT_SUPPORTED=2147483647;var currentNodeVersion=typeof process!=="undefined"&&process?.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<16e4){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(16e4)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}var currentSafariVersion=typeof navigator!=="undefined"&&navigator?.userAgent?.includes("Safari/")&&navigator.userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)?humanReadableVersionToPacked(navigator.userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=typeof navigator!=="undefined"&&navigator?.userAgent?.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(navigator.userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=typeof navigator!=="undefined"&&navigator?.userAgent?.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(navigator.userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!isNode)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var fs=require("fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("path").dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(!globalThis.WebAssembly){err("no native wasm support detected")}var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;HEAPU32[max+4>>2]=2310721022;HEAPU32[0>>2]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_preloadFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function missingLibrarySymbol(sym){unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;if(what.indexOf("RuntimeError: unreachable")>=0){what+='. "unreachable" may be due to ASYNCIFY_STACK_SIZE not being large enough (try increasing it)'}var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("control.wasm")}return new URL("control.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){Asyncify.instrumentWasmImports(wasmImports);var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var dynCalls={};var dynCallLegacy=(sig,ptr,args)=>{sig=sig.replace(/p/g,"i");assert(sig in dynCalls,`bad function pointer type - sig is not in dynCalls: '${sig}'`);if(args?.length){assert(args.length===sig.length-1)}else{assert(sig.length==1)}var f=dynCalls[sig];return f(ptr,...args)};var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var __abort_js=()=>abort("native code called abort()");var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return BigInt(ret)};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetperformance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var abortOnCannotGrowMemory=requestedSize=>{abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`)};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"removeRunDependency requires an ID");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"addRunDependency requires an ID");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err(`dependency: ${dep}`)}if(shown){err("(end of list)")}},1e4);runDependencyWatcher.unref?.()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){assert(plugin["handle"].constructor.name==="AsyncFunction","Filesystem plugin handlers must be async functions (See #24914)");return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var runAndAbortIfError=func=>{try{return func()}catch(e){abort(e)}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}checkStackCookie();if(e instanceof WebAssembly.RuntimeError){if(_emscripten_stack_get_current()<=0){err("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)")}}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;readyPromiseReject?.(msg);err(msg)}_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){err("user callback triggered after runtime exited or application aborted. Ignoring.");return}try{func();maybeExit()}catch(e){handleException(e)}};var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{assert(runtimeKeepaliveCounter>0);runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(write_ep1|write_ep2|read_ep1|read_ep2|write_log_js|invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x);imports[x]=(...args)=>{var originalAsyncifyState=Asyncify.state;try{return original(...args)}finally{var changedToDisabled=originalAsyncifyState===Asyncify.State.Normal&&Asyncify.state===Asyncify.State.Disabled;var ignoredInvoke=x.startsWith("invoke_")&&true;if(Asyncify.state!==originalAsyncifyState&&!isAsyncifyImport&&!changedToDisabled&&!ignoredInvoke){abort(`import ${x} was not in ASYNCIFY_IMPORTS, but changed the state`)}}}}}},instrumentFunction(original){var wrapper=(...args)=>{Asyncify.exportCallStack.push(original);try{return original(...args)}finally{if(!ABORT){var top=Asyncify.exportCallStack.pop();assert(top===original);Asyncify.maybeStopUnwind()}}};Asyncify.funcWrappers.set(original,wrapper);wrapper=createNamedFunction(`__asyncify_wrapper_${original.name}`,wrapper);return wrapper},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){var wrapper=Asyncify.instrumentFunction(original);ret[x]=wrapper}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callstackFuncToId:new Map,callStackIdToFunc:new Map,funcWrappers:new Map,callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(func){assert(func);if(!Asyncify.callstackFuncToId.has(func)){var id=Asyncify.callStackId++;Asyncify.callstackFuncToId.set(func,id);Asyncify.callStackIdToFunc.set(id,func)}return Asyncify.callstackFuncToId.get(func)},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){assert(Asyncify.currData,"Tried to wait for an async operation when none is in progress.");assert(!Asyncify.asyncPromiseHandlers,"Cannot have multiple async operations in flight at once");return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve,reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){HEAPU32[ptr>>2]=stack;HEAPU32[ptr+4>>2]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];assert(bottomOfCallStack,"exportCallStack is empty");var rewindId=Asyncify.getCallStackId(bottomOfCallStack);HEAP32[ptr+8>>2]=rewindId},getDataRewindFunc(ptr){var id=HEAP32[ptr+8>>2];var func=Asyncify.callStackIdToFunc.get(id);assert(func,`id ${id} not found in callStackIdToFunc`);return func},doRewind(ptr){var original=Asyncify.getDataRewindFunc(ptr);var func=Asyncify.funcWrappers.get(original);assert(original);assert(func);return func()},handleSleep(startAsync){assert(Asyncify.state!==Asyncify.State.Disabled,"Asyncify cannot be done during or after the runtime exits");if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{assert(!handleSleepReturnValue||typeof handleSleepReturnValue=="number"||typeof handleSleepReturnValue=="boolean");if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}assert(!Asyncify.exportCallStack.length,"Waking up (starting to rewind) must be done from JS, without compiled code on the stack.");Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof MainLoop!="undefined"&&MainLoop.func){MainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof MainLoop!="undefined"&&MainLoop.func){MainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync:startAsync=>Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);var stringToAscii=(str,buffer)=>{for(var i=0;i{var str="";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["AsciiToString"]=AsciiToString;Module["stringToAscii"]=stringToAscii;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","zeroMemory","getHeapMax","growMemory","withStackSave","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","autoResumeAudioContext","getDynCaller","asmjsMangle","alignMemory","HandleAllocator","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","ExceptionInfo","findMatchingCatch","Browser_asyncPrepareDataCounter","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","out","err","callMain","abort","wasmExports","HEAPF64","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","createNamedFunction","ptrToString","exitJS","abortOnCannotGrowMemory","ENV","ERRNO_CODES","strError","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","getExecutableName","dynCallLegacy","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","mmapAlloc","wasmTable","wasmMemory","getUniqueRunDependency","noExitRuntime","addRunDependency","removeRunDependency","addOnPreRun","addOnPostRun","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","isLeapYear","ydayFromDate","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_readFiles","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","runAndAbortIfError","Asyncify","Fibers","SDL","SDL_gfx","print","printErr","jstoi_s"];unexportedSymbols.forEach(unexportedRuntimeSymbol);Module["ccall"]=ccall;Module["stringToAscii"]=stringToAscii;Module["AsciiToString"]=AsciiToString;function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}function __asyncjs__write_ep1(fd,data,len){return Asyncify.handleAsync(async()=>await write_ep1(fd,data,len))}function __asyncjs__read_ep1(fd,data,len){return Asyncify.handleAsync(async()=>await read_ep1(fd,data,len))}function __asyncjs__write_ep2(fd,data,len){return Asyncify.handleAsync(async()=>await write_ep2(fd,data,len))}function __asyncjs__read_ep2(fd,data,len){return Asyncify.handleAsync(async()=>await read_ep2(fd,data,len))}function __asyncjs__write_log(fd,sevirity,str){return Asyncify.handleAsync(async()=>write_log_js(fd,sevirity,str))}var _init_lib=Module["_init_lib"]=makeInvalidEarlyAccess("_init_lib");var _close_device=Module["_close_device"]=makeInvalidEarlyAccess("_close_device");var _send_command=Module["_send_command"]=makeInvalidEarlyAccess("_send_command");var _send_debug_command=Module["_send_debug_command"]=makeInvalidEarlyAccess("_send_debug_command");var _fflush=makeInvalidEarlyAccess("_fflush");var _strerror=makeInvalidEarlyAccess("_strerror");var _malloc=Module["_malloc"]=makeInvalidEarlyAccess("_malloc");var _free=Module["_free"]=makeInvalidEarlyAccess("_free");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var dynCall_ii=makeInvalidEarlyAccess("dynCall_ii");var dynCall_iiii=makeInvalidEarlyAccess("dynCall_iiii");var dynCall_jiji=makeInvalidEarlyAccess("dynCall_jiji");var dynCall_iidiiii=makeInvalidEarlyAccess("dynCall_iidiiii");var dynCall_vii=makeInvalidEarlyAccess("dynCall_vii");var dynCall_iii=makeInvalidEarlyAccess("dynCall_iii");var dynCall_iij=makeInvalidEarlyAccess("dynCall_iij");var dynCall_viiii=makeInvalidEarlyAccess("dynCall_viiii");var dynCall_iiiii=makeInvalidEarlyAccess("dynCall_iiiii");var dynCall_iiij=makeInvalidEarlyAccess("dynCall_iiij");var dynCall_iiiijii=makeInvalidEarlyAccess("dynCall_iiiijii");var dynCall_iiiiiiiii=makeInvalidEarlyAccess("dynCall_iiiiiiiii");var dynCall_vi=makeInvalidEarlyAccess("dynCall_vi");var dynCall_viiiii=makeInvalidEarlyAccess("dynCall_viiiii");var dynCall_iiji=makeInvalidEarlyAccess("dynCall_iiji");var dynCall_iijii=makeInvalidEarlyAccess("dynCall_iijii");var dynCall_iiiiiii=makeInvalidEarlyAccess("dynCall_iiiiiii");var dynCall_viiiiiii=makeInvalidEarlyAccess("dynCall_viiiiiii");var dynCall_iiiiii=makeInvalidEarlyAccess("dynCall_iiiiii");var dynCall_iiiiiiii=makeInvalidEarlyAccess("dynCall_iiiiiiii");var dynCall_iijiiiiii=makeInvalidEarlyAccess("dynCall_iijiiiiii");var _asyncify_start_unwind=makeInvalidEarlyAccess("_asyncify_start_unwind");var _asyncify_stop_unwind=makeInvalidEarlyAccess("_asyncify_stop_unwind");var _asyncify_start_rewind=makeInvalidEarlyAccess("_asyncify_start_rewind");var _asyncify_stop_rewind=makeInvalidEarlyAccess("_asyncify_stop_rewind");var memory=makeInvalidEarlyAccess("memory");var __indirect_function_table=makeInvalidEarlyAccess("__indirect_function_table");var wasmMemory=makeInvalidEarlyAccess("wasmMemory");function assignWasmExports(wasmExports){assert(typeof wasmExports["init_lib"]!="undefined","missing Wasm export: init_lib");_init_lib=Module["_init_lib"]=createExportWrapper("init_lib",3);assert(typeof wasmExports["close_device"]!="undefined","missing Wasm export: close_device");_close_device=Module["_close_device"]=createExportWrapper("close_device",1);assert(typeof wasmExports["send_command"]!="undefined","missing Wasm export: send_command");_send_command=Module["_send_command"]=createExportWrapper("send_command",5);assert(typeof wasmExports["send_debug_command"]!="undefined","missing Wasm export: send_debug_command");_send_debug_command=Module["_send_debug_command"]=createExportWrapper("send_debug_command",5);assert(typeof wasmExports["fflush"]!="undefined","missing Wasm export: fflush");_fflush=createExportWrapper("fflush",1);assert(typeof wasmExports["strerror"]!="undefined","missing Wasm export: strerror");_strerror=createExportWrapper("strerror",1);assert(typeof wasmExports["malloc"]!="undefined","missing Wasm export: malloc");_malloc=Module["_malloc"]=createExportWrapper("malloc",1);assert(typeof wasmExports["free"]!="undefined","missing Wasm export: free");_free=Module["_free"]=createExportWrapper("free",1);assert(typeof wasmExports["emscripten_stack_init"]!="undefined","missing Wasm export: emscripten_stack_init");_emscripten_stack_init=wasmExports["emscripten_stack_init"];assert(typeof wasmExports["emscripten_stack_get_free"]!="undefined","missing Wasm export: emscripten_stack_get_free");_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];assert(typeof wasmExports["emscripten_stack_get_base"]!="undefined","missing Wasm export: emscripten_stack_get_base");_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];assert(typeof wasmExports["emscripten_stack_get_end"]!="undefined","missing Wasm export: emscripten_stack_get_end");_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];assert(typeof wasmExports["_emscripten_stack_restore"]!="undefined","missing Wasm export: _emscripten_stack_restore");__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];assert(typeof wasmExports["_emscripten_stack_alloc"]!="undefined","missing Wasm export: _emscripten_stack_alloc");__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];assert(typeof wasmExports["emscripten_stack_get_current"]!="undefined","missing Wasm export: emscripten_stack_get_current");_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];assert(typeof wasmExports["dynCall_ii"]!="undefined","missing Wasm export: dynCall_ii");dynCall_ii=dynCalls["ii"]=createExportWrapper("dynCall_ii",2);assert(typeof wasmExports["dynCall_iiii"]!="undefined","missing Wasm export: dynCall_iiii");dynCall_iiii=dynCalls["iiii"]=createExportWrapper("dynCall_iiii",4);assert(typeof wasmExports["dynCall_jiji"]!="undefined","missing Wasm export: dynCall_jiji");dynCall_jiji=dynCalls["jiji"]=createExportWrapper("dynCall_jiji",4);assert(typeof wasmExports["dynCall_iidiiii"]!="undefined","missing Wasm export: dynCall_iidiiii");dynCall_iidiiii=dynCalls["iidiiii"]=createExportWrapper("dynCall_iidiiii",7);assert(typeof wasmExports["dynCall_vii"]!="undefined","missing Wasm export: dynCall_vii");dynCall_vii=dynCalls["vii"]=createExportWrapper("dynCall_vii",3);assert(typeof wasmExports["dynCall_iii"]!="undefined","missing Wasm export: dynCall_iii");dynCall_iii=dynCalls["iii"]=createExportWrapper("dynCall_iii",3);assert(typeof wasmExports["dynCall_iij"]!="undefined","missing Wasm export: dynCall_iij");dynCall_iij=dynCalls["iij"]=createExportWrapper("dynCall_iij",3);assert(typeof wasmExports["dynCall_viiii"]!="undefined","missing Wasm export: dynCall_viiii");dynCall_viiii=dynCalls["viiii"]=createExportWrapper("dynCall_viiii",5);assert(typeof wasmExports["dynCall_iiiii"]!="undefined","missing Wasm export: dynCall_iiiii");dynCall_iiiii=dynCalls["iiiii"]=createExportWrapper("dynCall_iiiii",5);assert(typeof wasmExports["dynCall_iiij"]!="undefined","missing Wasm export: dynCall_iiij");dynCall_iiij=dynCalls["iiij"]=createExportWrapper("dynCall_iiij",4);assert(typeof wasmExports["dynCall_iiiijii"]!="undefined","missing Wasm export: dynCall_iiiijii");dynCall_iiiijii=dynCalls["iiiijii"]=createExportWrapper("dynCall_iiiijii",7);assert(typeof wasmExports["dynCall_iiiiiiiii"]!="undefined","missing Wasm export: dynCall_iiiiiiiii");dynCall_iiiiiiiii=dynCalls["iiiiiiiii"]=createExportWrapper("dynCall_iiiiiiiii",9);assert(typeof wasmExports["dynCall_vi"]!="undefined","missing Wasm export: dynCall_vi");dynCall_vi=dynCalls["vi"]=createExportWrapper("dynCall_vi",2);assert(typeof wasmExports["dynCall_viiiii"]!="undefined","missing Wasm export: dynCall_viiiii");dynCall_viiiii=dynCalls["viiiii"]=createExportWrapper("dynCall_viiiii",6);assert(typeof wasmExports["dynCall_iiji"]!="undefined","missing Wasm export: dynCall_iiji");dynCall_iiji=dynCalls["iiji"]=createExportWrapper("dynCall_iiji",4);assert(typeof wasmExports["dynCall_iijii"]!="undefined","missing Wasm export: dynCall_iijii");dynCall_iijii=dynCalls["iijii"]=createExportWrapper("dynCall_iijii",5);assert(typeof wasmExports["dynCall_iiiiiii"]!="undefined","missing Wasm export: dynCall_iiiiiii");dynCall_iiiiiii=dynCalls["iiiiiii"]=createExportWrapper("dynCall_iiiiiii",7);assert(typeof wasmExports["dynCall_viiiiiii"]!="undefined","missing Wasm export: dynCall_viiiiiii");dynCall_viiiiiii=dynCalls["viiiiiii"]=createExportWrapper("dynCall_viiiiiii",8);assert(typeof wasmExports["dynCall_iiiiii"]!="undefined","missing Wasm export: dynCall_iiiiii");dynCall_iiiiii=dynCalls["iiiiii"]=createExportWrapper("dynCall_iiiiii",6);assert(typeof wasmExports["dynCall_iiiiiiii"]!="undefined","missing Wasm export: dynCall_iiiiiiii");dynCall_iiiiiiii=dynCalls["iiiiiiii"]=createExportWrapper("dynCall_iiiiiiii",8);assert(typeof wasmExports["dynCall_iijiiiiii"]!="undefined","missing Wasm export: dynCall_iijiiiiii");dynCall_iijiiiiii=dynCalls["iijiiiiii"]=createExportWrapper("dynCall_iijiiiiii",9);assert(typeof wasmExports["asyncify_start_unwind"]!="undefined","missing Wasm export: asyncify_start_unwind");_asyncify_start_unwind=createExportWrapper("asyncify_start_unwind",1);assert(typeof wasmExports["asyncify_stop_unwind"]!="undefined","missing Wasm export: asyncify_stop_unwind");_asyncify_stop_unwind=createExportWrapper("asyncify_stop_unwind",0);assert(typeof wasmExports["asyncify_start_rewind"]!="undefined","missing Wasm export: asyncify_start_rewind");_asyncify_start_rewind=createExportWrapper("asyncify_start_rewind",1);assert(typeof wasmExports["asyncify_stop_rewind"]!="undefined","missing Wasm export: asyncify_stop_rewind");_asyncify_stop_rewind=createExportWrapper("asyncify_stop_rewind",0);assert(typeof wasmExports["memory"]!="undefined","missing Wasm export: memory");memory=wasmMemory=wasmExports["memory"];assert(typeof wasmExports["__indirect_function_table"]!="undefined","missing Wasm export: __indirect_function_table");__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={__asyncjs__read_ep1,__asyncjs__read_ep2,__asyncjs__write_ep1,__asyncjs__write_ep2,__asyncjs__write_log,_abort_js:__abort_js,_localtime_js:__localtime_js,_mktime_js:__mktime_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write};var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();consumedModuleProp("onRuntimeInitialized");assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);["stdout","stderr"].forEach(name=>{var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty?.output?.length){has=true}})}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} +async function Module(moduleArg={}){var moduleRtn;(function(){function humanReadableVersionToPacked(str){str=str.split("-")[0];var vers=str.split(".").slice(0,3);while(vers.length<3)vers.push("00");vers=vers.map((n,i,arr)=>n.padStart(2,"0"));return vers.join("")}var packedVersionToHumanReadable=n=>[n/1e4|0,(n/100|0)%100,n%100].join(".");var TARGET_NOT_SUPPORTED=2147483647;var currentNodeVersion=typeof process!=="undefined"&&process.versions?.node?humanReadableVersionToPacked(process.versions.node):TARGET_NOT_SUPPORTED;if(currentNodeVersion<16e4){throw new Error(`This emscripten-generated code requires node v${packedVersionToHumanReadable(16e4)} (detected v${packedVersionToHumanReadable(currentNodeVersion)})`)}var userAgent=typeof navigator!=="undefined"&&navigator.userAgent;if(!userAgent){return}var currentSafariVersion=userAgent.includes("Safari/")&&userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)?humanReadableVersionToPacked(userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):TARGET_NOT_SUPPORTED;if(currentSafariVersion<15e4){throw new Error(`This emscripten-generated code requires Safari v${packedVersionToHumanReadable(15e4)} (detected v${currentSafariVersion})`)}var currentFirefoxVersion=userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentFirefoxVersion<79){throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`)}var currentChromeVersion=userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):TARGET_NOT_SUPPORTED;if(currentChromeVersion<85){throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`)}})();var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!isNode)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var fs=require("fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("path").dirname(require("url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);assert(Buffer.isBuffer(ret));return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");assert(binary?Buffer.isBuffer(ret):typeof ret=="string");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{throw new Error("environment detection error")}var out=console.log.bind(console);var err=console.error.bind(console);assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var wasmBinary;if(!globalThis.WebAssembly){err("no native wasm support detected")}var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}var isFileURI=filename=>filename.startsWith("file://");function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>2]=34821223;HEAPU32[max+4>>2]=2310721022;HEAPU32[0>>2]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>2];var cookie2=HEAPU32[max+4>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var runtimeDebug=true;(()=>{var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)abort("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function consumedModuleProp(prop){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,set(){abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}}function makeInvalidEarlyAccess(name){return()=>assert(false,`call to '${name}' via reference taken before Wasm module initialization`)}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`)}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_preloadFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function missingLibrarySymbol(sym){unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg=`'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}assert(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}consumedModuleProp("preRun");callRuntimeCallbacks(onPreRuns)}function initRuntime(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}consumedModuleProp("postRun");callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;if(what.indexOf("RuntimeError: unreachable")>=0){what+='. "unreachable" may be due to ASYNCIFY_STACK_SIZE not being large enough (try increasing it)'}var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("control.wasm")}return new URL("control.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);if(isFileURI(binaryFile)){err(`warning: Loading from a file URI (${binaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`)}abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){Asyncify.instrumentWasmImports(wasmImports);var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{try{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);reject(e)}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var dynCalls={};var dynCallLegacy=(sig,ptr,args)=>{sig=sig.replace(/p/g,"i");assert(sig in dynCalls,`bad function pointer type - sig is not in dynCalls: '${sig}'`);if(args?.length){assert(args.length===sig.length-1)}else{assert(sig.length==1)}var f=dynCalls[sig];return f(ptr,...args)};var noExitRuntime=true;var ptrToString=ptr=>{assert(typeof ptr==="number",`ptrToString expects a number, got ${typeof ptr}`);ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var __abort_js=()=>abort("native code called abort()");var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return BigInt(ret)};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);assert(winterName);assert(summerName);assert(lengthBytesUTF8(winterName)<=16,`timezone name truncated to fit in TZNAME_MAX (${winterName})`);assert(lengthBytesUTF8(summerName)<=16,`timezone name truncated to fit in TZNAME_MAX (${summerName})`);if(summerOffsetperformance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var abortOnCannotGrowMemory=requestedSize=>{abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`)};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>2]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var strError=errno=>UTF8ToString(_strerror(errno));var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>{var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}};var runDependencies=0;var dependenciesFulfilled=null;var runDependencyTracking={};var runDependencyWatcher=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"removeRunDependency requires an ID");assert(runDependencyTracking[id]);delete runDependencyTracking[id];if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies);assert(id,"addRunDependency requires an ID");assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&globalThis.setInterval){runDependencyWatcher=setInterval(()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err(`dependency: ${dep}`)}if(shown){err("(end of list)")}},1e4);runDependencyWatcher.unref?.()}};var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){assert(plugin["handle"].constructor.name==="AsyncFunction","Filesystem plugin handlers must be async functions (See #24914)");return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class extends Error{name="ErrnoError";constructor(errno){super(runtimeInitialized?strError(errno):"");this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){assert(fd>=-1);stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){assert(offset>=0);if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){assert(offset>=0);if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){assert(!FS.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node},absolutePath(){abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder(){abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink(){abort("FS.createLink has been removed; use FS.symlink instead")},joinPath(){abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc(){abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath(){abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var runAndAbortIfError=func=>{try{return func()}catch(e){abort(e)}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}checkStackCookie();if(e instanceof WebAssembly.RuntimeError){if(_emscripten_stack_get_current()<=0){err("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)")}}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;readyPromiseReject?.(msg);err(msg)}_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){err("user callback triggered after runtime exited or application aborted. Ignoring.");return}try{func();maybeExit()}catch(e){handleException(e)}};var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{assert(runtimeKeepaliveCounter>0);runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(write_ep1|write_ep2|read_ep1|read_ep2|write_log_js|invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x);imports[x]=(...args)=>{var originalAsyncifyState=Asyncify.state;try{return original(...args)}finally{var changedToDisabled=originalAsyncifyState===Asyncify.State.Normal&&Asyncify.state===Asyncify.State.Disabled;var ignoredInvoke=x.startsWith("invoke_")&&true;if(Asyncify.state!==originalAsyncifyState&&!isAsyncifyImport&&!changedToDisabled&&!ignoredInvoke){abort(`import ${x} was not in ASYNCIFY_IMPORTS, but changed the state`)}}}}}},instrumentFunction(original){var wrapper=(...args)=>{Asyncify.exportCallStack.push(original);try{return original(...args)}finally{if(!ABORT){var top=Asyncify.exportCallStack.pop();assert(top===original);Asyncify.maybeStopUnwind()}}};Asyncify.funcWrappers.set(original,wrapper);wrapper=createNamedFunction(`__asyncify_wrapper_${original.name}`,wrapper);return wrapper},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){var wrapper=Asyncify.instrumentFunction(original);ret[x]=wrapper}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callstackFuncToId:new Map,callStackIdToFunc:new Map,funcWrappers:new Map,callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(func){assert(func);if(!Asyncify.callstackFuncToId.has(func)){var id=Asyncify.callStackId++;Asyncify.callstackFuncToId.set(func,id);Asyncify.callStackIdToFunc.set(id,func)}return Asyncify.callstackFuncToId.get(func)},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){assert(Asyncify.currData,"Tried to wait for an async operation when none is in progress.");assert(!Asyncify.asyncPromiseHandlers,"Cannot have multiple async operations in flight at once");return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve,reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){HEAPU32[ptr>>2]=stack;HEAPU32[ptr+4>>2]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];assert(bottomOfCallStack,"exportCallStack is empty");var rewindId=Asyncify.getCallStackId(bottomOfCallStack);HEAP32[ptr+8>>2]=rewindId},getDataRewindFunc(ptr){var id=HEAP32[ptr+8>>2];var func=Asyncify.callStackIdToFunc.get(id);assert(func,`id ${id} not found in callStackIdToFunc`);return func},doRewind(ptr){var original=Asyncify.getDataRewindFunc(ptr);var func=Asyncify.funcWrappers.get(original);assert(original);assert(func);return func()},handleSleep(startAsync){assert(Asyncify.state!==Asyncify.State.Disabled,"Asyncify cannot be done during or after the runtime exits");if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{assert(!handleSleepReturnValue||typeof handleSleepReturnValue=="number"||typeof handleSleepReturnValue=="boolean");if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}assert(!Asyncify.exportCallStack.length,"Waking up (starting to rewind) must be done from JS, without compiled code on the stack.");Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof MainLoop!="undefined"&&MainLoop.func){MainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof MainLoop!="undefined"&&MainLoop.func){MainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync:startAsync=>Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);var stringToAscii=(str,buffer)=>{for(var i=0;i{var str="";while(1){var ch=HEAPU8[ptr++];if(!ch)return str;str+=String.fromCharCode(ch)}};FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");assert(typeof Module["ENVIRONMENT"]=="undefined","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");assert(typeof Module["STACK_SIZE"]=="undefined","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Module["wasmMemory"]=="undefined","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(typeof Module["INITIAL_MEMORY"]=="undefined","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}consumedModuleProp("preInit")}Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["AsciiToString"]=AsciiToString;Module["stringToAscii"]=stringToAscii;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","getTempRet0","setTempRet0","zeroMemory","getHeapMax","growMemory","withStackSave","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","autoResumeAudioContext","getDynCaller","asmjsMangle","alignMemory","HandleAllocator","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","intArrayToString","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","ExceptionInfo","findMatchingCatch","Browser_asyncPrepareDataCounter","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","out","err","callMain","abort","wasmExports","HEAPF64","HEAP64","HEAPU64","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","stackSave","stackRestore","stackAlloc","createNamedFunction","ptrToString","exitJS","abortOnCannotGrowMemory","ENV","ERRNO_CODES","strError","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","getExecutableName","dynCallLegacy","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","mmapAlloc","wasmTable","wasmMemory","getUniqueRunDependency","noExitRuntime","addRunDependency","removeRunDependency","addOnPreRun","addOnPostRun","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","intArrayFromString","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","getEnvStrings","checkWasiClock","doReadv","doWritev","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","isLeapYear","ydayFromDate","SYSCALLS","preloadPlugins","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar_buffer","FS_stdin_getChar","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_readFiles","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","FS_absolutePath","FS_createFolder","FS_createLink","FS_joinPath","FS_mmapAlloc","FS_standardizePath","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","runAndAbortIfError","Asyncify","Fibers","SDL","SDL_gfx","print","printErr","jstoi_s"];unexportedSymbols.forEach(unexportedRuntimeSymbol);Module["ccall"]=ccall;Module["stringToAscii"]=stringToAscii;Module["AsciiToString"]=AsciiToString;function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}function __asyncjs__write_ep1(fd,data,len){return Asyncify.handleAsync(async()=>await write_ep1(fd,data,len))}function __asyncjs__read_ep1(fd,data,len){return Asyncify.handleAsync(async()=>await read_ep1(fd,data,len))}function __asyncjs__write_ep2(fd,data,len){return Asyncify.handleAsync(async()=>await write_ep2(fd,data,len))}function __asyncjs__read_ep2(fd,data,len){return Asyncify.handleAsync(async()=>await read_ep2(fd,data,len))}function __asyncjs__write_log(fd,sevirity,str){return Asyncify.handleAsync(async()=>write_log_js(fd,sevirity,str))}var _init_lib=Module["_init_lib"]=makeInvalidEarlyAccess("_init_lib");var _close_device=Module["_close_device"]=makeInvalidEarlyAccess("_close_device");var _send_command=Module["_send_command"]=makeInvalidEarlyAccess("_send_command");var _send_debug_command=Module["_send_debug_command"]=makeInvalidEarlyAccess("_send_debug_command");var _fflush=makeInvalidEarlyAccess("_fflush");var _strerror=makeInvalidEarlyAccess("_strerror");var _malloc=Module["_malloc"]=makeInvalidEarlyAccess("_malloc");var _free=Module["_free"]=makeInvalidEarlyAccess("_free");var _emscripten_stack_init=makeInvalidEarlyAccess("_emscripten_stack_init");var _emscripten_stack_get_free=makeInvalidEarlyAccess("_emscripten_stack_get_free");var _emscripten_stack_get_base=makeInvalidEarlyAccess("_emscripten_stack_get_base");var _emscripten_stack_get_end=makeInvalidEarlyAccess("_emscripten_stack_get_end");var __emscripten_stack_restore=makeInvalidEarlyAccess("__emscripten_stack_restore");var __emscripten_stack_alloc=makeInvalidEarlyAccess("__emscripten_stack_alloc");var _emscripten_stack_get_current=makeInvalidEarlyAccess("_emscripten_stack_get_current");var dynCall_ii=makeInvalidEarlyAccess("dynCall_ii");var dynCall_iiii=makeInvalidEarlyAccess("dynCall_iiii");var dynCall_jiji=makeInvalidEarlyAccess("dynCall_jiji");var dynCall_iidiiii=makeInvalidEarlyAccess("dynCall_iidiiii");var dynCall_vii=makeInvalidEarlyAccess("dynCall_vii");var dynCall_iii=makeInvalidEarlyAccess("dynCall_iii");var dynCall_iij=makeInvalidEarlyAccess("dynCall_iij");var dynCall_viiii=makeInvalidEarlyAccess("dynCall_viiii");var dynCall_iiiii=makeInvalidEarlyAccess("dynCall_iiiii");var dynCall_iiij=makeInvalidEarlyAccess("dynCall_iiij");var dynCall_iiiijii=makeInvalidEarlyAccess("dynCall_iiiijii");var dynCall_iiiiiiiii=makeInvalidEarlyAccess("dynCall_iiiiiiiii");var dynCall_vi=makeInvalidEarlyAccess("dynCall_vi");var dynCall_viiiii=makeInvalidEarlyAccess("dynCall_viiiii");var dynCall_iiji=makeInvalidEarlyAccess("dynCall_iiji");var dynCall_iijii=makeInvalidEarlyAccess("dynCall_iijii");var dynCall_iiiiiii=makeInvalidEarlyAccess("dynCall_iiiiiii");var dynCall_viiiiiii=makeInvalidEarlyAccess("dynCall_viiiiiii");var dynCall_iiiiii=makeInvalidEarlyAccess("dynCall_iiiiii");var dynCall_iiiiiiii=makeInvalidEarlyAccess("dynCall_iiiiiiii");var dynCall_iijiiiiii=makeInvalidEarlyAccess("dynCall_iijiiiiii");var _asyncify_start_unwind=makeInvalidEarlyAccess("_asyncify_start_unwind");var _asyncify_stop_unwind=makeInvalidEarlyAccess("_asyncify_stop_unwind");var _asyncify_start_rewind=makeInvalidEarlyAccess("_asyncify_start_rewind");var _asyncify_stop_rewind=makeInvalidEarlyAccess("_asyncify_stop_rewind");var memory=makeInvalidEarlyAccess("memory");var __indirect_function_table=makeInvalidEarlyAccess("__indirect_function_table");var wasmMemory=makeInvalidEarlyAccess("wasmMemory");function assignWasmExports(wasmExports){assert(typeof wasmExports["init_lib"]!="undefined","missing Wasm export: init_lib");assert(typeof wasmExports["close_device"]!="undefined","missing Wasm export: close_device");assert(typeof wasmExports["send_command"]!="undefined","missing Wasm export: send_command");assert(typeof wasmExports["send_debug_command"]!="undefined","missing Wasm export: send_debug_command");assert(typeof wasmExports["fflush"]!="undefined","missing Wasm export: fflush");assert(typeof wasmExports["strerror"]!="undefined","missing Wasm export: strerror");assert(typeof wasmExports["malloc"]!="undefined","missing Wasm export: malloc");assert(typeof wasmExports["free"]!="undefined","missing Wasm export: free");assert(typeof wasmExports["emscripten_stack_init"]!="undefined","missing Wasm export: emscripten_stack_init");assert(typeof wasmExports["emscripten_stack_get_free"]!="undefined","missing Wasm export: emscripten_stack_get_free");assert(typeof wasmExports["emscripten_stack_get_base"]!="undefined","missing Wasm export: emscripten_stack_get_base");assert(typeof wasmExports["emscripten_stack_get_end"]!="undefined","missing Wasm export: emscripten_stack_get_end");assert(typeof wasmExports["_emscripten_stack_restore"]!="undefined","missing Wasm export: _emscripten_stack_restore");assert(typeof wasmExports["_emscripten_stack_alloc"]!="undefined","missing Wasm export: _emscripten_stack_alloc");assert(typeof wasmExports["emscripten_stack_get_current"]!="undefined","missing Wasm export: emscripten_stack_get_current");assert(typeof wasmExports["dynCall_ii"]!="undefined","missing Wasm export: dynCall_ii");assert(typeof wasmExports["dynCall_iiii"]!="undefined","missing Wasm export: dynCall_iiii");assert(typeof wasmExports["dynCall_jiji"]!="undefined","missing Wasm export: dynCall_jiji");assert(typeof wasmExports["dynCall_iidiiii"]!="undefined","missing Wasm export: dynCall_iidiiii");assert(typeof wasmExports["dynCall_vii"]!="undefined","missing Wasm export: dynCall_vii");assert(typeof wasmExports["dynCall_iii"]!="undefined","missing Wasm export: dynCall_iii");assert(typeof wasmExports["dynCall_iij"]!="undefined","missing Wasm export: dynCall_iij");assert(typeof wasmExports["dynCall_viiii"]!="undefined","missing Wasm export: dynCall_viiii");assert(typeof wasmExports["dynCall_iiiii"]!="undefined","missing Wasm export: dynCall_iiiii");assert(typeof wasmExports["dynCall_iiij"]!="undefined","missing Wasm export: dynCall_iiij");assert(typeof wasmExports["dynCall_iiiijii"]!="undefined","missing Wasm export: dynCall_iiiijii");assert(typeof wasmExports["dynCall_iiiiiiiii"]!="undefined","missing Wasm export: dynCall_iiiiiiiii");assert(typeof wasmExports["dynCall_vi"]!="undefined","missing Wasm export: dynCall_vi");assert(typeof wasmExports["dynCall_viiiii"]!="undefined","missing Wasm export: dynCall_viiiii");assert(typeof wasmExports["dynCall_iiji"]!="undefined","missing Wasm export: dynCall_iiji");assert(typeof wasmExports["dynCall_iijii"]!="undefined","missing Wasm export: dynCall_iijii");assert(typeof wasmExports["dynCall_iiiiiii"]!="undefined","missing Wasm export: dynCall_iiiiiii");assert(typeof wasmExports["dynCall_viiiiiii"]!="undefined","missing Wasm export: dynCall_viiiiiii");assert(typeof wasmExports["dynCall_iiiiii"]!="undefined","missing Wasm export: dynCall_iiiiii");assert(typeof wasmExports["dynCall_iiiiiiii"]!="undefined","missing Wasm export: dynCall_iiiiiiii");assert(typeof wasmExports["dynCall_iijiiiiii"]!="undefined","missing Wasm export: dynCall_iijiiiiii");assert(typeof wasmExports["asyncify_start_unwind"]!="undefined","missing Wasm export: asyncify_start_unwind");assert(typeof wasmExports["asyncify_stop_unwind"]!="undefined","missing Wasm export: asyncify_stop_unwind");assert(typeof wasmExports["asyncify_start_rewind"]!="undefined","missing Wasm export: asyncify_start_rewind");assert(typeof wasmExports["asyncify_stop_rewind"]!="undefined","missing Wasm export: asyncify_stop_rewind");assert(typeof wasmExports["memory"]!="undefined","missing Wasm export: memory");assert(typeof wasmExports["__indirect_function_table"]!="undefined","missing Wasm export: __indirect_function_table");_init_lib=Module["_init_lib"]=createExportWrapper("init_lib",3);_close_device=Module["_close_device"]=createExportWrapper("close_device",1);_send_command=Module["_send_command"]=createExportWrapper("send_command",5);_send_debug_command=Module["_send_debug_command"]=createExportWrapper("send_debug_command",5);_fflush=createExportWrapper("fflush",1);_strerror=createExportWrapper("strerror",1);_malloc=Module["_malloc"]=createExportWrapper("malloc",1);_free=Module["_free"]=createExportWrapper("free",1);_emscripten_stack_init=wasmExports["emscripten_stack_init"];_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"];_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"];_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];dynCall_ii=dynCalls["ii"]=createExportWrapper("dynCall_ii",2);dynCall_iiii=dynCalls["iiii"]=createExportWrapper("dynCall_iiii",4);dynCall_jiji=dynCalls["jiji"]=createExportWrapper("dynCall_jiji",4);dynCall_iidiiii=dynCalls["iidiiii"]=createExportWrapper("dynCall_iidiiii",7);dynCall_vii=dynCalls["vii"]=createExportWrapper("dynCall_vii",3);dynCall_iii=dynCalls["iii"]=createExportWrapper("dynCall_iii",3);dynCall_iij=dynCalls["iij"]=createExportWrapper("dynCall_iij",3);dynCall_viiii=dynCalls["viiii"]=createExportWrapper("dynCall_viiii",5);dynCall_iiiii=dynCalls["iiiii"]=createExportWrapper("dynCall_iiiii",5);dynCall_iiij=dynCalls["iiij"]=createExportWrapper("dynCall_iiij",4);dynCall_iiiijii=dynCalls["iiiijii"]=createExportWrapper("dynCall_iiiijii",7);dynCall_iiiiiiiii=dynCalls["iiiiiiiii"]=createExportWrapper("dynCall_iiiiiiiii",9);dynCall_vi=dynCalls["vi"]=createExportWrapper("dynCall_vi",2);dynCall_viiiii=dynCalls["viiiii"]=createExportWrapper("dynCall_viiiii",6);dynCall_iiji=dynCalls["iiji"]=createExportWrapper("dynCall_iiji",4);dynCall_iijii=dynCalls["iijii"]=createExportWrapper("dynCall_iijii",5);dynCall_iiiiiii=dynCalls["iiiiiii"]=createExportWrapper("dynCall_iiiiiii",7);dynCall_viiiiiii=dynCalls["viiiiiii"]=createExportWrapper("dynCall_viiiiiii",8);dynCall_iiiiii=dynCalls["iiiiii"]=createExportWrapper("dynCall_iiiiii",6);dynCall_iiiiiiii=dynCalls["iiiiiiii"]=createExportWrapper("dynCall_iiiiiiii",8);dynCall_iijiiiiii=dynCalls["iijiiiiii"]=createExportWrapper("dynCall_iijiiiiii",9);_asyncify_start_unwind=createExportWrapper("asyncify_start_unwind",1);_asyncify_stop_unwind=createExportWrapper("asyncify_stop_unwind",0);_asyncify_start_rewind=createExportWrapper("asyncify_start_rewind",1);_asyncify_stop_rewind=createExportWrapper("asyncify_stop_rewind",0);memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={__asyncjs__read_ep1,__asyncjs__read_ep2,__asyncjs__write_ep1,__asyncjs__write_ep2,__asyncjs__write_log,_abort_js:__abort_js,_localtime_js:__localtime_js,_mktime_js:__mktime_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write};var calledRun;function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}stackCheckInit();preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){assert(!calledRun);calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();consumedModuleProp("onRuntimeInitialized");assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);for(var name of["stdout","stderr"]){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty?.output?.length){has=true}}}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} ;return moduleRtn}export default Module; diff --git a/packages/frontend-core/src/control/control.wasm b/packages/frontend-core/src/control/control.wasm index 086973de179d801f10e3effebe72d9ffe0ca57dd..b7d8d7097ffa32359a6113e4f28f48918eff71e0 100755 GIT binary patch delta 74448 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 L_Y~=A(sKL%&l2d9 diff --git a/packages/frontend-core/src/webusb/commandQueue.ts b/packages/frontend-core/src/webusb/commandQueue.ts index a5e1eb0..e70c4ae 100644 --- a/packages/frontend-core/src/webusb/commandQueue.ts +++ b/packages/frontend-core/src/webusb/commandQueue.ts @@ -1,5 +1,7 @@ import { CircularBuffer } from '@websdr/core/utils'; +const debug_command_queue = false; + /** * Command queue item */ @@ -51,12 +53,15 @@ export class CommandQueue { if ((rep as any)['error'] !== undefined) { const err = (rep as any)['error']; const errmsg = `CommandQueue: Reply to command '${JSON.stringify(com.req)}' contains error: ${err}`; + if (debug_command_queue) console.error(errmsg); com.reject?.(errmsg); } else { + if (debug_command_queue) console.log('CommandQueue: Command', JSON.stringify(com.req), '=>', JSON.stringify(rep)); com.resolve?.(rep); } } catch (err) { const errmsg = `CommandQueue: Reply to command '${JSON.stringify(com.req)}' exception: ${err}`; + if (debug_command_queue) console.error(errmsg); com.reject?.(errmsg); } } diff --git a/packages/frontend-core/src/webusb/ensureWebUsb.ts b/packages/frontend-core/src/webusb/ensureWebUsb.ts index 1c9e211..70b823b 100644 --- a/packages/frontend-core/src/webusb/ensureWebUsb.ts +++ b/packages/frontend-core/src/webusb/ensureWebUsb.ts @@ -6,7 +6,7 @@ export async function ensureWebUsb(): Promise { // Try prefer "usb" package (recommended by maintainer warning), then fallback to "webusb" const tryLoad = async (name: string) => { try { - const mod = await import(name); + const mod = await import(/* @vite-ignore */name); if (!mod) { throw null; } diff --git a/packages/frontend-core/src/webusb/webUsbBase.ts b/packages/frontend-core/src/webusb/webUsbBase.ts index e4b366a..664b0b5 100644 --- a/packages/frontend-core/src/webusb/webUsbBase.ts +++ b/packages/frontend-core/src/webusb/webUsbBase.ts @@ -247,20 +247,23 @@ export abstract class WebUsb extends EventTarget { * should call `open()` and then perform device-specific claiming and * configuration (control transfers etc.). */ - async open(): Promise { + async open(device?: USBDevice): Promise { if (debug_webusb) console.log('WebUsbBase.open()') navigator.usb.removeEventListener("connect", this._onConnect); navigator.usb.removeEventListener("disconnect", this._onDisconnect); navigator.usb.addEventListener("connect", this._onConnect); navigator.usb.addEventListener("disconnect", this._onDisconnect); - this.device = undefined; - const devices = await navigator.usb.getDevices(); - for (let device of devices) { - if (debug_webusb) console.log('DEVICE', device, this.vid, this.pid) - if (device.vendorId === this.vid && device.productId === this.pid) { - this.device = device; - if (debug_webusb) console.log('FOUND DEVICE', device) - break; + this.device = device; + if (!this.device) { + const devices = await navigator.usb.getDevices(); + if (debug_webusb) console.log('DEVICES', devices) + for (let device of devices) { + if (debug_webusb) console.log('DEVICE', device, this.vid, this.pid) + if (device.vendorId === this.vid && device.productId === this.pid) { + this.device = device; + if (debug_webusb) console.log('FOUND DEVICE', device) + break; + } } } if (globalThis.debug_mode || debug_webusb) console.log('WebUsbBase.device', this.device) diff --git a/packages/frontend-core/src/webusb/webUsbDeviceManager.ts b/packages/frontend-core/src/webusb/webUsbDeviceManager.ts index d11099a..07f2e55 100644 --- a/packages/frontend-core/src/webusb/webUsbDeviceManager.ts +++ b/packages/frontend-core/src/webusb/webUsbDeviceManager.ts @@ -29,7 +29,7 @@ export class WebUsbDeviceManager { this.module = params.module; } - async open(vid: number, pid: number): Promise { + async open(vid: number, pid: number, device?: USBDevice): Promise { if (!this.module) { console.error('Error: control module is not defined') return undefined; @@ -59,7 +59,7 @@ export class WebUsbDeviceManager { console.error(`Error: unsupported WebUSB device vid=0x${vid.toString(16)}, pid=0x${pid.toString(16)}`); return undefined; } - await this.webUsbDevices[fd]?.open(); + await this.webUsbDevices[fd]?.open(device); return this.webUsbDevices[fd]; } diff --git a/packages/frontend-core/src/webusb/webUsbLimeSdr.ts b/packages/frontend-core/src/webusb/webUsbLimeSdr.ts index 13273ad..efb2bdf 100644 --- a/packages/frontend-core/src/webusb/webUsbLimeSdr.ts +++ b/packages/frontend-core/src/webusb/webUsbLimeSdr.ts @@ -183,8 +183,8 @@ export class WebUsbLimeSdr extends WebUsbWasm { return output; } - async open(): Promise { - if (await super.open() && this.device) { + async open(device?: USBDevice): Promise { + if (await super.open(device) && this.device) { try { // if (!this.device.opened) await this.device.close(); await this.device.open(); diff --git a/packages/frontend-core/src/webusb/webUsbManager.ts b/packages/frontend-core/src/webusb/webUsbManager.ts index 8ef2758..608cad8 100644 --- a/packages/frontend-core/src/webusb/webUsbManager.ts +++ b/packages/frontend-core/src/webusb/webUsbManager.ts @@ -28,7 +28,7 @@ export function getWebUsbManagerInstance(mode: WebUsbManagerMode): WebUsbManager break; } } - if (webUsbManager[mode] === undefined) throw new Error("webUsbManager[mode] can't be undefined") + if (webUsbManager[mode] === undefined) throw new Error("webUsbManager[mode] can't be undefined"); return webUsbManager[mode]!; } @@ -36,6 +36,7 @@ export interface RequestDeviceInfo { devName: string, vendorId: number, productId: number, + device?: USBDevice, } export abstract class WebUsbManager { @@ -56,7 +57,7 @@ export abstract class WebUsbManager { const vendorId = device.vendorId; const productId = device.productId; - return { devName, vendorId, productId } + return { devName, vendorId, productId, device } } } catch (err) { console.error('requestDevice: error:', err); @@ -64,7 +65,7 @@ export abstract class WebUsbManager { return undefined; } - abstract open(vendorId?: number, productId?: number): Promise; + abstract open(vendorId?: number, productId?: number, device?: USBDevice): Promise; abstract close(fd: number): Promise; abstract closeAll(): Promise; abstract getName(fd: number): Promise; @@ -85,10 +86,10 @@ class WebUsbSingleManager extends WebUsbManager { super() } - async open(vendorId?: number, productId?: number): Promise { + async open(vendorId?: number, productId?: number, device?: USBDevice): Promise { // console.warn('WebUsbSingleManager.open', vendorId, productId); if (vendorId === undefined || productId === undefined) return -1; - const dev = await globalThis.webUsbDeviceManager?.open(vendorId, productId); + const dev = await globalThis.webUsbDeviceManager?.open(vendorId, productId, device); if (!dev) return -1; return dev.fd; } @@ -190,7 +191,7 @@ class WebUsbWorkerManager extends WebUsbManager { this.startWorker(); } - async open(vendorId?: number, productId?: number): Promise { + async open(vendorId?: number, productId?: number, device?: USBDevice): Promise { // console.warn('WebUsbWorkerManager.open', vendorId, productId); if (vendorId === undefined || productId === undefined) return -1; if (!this.worker) { @@ -396,7 +397,7 @@ export class WebUsbDummyManager extends WebUsbManager { super() } - async open(vendorId?: number, productId?: number): Promise { + async open(vendorId?: number, productId?: number, device?: USBDevice): Promise { this._stream_status = 'PREPARED'; return 0; } diff --git a/packages/frontend-core/src/webusb/webUsbWasm.ts b/packages/frontend-core/src/webusb/webUsbWasm.ts index 22f345f..49234e8 100644 --- a/packages/frontend-core/src/webusb/webUsbWasm.ts +++ b/packages/frontend-core/src/webusb/webUsbWasm.ts @@ -18,7 +18,8 @@ export abstract class WebUsbWasm extends WebUsb { */ async sendCommandToDevice(req: Record): Promise> { let ret: Record = {}; - if (!this.module || !this.device) return { error: -1 }; + if (!this.module) return { error: "Control module is not initialized" }; + if (!this.device) return { error: "Device is not initialized" }; const in_cmd = this.module._malloc(512); const out_res = this.module._malloc(512); const req_str = JSON.stringify(req); @@ -52,7 +53,8 @@ export abstract class WebUsbWasm extends WebUsb { * Implement the abstract debug method by delegating to the WASM helper. */ async sendDebugCommandToDevice(req: string): Promise { - if (!this.module || !this.device) return 'Error: module or device is undefined'; + if (!this.module) return 'Error: module is not initialized'; + if (!this.device) return 'Error: device is not initialized'; const in_cmd = this.module._malloc(4096); const out_res = this.module._malloc(4096); this.module.stringToAscii(req, in_cmd); @@ -69,11 +71,11 @@ export abstract class WebUsbWasm extends WebUsb { return ret; } - async open(): Promise { + async open(device?: USBDevice): Promise { if (!this.module) { console.error('Control module is not initialized'); return false; } - return super.open(); + return super.open(device); } } diff --git a/packages/frontend-core/src/webusb/webUsbWsdr.ts b/packages/frontend-core/src/webusb/webUsbWsdr.ts index 5bbf515..7beb913 100644 --- a/packages/frontend-core/src/webusb/webUsbWsdr.ts +++ b/packages/frontend-core/src/webusb/webUsbWsdr.ts @@ -77,7 +77,7 @@ export abstract class WebUsbWsdr extends WebUsbWasm { if (globalThis.debug_mode || debug_usb_log) console.log('RECEIVED DATA', data) const id = opts !== undefined && opts.id !== undefined ? opts.id : -1; - const extraMeta = opts?.extra_meta === true; + const extraMeta = true; // now it's always extra meta (old condition: opts?.extra_meta === true;) const trailerSize = WebUsbWsdr.TRAILER_SIZE + (extraMeta ? WebUsbWsdr.TRAILER_EXTRA_SIZE : 0); const dataSize = data.byteLength - trailerSize; const samplesRecv = (dataSize / COMPLEX_INT16_SIZE) >> 0; @@ -156,8 +156,8 @@ export abstract class WebUsbWsdr extends WebUsbWasm { return output; } - async open(): Promise { - if (await super.open() && this.device) { + async open(device?: USBDevice): Promise { + if (await super.open(device) && this.device) { try { // if (!this.device.opened) await this.device.close(); await this.device.open(); diff --git a/packages/frontend-core/tsconfig.json b/packages/frontend-core/tsconfig.json index 7f678df..862f22e 100644 --- a/packages/frontend-core/tsconfig.json +++ b/packages/frontend-core/tsconfig.json @@ -3,6 +3,7 @@ // File Layout "rootDir": "src", "outDir": "dist", + // Path Mapping "baseUrl": ".", "paths": { "@/*": [ @@ -53,4 +54,4 @@ "node_modules", "dist" ] -} \ No newline at end of file +} diff --git a/packages/nestjs-microservice/package.json b/packages/nestjs-microservice/package.json index 0fc0870..dab525d 100644 --- a/packages/nestjs-microservice/package.json +++ b/packages/nestjs-microservice/package.json @@ -1,10 +1,20 @@ { "name": "@websdr/nestjs-microservice", - "version": "1.0.0", + "version": "0.5.0", "description": "This is a NestJS microservice for WebSDR", - "author": "Timur ", + "author": "Timur Davydov ", "license": "MIT", - "keywords": [], + "keywords": [ + "nestjs", + "microservice", + "websdr", + "auth", + "users", + "jwt" + ], + "publishConfig": { + "access": "public" + }, "main": "dist/index.js", "types": "dist/index.d.ts", "type": "module", @@ -22,8 +32,8 @@ "@nestjs/passport": "^11.0.5", "@nestjs/testing": "^11.1.13", "@nestjs/websockets": "^11.1.13", - "@types/node": "^25.2.2", - "@websdr/core": "^1.0.0", + "@types/node": "^25.2.3", + "@websdr/core": "^0.5.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.3", "passport-jwt": "^4.0.1", @@ -39,6 +49,11 @@ "import": "./dist/index.js", "require": "./dist/index.js" }, + "./common": { + "types": "./dist/common/index.d.ts", + "import": "./dist/common/index.js", + "require": "./dist/common/index.js" + }, "./auth": { "types": "./dist/auth/index.d.ts", "import": "./dist/auth/index.js", diff --git a/packages/nestjs-microservice/src/common/index.ts b/packages/nestjs-microservice/src/common/index.ts index 7d481ec..c108177 100644 --- a/packages/nestjs-microservice/src/common/index.ts +++ b/packages/nestjs-microservice/src/common/index.ts @@ -1,4 +1,4 @@ // Re-export common functionalities export { LoggerLevelService, parseLogLevels } from './logger-level.service'; export type { LoggerLevels } from './logger-level.service'; -export { LoggingModule, LOGGER } from './logging.module'; \ No newline at end of file +export { createContextLogger, LoggingModule, LOGGER } from './logging.module'; \ No newline at end of file diff --git a/packages/nestjs-microservice/tsconfig.json b/packages/nestjs-microservice/tsconfig.json index fe7743f..79b7484 100644 --- a/packages/nestjs-microservice/tsconfig.json +++ b/packages/nestjs-microservice/tsconfig.json @@ -3,6 +3,7 @@ // File Layout "rootDir": "src", "outDir": "dist", + // Path Mapping "baseUrl": ".", "paths": { "@/*": [ @@ -52,4 +53,4 @@ "node_modules", "dist" ] -} \ No newline at end of file +} diff --git a/packages/vue3-components/package.json b/packages/vue3-components/package.json index e3f0e44..f1fbe15 100644 --- a/packages/vue3-components/package.json +++ b/packages/vue3-components/package.json @@ -1,10 +1,21 @@ { "name": "@websdr/vue3-components", - "version": "1.0.0", + "version": "0.5.0", "description": "This is a Vue 3 components package for WebSDR", - "author": "Timur ", + "author": "Timur Davydov ", "license": "MIT", - "keywords": [], + "keywords": [ + "vue", + "vue3", + "components", + "SdrInput", + "List", + "Dropdown", + "LogArea" + ], + "publishConfig": { + "access": "public" + }, "main": "dist/index.cjs.js", "module": "dist/index.es.js", "types": "dist/index.d.ts", @@ -18,8 +29,8 @@ "test:coverage": "vitest run --coverage" }, "dependencies": { - "@websdr/core": "^1.0.0", - "@websdr/frontend-core": "^1.0.0", + "@websdr/core": "^0.5.0", + "@websdr/frontend-core": "^0.5.0", "vue": "^3.5.28" }, "devDependencies": { @@ -27,7 +38,7 @@ "@vue/cli-plugin-typescript": "^5.0.9", "@vue/cli-service": "^5.0.9", "@vue/test-utils": "^2.4.6", - "happy-dom": "^20.5.3", + "happy-dom": "^20.6.1", "sass": "^1.97.3", "vue-tsc": "^3.2.4" }, @@ -42,6 +53,16 @@ "import": "./dist/index.es.js", "require": "./dist/index.cjs.js" }, + "./components": { + "types": "./dist/components/index.d.ts", + "import": "./dist/components/index.es.js", + "require": "./dist/components/index.cjs.js" + }, + "./utils": { + "types": "./dist/utils/index.d.ts", + "import": "./dist/utils/index.es.js", + "require": "./dist/utils/index.cjs.js" + }, "./styles/*": "./dist/styles/*" } } diff --git a/packages/vue3-components/src/components/Dropdown.vue b/packages/vue3-components/src/components/Dropdown.vue index 16f04c2..f2ab2f5 100644 --- a/packages/vue3-components/src/components/Dropdown.vue +++ b/packages/vue3-components/src/components/Dropdown.vue @@ -1,18 +1,14 @@