{"version":3,"file":"index.cjs","sources":["../node_modules/fixed-len-array/dist/index.es.js","../node_modules/wasp-lib/dist/index.es.js","../src/utils/ephe_file_metadata.ts","../src/utils/swe_error.ts","../src/wasm/swisseph.js","../src/index.ts","../src/utils/get_base_url_path.ts"],"sourcesContent":["function r(n, e, o) {\n  const t = n.slice(0, e);\n  for (; t.length < e; )\n    t.push(o);\n  return t;\n}\nexport {\n  r as toFixedLengthArray\n};\n//# sourceMappingURL=index.es.js.map\n","function p(o, t, r) {\n  const e = o.slice(0, t);\n  for (; e.length < t; )\n    e.push(r);\n  return e;\n}\nconst f = 1, g = 0, s = {\n  i8: 1,\n  i16: 2,\n  i32: 4,\n  i64: 8,\n  float: 4,\n  double: 8\n};\nclass a {\n  /**\n   * Creates a new BasePointer instance.\n   *\n   * @param wasm - The Emscripten WebAssembly module instance\n   * @param ptr - Pre-allocated memory pointer. If not provided, subclasses\n   *   should handle allocation.\n   * @protected\n   */\n  constructor(t, r) {\n    this._ptr = 0, this.wasm = t, this._ptr = r;\n  }\n  /**\n   * Gets the raw memory pointer address.\n   *\n   * @example\n   *     const strPtr = StringPointer.from(wasm, \"test\");\n   *     console.log(strPtr.ptr); // e.g., 1048576\n   *\n   * @returns The memory address as a number, or 0 if freed\n   */\n  get ptr() {\n    return this._ptr;\n  }\n  /**\n   * Checks if the pointer is valid (non-zero and not freed).\n   *\n   * @example\n   *     const ptr = StringPointer.from(wasm, \"test\");\n   *     console.log(ptr.isValid); // true\n   *     ptr.free();\n   *     console.log(ptr.isValid); // false\n   *\n   * @returns True if pointer is valid, false if freed or unallocated\n   */\n  get isValid() {\n    return this._ptr !== 0;\n  }\n  /**\n   * Validates that the pointer is still valid before operations.\n   *\n   * @throws {Error} If pointer has been freed or is invalid\n   * @protected\n   */\n  validatePointer() {\n    if (!this.isValid)\n      throw new Error(\"Cannot operate on freed or invalid pointer\");\n  }\n  /**\n   * Frees the allocated WASM memory.\n   *\n   * After calling this method, the pointer becomes invalid and cannot be used\n   * for further operations. This method is idempotent - calling it multiple\n   * times is safe.\n   *\n   * @example\n   *     const ptr = StringPointer.from(wasm, \"test\");\n   *     ptr.free(); // Memory is freed\n   *     ptr.free(); // Safe to call again\n   */\n  free() {\n    this._ptr !== 0 && (this.wasm._free(this._ptr), this._ptr = 0);\n  }\n  /**\n   * Convenience method that reads the value and immediately frees the memory.\n   *\n   * This is the recommended way to retrieve values when you don't need to\n   * keep the pointer around for multiple operations.\n   *\n   * @example\n   *     const result = StringPointer.from(wasm, \"test\").readAndFree();\n   *     console.log(result); // \"test\"\n   *     // Memory is automatically freed\n   *\n   * @returns The value stored in memory before freeing\n   * @throws {Error} If pointer is invalid\n   */\n  readAndFree() {\n    this.validatePointer();\n    const t = this.read();\n    return this.free(), t;\n  }\n  /**\n   * Returns a string representation of the pointer for debugging.\n   *\n   * @example\n   *     const ptr = StringPointer.from(wasm, \"test\");\n   *     console.log(ptr.toString()); // \"BasePointer(ptr=1048576, valid=true)\"\n   *\n   * @returns Debug string containing pointer address and validity\n   */\n  toString() {\n    return `${this.constructor.name}(ptr=${this._ptr}, valid=${this.isValid})`;\n  }\n  /**\n   * Finalizer that ensures memory is freed when object is garbage collected.\n   *\n   * Note: This is a safety net - you should still call free() explicitly for\n   * deterministic memory management.\n   *\n   * @private\n   */\n  // Note: FinalizationRegistry would go here in a real implementation\n  // but we keep it simple for this example\n}\nclass h extends a {\n  /**\n   * Creates a new ArrayPointer instance.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - The type of each numeric element in the array.\n   * @param length - Number of elements in the array.\n   * @param ptr - Optional raw pointer to pre-allocated memory. If\n   *   `undefined`, memory is allocated.\n   */\n  constructor(t, r, e, i) {\n    super(t, i ?? t._malloc(e * s[r])), this.type = r, this.length = e;\n  }\n  /**\n   * Creates a new ArrayPointer from a JavaScript number array.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - Type of each numeric element (e.g., \"double\", \"i32\").\n   * @param input - JavaScript array of numbers to write to WASM memory.\n   * @returns A new instance of ArrayPointer.\n   */\n  static from(t, r, e, i = []) {\n    const w = h.alloc(t, r, e);\n    return w.write(i), w;\n  }\n  /**\n   * Allocates an empty buffer for a numeric array.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - Type of numeric element stored.\n   * @param length - Number of elements to allocate.\n   * @returns A new instance of ArrayPointer.\n   */\n  static alloc(t, r, e) {\n    return new h(t, r, e);\n  }\n  /**\n   * Writes a numeric value at a given index in WASM memory.\n   *\n   * @param loc - Index to write to.\n   * @param val - Numeric value to write.\n   * @throws If index is out of bounds.\n   */\n  add(t, r) {\n    if (this.validatePointer(), t >= 0 && t < this.length)\n      this.wasm.setValue(\n        this.ptr + t * s[this.type],\n        r,\n        this.type\n      );\n    else\n      throw new Error(\n        `Out-of-bounds access: tried to write at index ${t} in array of length ${this.length}`\n      );\n  }\n  /**\n   * Reads the entire numeric array from WASM memory and trims or pads it to\n   * the specified fixed length.\n   *\n   * @returns A fixed-length array\n   */\n  read() {\n    this.validatePointer();\n    const t = s[this.type], r = Array.from(\n      { length: this.length },\n      (e, i) => this.wasm.getValue(this.ptr + i * t, this.type)\n    );\n    return p(r, this.length, null);\n  }\n  /** Writes a JS array into WASM memory */\n  write(t) {\n    if (this.validatePointer(), t.length > this.length)\n      throw new Error(\n        `Array length mismatch. Expected ${this.length}, got ${t.length}`\n      );\n    t.forEach(\n      (r, e) => this.add(e, r)\n    );\n  }\n}\nclass n {\n  /**\n   * Converts a JavaScript boolean to a C-style boolean.\n   *\n   * @example\n   *     TypeConverter.boolToC(true); // Returns 1\n   *     TypeConverter.boolToC(false); // Returns 0\n   *\n   * @param value - The JavaScript boolean value\n   * @returns 1 for true, 0 for false\n   */\n  static boolToC(t) {\n    return t ? f : g;\n  }\n  /**\n   * Converts a C-style boolean to a JavaScript boolean.\n   *\n   * @example\n   *     TypeConverter.boolFromC(1); // Returns true\n   *     TypeConverter.boolFromC(0); // Returns false\n   *\n   * @param value - The C boolean value (0 or 1)\n   * @returns True for non-zero values, false for zero\n   */\n  static boolFromC(t) {\n    return !!t;\n  }\n  /**\n   * Converts a single-character JavaScript string to its ASCII code.\n   *\n   * @example\n   *     TypeConverter.charToC(\"A\"); // Returns 65\n   *     TypeConverter.charToC(\"0\"); // Returns 48\n   *\n   * @param char - A string containing exactly one character\n   * @returns The ASCII code (0-255) of the character\n   * @throws {Error} If input is not exactly one character\n   */\n  static charToC(t) {\n    if (typeof t != \"string\" || t.length !== 1)\n      throw new Error(\"Input must be exactly one character\");\n    const r = t.charCodeAt(0);\n    if (r < 0 || r > 255)\n      throw new Error(\n        `Character '${t}' is outside ASCII range (0-255)`\n      );\n    return r;\n  }\n  /**\n   * Converts an ASCII code to a single-character JavaScript string.\n   *\n   * @example\n   *     TypeConverter.charFromC(65); // Returns 'A'\n   *     TypeConverter.charFromC(48); // Returns '0'\n   *\n   * @param code - The ASCII code (must be 0-255)\n   * @returns A single-character string\n   * @throws {Error} If code is outside valid ASCII range\n   */\n  static charFromC(t) {\n    if (!Number.isInteger(t) || t < 0 || t > 255)\n      throw new Error(`Invalid ASCII code: ${t}. Must be 0-255`);\n    return String.fromCharCode(t);\n  }\n  /**\n   * Validates that a numeric type is supported by the library.\n   *\n   * @param type - The type to validate\n   * @returns True if the type is supported\n   * @throws {Error} If the type is not supported\n   */\n  static validateNumberType(t) {\n    if (!(t in s))\n      throw new Error(`Unsupported number type: ${t}`);\n    return !0;\n  }\n  /**\n   * Gets the size in bytes for a given numeric type.\n   *\n   * @param type - The numeric type\n   * @returns Size in bytes\n   * @throws {Error} If type is not supported\n   */\n  static getTypeSize(t) {\n    return this.validateNumberType(t), s[t];\n  }\n}\nclass l extends a {\n  /**\n   * Creates a new BoolPointer. If no `ptr` is given, allocates memory\n   * initialized to `false` (0).\n   *\n   * @param wasm - Emscripten WASM module instance\n   * @param ptr - Optional pointer to an existing WASM memory address.\n   */\n  constructor(t, r) {\n    super(t, r ?? t._malloc(s.i8)), r || this.write(!1);\n  }\n  /**\n   * Creates a BoolPointer from a JavaScript boolean.\n   *\n   * @param wasm - Emscripten WASM module instance\n   * @param value - The boolean value to store (true/false).\n   * @returns A new instance of BoolPointer.\n   */\n  static from(t, r) {\n    const e = l.alloc(t);\n    return e.write(r), e;\n  }\n  /**\n   * Allocates an empty BoolPointer initialized to false.\n   *\n   * @param wasm - Emscripten WASM module instance\n   * @returns A new instance of BoolPointer.\n   */\n  static alloc(t) {\n    return new l(t);\n  }\n  /**\n   * Writes a JavaScript boolean into WASM memory.\n   *\n   * @param value - The boolean to write.\n   */\n  write(t) {\n    this.validatePointer();\n    const r = n.boolToC(t);\n    this.wasm.setValue(this.ptr, r, \"i8\");\n  }\n  /**\n   * Reads the boolean value from WASM memory.\n   *\n   * @returns The stored JavaScript boolean.\n   */\n  read() {\n    this.validatePointer();\n    const t = this.wasm.getValue(this.ptr, \"i8\");\n    return n.boolFromC(t);\n  }\n}\nclass c extends a {\n  /**\n   * Constructs a new `CharPointer`. If `ptr` is not provided, memory is\n   * allocated for a single null-terminated char (initialized to `\\0`).\n   *\n   * @param wasm - The Emscripten WebAssembly module instance.\n   * @param ptr - Optional pointer to an existing WASM memory address.\n   */\n  constructor(t, r) {\n    super(t, r ?? t._malloc(s.i8)), r || this.write(\"\\0\");\n  }\n  /**\n   * Creates a new `CharPointer` from a JavaScript string.\\\n   * Only the first character is stored (C `char` is a single byte).\n   *\n   * @param wasm - The Emscripten WebAssembly module instance.\n   * @param input - A string from which the first character will be stored.\n   * @returns A new instance of `CharPointer`.\n   */\n  static from(t, r) {\n    if (r.length !== 1)\n      throw new Error(\"Input must be exactly one character\");\n    const e = c.alloc(t);\n    return e.write(r), e;\n  }\n  /**\n   * Allocates a new empty buffer for a single character (`char`).\n   *\n   * @param wasm - The Emscripten WebAssembly module instance.\n   * @returns A new zero-initialized `CharPointer`.\n   */\n  static alloc(t) {\n    return new c(t);\n  }\n  /**\n   * Writes a JavaScript string into the allocated WASM memory.\\\n   * Only the first character of the string will be stored.\n   *\n   * @param input - The string to write (must be exactly one character).\n   * @throws Error if the string length is not exactly one character.\n   */\n  write(t) {\n    this.validatePointer();\n    const r = n.charToC(t);\n    this.wasm.setValue(this.ptr, r, \"i8\");\n  }\n  /**\n   * Reads the stored character as a JavaScript string.\n   *\n   * @returns A one-character string read from WASM memory.\n   */\n  read() {\n    this.validatePointer();\n    const t = this.wasm.getValue(this.ptr, \"i8\");\n    return n.charFromC(t);\n  }\n}\nclass u extends a {\n  /**\n   * Creates a new NumberPointer. If no pointer is given, allocates memory for\n   * one number.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - The type of each numeric element in the Number.\n   * @param ptr - Optional raw pointer to pre-allocated memory. If\n   *   `undefined`, memory is allocated.\n   */\n  constructor(t, r, e) {\n    super(t, e ?? t._malloc(s[r])), this.type = r;\n  }\n  /**\n   * Creates a new NumberPointer from a JavaScript number Number.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - Type of each numeric element (e.g., \"double\", \"i32\").\n   * @param input - JavaScript Number of numbers to write to WASM memory.\n   * @returns A new instance of NumberPointer.\n   */\n  static from(t, r, e) {\n    const i = u.alloc(t, r);\n    return i.write(e), i;\n  }\n  /** Writes a JS Number into WASM memory */\n  write(t) {\n    this.validatePointer(), this.add(t);\n  }\n  /**\n   * Allocates an empty buffer for a numeric Number.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - Type of numeric element stored.\n   * @param length - Number of elements to allocate.\n   * @returns A new instance of NumberPointer.\n   */\n  static alloc(t, r) {\n    return new u(t, r);\n  }\n  /**\n   * Writes a numeric value at a given index in WASM memory.\n   *\n   * @param val - Numeric value to write.\n   * @throws If index is out of bounds.\n   */\n  add(t) {\n    this.validatePointer(), this.wasm.setValue(\n      this.ptr,\n      t,\n      this.type\n    );\n  }\n  /**\n   * Reads the entire numeric Number from WASM memory and trims or pads it to\n   * the specified fixed length.\n   *\n   * @returns A fixed-length Number\n   */\n  read() {\n    return this.validatePointer(), this.wasm.getValue(this.ptr, this.type);\n  }\n}\nclass d extends a {\n  /**\n   * Creates a new StringPointer instance.\n   *\n   * @param wasm - Swisseph Emscripten Module instance\n   * @param type - The type of each numeric element in the String.\n   * @param length - Number of elements in the String.\n   * @param ptr - Optional raw pointer to pre-allocated memory. If\n   *   `undefined`, memory is allocated.\n   */\n  constructor(t, r, e) {\n    super(t, e ?? t._malloc(r * s.i8)), this.length = r;\n  }\n  /**\n   * Creates a StringPointer from a JavaScript string.\n   *\n   * @param wasm - Emscripten Module instance\n   * @param input - The string to encode and store in WASM memory.\n   * @returns A new instance of StringPointer.\n   */\n  static from(t, r, e = \"\") {\n    const i = d.alloc(t, r + 1);\n    return i.write(e), i;\n  }\n  /**\n   * Allocates an empty buffer for a string of given length.\n   *\n   * @param wasm - Emscripten Module instance\n   * @param length - Number of bytes to allocate in WASM memory.\n   * @returns A new instance of StringPointer with zero-filled memory.\n   */\n  static alloc(t, r) {\n    return new d(t, r);\n  }\n  /**\n   * Writes a JavaScript string into the allocated WASM memory buffer.\n   *\n   * @param input - The string to write.\n   * @throws Will throw an error if the input string is too long for the\n   *   allocated buffer.\n   */\n  write(t) {\n    if (this.validatePointer(), t.length + 1 > this.length)\n      throw new Error(\"String length exceeds buffer size\");\n    this.wasm.stringToUTF8(t, this.ptr, this.length);\n  }\n  /**\n   * Reads the UTF-8 string from WASM memory.\n   *\n   * @returns The decoded JavaScript string.\n   */\n  read() {\n    return this.validatePointer(), this.wasm.UTF8ToString(this.ptr);\n  }\n}\nexport {\n  h as ArrayPointer,\n  a as BasePointer,\n  l as BoolPointer,\n  g as C_FALSE,\n  f as C_TRUE,\n  c as CharPointer,\n  s as NUMBER_TYPE_SIZES,\n  u as NumberPointer,\n  d as StringPointer,\n  n as TypeConverter\n};\n//# sourceMappingURL=index.es.js.map\n","export interface EpheFileDetail {\n    name: string;\n    desc: string;\n    category: string;\n}\nconst JPLEpheFiles: Array<EpheFileDetail> = [\n    {\n        name: \"de200.eph\",\n        desc: \"1599 AD - 2169 AD\",\n        category: \"JPL Ephemeris\",\n    },\n    {\n        name: \"de403.eph\",\n        desc: \"3000 BC - 3000 AD\",\n        category: \"JPL Ephemeris\",\n    },\n    {\n        name: \"de404.eph\",\n        desc: \"3000 BC - 3000 AD\",\n        category: \"JPL Ephemeris\",\n    },\n    {\n        name: \"de405.eph\",\n        desc: \"1600 AD - 2200 AD\",\n        category: \"JPL Ephemeris\",\n    },\n    {\n        name: \"de406.eph\",\n        desc: \"3000 BC - 3000 AD\",\n        category: \"JPL Ephemeris\",\n    },\n    {\n        name: \"de431.eph\",\n        desc: \"13201 BC - 17191 AD\",\n        category: \"JPL Ephemeris\",\n    },\n];\nconst StaticTxtFiles: Array<EpheFileDetail> = [\n    {\n        name: \"fixstars.cat\",\n        desc: \"Static\",\n        category: \"Fixed Stars Catalog\",\n    },\n    {\n        name: \"sefstars.txt\",\n        desc: \"Static\",\n        category: \"Fixed Stars Names\",\n    },\n    {\n        name: \"seasnam.txt\",\n        desc: \"Static\",\n        category: \"Asteroid Names\",\n    },\n    {\n        name: \"seorbel.txt\",\n        desc: \"Epoch-based (varies)\",\n        category: \"Orbital Elements (Asteroids)\",\n    },\n];\n\n/** Converts a year to BC/AD string. */\nfunction formatYearEra(year: number): string {\n    if (year < 0) return `${Math.abs(year)} BC`;\n    if (year === 0) return \"1 BC\";\n    return `${year} AD`;\n}\n\n/** Function to Generates a list of se1 ephemeris files with metadata. */\nfunction se1EpheFiles(): Array<EpheFileDetail> {\n    const epheFiles: Array<EpheFileDetail> = [];\n    let startYear = -5401;\n\n    const categories: Array<{ prefix: string; category: string }> = [\n        { prefix: \"pl\", category: \"SE Planetary Ephemeris\" },\n        { prefix: \"mo\", category: \"SE Moon Ephemeris\" },\n        { prefix: \"as\", category: \"SE Asteroid Ephemeris\" },\n    ];\n\n    while (startYear < 5400) {\n        let endYear = startYear + 599;\n\n        // Handle 1 BC to 1 AD transition\n        if (startYear <= 0 && endYear >= 0) {\n            startYear += 1;\n            endYear += 1;\n        }\n\n        const blockNumber = String(\n            Math.floor(Math.abs(startYear) / 100)\n        ).padStart(2, \"0\");\n\n        const suffix = endYear < 0 ? \"m\" : \"_\";\n\n        for (const c of categories) {\n            epheFiles.push({\n                name: `se${c.prefix}${suffix}${blockNumber}.se1`,\n                desc: `${formatYearEra(startYear)} - ${formatYearEra(endYear)}`,\n                category: c.category,\n            });\n        }\n\n        startYear += 600;\n    }\n    epheFiles.sort((a, b) => {\n        const catCompare = a.category.localeCompare(b.category);\n        return catCompare !== 0 ? catCompare : a.name.localeCompare(b.name);\n    });\n\n    return epheFiles;\n}\n\nexport const EpheFileMetadata = se1EpheFiles().concat(\n    JPLEpheFiles,\n    StaticTxtFiles\n);\n","/**\n * Custom error class for handling errors returned by Swiss Ephemeris functions.\n *\n * This class includes a status `flag` to indicate the outcome of the WASM\n * function call, and a descriptive `error` message.\n */\nexport class SWEerror extends Error {\n    /**\n     * Status flag returned by the function. Can be used to check if the\n     * function succeeded, failed, or what kind of result it produced.\n     */\n    flag: number;\n\n    /**\n     * A human-readable error message returned from the WASM function. This will\n     * typically contain diagnostic information if the function failed.\n     */\n    error: string;\n\n    /**\n     * Create a new SWEerror instance.\n     *\n     * @param message - A string describing the error\n     * @param flag - The numeric status flag from the WASM function\n     */\n    constructor(message: string, flag: number) {\n        super(message);\n        this.error = message;\n        this.name = \"SweError\";\n        this.flag = flag;\n\n        /**\n         * Set the prototype explicitly for compatibility with older TypeScript\n         * versions\n         */\n        Object.setPrototypeOf(this, SWEerror.prototype);\n    }\n}\n","// This code implements the `-sMODULARIZE` settings by taking the generated\n// JS program code (INNER_JS_CODE) and wrapping it in a factory function.\n\n// When targetting node and ES6 we use `await import ..` in the generated code\n// so the outer function needs to be marked as async.\nasync function Module(moduleArg = {}) {\n    var moduleRtn;\n\n    // include: shell.js\n    // The Module object: Our interface to the outside world. We import\n    // and export values on it. There are various ways Module can be used:\n    // 1. Not defined. We create it here\n    // 2. A function parameter, function(moduleArg) => Promise<Module>\n    // 3. pre-run appended it, var Module = {}; ..generated code..\n    // 4. External script tag defines var Module.\n    // We need to check if Module already exists (e.g. case 3 above).\n    // Substitution will be replaced with actual code on later stage of the build,\n    // this way Closure Compiler will not mangle it (e.g. case 4. above).\n    // Note that if you want to run closure, and also to use Module\n    // after the generated code, you will need to define   var Module = {};\n    // before the code. Then that object will be used in the code, and you\n    // can continue to use Module afterwards as well.\n    var Module = moduleArg;\n\n    // Determine the runtime environment we are in. You can customize this by\n    // setting the ENVIRONMENT setting at compile time (see settings.js).\n    // Attempt to auto-detect the environment\n    var ENVIRONMENT_IS_WEB = typeof window == \"object\";\n\n    var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != \"undefined\";\n\n    // N.b. Electron.js environment is simultaneously a NODE-environment, but\n    // also a web environment.\n    var ENVIRONMENT_IS_NODE =\n        typeof process == \"object\" &&\n        process.versions?.node &&\n        process.type != \"renderer\";\n\n    var ENVIRONMENT_IS_SHELL =\n        !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n\n    if (ENVIRONMENT_IS_NODE) {\n        // When building an ES module `require` is not normally available.\n        // We need to use `createRequire()` to construct the require()` function.\n        const { createRequire } = await import(\"module\");\n        /** @suppress {duplicate} */ var require = createRequire(\n            import.meta.url\n        );\n    }\n\n    // --pre-jses are emitted after the Module integration code, so that they can\n    // refer to Module (if they choose; they can also define Module)\n    var arguments_ = [];\n\n    var thisProgram = \"./this.program\";\n\n    var quit_ = (status, toThrow) => {\n        throw toThrow;\n    };\n\n    var _scriptName = import.meta.url;\n\n    // `/` should be present at the end if `scriptDirectory` is not empty\n    var scriptDirectory = \"\";\n\n    function locateFile(path) {\n        if (Module[\"locateFile\"]) {\n            return Module[\"locateFile\"](path, scriptDirectory);\n        }\n        return scriptDirectory + path;\n    }\n\n    // Hooks that are implemented differently in different runtime environments.\n    var readAsync, readBinary;\n\n    if (ENVIRONMENT_IS_NODE) {\n        const isNode =\n            typeof process == \"object\" &&\n            process.versions?.node &&\n            process.type != \"renderer\";\n        if (!isNode)\n            throw new Error(\n                \"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?)\"\n            );\n        var nodeVersion = process.versions.node;\n        var numericVersion = nodeVersion.split(\".\").slice(0, 3);\n        numericVersion =\n            numericVersion[0] * 1e4 +\n            numericVersion[1] * 100 +\n            numericVersion[2].split(\"-\")[0] * 1;\n        if (numericVersion < 16e4) {\n            throw new Error(\n                \"This emscripten-generated code requires node v16.0.0 (detected v\" +\n                    nodeVersion +\n                    \")\"\n            );\n        }\n        // These modules will usually be used on Node.js. Load them eagerly to avoid\n        // the complexity of lazy-loading.\n        var fs = require(\"fs\");\n        if (_scriptName.startsWith(\"file:\")) {\n            scriptDirectory =\n                require(\"path\").dirname(\n                    require(\"url\").fileURLToPath(_scriptName)\n                ) + \"/\";\n        }\n        // include: node_shell_read.js\n        readBinary = filename => {\n            // We need to re-wrap `file://` strings to URLs.\n            filename = isFileURI(filename) ? new URL(filename) : filename;\n            var ret = fs.readFileSync(filename);\n            assert(Buffer.isBuffer(ret));\n            return ret;\n        };\n        readAsync = async (filename, binary = true) => {\n            // See the comment in the `readBinary` function.\n            filename = isFileURI(filename) ? new URL(filename) : filename;\n            var ret = fs.readFileSync(filename, binary ? undefined : \"utf8\");\n            assert(binary ? Buffer.isBuffer(ret) : typeof ret == \"string\");\n            return ret;\n        };\n        // end include: node_shell_read.js\n        if (process.argv.length > 1) {\n            thisProgram = process.argv[1].replace(/\\\\/g, \"/\");\n        }\n        arguments_ = process.argv.slice(2);\n        quit_ = (status, toThrow) => {\n            process.exitCode = status;\n            throw toThrow;\n        };\n    } else if (ENVIRONMENT_IS_SHELL) {\n        const isNode =\n            typeof process == \"object\" &&\n            process.versions?.node &&\n            process.type != \"renderer\";\n        if (\n            isNode ||\n            typeof window == \"object\" ||\n            typeof WorkerGlobalScope != \"undefined\"\n        )\n            throw new Error(\n                \"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?)\"\n            );\n    } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n        // Note that this includes Node.js workers when relevant (pthreads is enabled).\n        // Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n        // ENVIRONMENT_IS_NODE.\n        try {\n            scriptDirectory = new URL(\".\", _scriptName).href;\n        } catch {}\n        if (\n            !(\n                typeof window == \"object\" ||\n                typeof WorkerGlobalScope != \"undefined\"\n            )\n        )\n            throw new Error(\n                \"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?)\"\n            );\n        {\n            // include: web_or_worker_shell_read.js\n            if (ENVIRONMENT_IS_WORKER) {\n                readBinary = url => {\n                    var xhr = new XMLHttpRequest();\n                    xhr.open(\"GET\", url, false);\n                    xhr.responseType = \"arraybuffer\";\n                    xhr.send(null);\n                    return new Uint8Array(\n                        /** @type {!ArrayBuffer} */ (xhr.response)\n                    );\n                };\n            }\n            readAsync = async url => {\n                assert(\n                    !isFileURI(url),\n                    \"readAsync does not work with file:// URLs\"\n                );\n                var response = await fetch(url, {\n                    credentials: \"same-origin\",\n                });\n                if (response.ok) {\n                    return response.arrayBuffer();\n                }\n                throw new Error(response.status + \" : \" + response.url);\n            };\n        }\n    } else {\n        throw new Error(\"environment detection error\");\n    }\n\n    var out = console.log.bind(console);\n\n    var err = console.error.bind(console);\n\n    var IDBFS = \"IDBFS is no longer included by default; build with -lidbfs.js\";\n\n    var PROXYFS =\n        \"PROXYFS is no longer included by default; build with -lproxyfs.js\";\n\n    var WORKERFS =\n        \"WORKERFS is no longer included by default; build with -lworkerfs.js\";\n\n    var FETCHFS =\n        \"FETCHFS is no longer included by default; build with -lfetchfs.js\";\n\n    var ICASEFS =\n        \"ICASEFS is no longer included by default; build with -licasefs.js\";\n\n    var JSFILEFS =\n        \"JSFILEFS is no longer included by default; build with -ljsfilefs.js\";\n\n    var OPFS = \"OPFS is no longer included by default; build with -lopfs.js\";\n\n    var NODEFS =\n        \"NODEFS is no longer included by default; build with -lnodefs.js\";\n\n    // perform assertions in shell.js after we set up out() and err(), as otherwise\n    // if an assertion fails it cannot print the message\n    assert(\n        !ENVIRONMENT_IS_SHELL,\n        \"shell environment detected but not enabled at build time.  Add `shell` to `-sENVIRONMENT` to enable.\"\n    );\n\n    // end include: shell.js\n    // include: preamble.js\n    // === Preamble library stuff ===\n    // Documentation for the public APIs defined in this file must be updated in:\n    //    site/source/docs/api_reference/preamble.js.rst\n    // A prebuilt local version of the documentation is available at:\n    //    site/build/text/docs/api_reference/preamble.js.txt\n    // You can also build docs locally as HTML or other formats in site/\n    // An online HTML version (which may be of a different version of Emscripten)\n    //    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n    var wasmBinary;\n\n    if (typeof WebAssembly != \"object\") {\n        err(\"no native wasm support detected\");\n    }\n\n    // Wasm globals\n    //========================================\n    // Runtime essentials\n    //========================================\n    // whether we are quitting the application. no code should run after this.\n    // set in exit() and abort()\n    var ABORT = false;\n\n    // set by exit() and abort().  Passed to 'onExit' handler.\n    // NOTE: This is also used as the process return code code in shell environments\n    // but only when noExitRuntime is false.\n    var EXITSTATUS;\n\n    // In STRICT mode, we only define assert() when ASSERTIONS is set.  i.e. we\n    // don't define it at all in release modes.  This matches the behaviour of\n    // MINIMAL_RUNTIME.\n    // TODO(sbc): Make this the default even without STRICT enabled.\n    /** @type {function( any , string=)} */ function assert(condition, text) {\n        if (!condition) {\n            abort(\"Assertion failed\" + (text ? \": \" + text : \"\"));\n        }\n    }\n\n    // We used to include malloc/free by default in the past. Show a helpful error in\n    // builds with assertions.\n    /**\n     * Indicates whether filename is delivered via file protocol (as opposed to\n     * http/https)\n     *\n     * @noinline\n     */ var isFileURI = filename => filename.startsWith(\"file://\");\n\n    // include: runtime_common.js\n    // include: runtime_stack_check.js\n    // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\n    function writeStackCookie() {\n        var max = _emscripten_stack_get_end();\n        assert((max & 3) == 0);\n        // If the stack ends at address zero we write our cookies 4 bytes into the\n        // stack.  This prevents interference with SAFE_HEAP and ASAN which also\n        // monitor writes to address zero.\n        if (max == 0) {\n            max += 4;\n        }\n        // The stack grow downwards towards _emscripten_stack_get_end.\n        // We write cookies to the final two words in the stack and detect if they are\n        // ever overwritten.\n        SAFE_HEAP_STORE(HEAPU32, max >> 2, 34821223);\n        SAFE_HEAP_STORE(HEAPU32, (max + 4) >> 2, 2310721022);\n    }\n\n    function checkStackCookie() {\n        if (ABORT) return;\n        var max = _emscripten_stack_get_end();\n        // See writeStackCookie().\n        if (max == 0) {\n            max += 4;\n        }\n        var cookie1 = SAFE_HEAP_LOAD(HEAPU32, max >> 2);\n        var cookie2 = SAFE_HEAP_LOAD(HEAPU32, (max + 4) >> 2);\n        if (cookie1 != 34821223 || cookie2 != 2310721022) {\n            abort(\n                `Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`\n            );\n        }\n    }\n\n    // end include: runtime_stack_check.js\n    // include: runtime_exceptions.js\n    // end include: runtime_exceptions.js\n    // include: runtime_debug.js\n    var runtimeDebug = true;\n\n    // Switch to false at runtime to disable logging at the right times\n    // Used by XXXXX_DEBUG settings to output debug messages.\n    function dbg(...args) {\n        if (!runtimeDebug && typeof runtimeDebug != \"undefined\") return;\n        // TODO(sbc): Make this configurable somehow.  Its not always convenient for\n        // logging to show up as warnings.\n        console.warn(...args);\n    }\n\n    // Endianness check\n    (() => {\n        var h16 = new Int16Array(1);\n        var h8 = new Int8Array(h16.buffer);\n        h16[0] = 25459;\n        if (h8[0] !== 115 || h8[1] !== 99)\n            throw \"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)\";\n    })();\n\n    function consumedModuleProp(prop) {\n        if (!Object.getOwnPropertyDescriptor(Module, prop)) {\n            Object.defineProperty(Module, prop, {\n                configurable: true,\n                set() {\n                    abort(\n                        `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'`\n                    );\n                },\n            });\n        }\n    }\n\n    function makeInvalidEarlyAccess(name) {\n        return () =>\n            assert(\n                false,\n                `call to '${name}' via reference taken before Wasm module initialization`\n            );\n    }\n\n    function ignoredModuleProp(prop) {\n        if (Object.getOwnPropertyDescriptor(Module, prop)) {\n            abort(\n                `\\`Module.${prop}\\` was supplied but \\`${prop}\\` not included in INCOMING_MODULE_JS_API`\n            );\n        }\n    }\n\n    // forcing the filesystem exports a few things by default\n    function isExportedByForceFilesystem(name) {\n        return (\n            name === \"FS_createPath\" ||\n            name === \"FS_createDataFile\" ||\n            name === \"FS_createPreloadedFile\" ||\n            name === \"FS_preloadFile\" ||\n            name === \"FS_unlink\" ||\n            name === \"addRunDependency\" || // The old FS has some functionality that WasmFS lacks.\n            name === \"FS_createLazyFile\" ||\n            name === \"FS_createDevice\" ||\n            name === \"removeRunDependency\"\n        );\n    }\n\n    /**\n     * Intercept access to a global symbol. This enables us to give informative\n     * warnings/errors when folks attempt to use symbols they did not include in\n     * their build, or no symbols that no longer exist.\n     */ function hookGlobalSymbolAccess(sym, func) {\n        if (\n            typeof globalThis != \"undefined\" &&\n            !Object.getOwnPropertyDescriptor(globalThis, sym)\n        ) {\n            Object.defineProperty(globalThis, sym, {\n                configurable: true,\n                get() {\n                    func();\n                    return undefined;\n                },\n            });\n        }\n    }\n\n    function missingGlobal(sym, msg) {\n        hookGlobalSymbolAccess(sym, () => {\n            warnOnce(`\\`${sym}\\` is not longer defined by emscripten. ${msg}`);\n        });\n    }\n\n    missingGlobal(\"buffer\", \"Please use HEAP8.buffer or wasmMemory.buffer\");\n\n    missingGlobal(\"asm\", \"Please use wasmExports instead\");\n\n    function missingLibrarySymbol(sym) {\n        hookGlobalSymbolAccess(sym, () => {\n            // Can't `abort()` here because it would break code that does runtime\n            // checks.  e.g. `if (typeof SDL === 'undefined')`.\n            var msg = `\\`${sym}\\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`;\n            // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in\n            // library.js, which means $name for a JS name with no prefix, or name\n            // for a JS name like _name.\n            var librarySymbol = sym;\n            if (!librarySymbol.startsWith(\"_\")) {\n                librarySymbol = \"$\" + sym;\n            }\n            msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`;\n            if (isExportedByForceFilesystem(sym)) {\n                msg +=\n                    \". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\";\n            }\n            warnOnce(msg);\n        });\n        // Any symbol that is not included from the JS library is also (by definition)\n        // not exported on the Module object.\n        unexportedRuntimeSymbol(sym);\n    }\n\n    function unexportedRuntimeSymbol(sym) {\n        if (!Object.getOwnPropertyDescriptor(Module, sym)) {\n            Object.defineProperty(Module, sym, {\n                configurable: true,\n                get() {\n                    var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;\n                    if (isExportedByForceFilesystem(sym)) {\n                        msg +=\n                            \". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\";\n                    }\n                    abort(msg);\n                },\n            });\n        }\n    }\n\n    // end include: runtime_debug.js\n    // include: runtime_safe_heap.js\n    function SAFE_HEAP_INDEX(arr, idx, action) {\n        const bytes = arr.BYTES_PER_ELEMENT;\n        const dest = idx * bytes;\n        if (idx <= 0)\n            abort(\n                `segmentation fault ${action} ${bytes} bytes at address ${dest}`\n            );\n        if (runtimeInitialized) {\n            var brk = _sbrk(0);\n            if (dest + bytes > brk)\n                abort(\n                    `segmentation fault, exceeded the top of the available dynamic heap when ${action} ${bytes} bytes at address ${dest}. DYNAMICTOP=${brk}`\n                );\n            if (brk < _emscripten_stack_get_base())\n                abort(\n                    `brk >= _emscripten_stack_get_base() (brk=${brk}, _emscripten_stack_get_base()=${_emscripten_stack_get_base()})`\n                );\n            // sbrk-managed memory must be above the stack\n            if (brk > wasmMemory.buffer.byteLength)\n                abort(\n                    `brk <= wasmMemory.buffer.byteLength (brk=${brk}, wasmMemory.buffer.byteLength=${wasmMemory.buffer.byteLength})`\n                );\n        }\n        return idx;\n    }\n\n    function SAFE_HEAP_LOAD(arr, idx) {\n        return arr[SAFE_HEAP_INDEX(arr, idx, \"loading\")];\n    }\n\n    function SAFE_HEAP_STORE(arr, idx, value) {\n        return (arr[SAFE_HEAP_INDEX(arr, idx, \"storing\")] = value);\n    }\n\n    function segfault() {\n        abort(\"segmentation fault\");\n    }\n\n    function alignfault() {\n        abort(\"alignment fault\");\n    }\n\n    // end include: runtime_safe_heap.js\n    var readyPromiseResolve, readyPromiseReject;\n\n    // Memory management\n    var wasmMemory;\n\n    var /** @type {!Int8Array} */ HEAP8,\n        /** @type {!Uint8Array} */ HEAPU8,\n        /** @type {!Int16Array} */ HEAP16,\n        /** @type {!Uint16Array} */ HEAPU16,\n        /** @type {!Int32Array} */ HEAP32,\n        /** @type {!Uint32Array} */ HEAPU32,\n        /** @type {!Float32Array} */ HEAPF32,\n        /** @type {!Float64Array} */ HEAPF64;\n\n    // BigInt64Array type is not correctly defined in closure\n    var /** Not-@type {!BigInt64Array} */ HEAP64,\n        /* BigUint64Array type is not correctly defined in closure\n/** not-@type {!BigUint64Array} */ HEAPU64;\n\n    var runtimeInitialized = false;\n\n    function updateMemoryViews() {\n        var b = wasmMemory.buffer;\n        HEAP8 = new Int8Array(b);\n        HEAP16 = new Int16Array(b);\n        HEAPU8 = new Uint8Array(b);\n        HEAPU16 = new Uint16Array(b);\n        HEAP32 = new Int32Array(b);\n        HEAPU32 = new Uint32Array(b);\n        HEAPF32 = new Float32Array(b);\n        HEAPF64 = new Float64Array(b);\n        HEAP64 = new BigInt64Array(b);\n        HEAPU64 = new BigUint64Array(b);\n    }\n\n    // include: memoryprofiler.js\n    // end include: memoryprofiler.js\n    // end include: runtime_common.js\n    assert(\n        typeof Int32Array != \"undefined\" &&\n            typeof Float64Array !== \"undefined\" &&\n            Int32Array.prototype.subarray != undefined &&\n            Int32Array.prototype.set != undefined,\n        \"JS engine does not provide full typed array support\"\n    );\n\n    function preRun() {\n        if (Module[\"preRun\"]) {\n            if (typeof Module[\"preRun\"] == \"function\")\n                Module[\"preRun\"] = [Module[\"preRun\"]];\n            while (Module[\"preRun\"].length) {\n                addOnPreRun(Module[\"preRun\"].shift());\n            }\n        }\n        consumedModuleProp(\"preRun\");\n        // Begin ATPRERUNS hooks\n        callRuntimeCallbacks(onPreRuns);\n    }\n\n    function initRuntime() {\n        assert(!runtimeInitialized);\n        runtimeInitialized = true;\n        checkStackCookie();\n        // Begin ATINITS hooks\n        if (!Module[\"noFSInit\"] && !FS.initialized) FS.init();\n        TTY.init();\n        // End ATINITS hooks\n        wasmExports[\"__wasm_call_ctors\"]();\n        // Begin ATPOSTCTORS hooks\n        FS.ignorePermissions = false;\n    }\n\n    function postRun() {\n        checkStackCookie();\n        // PThreads reuse the runtime from the main thread.\n        if (Module[\"postRun\"]) {\n            if (typeof Module[\"postRun\"] == \"function\")\n                Module[\"postRun\"] = [Module[\"postRun\"]];\n            while (Module[\"postRun\"].length) {\n                addOnPostRun(Module[\"postRun\"].shift());\n            }\n        }\n        consumedModuleProp(\"postRun\");\n        // Begin ATPOSTRUNS hooks\n        callRuntimeCallbacks(onPostRuns);\n    }\n\n    // A counter of dependencies for calling run(). If we need to\n    // do asynchronous work before running, increment this and\n    // decrement it. Incrementing must happen in a place like\n    // Module.preRun (used by emcc to add file preloading).\n    // Note that you can add dependencies in preRun, even though\n    // it happens right before run - run will be postponed until\n    // the dependencies are met.\n    var runDependencies = 0;\n\n    var dependenciesFulfilled = null;\n\n    // overridden to take different actions when all run dependencies are fulfilled\n    var runDependencyTracking = {};\n\n    var runDependencyWatcher = null;\n\n    function addRunDependency(id) {\n        runDependencies++;\n        Module[\"monitorRunDependencies\"]?.(runDependencies);\n        assert(id, \"addRunDependency requires an ID\");\n        assert(!runDependencyTracking[id]);\n        runDependencyTracking[id] = 1;\n        if (\n            runDependencyWatcher === null &&\n            typeof setInterval != \"undefined\"\n        ) {\n            // Check for missing dependencies every few seconds\n            runDependencyWatcher = setInterval(() => {\n                if (ABORT) {\n                    clearInterval(runDependencyWatcher);\n                    runDependencyWatcher = null;\n                    return;\n                }\n                var shown = false;\n                for (var dep in runDependencyTracking) {\n                    if (!shown) {\n                        shown = true;\n                        err(\"still waiting on run dependencies:\");\n                    }\n                    err(`dependency: ${dep}`);\n                }\n                if (shown) {\n                    err(\"(end of list)\");\n                }\n            }, 1e4);\n            // Prevent this timer from keeping the runtime alive if nothing\n            // else is.\n            runDependencyWatcher.unref?.();\n        }\n    }\n\n    function removeRunDependency(id) {\n        runDependencies--;\n        Module[\"monitorRunDependencies\"]?.(runDependencies);\n        assert(id, \"removeRunDependency requires an ID\");\n        assert(runDependencyTracking[id]);\n        delete runDependencyTracking[id];\n        if (runDependencies == 0) {\n            if (runDependencyWatcher !== null) {\n                clearInterval(runDependencyWatcher);\n                runDependencyWatcher = null;\n            }\n            if (dependenciesFulfilled) {\n                var callback = dependenciesFulfilled;\n                dependenciesFulfilled = null;\n                callback();\n            }\n        }\n    }\n\n    /** @param {string | number} [what] */ function abort(what) {\n        Module[\"onAbort\"]?.(what);\n        what = \"Aborted(\" + what + \")\";\n        // TODO(sbc): Should we remove printing and leave it up to whoever\n        // catches the exception?\n        err(what);\n        ABORT = true;\n        // Use a wasm runtime error, because a JS error might be seen as a foreign\n        // exception, which means we'd run destructors on it. We need the error to\n        // simply make the program stop.\n        // FIXME This approach does not work in Wasm EH because it currently does not assume\n        // all RuntimeErrors are from traps; it decides whether a RuntimeError is from\n        // a trap or not based on a hidden field within the object. So at the moment\n        // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that\n        // allows this in the wasm spec.\n        // Suppress closure compiler warning here. Closure compiler's builtin extern\n        // definition for WebAssembly.RuntimeError claims it takes no arguments even\n        // though it can.\n        // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.\n        /** @suppress {checkTypes} */ var e = new WebAssembly.RuntimeError(\n            what\n        );\n        readyPromiseReject?.(e);\n        // Throw the error whether or not MODULARIZE is set because abort is used\n        // in code paths apart from instantiation where an exception is expected\n        // to be thrown when abort is called.\n        throw e;\n    }\n\n    function createExportWrapper(name, nargs) {\n        return (...args) => {\n            assert(\n                runtimeInitialized,\n                `native function \\`${name}\\` called before runtime initialization`\n            );\n            var f = wasmExports[name];\n            assert(f, `exported native function \\`${name}\\` not found`);\n            // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled.\n            assert(\n                args.length <= nargs,\n                `native function \\`${name}\\` called with ${args.length} args but expects ${nargs}`\n            );\n            return f(...args);\n        };\n    }\n\n    var wasmBinaryFile;\n\n    function findWasmBinary() {\n        if (Module[\"locateFile\"]) {\n            return locateFile(\"swisseph.wasm\");\n        }\n        // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.\n        return new URL(\"swisseph.wasm\", import.meta.url).href;\n    }\n\n    function getBinarySync(file) {\n        if (file == wasmBinaryFile && wasmBinary) {\n            return new Uint8Array(wasmBinary);\n        }\n        if (readBinary) {\n            return readBinary(file);\n        }\n        throw \"both async and sync fetching of the wasm failed\";\n    }\n\n    async function getWasmBinary(binaryFile) {\n        // If we don't have the binary yet, load it asynchronously using readAsync.\n        if (!wasmBinary) {\n            // Fetch the binary using readAsync\n            try {\n                var response = await readAsync(binaryFile);\n                return new Uint8Array(response);\n            } catch {}\n        }\n        // Otherwise, getBinarySync should be able to get it synchronously\n        return getBinarySync(binaryFile);\n    }\n\n    async function instantiateArrayBuffer(binaryFile, imports) {\n        try {\n            var binary = await getWasmBinary(binaryFile);\n            var instance = await WebAssembly.instantiate(binary, imports);\n            return instance;\n        } catch (reason) {\n            err(`failed to asynchronously prepare wasm: ${reason}`);\n            // Warn on some common problems.\n            if (isFileURI(wasmBinaryFile)) {\n                err(\n                    `warning: Loading from a file URI (${wasmBinaryFile}) 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`\n                );\n            }\n            abort(reason);\n        }\n    }\n\n    async function instantiateAsync(binary, binaryFile, imports) {\n        if (!binary && !ENVIRONMENT_IS_NODE) {\n            try {\n                var response = fetch(binaryFile, {\n                    credentials: \"same-origin\",\n                });\n                var instantiationResult =\n                    await WebAssembly.instantiateStreaming(response, imports);\n                return instantiationResult;\n            } catch (reason) {\n                // We expect the most common failure cause to be a bad MIME type for the binary,\n                // in which case falling back to ArrayBuffer instantiation should work.\n                err(`wasm streaming compile failed: ${reason}`);\n                err(\"falling back to ArrayBuffer instantiation\");\n            }\n        }\n        return instantiateArrayBuffer(binaryFile, imports);\n    }\n\n    function getWasmImports() {\n        // prepare imports\n        return {\n            env: wasmImports,\n            wasi_snapshot_preview1: wasmImports,\n        };\n    }\n\n    // Create the wasm instance.\n    // Receives the wasm imports, returns the exports.\n    async function createWasm() {\n        // Load the wasm module and create an instance of using native support in the JS engine.\n        // handle a generated wasm instance, receiving its exports and\n        // performing other necessary setup\n        /** @param {WebAssembly.Module} [module] */ function receiveInstance(\n            instance,\n            module\n        ) {\n            wasmExports = instance.exports;\n            wasmMemory = wasmExports[\"memory\"];\n            assert(wasmMemory, \"memory not found in wasm exports\");\n            updateMemoryViews();\n            assignWasmExports(wasmExports);\n            removeRunDependency(\"wasm-instantiate\");\n            return wasmExports;\n        }\n        // wait for the pthread pool (if any)\n        addRunDependency(\"wasm-instantiate\");\n        // Prefer streaming instantiation if available.\n        // Async compilation can be confusing when an error on the page overwrites Module\n        // (for example, if the order of elements is wrong, and the one defining Module is\n        // later), so we save Module and check it later.\n        var trueModule = Module;\n        function receiveInstantiationResult(result) {\n            // 'result' is a ResultObject object which has both the module and instance.\n            // receiveInstance() will swap in the exports (to Module.asm) so they can be called\n            assert(\n                Module === trueModule,\n                \"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?\"\n            );\n            trueModule = null;\n            // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\n            // When the regression is fixed, can restore the above PTHREADS-enabled path.\n            return receiveInstance(result[\"instance\"]);\n        }\n        var info = getWasmImports();\n        // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\n        // to manually instantiate the Wasm module themselves. This allows pages to\n        // run the instantiation parallel to any other async startup actions they are\n        // performing.\n        // Also pthreads and wasm workers initialize the wasm instance through this\n        // path.\n        if (Module[\"instantiateWasm\"]) {\n            return new Promise((resolve, reject) => {\n                try {\n                    Module[\"instantiateWasm\"](info, (mod, inst) => {\n                        resolve(receiveInstance(mod, inst));\n                    });\n                } catch (e) {\n                    err(\n                        `Module.instantiateWasm callback failed with error: ${e}`\n                    );\n                    reject(e);\n                }\n            });\n        }\n        wasmBinaryFile ??= findWasmBinary();\n        var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);\n        var exports = receiveInstantiationResult(result);\n        return exports;\n    }\n\n    // end include: preamble.js\n    // Begin JS library code\n    class ExitStatus {\n        name = \"ExitStatus\";\n        constructor(status) {\n            this.message = `Program terminated with exit(${status})`;\n            this.status = status;\n        }\n    }\n\n    var callRuntimeCallbacks = callbacks => {\n        while (callbacks.length > 0) {\n            // Pass the module as the first argument.\n            callbacks.shift()(Module);\n        }\n    };\n\n    var onPostRuns = [];\n\n    var addOnPostRun = cb => onPostRuns.push(cb);\n\n    var onPreRuns = [];\n\n    var addOnPreRun = cb => onPreRuns.push(cb);\n\n    /**\n     * @param {number} ptr\n     * @param {string} type\n     */ function getValue(ptr, type = \"i8\") {\n        if (type.endsWith(\"*\")) type = \"*\";\n        switch (type) {\n            case \"i1\":\n                return SAFE_HEAP_LOAD(HEAP8, ptr);\n\n            case \"i8\":\n                return SAFE_HEAP_LOAD(HEAP8, ptr);\n\n            case \"i16\":\n                return SAFE_HEAP_LOAD(HEAP16, ptr >> 1);\n\n            case \"i32\":\n                return SAFE_HEAP_LOAD(HEAP32, ptr >> 2);\n\n            case \"i64\":\n                return SAFE_HEAP_LOAD(HEAP64, ptr >> 3);\n\n            case \"float\":\n                return SAFE_HEAP_LOAD(HEAPF32, ptr >> 2);\n\n            case \"double\":\n                return SAFE_HEAP_LOAD(HEAPF64, ptr >> 3);\n\n            case \"*\":\n                return SAFE_HEAP_LOAD(HEAPU32, ptr >> 2);\n\n            default:\n                abort(`invalid type for getValue: ${type}`);\n        }\n    }\n\n    var noExitRuntime = true;\n\n    var ptrToString = ptr => {\n        assert(typeof ptr === \"number\");\n        // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n        ptr >>>= 0;\n        return \"0x\" + ptr.toString(16).padStart(8, \"0\");\n    };\n\n    /**\n     * @param {number} ptr\n     * @param {number} value\n     * @param {string} type\n     */ function setValue(ptr, value, type = \"i8\") {\n        if (type.endsWith(\"*\")) type = \"*\";\n        switch (type) {\n            case \"i1\":\n                SAFE_HEAP_STORE(HEAP8, ptr, value);\n                break;\n\n            case \"i8\":\n                SAFE_HEAP_STORE(HEAP8, ptr, value);\n                break;\n\n            case \"i16\":\n                SAFE_HEAP_STORE(HEAP16, ptr >> 1, value);\n                break;\n\n            case \"i32\":\n                SAFE_HEAP_STORE(HEAP32, ptr >> 2, value);\n                break;\n\n            case \"i64\":\n                SAFE_HEAP_STORE(HEAP64, ptr >> 3, BigInt(value));\n                break;\n\n            case \"float\":\n                SAFE_HEAP_STORE(HEAPF32, ptr >> 2, value);\n                break;\n\n            case \"double\":\n                SAFE_HEAP_STORE(HEAPF64, ptr >> 3, value);\n                break;\n\n            case \"*\":\n                SAFE_HEAP_STORE(HEAPU32, ptr >> 2, value);\n                break;\n\n            default:\n                abort(`invalid type for setValue: ${type}`);\n        }\n    }\n\n    var stackRestore = val => __emscripten_stack_restore(val);\n\n    var stackSave = () => _emscripten_stack_get_current();\n\n    var warnOnce = text => {\n        warnOnce.shown ||= {};\n        if (!warnOnce.shown[text]) {\n            warnOnce.shown[text] = 1;\n            if (ENVIRONMENT_IS_NODE) text = \"warning: \" + text;\n            err(text);\n        }\n    };\n\n    /** @suppress {duplicate} */ var syscallGetVarargI = () => {\n        assert(SYSCALLS.varargs != undefined);\n        // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.\n        var ret = SAFE_HEAP_LOAD(HEAP32, +SYSCALLS.varargs >> 2);\n        SYSCALLS.varargs += 4;\n        return ret;\n    };\n\n    var syscallGetVarargP = syscallGetVarargI;\n\n    var PATH = {\n        isAbs: path => path.charAt(0) === \"/\",\n        splitPath: filename => {\n            var splitPathRe =\n                /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n            return splitPathRe.exec(filename).slice(1);\n        },\n        normalizeArray: (parts, allowAboveRoot) => {\n            // if the path tries to go above the root, `up` ends up > 0\n            var up = 0;\n            for (var i = parts.length - 1; i >= 0; i--) {\n                var last = parts[i];\n                if (last === \".\") {\n                    parts.splice(i, 1);\n                } else if (last === \"..\") {\n                    parts.splice(i, 1);\n                    up++;\n                } else if (up) {\n                    parts.splice(i, 1);\n                    up--;\n                }\n            }\n            // if the path is allowed to go above the root, restore leading ..s\n            if (allowAboveRoot) {\n                for (; up; up--) {\n                    parts.unshift(\"..\");\n                }\n            }\n            return parts;\n        },\n        normalize: path => {\n            var isAbsolute = PATH.isAbs(path),\n                trailingSlash = path.slice(-1) === \"/\";\n            // Normalize the path\n            path = PATH.normalizeArray(\n                path.split(\"/\").filter(p => !!p),\n                !isAbsolute\n            ).join(\"/\");\n            if (!path && !isAbsolute) {\n                path = \".\";\n            }\n            if (path && trailingSlash) {\n                path += \"/\";\n            }\n            return (isAbsolute ? \"/\" : \"\") + path;\n        },\n        dirname: path => {\n            var result = PATH.splitPath(path),\n                root = result[0],\n                dir = result[1];\n            if (!root && !dir) {\n                // No dirname whatsoever\n                return \".\";\n            }\n            if (dir) {\n                // It has a dirname, strip trailing slash\n                dir = dir.slice(0, -1);\n            }\n            return root + dir;\n        },\n        basename: path => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n        join: (...paths) => PATH.normalize(paths.join(\"/\")),\n        join2: (l, r) => PATH.normalize(l + \"/\" + r),\n    };\n\n    var initRandomFill = () => {\n        // This block is not needed on v19+ since crypto.getRandomValues is builtin\n        if (ENVIRONMENT_IS_NODE) {\n            var nodeCrypto = require(\"crypto\");\n            return view => nodeCrypto.randomFillSync(view);\n        }\n        return view => crypto.getRandomValues(view);\n    };\n\n    var randomFill = view => {\n        // Lazily init on the first invocation.\n        (randomFill = initRandomFill())(view);\n    };\n\n    var PATH_FS = {\n        resolve: (...args) => {\n            var resolvedPath = \"\",\n                resolvedAbsolute = false;\n            for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n                var path = i >= 0 ? args[i] : FS.cwd();\n                // Skip empty and invalid entries\n                if (typeof path != \"string\") {\n                    throw new TypeError(\n                        \"Arguments to path.resolve must be strings\"\n                    );\n                } else if (!path) {\n                    return \"\";\n                }\n                resolvedPath = path + \"/\" + resolvedPath;\n                resolvedAbsolute = PATH.isAbs(path);\n            }\n            // At this point the path should be resolved to a full absolute path, but\n            // handle relative paths to be safe (might happen when process.cwd() fails)\n            resolvedPath = PATH.normalizeArray(\n                resolvedPath.split(\"/\").filter(p => !!p),\n                !resolvedAbsolute\n            ).join(\"/\");\n            return (resolvedAbsolute ? \"/\" : \"\") + resolvedPath || \".\";\n        },\n        relative: (from, to) => {\n            from = PATH_FS.resolve(from).slice(1);\n            to = PATH_FS.resolve(to).slice(1);\n            function trim(arr) {\n                var start = 0;\n                for (; start < arr.length; start++) {\n                    if (arr[start] !== \"\") break;\n                }\n                var end = arr.length - 1;\n                for (; end >= 0; end--) {\n                    if (arr[end] !== \"\") break;\n                }\n                if (start > end) return [];\n                return arr.slice(start, end - start + 1);\n            }\n            var fromParts = trim(from.split(\"/\"));\n            var toParts = trim(to.split(\"/\"));\n            var length = Math.min(fromParts.length, toParts.length);\n            var samePartsLength = length;\n            for (var i = 0; i < length; i++) {\n                if (fromParts[i] !== toParts[i]) {\n                    samePartsLength = i;\n                    break;\n                }\n            }\n            var outputParts = [];\n            for (var i = samePartsLength; i < fromParts.length; i++) {\n                outputParts.push(\"..\");\n            }\n            outputParts = outputParts.concat(toParts.slice(samePartsLength));\n            return outputParts.join(\"/\");\n        },\n    };\n\n    var UTF8Decoder =\n        typeof TextDecoder != \"undefined\" ? new TextDecoder() : undefined;\n\n    var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n        var maxIdx = idx + maxBytesToRead;\n        if (ignoreNul) return maxIdx;\n        // TextDecoder needs to know the byte length in advance, it doesn't stop on\n        // null terminator by itself.\n        // As a tiny code save trick, compare idx against maxIdx using a negation,\n        // so that maxBytesToRead=undefined/NaN means Infinity.\n        while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n        return idx;\n    };\n\n    /**\n     * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given\n     * array that contains uint8 values, returns a copy of that string as a\n     * Javascript String object. heapOrArray is either a regular array, or a\n     * JavaScript typed array view.\n     *\n     * @param {number} [idx]\n     * @param {number} [maxBytesToRead]\n     * @param {boolean} [ignoreNul] - If true, the function will not stop on a NUL\n     *   character.\n     * @returns {string}\n     */ var UTF8ArrayToString = (\n        heapOrArray,\n        idx = 0,\n        maxBytesToRead,\n        ignoreNul\n    ) => {\n        var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n        // When using conditional TextDecoder, skip it for short strings as the overhead of the native call is not worth it.\n        if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n            return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n        }\n        var str = \"\";\n        while (idx < endPtr) {\n            // For UTF8 byte structure, see:\n            // http://en.wikipedia.org/wiki/UTF-8#Description\n            // https://www.ietf.org/rfc/rfc2279.txt\n            // https://tools.ietf.org/html/rfc3629\n            var u0 = heapOrArray[idx++];\n            if (!(u0 & 128)) {\n                str += String.fromCharCode(u0);\n                continue;\n            }\n            var u1 = heapOrArray[idx++] & 63;\n            if ((u0 & 224) == 192) {\n                str += String.fromCharCode(((u0 & 31) << 6) | u1);\n                continue;\n            }\n            var u2 = heapOrArray[idx++] & 63;\n            if ((u0 & 240) == 224) {\n                u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n            } else {\n                if ((u0 & 248) != 240)\n                    warnOnce(\n                        \"Invalid UTF-8 leading byte \" +\n                            ptrToString(u0) +\n                            \" encountered when deserializing a UTF-8 string in wasm memory to a JS string!\"\n                    );\n                u0 =\n                    ((u0 & 7) << 18) |\n                    (u1 << 12) |\n                    (u2 << 6) |\n                    (heapOrArray[idx++] & 63);\n            }\n            if (u0 < 65536) {\n                str += String.fromCharCode(u0);\n            } else {\n                var ch = u0 - 65536;\n                str += String.fromCharCode(\n                    55296 | (ch >> 10),\n                    56320 | (ch & 1023)\n                );\n            }\n        }\n        return str;\n    };\n\n    var FS_stdin_getChar_buffer = [];\n\n    var lengthBytesUTF8 = str => {\n        var len = 0;\n        for (var i = 0; i < str.length; ++i) {\n            // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code\n            // unit, not a Unicode code point of the character! So decode\n            // UTF16->UTF32->UTF8.\n            // See http://unicode.org/faq/utf_bom.html#utf16-3\n            var c = str.charCodeAt(i);\n            // possibly a lead surrogate\n            if (c <= 127) {\n                len++;\n            } else if (c <= 2047) {\n                len += 2;\n            } else if (c >= 55296 && c <= 57343) {\n                len += 4;\n                ++i;\n            } else {\n                len += 3;\n            }\n        }\n        return len;\n    };\n\n    var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n        assert(\n            typeof str === \"string\",\n            `stringToUTF8Array expects a string (got ${typeof str})`\n        );\n        // Parameter maxBytesToWrite is not optional. Negative values, 0, null,\n        // undefined and false each don't write out any bytes.\n        if (!(maxBytesToWrite > 0)) return 0;\n        var startIdx = outIdx;\n        var endIdx = outIdx + maxBytesToWrite - 1;\n        // -1 for string null terminator.\n        for (var i = 0; i < str.length; ++i) {\n            // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description\n            // and https://www.ietf.org/rfc/rfc2279.txt\n            // and https://tools.ietf.org/html/rfc3629\n            var u = str.codePointAt(i);\n            if (u <= 127) {\n                if (outIdx >= endIdx) break;\n                heap[outIdx++] = u;\n            } else if (u <= 2047) {\n                if (outIdx + 1 >= endIdx) break;\n                heap[outIdx++] = 192 | (u >> 6);\n                heap[outIdx++] = 128 | (u & 63);\n            } else if (u <= 65535) {\n                if (outIdx + 2 >= endIdx) break;\n                heap[outIdx++] = 224 | (u >> 12);\n                heap[outIdx++] = 128 | ((u >> 6) & 63);\n                heap[outIdx++] = 128 | (u & 63);\n            } else {\n                if (outIdx + 3 >= endIdx) break;\n                if (u > 1114111)\n                    warnOnce(\n                        \"Invalid Unicode code point \" +\n                            ptrToString(u) +\n                            \" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).\"\n                    );\n                heap[outIdx++] = 240 | (u >> 18);\n                heap[outIdx++] = 128 | ((u >> 12) & 63);\n                heap[outIdx++] = 128 | ((u >> 6) & 63);\n                heap[outIdx++] = 128 | (u & 63);\n                // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16.\n                // We need to manually skip over the second code unit for correct iteration.\n                i++;\n            }\n        }\n        // Null-terminate the pointer to the buffer.\n        heap[outIdx] = 0;\n        return outIdx - startIdx;\n    };\n\n    /** @type {function(string, boolean=, number=)} */ var intArrayFromString =\n        (stringy, dontAddNull, length) => {\n            var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n            var u8array = new Array(len);\n            var numBytesWritten = stringToUTF8Array(\n                stringy,\n                u8array,\n                0,\n                u8array.length\n            );\n            if (dontAddNull) u8array.length = numBytesWritten;\n            return u8array;\n        };\n\n    var FS_stdin_getChar = () => {\n        if (!FS_stdin_getChar_buffer.length) {\n            var result = null;\n            if (ENVIRONMENT_IS_NODE) {\n                // we will read data by chunks of BUFSIZE\n                var BUFSIZE = 256;\n                var buf = Buffer.alloc(BUFSIZE);\n                var bytesRead = 0;\n                // For some reason we must suppress a closure warning here, even though\n                // fd definitely exists on process.stdin, and is even the proper way to\n                // get the fd of stdin,\n                // https://github.com/nodejs/help/issues/2136#issuecomment-523649904\n                // This started to happen after moving this logic out of library_tty.js,\n                // so it is related to the surrounding code in some unclear manner.\n                /** @suppress {missingProperties} */ var fd = process.stdin.fd;\n                try {\n                    bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n                } catch (e) {\n                    // Cross-platform differences: on Windows, reading EOF throws an\n                    // exception, but on other OSes, reading EOF returns 0. Uniformize\n                    // behavior by treating the EOF exception to return 0.\n                    if (e.toString().includes(\"EOF\")) bytesRead = 0;\n                    else throw e;\n                }\n                if (bytesRead > 0) {\n                    result = buf.slice(0, bytesRead).toString(\"utf-8\");\n                }\n            } else if (\n                typeof window != \"undefined\" &&\n                typeof window.prompt == \"function\"\n            ) {\n                // Browser.\n                result = window.prompt(\"Input: \");\n                // returns null on cancel\n                if (result !== null) {\n                    result += \"\\n\";\n                }\n            } else {\n            }\n            if (!result) {\n                return null;\n            }\n            FS_stdin_getChar_buffer = intArrayFromString(result, true);\n        }\n        return FS_stdin_getChar_buffer.shift();\n    };\n\n    var TTY = {\n        ttys: [],\n        init() {},\n        shutdown() {},\n        register(dev, ops) {\n            TTY.ttys[dev] = {\n                input: [],\n                output: [],\n                ops,\n            };\n            FS.registerDevice(dev, TTY.stream_ops);\n        },\n        stream_ops: {\n            open(stream) {\n                var tty = TTY.ttys[stream.node.rdev];\n                if (!tty) {\n                    throw new FS.ErrnoError(43);\n                }\n                stream.tty = tty;\n                stream.seekable = false;\n            },\n            close(stream) {\n                // flush any pending line data\n                stream.tty.ops.fsync(stream.tty);\n            },\n            fsync(stream) {\n                stream.tty.ops.fsync(stream.tty);\n            },\n            read(stream, buffer, offset, length, pos) {\n                if (!stream.tty || !stream.tty.ops.get_char) {\n                    throw new FS.ErrnoError(60);\n                }\n                var bytesRead = 0;\n                for (var i = 0; i < length; i++) {\n                    var result;\n                    try {\n                        result = stream.tty.ops.get_char(stream.tty);\n                    } catch (e) {\n                        throw new FS.ErrnoError(29);\n                    }\n                    if (result === undefined && bytesRead === 0) {\n                        throw new FS.ErrnoError(6);\n                    }\n                    if (result === null || result === undefined) break;\n                    bytesRead++;\n                    buffer[offset + i] = result;\n                }\n                if (bytesRead) {\n                    stream.node.atime = Date.now();\n                }\n                return bytesRead;\n            },\n            write(stream, buffer, offset, length, pos) {\n                if (!stream.tty || !stream.tty.ops.put_char) {\n                    throw new FS.ErrnoError(60);\n                }\n                try {\n                    for (var i = 0; i < length; i++) {\n                        stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n                    }\n                } catch (e) {\n                    throw new FS.ErrnoError(29);\n                }\n                if (length) {\n                    stream.node.mtime = stream.node.ctime = Date.now();\n                }\n                return i;\n            },\n        },\n        default_tty_ops: {\n            get_char(tty) {\n                return FS_stdin_getChar();\n            },\n            put_char(tty, val) {\n                if (val === null || val === 10) {\n                    out(UTF8ArrayToString(tty.output));\n                    tty.output = [];\n                } else {\n                    if (val != 0) tty.output.push(val);\n                }\n            },\n            fsync(tty) {\n                if (tty.output?.length > 0) {\n                    out(UTF8ArrayToString(tty.output));\n                    tty.output = [];\n                }\n            },\n            ioctl_tcgets(tty) {\n                // typical setting\n                return {\n                    c_iflag: 25856,\n                    c_oflag: 5,\n                    c_cflag: 191,\n                    c_lflag: 35387,\n                    c_cc: [\n                        3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23,\n                        22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n                    ],\n                };\n            },\n            ioctl_tcsets(tty, optional_actions, data) {\n                // currently just ignore\n                return 0;\n            },\n            ioctl_tiocgwinsz(tty) {\n                return [24, 80];\n            },\n        },\n        default_tty1_ops: {\n            put_char(tty, val) {\n                if (val === null || val === 10) {\n                    err(UTF8ArrayToString(tty.output));\n                    tty.output = [];\n                } else {\n                    if (val != 0) tty.output.push(val);\n                }\n            },\n            fsync(tty) {\n                if (tty.output?.length > 0) {\n                    err(UTF8ArrayToString(tty.output));\n                    tty.output = [];\n                }\n            },\n        },\n    };\n\n    var mmapAlloc = size => {\n        abort(\n            \"internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported\"\n        );\n    };\n\n    var MEMFS = {\n        ops_table: null,\n        mount(mount) {\n            return MEMFS.createNode(null, \"/\", 16895, 0);\n        },\n        createNode(parent, name, mode, dev) {\n            if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n                // no supported\n                throw new FS.ErrnoError(63);\n            }\n            MEMFS.ops_table ||= {\n                dir: {\n                    node: {\n                        getattr: MEMFS.node_ops.getattr,\n                        setattr: MEMFS.node_ops.setattr,\n                        lookup: MEMFS.node_ops.lookup,\n                        mknod: MEMFS.node_ops.mknod,\n                        rename: MEMFS.node_ops.rename,\n                        unlink: MEMFS.node_ops.unlink,\n                        rmdir: MEMFS.node_ops.rmdir,\n                        readdir: MEMFS.node_ops.readdir,\n                        symlink: MEMFS.node_ops.symlink,\n                    },\n                    stream: {\n                        llseek: MEMFS.stream_ops.llseek,\n                    },\n                },\n                file: {\n                    node: {\n                        getattr: MEMFS.node_ops.getattr,\n                        setattr: MEMFS.node_ops.setattr,\n                    },\n                    stream: {\n                        llseek: MEMFS.stream_ops.llseek,\n                        read: MEMFS.stream_ops.read,\n                        write: MEMFS.stream_ops.write,\n                        mmap: MEMFS.stream_ops.mmap,\n                        msync: MEMFS.stream_ops.msync,\n                    },\n                },\n                link: {\n                    node: {\n                        getattr: MEMFS.node_ops.getattr,\n                        setattr: MEMFS.node_ops.setattr,\n                        readlink: MEMFS.node_ops.readlink,\n                    },\n                    stream: {},\n                },\n                chrdev: {\n                    node: {\n                        getattr: MEMFS.node_ops.getattr,\n                        setattr: MEMFS.node_ops.setattr,\n                    },\n                    stream: FS.chrdev_stream_ops,\n                },\n            };\n            var node = FS.createNode(parent, name, mode, dev);\n            if (FS.isDir(node.mode)) {\n                node.node_ops = MEMFS.ops_table.dir.node;\n                node.stream_ops = MEMFS.ops_table.dir.stream;\n                node.contents = {};\n            } else if (FS.isFile(node.mode)) {\n                node.node_ops = MEMFS.ops_table.file.node;\n                node.stream_ops = MEMFS.ops_table.file.stream;\n                node.usedBytes = 0;\n                // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.\n                // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred\n                // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size\n                // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.\n                node.contents = null;\n            } else if (FS.isLink(node.mode)) {\n                node.node_ops = MEMFS.ops_table.link.node;\n                node.stream_ops = MEMFS.ops_table.link.stream;\n            } else if (FS.isChrdev(node.mode)) {\n                node.node_ops = MEMFS.ops_table.chrdev.node;\n                node.stream_ops = MEMFS.ops_table.chrdev.stream;\n            }\n            node.atime = node.mtime = node.ctime = Date.now();\n            // add the new node to the parent\n            if (parent) {\n                parent.contents[name] = node;\n                parent.atime = parent.mtime = parent.ctime = node.atime;\n            }\n            return node;\n        },\n        getFileDataAsTypedArray(node) {\n            if (!node.contents) return new Uint8Array(0);\n            if (node.contents.subarray)\n                return node.contents.subarray(0, node.usedBytes);\n            // Make sure to not return excess unused bytes.\n            return new Uint8Array(node.contents);\n        },\n        expandFileStorage(node, newCapacity) {\n            var prevCapacity = node.contents ? node.contents.length : 0;\n            if (prevCapacity >= newCapacity) return;\n            // No need to expand, the storage was already large enough.\n            // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.\n            // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to\n            // avoid overshooting the allocation cap by a very large margin.\n            var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n            newCapacity = Math.max(\n                newCapacity,\n                (prevCapacity *\n                    (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>>\n                    0\n            );\n            if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n            // At minimum allocate 256b for each file when expanding.\n            var oldContents = node.contents;\n            node.contents = new Uint8Array(newCapacity);\n            // Allocate new storage.\n            if (node.usedBytes > 0)\n                node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n        },\n        resizeFileStorage(node, newSize) {\n            if (node.usedBytes == newSize) return;\n            if (newSize == 0) {\n                node.contents = null;\n                // Fully decommit when requesting a resize to zero.\n                node.usedBytes = 0;\n            } else {\n                var oldContents = node.contents;\n                node.contents = new Uint8Array(newSize);\n                // Allocate new storage.\n                if (oldContents) {\n                    node.contents.set(\n                        oldContents.subarray(\n                            0,\n                            Math.min(newSize, node.usedBytes)\n                        )\n                    );\n                }\n                node.usedBytes = newSize;\n            }\n        },\n        node_ops: {\n            getattr(node) {\n                var attr = {};\n                // device numbers reuse inode numbers.\n                attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n                attr.ino = node.id;\n                attr.mode = node.mode;\n                attr.nlink = 1;\n                attr.uid = 0;\n                attr.gid = 0;\n                attr.rdev = node.rdev;\n                if (FS.isDir(node.mode)) {\n                    attr.size = 4096;\n                } else if (FS.isFile(node.mode)) {\n                    attr.size = node.usedBytes;\n                } else if (FS.isLink(node.mode)) {\n                    attr.size = node.link.length;\n                } else {\n                    attr.size = 0;\n                }\n                attr.atime = new Date(node.atime);\n                attr.mtime = new Date(node.mtime);\n                attr.ctime = new Date(node.ctime);\n                // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),\n                //       but this is not required by the standard.\n                attr.blksize = 4096;\n                attr.blocks = Math.ceil(attr.size / attr.blksize);\n                return attr;\n            },\n            setattr(node, attr) {\n                for (const key of [\"mode\", \"atime\", \"mtime\", \"ctime\"]) {\n                    if (attr[key] != null) {\n                        node[key] = attr[key];\n                    }\n                }\n                if (attr.size !== undefined) {\n                    MEMFS.resizeFileStorage(node, attr.size);\n                }\n            },\n            lookup(parent, name) {\n                throw new FS.ErrnoError(44);\n            },\n            mknod(parent, name, mode, dev) {\n                return MEMFS.createNode(parent, name, mode, dev);\n            },\n            rename(old_node, new_dir, new_name) {\n                var new_node;\n                try {\n                    new_node = FS.lookupNode(new_dir, new_name);\n                } catch (e) {}\n                if (new_node) {\n                    if (FS.isDir(old_node.mode)) {\n                        // if we're overwriting a directory at new_name, make sure it's empty.\n                        for (var i in new_node.contents) {\n                            throw new FS.ErrnoError(55);\n                        }\n                    }\n                    FS.hashRemoveNode(new_node);\n                }\n                // do the internal rewiring\n                delete old_node.parent.contents[old_node.name];\n                new_dir.contents[new_name] = old_node;\n                old_node.name = new_name;\n                new_dir.ctime =\n                    new_dir.mtime =\n                    old_node.parent.ctime =\n                    old_node.parent.mtime =\n                        Date.now();\n            },\n            unlink(parent, name) {\n                delete parent.contents[name];\n                parent.ctime = parent.mtime = Date.now();\n            },\n            rmdir(parent, name) {\n                var node = FS.lookupNode(parent, name);\n                for (var i in node.contents) {\n                    throw new FS.ErrnoError(55);\n                }\n                delete parent.contents[name];\n                parent.ctime = parent.mtime = Date.now();\n            },\n            readdir(node) {\n                return [\".\", \"..\", ...Object.keys(node.contents)];\n            },\n            symlink(parent, newname, oldpath) {\n                var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);\n                node.link = oldpath;\n                return node;\n            },\n            readlink(node) {\n                if (!FS.isLink(node.mode)) {\n                    throw new FS.ErrnoError(28);\n                }\n                return node.link;\n            },\n        },\n        stream_ops: {\n            read(stream, buffer, offset, length, position) {\n                var contents = stream.node.contents;\n                if (position >= stream.node.usedBytes) return 0;\n                var size = Math.min(stream.node.usedBytes - position, length);\n                assert(size >= 0);\n                if (size > 8 && contents.subarray) {\n                    // non-trivial, and typed array\n                    buffer.set(\n                        contents.subarray(position, position + size),\n                        offset\n                    );\n                } else {\n                    for (var i = 0; i < size; i++)\n                        buffer[offset + i] = contents[position + i];\n                }\n                return size;\n            },\n            write(stream, buffer, offset, length, position, canOwn) {\n                // The data buffer should be a typed array view\n                assert(!(buffer instanceof ArrayBuffer));\n                // If the buffer is located in main memory (HEAP), and if\n                // memory can grow, we can't hold on to references of the\n                // memory buffer, as they may get invalidated. That means we\n                // need to do copy its contents.\n                if (buffer.buffer === HEAP8.buffer) {\n                    canOwn = false;\n                }\n                if (!length) return 0;\n                var node = stream.node;\n                node.mtime = node.ctime = Date.now();\n                if (\n                    buffer.subarray &&\n                    (!node.contents || node.contents.subarray)\n                ) {\n                    // This write is from a typed array to a typed array?\n                    if (canOwn) {\n                        assert(\n                            position === 0,\n                            \"canOwn must imply no weird position inside the file\"\n                        );\n                        node.contents = buffer.subarray(\n                            offset,\n                            offset + length\n                        );\n                        node.usedBytes = length;\n                        return length;\n                    } else if (node.usedBytes === 0 && position === 0) {\n                        // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.\n                        node.contents = buffer.slice(offset, offset + length);\n                        node.usedBytes = length;\n                        return length;\n                    } else if (position + length <= node.usedBytes) {\n                        // Writing to an already allocated and used subrange of the file?\n                        node.contents.set(\n                            buffer.subarray(offset, offset + length),\n                            position\n                        );\n                        return length;\n                    }\n                }\n                // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.\n                MEMFS.expandFileStorage(node, position + length);\n                if (node.contents.subarray && buffer.subarray) {\n                    // Use typed array write which is available.\n                    node.contents.set(\n                        buffer.subarray(offset, offset + length),\n                        position\n                    );\n                } else {\n                    for (var i = 0; i < length; i++) {\n                        node.contents[position + i] = buffer[offset + i];\n                    }\n                }\n                node.usedBytes = Math.max(node.usedBytes, position + length);\n                return length;\n            },\n            llseek(stream, offset, whence) {\n                var position = offset;\n                if (whence === 1) {\n                    position += stream.position;\n                } else if (whence === 2) {\n                    if (FS.isFile(stream.node.mode)) {\n                        position += stream.node.usedBytes;\n                    }\n                }\n                if (position < 0) {\n                    throw new FS.ErrnoError(28);\n                }\n                return position;\n            },\n            mmap(stream, length, position, prot, flags) {\n                if (!FS.isFile(stream.node.mode)) {\n                    throw new FS.ErrnoError(43);\n                }\n                var ptr;\n                var allocated;\n                var contents = stream.node.contents;\n                // Only make a new copy when MAP_PRIVATE is specified.\n                if (\n                    !(flags & 2) &&\n                    contents &&\n                    contents.buffer === HEAP8.buffer\n                ) {\n                    // We can't emulate MAP_SHARED when the file is not backed by the\n                    // buffer we're mapping to (e.g. the HEAP buffer).\n                    allocated = false;\n                    ptr = contents.byteOffset;\n                } else {\n                    allocated = true;\n                    ptr = mmapAlloc(length);\n                    if (!ptr) {\n                        throw new FS.ErrnoError(48);\n                    }\n                    if (contents) {\n                        // Try to avoid unnecessary slices.\n                        if (\n                            position > 0 ||\n                            position + length < contents.length\n                        ) {\n                            if (contents.subarray) {\n                                contents = contents.subarray(\n                                    position,\n                                    position + length\n                                );\n                            } else {\n                                contents = Array.prototype.slice.call(\n                                    contents,\n                                    position,\n                                    position + length\n                                );\n                            }\n                        }\n                        HEAP8.set(contents, ptr);\n                    }\n                }\n                return {\n                    ptr,\n                    allocated,\n                };\n            },\n            msync(stream, buffer, offset, length, mmapFlags) {\n                MEMFS.stream_ops.write(\n                    stream,\n                    buffer,\n                    0,\n                    length,\n                    offset,\n                    false\n                );\n                // should we check if bytesWritten and length are the same?\n                return 0;\n            },\n        },\n    };\n\n    var FS_modeStringToFlags = str => {\n        var flagModes = {\n            r: 0,\n            \"r+\": 2,\n            w: 512 | 64 | 1,\n            \"w+\": 512 | 64 | 2,\n            a: 1024 | 64 | 1,\n            \"a+\": 1024 | 64 | 2,\n        };\n        var flags = flagModes[str];\n        if (typeof flags == \"undefined\") {\n            throw new Error(`Unknown file open mode: ${str}`);\n        }\n        return flags;\n    };\n\n    var FS_getMode = (canRead, canWrite) => {\n        var mode = 0;\n        if (canRead) mode |= 292 | 73;\n        if (canWrite) mode |= 146;\n        return mode;\n    };\n\n    /**\n     * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the\n     * emscripten HEAP, returns a copy of that string as a Javascript String\n     * object.\n     *\n     * @param {number} ptr\n     * @param {number} [maxBytesToRead] - An optional length that specifies the\n     *   maximum number of bytes to read. You can omit this parameter to scan the\n     *   string until the first 0 byte. If maxBytesToRead is passed, and the string\n     *   at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the\n     *   string will cut short at that byte index.\n     * @param {boolean} [ignoreNul] - If true, the function will not stop on a NUL\n     *   character.\n     * @returns {string}\n     */ var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {\n        assert(\n            typeof ptr == \"number\",\n            `UTF8ToString expects a number (got ${typeof ptr})`\n        );\n        return ptr\n            ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul)\n            : \"\";\n    };\n\n    var strError = errno => UTF8ToString(_strerror(errno));\n\n    var ERRNO_CODES = {\n        EPERM: 63,\n        ENOENT: 44,\n        ESRCH: 71,\n        EINTR: 27,\n        EIO: 29,\n        ENXIO: 60,\n        E2BIG: 1,\n        ENOEXEC: 45,\n        EBADF: 8,\n        ECHILD: 12,\n        EAGAIN: 6,\n        EWOULDBLOCK: 6,\n        ENOMEM: 48,\n        EACCES: 2,\n        EFAULT: 21,\n        ENOTBLK: 105,\n        EBUSY: 10,\n        EEXIST: 20,\n        EXDEV: 75,\n        ENODEV: 43,\n        ENOTDIR: 54,\n        EISDIR: 31,\n        EINVAL: 28,\n        ENFILE: 41,\n        EMFILE: 33,\n        ENOTTY: 59,\n        ETXTBSY: 74,\n        EFBIG: 22,\n        ENOSPC: 51,\n        ESPIPE: 70,\n        EROFS: 69,\n        EMLINK: 34,\n        EPIPE: 64,\n        EDOM: 18,\n        ERANGE: 68,\n        ENOMSG: 49,\n        EIDRM: 24,\n        ECHRNG: 106,\n        EL2NSYNC: 156,\n        EL3HLT: 107,\n        EL3RST: 108,\n        ELNRNG: 109,\n        EUNATCH: 110,\n        ENOCSI: 111,\n        EL2HLT: 112,\n        EDEADLK: 16,\n        ENOLCK: 46,\n        EBADE: 113,\n        EBADR: 114,\n        EXFULL: 115,\n        ENOANO: 104,\n        EBADRQC: 103,\n        EBADSLT: 102,\n        EDEADLOCK: 16,\n        EBFONT: 101,\n        ENOSTR: 100,\n        ENODATA: 116,\n        ETIME: 117,\n        ENOSR: 118,\n        ENONET: 119,\n        ENOPKG: 120,\n        EREMOTE: 121,\n        ENOLINK: 47,\n        EADV: 122,\n        ESRMNT: 123,\n        ECOMM: 124,\n        EPROTO: 65,\n        EMULTIHOP: 36,\n        EDOTDOT: 125,\n        EBADMSG: 9,\n        ENOTUNIQ: 126,\n        EBADFD: 127,\n        EREMCHG: 128,\n        ELIBACC: 129,\n        ELIBBAD: 130,\n        ELIBSCN: 131,\n        ELIBMAX: 132,\n        ELIBEXEC: 133,\n        ENOSYS: 52,\n        ENOTEMPTY: 55,\n        ENAMETOOLONG: 37,\n        ELOOP: 32,\n        EOPNOTSUPP: 138,\n        EPFNOSUPPORT: 139,\n        ECONNRESET: 15,\n        ENOBUFS: 42,\n        EAFNOSUPPORT: 5,\n        EPROTOTYPE: 67,\n        ENOTSOCK: 57,\n        ENOPROTOOPT: 50,\n        ESHUTDOWN: 140,\n        ECONNREFUSED: 14,\n        EADDRINUSE: 3,\n        ECONNABORTED: 13,\n        ENETUNREACH: 40,\n        ENETDOWN: 38,\n        ETIMEDOUT: 73,\n        EHOSTDOWN: 142,\n        EHOSTUNREACH: 23,\n        EINPROGRESS: 26,\n        EALREADY: 7,\n        EDESTADDRREQ: 17,\n        EMSGSIZE: 35,\n        EPROTONOSUPPORT: 66,\n        ESOCKTNOSUPPORT: 137,\n        EADDRNOTAVAIL: 4,\n        ENETRESET: 39,\n        EISCONN: 30,\n        ENOTCONN: 53,\n        ETOOMANYREFS: 141,\n        EUSERS: 136,\n        EDQUOT: 19,\n        ESTALE: 72,\n        ENOTSUP: 138,\n        ENOMEDIUM: 148,\n        EILSEQ: 25,\n        EOVERFLOW: 61,\n        ECANCELED: 11,\n        ENOTRECOVERABLE: 56,\n        EOWNERDEAD: 62,\n        ESTRPIPE: 135,\n    };\n\n    var asyncLoad = async url => {\n        var arrayBuffer = await readAsync(url);\n        assert(\n            arrayBuffer,\n            `Loading data file \"${url}\" failed (no arrayBuffer).`\n        );\n        return new Uint8Array(arrayBuffer);\n    };\n\n    var FS_createDataFile = (...args) => FS.createDataFile(...args);\n\n    var getUniqueRunDependency = id => {\n        var orig = id;\n        while (1) {\n            if (!runDependencyTracking[id]) return id;\n            id = orig + Math.random();\n        }\n    };\n\n    var preloadPlugins = [];\n\n    var FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n        // Ensure plugins are ready.\n        if (typeof Browser != \"undefined\") Browser.init();\n        for (var plugin of preloadPlugins) {\n            if (plugin[\"canHandle\"](fullname)) {\n                assert(\n                    plugin[\"handle\"].constructor.name === \"AsyncFunction\",\n                    \"Filesystem plugin handlers must be async functions (See #24914)\"\n                );\n                return plugin[\"handle\"](byteArray, fullname);\n            }\n        }\n        // In no plugin handled this file then return the original/unmodified\n        // byteArray.\n        return byteArray;\n    };\n\n    var FS_preloadFile = async (\n        parent,\n        name,\n        url,\n        canRead,\n        canWrite,\n        dontCreateFile,\n        canOwn,\n        preFinish\n    ) => {\n        // TODO we should allow people to just pass in a complete filename instead\n        // of parent and name being that we just join them anyways\n        var fullname = name\n            ? PATH_FS.resolve(PATH.join2(parent, name))\n            : parent;\n        var dep = getUniqueRunDependency(`cp ${fullname}`);\n        // might have several active requests for the same fullname\n        addRunDependency(dep);\n        try {\n            var byteArray = url;\n            if (typeof url == \"string\") {\n                byteArray = await asyncLoad(url);\n            }\n            byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n            preFinish?.();\n            if (!dontCreateFile) {\n                FS_createDataFile(\n                    parent,\n                    name,\n                    byteArray,\n                    canRead,\n                    canWrite,\n                    canOwn\n                );\n            }\n        } finally {\n            removeRunDependency(dep);\n        }\n    };\n\n    var FS_createPreloadedFile = (\n        parent,\n        name,\n        url,\n        canRead,\n        canWrite,\n        onload,\n        onerror,\n        dontCreateFile,\n        canOwn,\n        preFinish\n    ) => {\n        FS_preloadFile(\n            parent,\n            name,\n            url,\n            canRead,\n            canWrite,\n            dontCreateFile,\n            canOwn,\n            preFinish\n        )\n            .then(onload)\n            .catch(onerror);\n    };\n\n    var FS = {\n        root: null,\n        mounts: [],\n        devices: {},\n        streams: [],\n        nextInode: 1,\n        nameTable: null,\n        currentPath: \"/\",\n        initialized: false,\n        ignorePermissions: true,\n        filesystems: null,\n        syncFSRequests: 0,\n        readFiles: {},\n        ErrnoError: class extends Error {\n            name = \"ErrnoError\";\n            // We set the `name` property to be able to identify `FS.ErrnoError`\n            // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway.\n            // - when using PROXYFS, an error can come from an underlying FS\n            // as different FS objects have their own FS.ErrnoError each,\n            // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs.\n            // we'll use the reliable test `err.name == \"ErrnoError\"` instead\n            constructor(errno) {\n                super(runtimeInitialized ? strError(errno) : \"\");\n                this.errno = errno;\n                for (var key in ERRNO_CODES) {\n                    if (ERRNO_CODES[key] === errno) {\n                        this.code = key;\n                        break;\n                    }\n                }\n            }\n        },\n        FSStream: class {\n            shared = {};\n            get object() {\n                return this.node;\n            }\n            set object(val) {\n                this.node = val;\n            }\n            get isRead() {\n                return (this.flags & 2097155) !== 1;\n            }\n            get isWrite() {\n                return (this.flags & 2097155) !== 0;\n            }\n            get isAppend() {\n                return this.flags & 1024;\n            }\n            get flags() {\n                return this.shared.flags;\n            }\n            set flags(val) {\n                this.shared.flags = val;\n            }\n            get position() {\n                return this.shared.position;\n            }\n            set position(val) {\n                this.shared.position = val;\n            }\n        },\n        FSNode: class {\n            node_ops = {};\n            stream_ops = {};\n            readMode = 292 | 73;\n            writeMode = 146;\n            mounted = null;\n            constructor(parent, name, mode, rdev) {\n                if (!parent) {\n                    parent = this;\n                }\n                this.parent = parent;\n                this.mount = parent.mount;\n                this.id = FS.nextInode++;\n                this.name = name;\n                this.mode = mode;\n                this.rdev = rdev;\n                this.atime = this.mtime = this.ctime = Date.now();\n            }\n            get read() {\n                return (this.mode & this.readMode) === this.readMode;\n            }\n            set read(val) {\n                val\n                    ? (this.mode |= this.readMode)\n                    : (this.mode &= ~this.readMode);\n            }\n            get write() {\n                return (this.mode & this.writeMode) === this.writeMode;\n            }\n            set write(val) {\n                val\n                    ? (this.mode |= this.writeMode)\n                    : (this.mode &= ~this.writeMode);\n            }\n            get isFolder() {\n                return FS.isDir(this.mode);\n            }\n            get isDevice() {\n                return FS.isChrdev(this.mode);\n            }\n        },\n        lookupPath(path, opts = {}) {\n            if (!path) {\n                throw new FS.ErrnoError(44);\n            }\n            opts.follow_mount ??= true;\n            if (!PATH.isAbs(path)) {\n                path = FS.cwd() + \"/\" + path;\n            }\n            // limit max consecutive symlinks to 40 (SYMLOOP_MAX).\n            linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n                // split the absolute path\n                var parts = path.split(\"/\").filter(p => !!p);\n                // start at the root\n                var current = FS.root;\n                var current_path = \"/\";\n                for (var i = 0; i < parts.length; i++) {\n                    var islast = i === parts.length - 1;\n                    if (islast && opts.parent) {\n                        // stop resolving\n                        break;\n                    }\n                    if (parts[i] === \".\") {\n                        continue;\n                    }\n                    if (parts[i] === \"..\") {\n                        current_path = PATH.dirname(current_path);\n                        if (FS.isRoot(current)) {\n                            path =\n                                current_path +\n                                \"/\" +\n                                parts.slice(i + 1).join(\"/\");\n                            // We're making progress here, don't let many consecutive ..'s\n                            // lead to ELOOP\n                            nlinks--;\n                            continue linkloop;\n                        } else {\n                            current = current.parent;\n                        }\n                        continue;\n                    }\n                    current_path = PATH.join2(current_path, parts[i]);\n                    try {\n                        current = FS.lookupNode(current, parts[i]);\n                    } catch (e) {\n                        // if noent_okay is true, suppress a ENOENT in the last component\n                        // and return an object with an undefined node. This is needed for\n                        // resolving symlinks in the path when creating a file.\n                        if (e?.errno === 44 && islast && opts.noent_okay) {\n                            return {\n                                path: current_path,\n                            };\n                        }\n                        throw e;\n                    }\n                    // jump to the mount's root node if this is a mountpoint\n                    if (\n                        FS.isMountpoint(current) &&\n                        (!islast || opts.follow_mount)\n                    ) {\n                        current = current.mounted.root;\n                    }\n                    // by default, lookupPath will not follow a symlink if it is the final path component.\n                    // setting opts.follow = true will override this behavior.\n                    if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n                        if (!current.node_ops.readlink) {\n                            throw new FS.ErrnoError(52);\n                        }\n                        var link = current.node_ops.readlink(current);\n                        if (!PATH.isAbs(link)) {\n                            link = PATH.dirname(current_path) + \"/\" + link;\n                        }\n                        path = link + \"/\" + parts.slice(i + 1).join(\"/\");\n                        continue linkloop;\n                    }\n                }\n                return {\n                    path: current_path,\n                    node: current,\n                };\n            }\n            throw new FS.ErrnoError(32);\n        },\n        getPath(node) {\n            var path;\n            while (true) {\n                if (FS.isRoot(node)) {\n                    var mount = node.mount.mountpoint;\n                    if (!path) return mount;\n                    return mount[mount.length - 1] !== \"/\"\n                        ? `${mount}/${path}`\n                        : mount + path;\n                }\n                path = path ? `${node.name}/${path}` : node.name;\n                node = node.parent;\n            }\n        },\n        hashName(parentid, name) {\n            var hash = 0;\n            for (var i = 0; i < name.length; i++) {\n                hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n            }\n            return ((parentid + hash) >>> 0) % FS.nameTable.length;\n        },\n        hashAddNode(node) {\n            var hash = FS.hashName(node.parent.id, node.name);\n            node.name_next = FS.nameTable[hash];\n            FS.nameTable[hash] = node;\n        },\n        hashRemoveNode(node) {\n            var hash = FS.hashName(node.parent.id, node.name);\n            if (FS.nameTable[hash] === node) {\n                FS.nameTable[hash] = node.name_next;\n            } else {\n                var current = FS.nameTable[hash];\n                while (current) {\n                    if (current.name_next === node) {\n                        current.name_next = node.name_next;\n                        break;\n                    }\n                    current = current.name_next;\n                }\n            }\n        },\n        lookupNode(parent, name) {\n            var errCode = FS.mayLookup(parent);\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            var hash = FS.hashName(parent.id, name);\n            for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n                var nodeName = node.name;\n                if (node.parent.id === parent.id && nodeName === name) {\n                    return node;\n                }\n            }\n            // if we failed to find it in the cache, call into the VFS\n            return FS.lookup(parent, name);\n        },\n        createNode(parent, name, mode, rdev) {\n            assert(typeof parent == \"object\");\n            var node = new FS.FSNode(parent, name, mode, rdev);\n            FS.hashAddNode(node);\n            return node;\n        },\n        destroyNode(node) {\n            FS.hashRemoveNode(node);\n        },\n        isRoot(node) {\n            return node === node.parent;\n        },\n        isMountpoint(node) {\n            return !!node.mounted;\n        },\n        isFile(mode) {\n            return (mode & 61440) === 32768;\n        },\n        isDir(mode) {\n            return (mode & 61440) === 16384;\n        },\n        isLink(mode) {\n            return (mode & 61440) === 40960;\n        },\n        isChrdev(mode) {\n            return (mode & 61440) === 8192;\n        },\n        isBlkdev(mode) {\n            return (mode & 61440) === 24576;\n        },\n        isFIFO(mode) {\n            return (mode & 61440) === 4096;\n        },\n        isSocket(mode) {\n            return (mode & 49152) === 49152;\n        },\n        flagsToPermissionString(flag) {\n            var perms = [\"r\", \"w\", \"rw\"][flag & 3];\n            if (flag & 512) {\n                perms += \"w\";\n            }\n            return perms;\n        },\n        nodePermissions(node, perms) {\n            if (FS.ignorePermissions) {\n                return 0;\n            }\n            // return 0 if any user, group or owner bits are set.\n            if (perms.includes(\"r\") && !(node.mode & 292)) {\n                return 2;\n            } else if (perms.includes(\"w\") && !(node.mode & 146)) {\n                return 2;\n            } else if (perms.includes(\"x\") && !(node.mode & 73)) {\n                return 2;\n            }\n            return 0;\n        },\n        mayLookup(dir) {\n            if (!FS.isDir(dir.mode)) return 54;\n            var errCode = FS.nodePermissions(dir, \"x\");\n            if (errCode) return errCode;\n            if (!dir.node_ops.lookup) return 2;\n            return 0;\n        },\n        mayCreate(dir, name) {\n            if (!FS.isDir(dir.mode)) {\n                return 54;\n            }\n            try {\n                var node = FS.lookupNode(dir, name);\n                return 20;\n            } catch (e) {}\n            return FS.nodePermissions(dir, \"wx\");\n        },\n        mayDelete(dir, name, isdir) {\n            var node;\n            try {\n                node = FS.lookupNode(dir, name);\n            } catch (e) {\n                return e.errno;\n            }\n            var errCode = FS.nodePermissions(dir, \"wx\");\n            if (errCode) {\n                return errCode;\n            }\n            if (isdir) {\n                if (!FS.isDir(node.mode)) {\n                    return 54;\n                }\n                if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n                    return 10;\n                }\n            } else {\n                if (FS.isDir(node.mode)) {\n                    return 31;\n                }\n            }\n            return 0;\n        },\n        mayOpen(node, flags) {\n            if (!node) {\n                return 44;\n            }\n            if (FS.isLink(node.mode)) {\n                return 32;\n            } else if (FS.isDir(node.mode)) {\n                if (\n                    FS.flagsToPermissionString(flags) !== \"r\" ||\n                    flags & (512 | 64)\n                ) {\n                    // TODO: check for O_SEARCH? (== search for dir only)\n                    return 31;\n                }\n            }\n            return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n        },\n        checkOpExists(op, err) {\n            if (!op) {\n                throw new FS.ErrnoError(err);\n            }\n            return op;\n        },\n        MAX_OPEN_FDS: 4096,\n        nextfd() {\n            for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n                if (!FS.streams[fd]) {\n                    return fd;\n                }\n            }\n            throw new FS.ErrnoError(33);\n        },\n        getStreamChecked(fd) {\n            var stream = FS.getStream(fd);\n            if (!stream) {\n                throw new FS.ErrnoError(8);\n            }\n            return stream;\n        },\n        getStream: fd => FS.streams[fd],\n        createStream(stream, fd = -1) {\n            assert(fd >= -1);\n            // clone it, so we can return an instance of FSStream\n            stream = Object.assign(new FS.FSStream(), stream);\n            if (fd == -1) {\n                fd = FS.nextfd();\n            }\n            stream.fd = fd;\n            FS.streams[fd] = stream;\n            return stream;\n        },\n        closeStream(fd) {\n            FS.streams[fd] = null;\n        },\n        dupStream(origStream, fd = -1) {\n            var stream = FS.createStream(origStream, fd);\n            stream.stream_ops?.dup?.(stream);\n            return stream;\n        },\n        doSetAttr(stream, node, attr) {\n            var setattr = stream?.stream_ops.setattr;\n            var arg = setattr ? stream : node;\n            setattr ??= node.node_ops.setattr;\n            FS.checkOpExists(setattr, 63);\n            setattr(arg, attr);\n        },\n        chrdev_stream_ops: {\n            open(stream) {\n                var device = FS.getDevice(stream.node.rdev);\n                // override node's stream ops with the device's\n                stream.stream_ops = device.stream_ops;\n                // forward the open call\n                stream.stream_ops.open?.(stream);\n            },\n            llseek() {\n                throw new FS.ErrnoError(70);\n            },\n        },\n        major: dev => dev >> 8,\n        minor: dev => dev & 255,\n        makedev: (ma, mi) => (ma << 8) | mi,\n        registerDevice(dev, ops) {\n            FS.devices[dev] = {\n                stream_ops: ops,\n            };\n        },\n        getDevice: dev => FS.devices[dev],\n        getMounts(mount) {\n            var mounts = [];\n            var check = [mount];\n            while (check.length) {\n                var m = check.pop();\n                mounts.push(m);\n                check.push(...m.mounts);\n            }\n            return mounts;\n        },\n        syncfs(populate, callback) {\n            if (typeof populate == \"function\") {\n                callback = populate;\n                populate = false;\n            }\n            FS.syncFSRequests++;\n            if (FS.syncFSRequests > 1) {\n                err(\n                    `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`\n                );\n            }\n            var mounts = FS.getMounts(FS.root.mount);\n            var completed = 0;\n            function doCallback(errCode) {\n                assert(FS.syncFSRequests > 0);\n                FS.syncFSRequests--;\n                return callback(errCode);\n            }\n            function done(errCode) {\n                if (errCode) {\n                    if (!done.errored) {\n                        done.errored = true;\n                        return doCallback(errCode);\n                    }\n                    return;\n                }\n                if (++completed >= mounts.length) {\n                    doCallback(null);\n                }\n            }\n            // sync all mounts\n            mounts.forEach(mount => {\n                if (!mount.type.syncfs) {\n                    return done(null);\n                }\n                mount.type.syncfs(mount, populate, done);\n            });\n        },\n        mount(type, opts, mountpoint) {\n            if (typeof type == \"string\") {\n                // The filesystem was not included, and instead we have an error\n                // message stored in the variable.\n                throw type;\n            }\n            var root = mountpoint === \"/\";\n            var pseudo = !mountpoint;\n            var node;\n            if (root && FS.root) {\n                throw new FS.ErrnoError(10);\n            } else if (!root && !pseudo) {\n                var lookup = FS.lookupPath(mountpoint, {\n                    follow_mount: false,\n                });\n                mountpoint = lookup.path;\n                // use the absolute path\n                node = lookup.node;\n                if (FS.isMountpoint(node)) {\n                    throw new FS.ErrnoError(10);\n                }\n                if (!FS.isDir(node.mode)) {\n                    throw new FS.ErrnoError(54);\n                }\n            }\n            var mount = {\n                type,\n                opts,\n                mountpoint,\n                mounts: [],\n            };\n            // create a root node for the fs\n            var mountRoot = type.mount(mount);\n            mountRoot.mount = mount;\n            mount.root = mountRoot;\n            if (root) {\n                FS.root = mountRoot;\n            } else if (node) {\n                // set as a mountpoint\n                node.mounted = mount;\n                // add the new mount to the current mount's children\n                if (node.mount) {\n                    node.mount.mounts.push(mount);\n                }\n            }\n            return mountRoot;\n        },\n        unmount(mountpoint) {\n            var lookup = FS.lookupPath(mountpoint, {\n                follow_mount: false,\n            });\n            if (!FS.isMountpoint(lookup.node)) {\n                throw new FS.ErrnoError(28);\n            }\n            // destroy the nodes for this mount, and all its child mounts\n            var node = lookup.node;\n            var mount = node.mounted;\n            var mounts = FS.getMounts(mount);\n            Object.keys(FS.nameTable).forEach(hash => {\n                var current = FS.nameTable[hash];\n                while (current) {\n                    var next = current.name_next;\n                    if (mounts.includes(current.mount)) {\n                        FS.destroyNode(current);\n                    }\n                    current = next;\n                }\n            });\n            // no longer a mountpoint\n            node.mounted = null;\n            // remove this mount from the child mounts\n            var idx = node.mount.mounts.indexOf(mount);\n            assert(idx !== -1);\n            node.mount.mounts.splice(idx, 1);\n        },\n        lookup(parent, name) {\n            return parent.node_ops.lookup(parent, name);\n        },\n        mknod(path, mode, dev) {\n            var lookup = FS.lookupPath(path, {\n                parent: true,\n            });\n            var parent = lookup.node;\n            var name = PATH.basename(path);\n            if (!name) {\n                throw new FS.ErrnoError(28);\n            }\n            if (name === \".\" || name === \"..\") {\n                throw new FS.ErrnoError(20);\n            }\n            var errCode = FS.mayCreate(parent, name);\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            if (!parent.node_ops.mknod) {\n                throw new FS.ErrnoError(63);\n            }\n            return parent.node_ops.mknod(parent, name, mode, dev);\n        },\n        statfs(path) {\n            return FS.statfsNode(\n                FS.lookupPath(path, {\n                    follow: true,\n                }).node\n            );\n        },\n        statfsStream(stream) {\n            // We keep a separate statfsStream function because noderawfs overrides\n            // it. In noderawfs, stream.node is sometimes null. Instead, we need to\n            // look at stream.path.\n            return FS.statfsNode(stream.node);\n        },\n        statfsNode(node) {\n            // NOTE: None of the defaults here are true. We're just returning safe and\n            //       sane values. Currently nodefs and rawfs replace these defaults,\n            //       other file systems leave them alone.\n            var rtn = {\n                bsize: 4096,\n                frsize: 4096,\n                blocks: 1e6,\n                bfree: 5e5,\n                bavail: 5e5,\n                files: FS.nextInode,\n                ffree: FS.nextInode - 1,\n                fsid: 42,\n                flags: 2,\n                namelen: 255,\n            };\n            if (node.node_ops.statfs) {\n                Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n            }\n            return rtn;\n        },\n        create(path, mode = 438) {\n            mode &= 4095;\n            mode |= 32768;\n            return FS.mknod(path, mode, 0);\n        },\n        mkdir(path, mode = 511) {\n            mode &= 511 | 512;\n            mode |= 16384;\n            return FS.mknod(path, mode, 0);\n        },\n        mkdirTree(path, mode) {\n            var dirs = path.split(\"/\");\n            var d = \"\";\n            for (var dir of dirs) {\n                if (!dir) continue;\n                if (d || PATH.isAbs(path)) d += \"/\";\n                d += dir;\n                try {\n                    FS.mkdir(d, mode);\n                } catch (e) {\n                    if (e.errno != 20) throw e;\n                }\n            }\n        },\n        mkdev(path, mode, dev) {\n            if (typeof dev == \"undefined\") {\n                dev = mode;\n                mode = 438;\n            }\n            mode |= 8192;\n            return FS.mknod(path, mode, dev);\n        },\n        symlink(oldpath, newpath) {\n            if (!PATH_FS.resolve(oldpath)) {\n                throw new FS.ErrnoError(44);\n            }\n            var lookup = FS.lookupPath(newpath, {\n                parent: true,\n            });\n            var parent = lookup.node;\n            if (!parent) {\n                throw new FS.ErrnoError(44);\n            }\n            var newname = PATH.basename(newpath);\n            var errCode = FS.mayCreate(parent, newname);\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            if (!parent.node_ops.symlink) {\n                throw new FS.ErrnoError(63);\n            }\n            return parent.node_ops.symlink(parent, newname, oldpath);\n        },\n        rename(old_path, new_path) {\n            var old_dirname = PATH.dirname(old_path);\n            var new_dirname = PATH.dirname(new_path);\n            var old_name = PATH.basename(old_path);\n            var new_name = PATH.basename(new_path);\n            // parents must exist\n            var lookup, old_dir, new_dir;\n            // let the errors from non existent directories percolate up\n            lookup = FS.lookupPath(old_path, {\n                parent: true,\n            });\n            old_dir = lookup.node;\n            lookup = FS.lookupPath(new_path, {\n                parent: true,\n            });\n            new_dir = lookup.node;\n            if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n            // need to be part of the same mount\n            if (old_dir.mount !== new_dir.mount) {\n                throw new FS.ErrnoError(75);\n            }\n            // source must exist\n            var old_node = FS.lookupNode(old_dir, old_name);\n            // old path should not be an ancestor of the new path\n            var relative = PATH_FS.relative(old_path, new_dirname);\n            if (relative.charAt(0) !== \".\") {\n                throw new FS.ErrnoError(28);\n            }\n            // new path should not be an ancestor of the old path\n            relative = PATH_FS.relative(new_path, old_dirname);\n            if (relative.charAt(0) !== \".\") {\n                throw new FS.ErrnoError(55);\n            }\n            // see if the new path already exists\n            var new_node;\n            try {\n                new_node = FS.lookupNode(new_dir, new_name);\n            } catch (e) {}\n            // early out if nothing needs to change\n            if (old_node === new_node) {\n                return;\n            }\n            // we'll need to delete the old entry\n            var isdir = FS.isDir(old_node.mode);\n            var errCode = FS.mayDelete(old_dir, old_name, isdir);\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            // need delete permissions if we'll be overwriting.\n            // need create permissions if new doesn't already exist.\n            errCode = new_node\n                ? FS.mayDelete(new_dir, new_name, isdir)\n                : FS.mayCreate(new_dir, new_name);\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            if (!old_dir.node_ops.rename) {\n                throw new FS.ErrnoError(63);\n            }\n            if (\n                FS.isMountpoint(old_node) ||\n                (new_node && FS.isMountpoint(new_node))\n            ) {\n                throw new FS.ErrnoError(10);\n            }\n            // if we are going to change the parent, check write permissions\n            if (new_dir !== old_dir) {\n                errCode = FS.nodePermissions(old_dir, \"w\");\n                if (errCode) {\n                    throw new FS.ErrnoError(errCode);\n                }\n            }\n            // remove the node from the lookup hash\n            FS.hashRemoveNode(old_node);\n            // do the underlying fs rename\n            try {\n                old_dir.node_ops.rename(old_node, new_dir, new_name);\n                // update old node (we do this here to avoid each backend\n                // needing to)\n                old_node.parent = new_dir;\n            } catch (e) {\n                throw e;\n            } finally {\n                // add the node back to the hash (in case node_ops.rename\n                // changed its name)\n                FS.hashAddNode(old_node);\n            }\n        },\n        rmdir(path) {\n            var lookup = FS.lookupPath(path, {\n                parent: true,\n            });\n            var parent = lookup.node;\n            var name = PATH.basename(path);\n            var node = FS.lookupNode(parent, name);\n            var errCode = FS.mayDelete(parent, name, true);\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            if (!parent.node_ops.rmdir) {\n                throw new FS.ErrnoError(63);\n            }\n            if (FS.isMountpoint(node)) {\n                throw new FS.ErrnoError(10);\n            }\n            parent.node_ops.rmdir(parent, name);\n            FS.destroyNode(node);\n        },\n        readdir(path) {\n            var lookup = FS.lookupPath(path, {\n                follow: true,\n            });\n            var node = lookup.node;\n            var readdir = FS.checkOpExists(node.node_ops.readdir, 54);\n            return readdir(node);\n        },\n        unlink(path) {\n            var lookup = FS.lookupPath(path, {\n                parent: true,\n            });\n            var parent = lookup.node;\n            if (!parent) {\n                throw new FS.ErrnoError(44);\n            }\n            var name = PATH.basename(path);\n            var node = FS.lookupNode(parent, name);\n            var errCode = FS.mayDelete(parent, name, false);\n            if (errCode) {\n                // According to POSIX, we should map EISDIR to EPERM, but\n                // we instead do what Linux does (and we must, as we use\n                // the musl linux libc).\n                throw new FS.ErrnoError(errCode);\n            }\n            if (!parent.node_ops.unlink) {\n                throw new FS.ErrnoError(63);\n            }\n            if (FS.isMountpoint(node)) {\n                throw new FS.ErrnoError(10);\n            }\n            parent.node_ops.unlink(parent, name);\n            FS.destroyNode(node);\n        },\n        readlink(path) {\n            var lookup = FS.lookupPath(path);\n            var link = lookup.node;\n            if (!link) {\n                throw new FS.ErrnoError(44);\n            }\n            if (!link.node_ops.readlink) {\n                throw new FS.ErrnoError(28);\n            }\n            return link.node_ops.readlink(link);\n        },\n        stat(path, dontFollow) {\n            var lookup = FS.lookupPath(path, {\n                follow: !dontFollow,\n            });\n            var node = lookup.node;\n            var getattr = FS.checkOpExists(node.node_ops.getattr, 63);\n            return getattr(node);\n        },\n        fstat(fd) {\n            var stream = FS.getStreamChecked(fd);\n            var node = stream.node;\n            var getattr = stream.stream_ops.getattr;\n            var arg = getattr ? stream : node;\n            getattr ??= node.node_ops.getattr;\n            FS.checkOpExists(getattr, 63);\n            return getattr(arg);\n        },\n        lstat(path) {\n            return FS.stat(path, true);\n        },\n        doChmod(stream, node, mode, dontFollow) {\n            FS.doSetAttr(stream, node, {\n                mode: (mode & 4095) | (node.mode & ~4095),\n                ctime: Date.now(),\n                dontFollow,\n            });\n        },\n        chmod(path, mode, dontFollow) {\n            var node;\n            if (typeof path == \"string\") {\n                var lookup = FS.lookupPath(path, {\n                    follow: !dontFollow,\n                });\n                node = lookup.node;\n            } else {\n                node = path;\n            }\n            FS.doChmod(null, node, mode, dontFollow);\n        },\n        lchmod(path, mode) {\n            FS.chmod(path, mode, true);\n        },\n        fchmod(fd, mode) {\n            var stream = FS.getStreamChecked(fd);\n            FS.doChmod(stream, stream.node, mode, false);\n        },\n        doChown(stream, node, dontFollow) {\n            FS.doSetAttr(stream, node, {\n                timestamp: Date.now(),\n                dontFollow,\n            });\n        },\n        chown(path, uid, gid, dontFollow) {\n            var node;\n            if (typeof path == \"string\") {\n                var lookup = FS.lookupPath(path, {\n                    follow: !dontFollow,\n                });\n                node = lookup.node;\n            } else {\n                node = path;\n            }\n            FS.doChown(null, node, dontFollow);\n        },\n        lchown(path, uid, gid) {\n            FS.chown(path, uid, gid, true);\n        },\n        fchown(fd, uid, gid) {\n            var stream = FS.getStreamChecked(fd);\n            FS.doChown(stream, stream.node, false);\n        },\n        doTruncate(stream, node, len) {\n            if (FS.isDir(node.mode)) {\n                throw new FS.ErrnoError(31);\n            }\n            if (!FS.isFile(node.mode)) {\n                throw new FS.ErrnoError(28);\n            }\n            var errCode = FS.nodePermissions(node, \"w\");\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            FS.doSetAttr(stream, node, {\n                size: len,\n                timestamp: Date.now(),\n            });\n        },\n        truncate(path, len) {\n            if (len < 0) {\n                throw new FS.ErrnoError(28);\n            }\n            var node;\n            if (typeof path == \"string\") {\n                var lookup = FS.lookupPath(path, {\n                    follow: true,\n                });\n                node = lookup.node;\n            } else {\n                node = path;\n            }\n            FS.doTruncate(null, node, len);\n        },\n        ftruncate(fd, len) {\n            var stream = FS.getStreamChecked(fd);\n            if (len < 0 || (stream.flags & 2097155) === 0) {\n                throw new FS.ErrnoError(28);\n            }\n            FS.doTruncate(stream, stream.node, len);\n        },\n        utime(path, atime, mtime) {\n            var lookup = FS.lookupPath(path, {\n                follow: true,\n            });\n            var node = lookup.node;\n            var setattr = FS.checkOpExists(node.node_ops.setattr, 63);\n            setattr(node, {\n                atime,\n                mtime,\n            });\n        },\n        open(path, flags, mode = 438) {\n            if (path === \"\") {\n                throw new FS.ErrnoError(44);\n            }\n            flags =\n                typeof flags == \"string\" ? FS_modeStringToFlags(flags) : flags;\n            if (flags & 64) {\n                mode = (mode & 4095) | 32768;\n            } else {\n                mode = 0;\n            }\n            var node;\n            var isDirPath;\n            if (typeof path == \"object\") {\n                node = path;\n            } else {\n                isDirPath = path.endsWith(\"/\");\n                // noent_okay makes it so that if the final component of the path\n                // doesn't exist, lookupPath returns `node: undefined`. `path` will be\n                // updated to point to the target of all symlinks.\n                var lookup = FS.lookupPath(path, {\n                    follow: !(flags & 131072),\n                    noent_okay: true,\n                });\n                node = lookup.node;\n                path = lookup.path;\n            }\n            // perhaps we need to create the node\n            var created = false;\n            if (flags & 64) {\n                if (node) {\n                    // if O_CREAT and O_EXCL are set, error out if the node already exists\n                    if (flags & 128) {\n                        throw new FS.ErrnoError(20);\n                    }\n                } else if (isDirPath) {\n                    throw new FS.ErrnoError(31);\n                } else {\n                    // node doesn't exist, try to create it\n                    // Ignore the permission bits here to ensure we can `open` this new\n                    // file below. We use chmod below the apply the permissions once the\n                    // file is open.\n                    node = FS.mknod(path, mode | 511, 0);\n                    created = true;\n                }\n            }\n            if (!node) {\n                throw new FS.ErrnoError(44);\n            }\n            // can't truncate a device\n            if (FS.isChrdev(node.mode)) {\n                flags &= ~512;\n            }\n            // if asked only for a directory, then this must be one\n            if (flags & 65536 && !FS.isDir(node.mode)) {\n                throw new FS.ErrnoError(54);\n            }\n            // check permissions, if this is not a file we just created now (it is ok to\n            // create and write to a file with read-only permissions; it is read-only\n            // for later use)\n            if (!created) {\n                var errCode = FS.mayOpen(node, flags);\n                if (errCode) {\n                    throw new FS.ErrnoError(errCode);\n                }\n            }\n            // do truncation if necessary\n            if (flags & 512 && !created) {\n                FS.truncate(node, 0);\n            }\n            // we've already handled these, don't pass down to the underlying vfs\n            flags &= ~(128 | 512 | 131072);\n            // register the stream with the filesystem\n            var stream = FS.createStream({\n                node,\n                path: FS.getPath(node),\n                // we want the absolute path to the node\n                flags,\n                seekable: true,\n                position: 0,\n                stream_ops: node.stream_ops,\n                // used by the file family libc calls (fopen, fwrite, ferror, etc.)\n                ungotten: [],\n                error: false,\n            });\n            // call the new stream's open function\n            if (stream.stream_ops.open) {\n                stream.stream_ops.open(stream);\n            }\n            if (created) {\n                FS.chmod(node, mode & 511);\n            }\n            if (Module[\"logReadFiles\"] && !(flags & 1)) {\n                if (!(path in FS.readFiles)) {\n                    FS.readFiles[path] = 1;\n                }\n            }\n            return stream;\n        },\n        close(stream) {\n            if (FS.isClosed(stream)) {\n                throw new FS.ErrnoError(8);\n            }\n            if (stream.getdents) stream.getdents = null;\n            // free readdir state\n            try {\n                if (stream.stream_ops.close) {\n                    stream.stream_ops.close(stream);\n                }\n            } catch (e) {\n                throw e;\n            } finally {\n                FS.closeStream(stream.fd);\n            }\n            stream.fd = null;\n        },\n        isClosed(stream) {\n            return stream.fd === null;\n        },\n        llseek(stream, offset, whence) {\n            if (FS.isClosed(stream)) {\n                throw new FS.ErrnoError(8);\n            }\n            if (!stream.seekable || !stream.stream_ops.llseek) {\n                throw new FS.ErrnoError(70);\n            }\n            if (whence != 0 && whence != 1 && whence != 2) {\n                throw new FS.ErrnoError(28);\n            }\n            stream.position = stream.stream_ops.llseek(stream, offset, whence);\n            stream.ungotten = [];\n            return stream.position;\n        },\n        read(stream, buffer, offset, length, position) {\n            assert(offset >= 0);\n            if (length < 0 || position < 0) {\n                throw new FS.ErrnoError(28);\n            }\n            if (FS.isClosed(stream)) {\n                throw new FS.ErrnoError(8);\n            }\n            if ((stream.flags & 2097155) === 1) {\n                throw new FS.ErrnoError(8);\n            }\n            if (FS.isDir(stream.node.mode)) {\n                throw new FS.ErrnoError(31);\n            }\n            if (!stream.stream_ops.read) {\n                throw new FS.ErrnoError(28);\n            }\n            var seeking = typeof position != \"undefined\";\n            if (!seeking) {\n                position = stream.position;\n            } else if (!stream.seekable) {\n                throw new FS.ErrnoError(70);\n            }\n            var bytesRead = stream.stream_ops.read(\n                stream,\n                buffer,\n                offset,\n                length,\n                position\n            );\n            if (!seeking) stream.position += bytesRead;\n            return bytesRead;\n        },\n        write(stream, buffer, offset, length, position, canOwn) {\n            assert(offset >= 0);\n            if (length < 0 || position < 0) {\n                throw new FS.ErrnoError(28);\n            }\n            if (FS.isClosed(stream)) {\n                throw new FS.ErrnoError(8);\n            }\n            if ((stream.flags & 2097155) === 0) {\n                throw new FS.ErrnoError(8);\n            }\n            if (FS.isDir(stream.node.mode)) {\n                throw new FS.ErrnoError(31);\n            }\n            if (!stream.stream_ops.write) {\n                throw new FS.ErrnoError(28);\n            }\n            if (stream.seekable && stream.flags & 1024) {\n                // seek to the end before writing in append mode\n                FS.llseek(stream, 0, 2);\n            }\n            var seeking = typeof position != \"undefined\";\n            if (!seeking) {\n                position = stream.position;\n            } else if (!stream.seekable) {\n                throw new FS.ErrnoError(70);\n            }\n            var bytesWritten = stream.stream_ops.write(\n                stream,\n                buffer,\n                offset,\n                length,\n                position,\n                canOwn\n            );\n            if (!seeking) stream.position += bytesWritten;\n            return bytesWritten;\n        },\n        mmap(stream, length, position, prot, flags) {\n            // User requests writing to file (prot & PROT_WRITE != 0).\n            // Checking if we have permissions to write to the file unless\n            // MAP_PRIVATE flag is set. According to POSIX spec it is possible\n            // to write to file opened in read-only mode with MAP_PRIVATE flag,\n            // as all modifications will be visible only in the memory of\n            // the current process.\n            if (\n                (prot & 2) !== 0 &&\n                (flags & 2) === 0 &&\n                (stream.flags & 2097155) !== 2\n            ) {\n                throw new FS.ErrnoError(2);\n            }\n            if ((stream.flags & 2097155) === 1) {\n                throw new FS.ErrnoError(2);\n            }\n            if (!stream.stream_ops.mmap) {\n                throw new FS.ErrnoError(43);\n            }\n            if (!length) {\n                throw new FS.ErrnoError(28);\n            }\n            return stream.stream_ops.mmap(\n                stream,\n                length,\n                position,\n                prot,\n                flags\n            );\n        },\n        msync(stream, buffer, offset, length, mmapFlags) {\n            assert(offset >= 0);\n            if (!stream.stream_ops.msync) {\n                return 0;\n            }\n            return stream.stream_ops.msync(\n                stream,\n                buffer,\n                offset,\n                length,\n                mmapFlags\n            );\n        },\n        ioctl(stream, cmd, arg) {\n            if (!stream.stream_ops.ioctl) {\n                throw new FS.ErrnoError(59);\n            }\n            return stream.stream_ops.ioctl(stream, cmd, arg);\n        },\n        readFile(path, opts = {}) {\n            opts.flags = opts.flags || 0;\n            opts.encoding = opts.encoding || \"binary\";\n            if (opts.encoding !== \"utf8\" && opts.encoding !== \"binary\") {\n                throw new Error(`Invalid encoding type \"${opts.encoding}\"`);\n            }\n            var stream = FS.open(path, opts.flags);\n            var stat = FS.stat(path);\n            var length = stat.size;\n            var buf = new Uint8Array(length);\n            FS.read(stream, buf, 0, length, 0);\n            if (opts.encoding === \"utf8\") {\n                buf = UTF8ArrayToString(buf);\n            }\n            FS.close(stream);\n            return buf;\n        },\n        writeFile(path, data, opts = {}) {\n            opts.flags = opts.flags || 577;\n            var stream = FS.open(path, opts.flags, opts.mode);\n            if (typeof data == \"string\") {\n                data = new Uint8Array(intArrayFromString(data, true));\n            }\n            if (ArrayBuffer.isView(data)) {\n                FS.write(\n                    stream,\n                    data,\n                    0,\n                    data.byteLength,\n                    undefined,\n                    opts.canOwn\n                );\n            } else {\n                throw new Error(\"Unsupported data type\");\n            }\n            FS.close(stream);\n        },\n        cwd: () => FS.currentPath,\n        chdir(path) {\n            var lookup = FS.lookupPath(path, {\n                follow: true,\n            });\n            if (lookup.node === null) {\n                throw new FS.ErrnoError(44);\n            }\n            if (!FS.isDir(lookup.node.mode)) {\n                throw new FS.ErrnoError(54);\n            }\n            var errCode = FS.nodePermissions(lookup.node, \"x\");\n            if (errCode) {\n                throw new FS.ErrnoError(errCode);\n            }\n            FS.currentPath = lookup.path;\n        },\n        createDefaultDirectories() {\n            FS.mkdir(\"/tmp\");\n            FS.mkdir(\"/home\");\n            FS.mkdir(\"/home/web_user\");\n        },\n        createDefaultDevices() {\n            // create /dev\n            FS.mkdir(\"/dev\");\n            // setup /dev/null\n            FS.registerDevice(FS.makedev(1, 3), {\n                read: () => 0,\n                write: (stream, buffer, offset, length, pos) => length,\n                llseek: () => 0,\n            });\n            FS.mkdev(\"/dev/null\", FS.makedev(1, 3));\n            // setup /dev/tty and /dev/tty1\n            // stderr needs to print output using err() rather than out()\n            // so we register a second tty just for it.\n            TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n            TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n            FS.mkdev(\"/dev/tty\", FS.makedev(5, 0));\n            FS.mkdev(\"/dev/tty1\", FS.makedev(6, 0));\n            // setup /dev/[u]random\n            // use a buffer to avoid overhead of individual crypto calls per byte\n            var randomBuffer = new Uint8Array(1024),\n                randomLeft = 0;\n            var randomByte = () => {\n                if (randomLeft === 0) {\n                    randomFill(randomBuffer);\n                    randomLeft = randomBuffer.byteLength;\n                }\n                return randomBuffer[--randomLeft];\n            };\n            FS.createDevice(\"/dev\", \"random\", randomByte);\n            FS.createDevice(\"/dev\", \"urandom\", randomByte);\n            // we're not going to emulate the actual shm device,\n            // just create the tmp dirs that reside in it commonly\n            FS.mkdir(\"/dev/shm\");\n            FS.mkdir(\"/dev/shm/tmp\");\n        },\n        createSpecialDirectories() {\n            // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the\n            // name of the stream for fd 6 (see test_unistd_ttyname)\n            FS.mkdir(\"/proc\");\n            var proc_self = FS.mkdir(\"/proc/self\");\n            FS.mkdir(\"/proc/self/fd\");\n            FS.mount(\n                {\n                    mount() {\n                        var node = FS.createNode(proc_self, \"fd\", 16895, 73);\n                        node.stream_ops = {\n                            llseek: MEMFS.stream_ops.llseek,\n                        };\n                        node.node_ops = {\n                            lookup(parent, name) {\n                                var fd = +name;\n                                var stream = FS.getStreamChecked(fd);\n                                var ret = {\n                                    parent: null,\n                                    mount: {\n                                        mountpoint: \"fake\",\n                                    },\n                                    node_ops: {\n                                        readlink: () => stream.path,\n                                    },\n                                    id: fd + 1,\n                                };\n                                ret.parent = ret;\n                                // make it look like a simple root node\n                                return ret;\n                            },\n                            readdir() {\n                                return Array.from(FS.streams.entries())\n                                    .filter(([k, v]) => v)\n                                    .map(([k, v]) => k.toString());\n                            },\n                        };\n                        return node;\n                    },\n                },\n                {},\n                \"/proc/self/fd\"\n            );\n        },\n        createStandardStreams(input, output, error) {\n            // TODO deprecate the old functionality of a single\n            // input / output callback and that utilizes FS.createDevice\n            // and instead require a unique set of stream ops\n            // by default, we symlink the standard streams to the\n            // default tty devices. however, if the standard streams\n            // have been overwritten we create a unique device for\n            // them instead.\n            if (input) {\n                FS.createDevice(\"/dev\", \"stdin\", input);\n            } else {\n                FS.symlink(\"/dev/tty\", \"/dev/stdin\");\n            }\n            if (output) {\n                FS.createDevice(\"/dev\", \"stdout\", null, output);\n            } else {\n                FS.symlink(\"/dev/tty\", \"/dev/stdout\");\n            }\n            if (error) {\n                FS.createDevice(\"/dev\", \"stderr\", null, error);\n            } else {\n                FS.symlink(\"/dev/tty1\", \"/dev/stderr\");\n            }\n            // open default streams for the stdin, stdout and stderr devices\n            var stdin = FS.open(\"/dev/stdin\", 0);\n            var stdout = FS.open(\"/dev/stdout\", 1);\n            var stderr = FS.open(\"/dev/stderr\", 1);\n            assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`);\n            assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`);\n            assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`);\n        },\n        staticInit() {\n            FS.nameTable = new Array(4096);\n            FS.mount(MEMFS, {}, \"/\");\n            FS.createDefaultDirectories();\n            FS.createDefaultDevices();\n            FS.createSpecialDirectories();\n            FS.filesystems = {\n                MEMFS: MEMFS,\n            };\n        },\n        init(input, output, error) {\n            assert(\n                !FS.initialized,\n                \"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)\"\n            );\n            FS.initialized = true;\n            // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\n            input ??= Module[\"stdin\"];\n            output ??= Module[\"stdout\"];\n            error ??= Module[\"stderr\"];\n            FS.createStandardStreams(input, output, error);\n        },\n        quit() {\n            FS.initialized = false;\n            // force-flush all streams, so we get musl std streams printed out\n            _fflush(0);\n            // close all of our streams\n            for (var stream of FS.streams) {\n                if (stream) {\n                    FS.close(stream);\n                }\n            }\n        },\n        findObject(path, dontResolveLastLink) {\n            var ret = FS.analyzePath(path, dontResolveLastLink);\n            if (!ret.exists) {\n                return null;\n            }\n            return ret.object;\n        },\n        analyzePath(path, dontResolveLastLink) {\n            // operate from within the context of the symlink's target\n            try {\n                var lookup = FS.lookupPath(path, {\n                    follow: !dontResolveLastLink,\n                });\n                path = lookup.path;\n            } catch (e) {}\n            var ret = {\n                isRoot: false,\n                exists: false,\n                error: 0,\n                name: null,\n                path: null,\n                object: null,\n                parentExists: false,\n                parentPath: null,\n                parentObject: null,\n            };\n            try {\n                var lookup = FS.lookupPath(path, {\n                    parent: true,\n                });\n                ret.parentExists = true;\n                ret.parentPath = lookup.path;\n                ret.parentObject = lookup.node;\n                ret.name = PATH.basename(path);\n                lookup = FS.lookupPath(path, {\n                    follow: !dontResolveLastLink,\n                });\n                ret.exists = true;\n                ret.path = lookup.path;\n                ret.object = lookup.node;\n                ret.name = lookup.node.name;\n                ret.isRoot = lookup.path === \"/\";\n            } catch (e) {\n                ret.error = e.errno;\n            }\n            return ret;\n        },\n        createPath(parent, path, canRead, canWrite) {\n            parent = typeof parent == \"string\" ? parent : FS.getPath(parent);\n            var parts = path.split(\"/\").reverse();\n            while (parts.length) {\n                var part = parts.pop();\n                if (!part) continue;\n                var current = PATH.join2(parent, part);\n                try {\n                    FS.mkdir(current);\n                } catch (e) {\n                    if (e.errno != 20) throw e;\n                }\n                parent = current;\n            }\n            return current;\n        },\n        createFile(parent, name, properties, canRead, canWrite) {\n            var path = PATH.join2(\n                typeof parent == \"string\" ? parent : FS.getPath(parent),\n                name\n            );\n            var mode = FS_getMode(canRead, canWrite);\n            return FS.create(path, mode);\n        },\n        createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n            var path = name;\n            if (parent) {\n                parent =\n                    typeof parent == \"string\" ? parent : FS.getPath(parent);\n                path = name ? PATH.join2(parent, name) : parent;\n            }\n            var mode = FS_getMode(canRead, canWrite);\n            var node = FS.create(path, mode);\n            if (data) {\n                if (typeof data == \"string\") {\n                    var arr = new Array(data.length);\n                    for (var i = 0, len = data.length; i < len; ++i)\n                        arr[i] = data.charCodeAt(i);\n                    data = arr;\n                }\n                // make sure we can write to the file\n                FS.chmod(node, mode | 146);\n                var stream = FS.open(node, 577);\n                FS.write(stream, data, 0, data.length, 0, canOwn);\n                FS.close(stream);\n                FS.chmod(node, mode);\n            }\n        },\n        createDevice(parent, name, input, output) {\n            var path = PATH.join2(\n                typeof parent == \"string\" ? parent : FS.getPath(parent),\n                name\n            );\n            var mode = FS_getMode(!!input, !!output);\n            FS.createDevice.major ??= 64;\n            var dev = FS.makedev(FS.createDevice.major++, 0);\n            // Create a fake device that a set of stream ops to emulate\n            // the old behavior.\n            FS.registerDevice(dev, {\n                open(stream) {\n                    stream.seekable = false;\n                },\n                close(stream) {\n                    // flush any pending line data\n                    if (output?.buffer?.length) {\n                        output(10);\n                    }\n                },\n                read(stream, buffer, offset, length, pos) {\n                    var bytesRead = 0;\n                    for (var i = 0; i < length; i++) {\n                        var result;\n                        try {\n                            result = input();\n                        } catch (e) {\n                            throw new FS.ErrnoError(29);\n                        }\n                        if (result === undefined && bytesRead === 0) {\n                            throw new FS.ErrnoError(6);\n                        }\n                        if (result === null || result === undefined) break;\n                        bytesRead++;\n                        buffer[offset + i] = result;\n                    }\n                    if (bytesRead) {\n                        stream.node.atime = Date.now();\n                    }\n                    return bytesRead;\n                },\n                write(stream, buffer, offset, length, pos) {\n                    for (var i = 0; i < length; i++) {\n                        try {\n                            output(buffer[offset + i]);\n                        } catch (e) {\n                            throw new FS.ErrnoError(29);\n                        }\n                    }\n                    if (length) {\n                        stream.node.mtime = stream.node.ctime = Date.now();\n                    }\n                    return i;\n                },\n            });\n            return FS.mkdev(path, mode, dev);\n        },\n        forceLoadFile(obj) {\n            if (obj.isDevice || obj.isFolder || obj.link || obj.contents)\n                return true;\n            if (typeof XMLHttpRequest != \"undefined\") {\n                throw new Error(\n                    \"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\"\n                );\n            } else {\n                // Command-line.\n                try {\n                    obj.contents = readBinary(obj.url);\n                    obj.usedBytes = obj.contents.length;\n                } catch (e) {\n                    throw new FS.ErrnoError(29);\n                }\n            }\n        },\n        createLazyFile(parent, name, url, canRead, canWrite) {\n            // Lazy chunked Uint8Array (implements get and length from Uint8Array).\n            // Actual getting is abstracted away for eventual reuse.\n            class LazyUint8Array {\n                lengthKnown = false;\n                chunks = [];\n                // Loaded chunks. Index is the chunk number\n                get(idx) {\n                    if (idx > this.length - 1 || idx < 0) {\n                        return undefined;\n                    }\n                    var chunkOffset = idx % this.chunkSize;\n                    var chunkNum = (idx / this.chunkSize) | 0;\n                    return this.getter(chunkNum)[chunkOffset];\n                }\n                setDataGetter(getter) {\n                    this.getter = getter;\n                }\n                cacheLength() {\n                    // Find length\n                    var xhr = new XMLHttpRequest();\n                    xhr.open(\"HEAD\", url, false);\n                    xhr.send(null);\n                    if (\n                        !(\n                            (xhr.status >= 200 && xhr.status < 300) ||\n                            xhr.status === 304\n                        )\n                    )\n                        throw new Error(\n                            \"Couldn't load \" + url + \". Status: \" + xhr.status\n                        );\n                    var datalength = Number(\n                        xhr.getResponseHeader(\"Content-length\")\n                    );\n                    var header;\n                    var hasByteServing =\n                        (header = xhr.getResponseHeader(\"Accept-Ranges\")) &&\n                        header === \"bytes\";\n                    var usesGzip =\n                        (header = xhr.getResponseHeader(\"Content-Encoding\")) &&\n                        header === \"gzip\";\n                    var chunkSize = 1024 * 1024;\n                    // Chunk size in bytes\n                    if (!hasByteServing) chunkSize = datalength;\n                    // Function to get a range from the remote URL.\n                    var doXHR = (from, to) => {\n                        if (from > to)\n                            throw new Error(\n                                \"invalid range (\" +\n                                    from +\n                                    \", \" +\n                                    to +\n                                    \") or no bytes requested!\"\n                            );\n                        if (to > datalength - 1)\n                            throw new Error(\n                                \"only \" +\n                                    datalength +\n                                    \" bytes available! programmer error!\"\n                            );\n                        // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.\n                        var xhr = new XMLHttpRequest();\n                        xhr.open(\"GET\", url, false);\n                        if (datalength !== chunkSize)\n                            xhr.setRequestHeader(\n                                \"Range\",\n                                \"bytes=\" + from + \"-\" + to\n                            );\n                        // Some hints to the browser that we want binary data.\n                        xhr.responseType = \"arraybuffer\";\n                        if (xhr.overrideMimeType) {\n                            xhr.overrideMimeType(\n                                \"text/plain; charset=x-user-defined\"\n                            );\n                        }\n                        xhr.send(null);\n                        if (\n                            !(\n                                (xhr.status >= 200 && xhr.status < 300) ||\n                                xhr.status === 304\n                            )\n                        )\n                            throw new Error(\n                                \"Couldn't load \" +\n                                    url +\n                                    \". Status: \" +\n                                    xhr.status\n                            );\n                        if (xhr.response !== undefined) {\n                            return new Uint8Array(\n                                /** @type {number[]} */ (xhr.response || [])\n                            );\n                        }\n                        return intArrayFromString(xhr.responseText || \"\", true);\n                    };\n                    var lazyArray = this;\n                    lazyArray.setDataGetter(chunkNum => {\n                        var start = chunkNum * chunkSize;\n                        var end = (chunkNum + 1) * chunkSize - 1;\n                        // including this byte\n                        end = Math.min(end, datalength - 1);\n                        // if datalength-1 is selected, this is the last block\n                        if (typeof lazyArray.chunks[chunkNum] == \"undefined\") {\n                            lazyArray.chunks[chunkNum] = doXHR(start, end);\n                        }\n                        if (typeof lazyArray.chunks[chunkNum] == \"undefined\")\n                            throw new Error(\"doXHR failed!\");\n                        return lazyArray.chunks[chunkNum];\n                    });\n                    if (usesGzip || !datalength) {\n                        // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length\n                        chunkSize = datalength = 1;\n                        // this will force getter(0)/doXHR do download the whole file\n                        datalength = this.getter(0).length;\n                        chunkSize = datalength;\n                        out(\n                            \"LazyFiles on gzip forces download of the whole file when length is accessed\"\n                        );\n                    }\n                    this._length = datalength;\n                    this._chunkSize = chunkSize;\n                    this.lengthKnown = true;\n                }\n                get length() {\n                    if (!this.lengthKnown) {\n                        this.cacheLength();\n                    }\n                    return this._length;\n                }\n                get chunkSize() {\n                    if (!this.lengthKnown) {\n                        this.cacheLength();\n                    }\n                    return this._chunkSize;\n                }\n            }\n            if (typeof XMLHttpRequest != \"undefined\") {\n                if (!ENVIRONMENT_IS_WORKER)\n                    throw \"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";\n                var lazyArray = new LazyUint8Array();\n                var properties = {\n                    isDevice: false,\n                    contents: lazyArray,\n                };\n            } else {\n                var properties = {\n                    isDevice: false,\n                    url,\n                };\n            }\n            var node = FS.createFile(\n                parent,\n                name,\n                properties,\n                canRead,\n                canWrite\n            );\n            // This is a total hack, but I want to get this lazy file code out of the\n            // core of MEMFS. If we want to keep this lazy file concept I feel it should\n            // be its own thin LAZYFS proxying calls to MEMFS.\n            if (properties.contents) {\n                node.contents = properties.contents;\n            } else if (properties.url) {\n                node.contents = null;\n                node.url = properties.url;\n            }\n            // Add a function that defers querying the file size until it is asked the first time.\n            Object.defineProperties(node, {\n                usedBytes: {\n                    get: function () {\n                        return this.contents.length;\n                    },\n                },\n            });\n            // override each stream op with one that tries to force load the lazy file first\n            var stream_ops = {};\n            var keys = Object.keys(node.stream_ops);\n            keys.forEach(key => {\n                var fn = node.stream_ops[key];\n                stream_ops[key] = (...args) => {\n                    FS.forceLoadFile(node);\n                    return fn(...args);\n                };\n            });\n            function writeChunks(stream, buffer, offset, length, position) {\n                var contents = stream.node.contents;\n                if (position >= contents.length) return 0;\n                var size = Math.min(contents.length - position, length);\n                assert(size >= 0);\n                if (contents.slice) {\n                    // normal array\n                    for (var i = 0; i < size; i++) {\n                        buffer[offset + i] = contents[position + i];\n                    }\n                } else {\n                    for (var i = 0; i < size; i++) {\n                        // LazyUint8Array from sync binary XHR\n                        buffer[offset + i] = contents.get(position + i);\n                    }\n                }\n                return size;\n            }\n            // use a custom read function\n            stream_ops.read = (stream, buffer, offset, length, position) => {\n                FS.forceLoadFile(node);\n                return writeChunks(stream, buffer, offset, length, position);\n            };\n            // use a custom mmap function\n            stream_ops.mmap = (stream, length, position, prot, flags) => {\n                FS.forceLoadFile(node);\n                var ptr = mmapAlloc(length);\n                if (!ptr) {\n                    throw new FS.ErrnoError(48);\n                }\n                writeChunks(stream, HEAP8, ptr, length, position);\n                return {\n                    ptr,\n                    allocated: true,\n                };\n            };\n            node.stream_ops = stream_ops;\n            return node;\n        },\n        absolutePath() {\n            abort(\n                \"FS.absolutePath has been removed; use PATH_FS.resolve instead\"\n            );\n        },\n        createFolder() {\n            abort(\"FS.createFolder has been removed; use FS.mkdir instead\");\n        },\n        createLink() {\n            abort(\"FS.createLink has been removed; use FS.symlink instead\");\n        },\n        joinPath() {\n            abort(\"FS.joinPath has been removed; use PATH.join instead\");\n        },\n        mmapAlloc() {\n            abort(\n                \"FS.mmapAlloc has been replaced by the top level function mmapAlloc\"\n            );\n        },\n        standardizePath() {\n            abort(\n                \"FS.standardizePath has been removed; use PATH.normalize instead\"\n            );\n        },\n    };\n\n    var SYSCALLS = {\n        DEFAULT_POLLMASK: 5,\n        calculateAt(dirfd, path, allowEmpty) {\n            if (PATH.isAbs(path)) {\n                return path;\n            }\n            // relative path\n            var dir;\n            if (dirfd === -100) {\n                dir = FS.cwd();\n            } else {\n                var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n                dir = dirstream.path;\n            }\n            if (path.length == 0) {\n                if (!allowEmpty) {\n                    throw new FS.ErrnoError(44);\n                }\n                return dir;\n            }\n            return dir + \"/\" + path;\n        },\n        writeStat(buf, stat) {\n            SAFE_HEAP_STORE(HEAPU32, buf >> 2, stat.dev);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 4) >> 2, stat.mode);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 8) >> 2, stat.nlink);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 12) >> 2, stat.uid);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 16) >> 2, stat.gid);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 20) >> 2, stat.rdev);\n            SAFE_HEAP_STORE(HEAP64, (buf + 24) >> 3, BigInt(stat.size));\n            SAFE_HEAP_STORE(HEAP32, (buf + 32) >> 2, 4096);\n            SAFE_HEAP_STORE(HEAP32, (buf + 36) >> 2, stat.blocks);\n            var atime = stat.atime.getTime();\n            var mtime = stat.mtime.getTime();\n            var ctime = stat.ctime.getTime();\n            SAFE_HEAP_STORE(\n                HEAP64,\n                (buf + 40) >> 3,\n                BigInt(Math.floor(atime / 1e3))\n            );\n            SAFE_HEAP_STORE(\n                HEAPU32,\n                (buf + 48) >> 2,\n                (atime % 1e3) * 1e3 * 1e3\n            );\n            SAFE_HEAP_STORE(\n                HEAP64,\n                (buf + 56) >> 3,\n                BigInt(Math.floor(mtime / 1e3))\n            );\n            SAFE_HEAP_STORE(\n                HEAPU32,\n                (buf + 64) >> 2,\n                (mtime % 1e3) * 1e3 * 1e3\n            );\n            SAFE_HEAP_STORE(\n                HEAP64,\n                (buf + 72) >> 3,\n                BigInt(Math.floor(ctime / 1e3))\n            );\n            SAFE_HEAP_STORE(\n                HEAPU32,\n                (buf + 80) >> 2,\n                (ctime % 1e3) * 1e3 * 1e3\n            );\n            SAFE_HEAP_STORE(HEAP64, (buf + 88) >> 3, BigInt(stat.ino));\n            return 0;\n        },\n        writeStatFs(buf, stats) {\n            SAFE_HEAP_STORE(HEAPU32, (buf + 4) >> 2, stats.bsize);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 60) >> 2, stats.bsize);\n            SAFE_HEAP_STORE(HEAP64, (buf + 8) >> 3, BigInt(stats.blocks));\n            SAFE_HEAP_STORE(HEAP64, (buf + 16) >> 3, BigInt(stats.bfree));\n            SAFE_HEAP_STORE(HEAP64, (buf + 24) >> 3, BigInt(stats.bavail));\n            SAFE_HEAP_STORE(HEAP64, (buf + 32) >> 3, BigInt(stats.files));\n            SAFE_HEAP_STORE(HEAP64, (buf + 40) >> 3, BigInt(stats.ffree));\n            SAFE_HEAP_STORE(HEAPU32, (buf + 48) >> 2, stats.fsid);\n            SAFE_HEAP_STORE(HEAPU32, (buf + 64) >> 2, stats.flags);\n            // ST_NOSUID\n            SAFE_HEAP_STORE(HEAPU32, (buf + 56) >> 2, stats.namelen);\n        },\n        doMsync(addr, stream, len, flags, offset) {\n            if (!FS.isFile(stream.node.mode)) {\n                throw new FS.ErrnoError(43);\n            }\n            if (flags & 2) {\n                // MAP_PRIVATE calls need not to be synced back to underlying fs\n                return 0;\n            }\n            var buffer = HEAPU8.slice(addr, addr + len);\n            FS.msync(stream, buffer, offset, len, flags);\n        },\n        getStreamFromFD(fd) {\n            var stream = FS.getStreamChecked(fd);\n            return stream;\n        },\n        varargs: undefined,\n        getStr(ptr) {\n            var ret = UTF8ToString(ptr);\n            return ret;\n        },\n    };\n\n    function ___syscall_fcntl64(fd, cmd, varargs) {\n        SYSCALLS.varargs = varargs;\n        try {\n            var stream = SYSCALLS.getStreamFromFD(fd);\n            switch (cmd) {\n                case 0: {\n                    var arg = syscallGetVarargI();\n                    if (arg < 0) {\n                        return -28;\n                    }\n                    while (FS.streams[arg]) {\n                        arg++;\n                    }\n                    var newStream;\n                    newStream = FS.dupStream(stream, arg);\n                    return newStream.fd;\n                }\n\n                case 1:\n                case 2:\n                    return 0;\n\n                // FD_CLOEXEC makes no sense for a single process.\n                case 3:\n                    return stream.flags;\n\n                case 4: {\n                    var arg = syscallGetVarargI();\n                    stream.flags |= arg;\n                    return 0;\n                }\n\n                case 12: {\n                    var arg = syscallGetVarargP();\n                    var offset = 0;\n                    // We're always unlocked.\n                    SAFE_HEAP_STORE(HEAP16, (arg + offset) >> 1, 2);\n                    return 0;\n                }\n\n                case 13:\n                case 14:\n                    // Pretend that the locking is successful. These are process-level locks,\n                    // and Emscripten programs are a single process. If we supported linking a\n                    // filesystem between programs, we'd need to do more here.\n                    // See https://github.com/emscripten-core/emscripten/issues/23697\n                    return 0;\n            }\n            return -28;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return -e.errno;\n        }\n    }\n\n    function ___syscall_ioctl(fd, op, varargs) {\n        SYSCALLS.varargs = varargs;\n        try {\n            var stream = SYSCALLS.getStreamFromFD(fd);\n            switch (op) {\n                case 21509: {\n                    if (!stream.tty) return -59;\n                    return 0;\n                }\n\n                case 21505: {\n                    if (!stream.tty) return -59;\n                    if (stream.tty.ops.ioctl_tcgets) {\n                        var termios = stream.tty.ops.ioctl_tcgets(stream);\n                        var argp = syscallGetVarargP();\n                        SAFE_HEAP_STORE(\n                            HEAP32,\n                            argp >> 2,\n                            termios.c_iflag || 0\n                        );\n                        SAFE_HEAP_STORE(\n                            HEAP32,\n                            (argp + 4) >> 2,\n                            termios.c_oflag || 0\n                        );\n                        SAFE_HEAP_STORE(\n                            HEAP32,\n                            (argp + 8) >> 2,\n                            termios.c_cflag || 0\n                        );\n                        SAFE_HEAP_STORE(\n                            HEAP32,\n                            (argp + 12) >> 2,\n                            termios.c_lflag || 0\n                        );\n                        for (var i = 0; i < 32; i++) {\n                            SAFE_HEAP_STORE(\n                                HEAP8,\n                                argp + i + 17,\n                                termios.c_cc[i] || 0\n                            );\n                        }\n                        return 0;\n                    }\n                    return 0;\n                }\n\n                case 21510:\n                case 21511:\n                case 21512: {\n                    if (!stream.tty) return -59;\n                    return 0;\n                }\n\n                case 21506:\n                case 21507:\n                case 21508: {\n                    if (!stream.tty) return -59;\n                    if (stream.tty.ops.ioctl_tcsets) {\n                        var argp = syscallGetVarargP();\n                        var c_iflag = SAFE_HEAP_LOAD(HEAP32, argp >> 2);\n                        var c_oflag = SAFE_HEAP_LOAD(HEAP32, (argp + 4) >> 2);\n                        var c_cflag = SAFE_HEAP_LOAD(HEAP32, (argp + 8) >> 2);\n                        var c_lflag = SAFE_HEAP_LOAD(HEAP32, (argp + 12) >> 2);\n                        var c_cc = [];\n                        for (var i = 0; i < 32; i++) {\n                            c_cc.push(SAFE_HEAP_LOAD(HEAP8, argp + i + 17));\n                        }\n                        return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n                            c_iflag,\n                            c_oflag,\n                            c_cflag,\n                            c_lflag,\n                            c_cc,\n                        });\n                    }\n                    return 0;\n                }\n\n                case 21519: {\n                    if (!stream.tty) return -59;\n                    var argp = syscallGetVarargP();\n                    SAFE_HEAP_STORE(HEAP32, argp >> 2, 0);\n                    return 0;\n                }\n\n                case 21520: {\n                    if (!stream.tty) return -59;\n                    return -28;\n                }\n\n                case 21537:\n                case 21531: {\n                    var argp = syscallGetVarargP();\n                    return FS.ioctl(stream, op, argp);\n                }\n\n                case 21523: {\n                    // TODO: in theory we should write to the winsize struct that gets\n                    // passed in, but for now musl doesn't read anything on it\n                    if (!stream.tty) return -59;\n                    if (stream.tty.ops.ioctl_tiocgwinsz) {\n                        var winsize = stream.tty.ops.ioctl_tiocgwinsz(\n                            stream.tty\n                        );\n                        var argp = syscallGetVarargP();\n                        SAFE_HEAP_STORE(HEAP16, argp >> 1, winsize[0]);\n                        SAFE_HEAP_STORE(HEAP16, (argp + 2) >> 1, winsize[1]);\n                    }\n                    return 0;\n                }\n\n                case 21524: {\n                    // TODO: technically, this ioctl call should change the window size.\n                    // but, since emscripten doesn't have any concept of a terminal window\n                    // yet, we'll just silently throw it away as we do TIOCGWINSZ\n                    if (!stream.tty) return -59;\n                    return 0;\n                }\n\n                case 21515: {\n                    if (!stream.tty) return -59;\n                    return 0;\n                }\n\n                default:\n                    return -28;\n            }\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return -e.errno;\n        }\n    }\n\n    function ___syscall_openat(dirfd, path, flags, varargs) {\n        SYSCALLS.varargs = varargs;\n        try {\n            path = SYSCALLS.getStr(path);\n            path = SYSCALLS.calculateAt(dirfd, path);\n            var mode = varargs ? syscallGetVarargI() : 0;\n            return FS.open(path, flags, mode).fd;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return -e.errno;\n        }\n    }\n\n    var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {\n        assert(\n            typeof maxBytesToWrite == \"number\",\n            \"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!\"\n        );\n        return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n    };\n\n    function ___syscall_readlinkat(dirfd, path, buf, bufsize) {\n        try {\n            path = SYSCALLS.getStr(path);\n            path = SYSCALLS.calculateAt(dirfd, path);\n            if (bufsize <= 0) return -28;\n            var ret = FS.readlink(path);\n            var len = Math.min(bufsize, lengthBytesUTF8(ret));\n            var endChar = SAFE_HEAP_LOAD(HEAP8, buf + len);\n            stringToUTF8(ret, buf, bufsize + 1);\n            // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!)\n            // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write.\n            SAFE_HEAP_STORE(HEAP8, buf + len, endChar);\n            return len;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return -e.errno;\n        }\n    }\n\n    var __abort_js = () => abort(\"native code called abort()\");\n\n    var getHeapMax = () =>\n        // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate\n        // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side\n        // for any code that deals with heap sizes, which would require special\n        // casing all heap size related code to treat 0 specially.\n        134217728;\n\n    var alignMemory = (size, alignment) => {\n        assert(alignment, \"alignment argument is required\");\n        return Math.ceil(size / alignment) * alignment;\n    };\n\n    var growMemory = size => {\n        var oldHeapSize = wasmMemory.buffer.byteLength;\n        var pages = ((size - oldHeapSize + 65535) / 65536) | 0;\n        try {\n            // round size grow request up to wasm page size (fixed 64KB per spec)\n            wasmMemory.grow(pages);\n            // .grow() takes a delta compared to the previous size\n            updateMemoryViews();\n            return 1;\n        } catch (e) {\n            err(\n                `growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`\n            );\n        }\n    };\n\n    var _emscripten_resize_heap = requestedSize => {\n        var oldSize = HEAPU8.length;\n        // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.\n        requestedSize >>>= 0;\n        // With multithreaded builds, races can happen (another thread might increase the size\n        // in between), so return a failure, and let the caller retry.\n        assert(requestedSize > oldSize);\n        // Memory resize rules:\n        // 1.  Always increase heap size to at least the requested size, rounded up\n        //     to next page multiple.\n        // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap\n        //     geometrically: increase the heap size according to\n        //     MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most\n        //     overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).\n        // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap\n        //     linearly: increase the heap size by at least\n        //     MEMORY_GROWTH_LINEAR_STEP bytes.\n        // 3.  Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by\n        //     MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest\n        // 4.  If we were unable to allocate as much memory, it may be due to\n        //     over-eager decision to excessively reserve due to (3) above.\n        //     Hence if an allocation fails, cut down on the amount of excess\n        //     growth, in an attempt to succeed to perform a smaller allocation.\n        // A limit is set for how much we can grow. We should not exceed that\n        // (the wasm binary specifies it, so if we tried, we'd fail anyhow).\n        var maxHeapSize = getHeapMax();\n        if (requestedSize > maxHeapSize) {\n            err(\n                `Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`\n            );\n            return false;\n        }\n        // Loop through potential heap size increases. If we attempt a too eager\n        // reservation that fails, cut down on the attempted size and reserve a\n        // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)\n        for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n            var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n            // ensure geometric growth\n            // but limit overreserving (default to capping at +96MB overgrowth at most)\n            overGrownHeapSize = Math.min(\n                overGrownHeapSize,\n                requestedSize + 100663296\n            );\n            var newSize = Math.min(\n                maxHeapSize,\n                alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)\n            );\n            var replacement = growMemory(newSize);\n            if (replacement) {\n                return true;\n            }\n        }\n        err(\n            `Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`\n        );\n        return false;\n    };\n\n    var ENV = {};\n\n    var getExecutableName = () => thisProgram || \"./this.program\";\n\n    var getEnvStrings = () => {\n        if (!getEnvStrings.strings) {\n            // Default values.\n            // Browser language detection #8751\n            var lang =\n                (\n                    (typeof navigator == \"object\" && navigator.language) ||\n                    \"C\"\n                ).replace(\"-\", \"_\") + \".UTF-8\";\n            var env = {\n                USER: \"web_user\",\n                LOGNAME: \"web_user\",\n                PATH: \"/\",\n                PWD: \"/\",\n                HOME: \"/home/web_user\",\n                LANG: lang,\n                _: getExecutableName(),\n            };\n            // Apply the user-provided values, if any.\n            for (var x in ENV) {\n                // x is a key in ENV; if ENV[x] is undefined, that means it was\n                // explicitly set to be so. We allow user code to do that to\n                // force variables with default values to remain unset.\n                if (ENV[x] === undefined) delete env[x];\n                else env[x] = ENV[x];\n            }\n            var strings = [];\n            for (var x in env) {\n                strings.push(`${x}=${env[x]}`);\n            }\n            getEnvStrings.strings = strings;\n        }\n        return getEnvStrings.strings;\n    };\n\n    var _environ_get = (__environ, environ_buf) => {\n        var bufSize = 0;\n        var envp = 0;\n        for (var string of getEnvStrings()) {\n            var ptr = environ_buf + bufSize;\n            SAFE_HEAP_STORE(HEAPU32, (__environ + envp) >> 2, ptr);\n            bufSize += stringToUTF8(string, ptr, Infinity) + 1;\n            envp += 4;\n        }\n        return 0;\n    };\n\n    var _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n        var strings = getEnvStrings();\n        SAFE_HEAP_STORE(HEAPU32, penviron_count >> 2, strings.length);\n        var bufSize = 0;\n        for (var string of strings) {\n            bufSize += lengthBytesUTF8(string) + 1;\n        }\n        SAFE_HEAP_STORE(HEAPU32, penviron_buf_size >> 2, bufSize);\n        return 0;\n    };\n\n    function _fd_close(fd) {\n        try {\n            var stream = SYSCALLS.getStreamFromFD(fd);\n            FS.close(stream);\n            return 0;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return e.errno;\n        }\n    }\n\n    /** @param {number} [offset] */ var doReadv = (\n        stream,\n        iov,\n        iovcnt,\n        offset\n    ) => {\n        var ret = 0;\n        for (var i = 0; i < iovcnt; i++) {\n            var ptr = SAFE_HEAP_LOAD(HEAPU32, iov >> 2);\n            var len = SAFE_HEAP_LOAD(HEAPU32, (iov + 4) >> 2);\n            iov += 8;\n            var curr = FS.read(stream, HEAP8, ptr, len, offset);\n            if (curr < 0) return -1;\n            ret += curr;\n            if (curr < len) break;\n            // nothing more to read\n            if (typeof offset != \"undefined\") {\n                offset += curr;\n            }\n        }\n        return ret;\n    };\n\n    function _fd_read(fd, iov, iovcnt, pnum) {\n        try {\n            var stream = SYSCALLS.getStreamFromFD(fd);\n            var num = doReadv(stream, iov, iovcnt);\n            SAFE_HEAP_STORE(HEAPU32, pnum >> 2, num);\n            return 0;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return e.errno;\n        }\n    }\n\n    var INT53_MAX = 9007199254740992;\n\n    var INT53_MIN = -9007199254740992;\n\n    var bigintToI53Checked = num =>\n        num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\n\n    function _fd_seek(fd, offset, whence, newOffset) {\n        offset = bigintToI53Checked(offset);\n        try {\n            if (isNaN(offset)) return 61;\n            var stream = SYSCALLS.getStreamFromFD(fd);\n            FS.llseek(stream, offset, whence);\n            SAFE_HEAP_STORE(HEAP64, newOffset >> 3, BigInt(stream.position));\n            if (stream.getdents && offset === 0 && whence === 0)\n                stream.getdents = null;\n            // reset readdir state\n            return 0;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return e.errno;\n        }\n    }\n\n    /** @param {number} [offset] */ var doWritev = (\n        stream,\n        iov,\n        iovcnt,\n        offset\n    ) => {\n        var ret = 0;\n        for (var i = 0; i < iovcnt; i++) {\n            var ptr = SAFE_HEAP_LOAD(HEAPU32, iov >> 2);\n            var len = SAFE_HEAP_LOAD(HEAPU32, (iov + 4) >> 2);\n            iov += 8;\n            var curr = FS.write(stream, HEAP8, ptr, len, offset);\n            if (curr < 0) return -1;\n            ret += curr;\n            if (curr < len) {\n                // No more space to write.\n                break;\n            }\n            if (typeof offset != \"undefined\") {\n                offset += curr;\n            }\n        }\n        return ret;\n    };\n\n    function _fd_write(fd, iov, iovcnt, pnum) {\n        try {\n            var stream = SYSCALLS.getStreamFromFD(fd);\n            var num = doWritev(stream, iov, iovcnt);\n            SAFE_HEAP_STORE(HEAPU32, pnum >> 2, num);\n            return 0;\n        } catch (e) {\n            if (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n            return e.errno;\n        }\n    }\n\n    FS.createPreloadedFile = FS_createPreloadedFile;\n\n    FS.preloadFile = FS_preloadFile;\n\n    FS.staticInit();\n\n    // End JS library code\n    // include: postlibrary.js\n    // This file is included after the automatically-generated JS library code\n    // but before the wasm module is created.\n    {\n        // Begin ATMODULES hooks\n        if (Module[\"noExitRuntime\"]) noExitRuntime = Module[\"noExitRuntime\"];\n        if (Module[\"preloadPlugins\"]) preloadPlugins = Module[\"preloadPlugins\"];\n        if (Module[\"print\"]) out = Module[\"print\"];\n        if (Module[\"printErr\"]) err = Module[\"printErr\"];\n        if (Module[\"wasmBinary\"]) wasmBinary = Module[\"wasmBinary\"];\n        // End ATMODULES hooks\n        checkIncomingModuleAPI();\n        if (Module[\"arguments\"]) arguments_ = Module[\"arguments\"];\n        if (Module[\"thisProgram\"]) thisProgram = Module[\"thisProgram\"];\n        // Assertions on removed incoming Module JS APIs.\n        assert(\n            typeof Module[\"memoryInitializerPrefixURL\"] == \"undefined\",\n            \"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead\"\n        );\n        assert(\n            typeof Module[\"pthreadMainPrefixURL\"] == \"undefined\",\n            \"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead\"\n        );\n        assert(\n            typeof Module[\"cdInitializerPrefixURL\"] == \"undefined\",\n            \"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead\"\n        );\n        assert(\n            typeof Module[\"filePackagePrefixURL\"] == \"undefined\",\n            \"Module.filePackagePrefixURL option was removed, use Module.locateFile instead\"\n        );\n        assert(\n            typeof Module[\"read\"] == \"undefined\",\n            \"Module.read option was removed\"\n        );\n        assert(\n            typeof Module[\"readAsync\"] == \"undefined\",\n            \"Module.readAsync option was removed (modify readAsync in JS)\"\n        );\n        assert(\n            typeof Module[\"readBinary\"] == \"undefined\",\n            \"Module.readBinary option was removed (modify readBinary in JS)\"\n        );\n        assert(\n            typeof Module[\"setWindowTitle\"] == \"undefined\",\n            \"Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)\"\n        );\n        assert(\n            typeof Module[\"TOTAL_MEMORY\"] == \"undefined\",\n            \"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY\"\n        );\n        assert(\n            typeof Module[\"ENVIRONMENT\"] == \"undefined\",\n            \"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)\"\n        );\n        assert(\n            typeof Module[\"STACK_SIZE\"] == \"undefined\",\n            \"STACK_SIZE can no longer be set at runtime.  Use -sSTACK_SIZE at link time\"\n        );\n        // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY\n        assert(\n            typeof Module[\"wasmMemory\"] == \"undefined\",\n            \"Use of `wasmMemory` detected.  Use -sIMPORTED_MEMORY to define wasmMemory externally\"\n        );\n        assert(\n            typeof Module[\"INITIAL_MEMORY\"] == \"undefined\",\n            \"Detected runtime INITIAL_MEMORY setting.  Use -sIMPORTED_MEMORY to define wasmMemory dynamically\"\n        );\n    }\n\n    // Begin runtime exports\n    Module[\"setValue\"] = setValue;\n\n    Module[\"getValue\"] = getValue;\n\n    Module[\"UTF8ToString\"] = UTF8ToString;\n\n    Module[\"stringToUTF8\"] = stringToUTF8;\n\n    Module[\"lengthBytesUTF8\"] = lengthBytesUTF8;\n\n    Module[\"FS\"] = FS;\n\n    var missingLibrarySymbols = [\n        \"writeI53ToI64\",\n        \"writeI53ToI64Clamped\",\n        \"writeI53ToI64Signaling\",\n        \"writeI53ToU64Clamped\",\n        \"writeI53ToU64Signaling\",\n        \"readI53FromI64\",\n        \"readI53FromU64\",\n        \"convertI32PairToI53\",\n        \"convertI32PairToI53Checked\",\n        \"convertU32PairToI53\",\n        \"stackAlloc\",\n        \"getTempRet0\",\n        \"setTempRet0\",\n        \"zeroMemory\",\n        \"exitJS\",\n        \"withStackSave\",\n        \"inetPton4\",\n        \"inetNtop4\",\n        \"inetPton6\",\n        \"inetNtop6\",\n        \"readSockaddr\",\n        \"writeSockaddr\",\n        \"readEmAsmArgs\",\n        \"jstoi_q\",\n        \"autoResumeAudioContext\",\n        \"getDynCaller\",\n        \"dynCall\",\n        \"handleException\",\n        \"keepRuntimeAlive\",\n        \"runtimeKeepalivePush\",\n        \"runtimeKeepalivePop\",\n        \"callUserCallback\",\n        \"maybeExit\",\n        \"asmjsMangle\",\n        \"HandleAllocator\",\n        \"getNativeTypeSize\",\n        \"addOnInit\",\n        \"addOnPostCtor\",\n        \"addOnPreMain\",\n        \"addOnExit\",\n        \"STACK_SIZE\",\n        \"STACK_ALIGN\",\n        \"POINTER_SIZE\",\n        \"ASSERTIONS\",\n        \"ccall\",\n        \"cwrap\",\n        \"convertJsFunctionToWasm\",\n        \"getEmptyTableSlot\",\n        \"updateTableMap\",\n        \"getFunctionAddress\",\n        \"addFunction\",\n        \"removeFunction\",\n        \"intArrayToString\",\n        \"AsciiToString\",\n        \"stringToAscii\",\n        \"UTF16ToString\",\n        \"stringToUTF16\",\n        \"lengthBytesUTF16\",\n        \"UTF32ToString\",\n        \"stringToUTF32\",\n        \"lengthBytesUTF32\",\n        \"stringToNewUTF8\",\n        \"stringToUTF8OnStack\",\n        \"writeArrayToMemory\",\n        \"registerKeyEventCallback\",\n        \"maybeCStringToJsString\",\n        \"findEventTarget\",\n        \"getBoundingClientRect\",\n        \"fillMouseEventData\",\n        \"registerMouseEventCallback\",\n        \"registerWheelEventCallback\",\n        \"registerUiEventCallback\",\n        \"registerFocusEventCallback\",\n        \"fillDeviceOrientationEventData\",\n        \"registerDeviceOrientationEventCallback\",\n        \"fillDeviceMotionEventData\",\n        \"registerDeviceMotionEventCallback\",\n        \"screenOrientation\",\n        \"fillOrientationChangeEventData\",\n        \"registerOrientationChangeEventCallback\",\n        \"fillFullscreenChangeEventData\",\n        \"registerFullscreenChangeEventCallback\",\n        \"JSEvents_requestFullscreen\",\n        \"JSEvents_resizeCanvasForFullscreen\",\n        \"registerRestoreOldStyle\",\n        \"hideEverythingExceptGivenElement\",\n        \"restoreHiddenElements\",\n        \"setLetterbox\",\n        \"softFullscreenResizeWebGLRenderTarget\",\n        \"doRequestFullscreen\",\n        \"fillPointerlockChangeEventData\",\n        \"registerPointerlockChangeEventCallback\",\n        \"registerPointerlockErrorEventCallback\",\n        \"requestPointerLock\",\n        \"fillVisibilityChangeEventData\",\n        \"registerVisibilityChangeEventCallback\",\n        \"registerTouchEventCallback\",\n        \"fillGamepadEventData\",\n        \"registerGamepadEventCallback\",\n        \"registerBeforeUnloadEventCallback\",\n        \"fillBatteryEventData\",\n        \"registerBatteryEventCallback\",\n        \"setCanvasElementSize\",\n        \"getCanvasElementSize\",\n        \"jsStackTrace\",\n        \"getCallstack\",\n        \"convertPCtoSourceLocation\",\n        \"checkWasiClock\",\n        \"wasiRightsToMuslOFlags\",\n        \"wasiOFlagsToMuslOFlags\",\n        \"safeSetTimeout\",\n        \"setImmediateWrapped\",\n        \"safeRequestAnimationFrame\",\n        \"clearImmediateWrapped\",\n        \"registerPostMainLoop\",\n        \"registerPreMainLoop\",\n        \"getPromise\",\n        \"makePromise\",\n        \"idsToPromises\",\n        \"makePromiseCallback\",\n        \"ExceptionInfo\",\n        \"findMatchingCatch\",\n        \"Browser_asyncPrepareDataCounter\",\n        \"isLeapYear\",\n        \"ydayFromDate\",\n        \"arraySum\",\n        \"addDays\",\n        \"getSocketFromFD\",\n        \"getSocketAddress\",\n        \"FS_mkdirTree\",\n        \"_setNetworkCallback\",\n        \"heapObjectForWebGLType\",\n        \"toTypedArrayIndex\",\n        \"webgl_enable_ANGLE_instanced_arrays\",\n        \"webgl_enable_OES_vertex_array_object\",\n        \"webgl_enable_WEBGL_draw_buffers\",\n        \"webgl_enable_WEBGL_multi_draw\",\n        \"webgl_enable_EXT_polygon_offset_clamp\",\n        \"webgl_enable_EXT_clip_control\",\n        \"webgl_enable_WEBGL_polygon_mode\",\n        \"emscriptenWebGLGet\",\n        \"computeUnpackAlignedImageSize\",\n        \"colorChannelsInGlTextureFormat\",\n        \"emscriptenWebGLGetTexPixelData\",\n        \"emscriptenWebGLGetUniform\",\n        \"webglGetUniformLocation\",\n        \"webglPrepareUniformLocationsBeforeFirstUse\",\n        \"webglGetLeftBracePos\",\n        \"emscriptenWebGLGetVertexAttrib\",\n        \"__glGetActiveAttribOrUniform\",\n        \"writeGLArray\",\n        \"registerWebGlEventCallback\",\n        \"runAndAbortIfError\",\n        \"ALLOC_NORMAL\",\n        \"ALLOC_STACK\",\n        \"allocate\",\n        \"writeStringToMemory\",\n        \"writeAsciiToMemory\",\n        \"demangle\",\n        \"stackTrace\",\n    ];\n\n    missingLibrarySymbols.forEach(missingLibrarySymbol);\n\n    var unexportedSymbols = [\n        \"run\",\n        \"addRunDependency\",\n        \"removeRunDependency\",\n        \"out\",\n        \"err\",\n        \"callMain\",\n        \"abort\",\n        \"wasmMemory\",\n        \"wasmExports\",\n        \"HEAPF32\",\n        \"HEAPF64\",\n        \"HEAP8\",\n        \"HEAPU8\",\n        \"HEAP16\",\n        \"HEAPU16\",\n        \"HEAP32\",\n        \"HEAPU32\",\n        \"HEAP64\",\n        \"HEAPU64\",\n        \"writeStackCookie\",\n        \"checkStackCookie\",\n        \"INT53_MAX\",\n        \"INT53_MIN\",\n        \"bigintToI53Checked\",\n        \"stackSave\",\n        \"stackRestore\",\n        \"ptrToString\",\n        \"getHeapMax\",\n        \"growMemory\",\n        \"ENV\",\n        \"ERRNO_CODES\",\n        \"strError\",\n        \"DNS\",\n        \"Protocols\",\n        \"Sockets\",\n        \"timers\",\n        \"warnOnce\",\n        \"readEmAsmArgsArray\",\n        \"getExecutableName\",\n        \"asyncLoad\",\n        \"alignMemory\",\n        \"mmapAlloc\",\n        \"wasmTable\",\n        \"getUniqueRunDependency\",\n        \"noExitRuntime\",\n        \"addOnPreRun\",\n        \"addOnPostRun\",\n        \"freeTableIndexes\",\n        \"functionsInTableMap\",\n        \"PATH\",\n        \"PATH_FS\",\n        \"UTF8Decoder\",\n        \"UTF8ArrayToString\",\n        \"stringToUTF8Array\",\n        \"intArrayFromString\",\n        \"UTF16Decoder\",\n        \"JSEvents\",\n        \"specialHTMLTargets\",\n        \"findCanvasEventTarget\",\n        \"currentFullscreenStrategy\",\n        \"restoreOldWindowedStyle\",\n        \"UNWIND_CACHE\",\n        \"ExitStatus\",\n        \"getEnvStrings\",\n        \"doReadv\",\n        \"doWritev\",\n        \"initRandomFill\",\n        \"randomFill\",\n        \"emSetImmediate\",\n        \"emClearImmediate_deps\",\n        \"emClearImmediate\",\n        \"promiseMap\",\n        \"uncaughtExceptionCount\",\n        \"exceptionLast\",\n        \"exceptionCaught\",\n        \"Browser\",\n        \"requestFullscreen\",\n        \"requestFullScreen\",\n        \"setCanvasSize\",\n        \"getUserMedia\",\n        \"createContext\",\n        \"getPreloadedImageData__data\",\n        \"wget\",\n        \"MONTH_DAYS_REGULAR\",\n        \"MONTH_DAYS_LEAP\",\n        \"MONTH_DAYS_REGULAR_CUMULATIVE\",\n        \"MONTH_DAYS_LEAP_CUMULATIVE\",\n        \"SYSCALLS\",\n        \"preloadPlugins\",\n        \"FS_createPreloadedFile\",\n        \"FS_preloadFile\",\n        \"FS_modeStringToFlags\",\n        \"FS_getMode\",\n        \"FS_stdin_getChar_buffer\",\n        \"FS_stdin_getChar\",\n        \"FS_unlink\",\n        \"FS_createPath\",\n        \"FS_createDevice\",\n        \"FS_readFile\",\n        \"FS_root\",\n        \"FS_mounts\",\n        \"FS_devices\",\n        \"FS_streams\",\n        \"FS_nextInode\",\n        \"FS_nameTable\",\n        \"FS_currentPath\",\n        \"FS_initialized\",\n        \"FS_ignorePermissions\",\n        \"FS_filesystems\",\n        \"FS_syncFSRequests\",\n        \"FS_readFiles\",\n        \"FS_lookupPath\",\n        \"FS_getPath\",\n        \"FS_hashName\",\n        \"FS_hashAddNode\",\n        \"FS_hashRemoveNode\",\n        \"FS_lookupNode\",\n        \"FS_createNode\",\n        \"FS_destroyNode\",\n        \"FS_isRoot\",\n        \"FS_isMountpoint\",\n        \"FS_isFile\",\n        \"FS_isDir\",\n        \"FS_isLink\",\n        \"FS_isChrdev\",\n        \"FS_isBlkdev\",\n        \"FS_isFIFO\",\n        \"FS_isSocket\",\n        \"FS_flagsToPermissionString\",\n        \"FS_nodePermissions\",\n        \"FS_mayLookup\",\n        \"FS_mayCreate\",\n        \"FS_mayDelete\",\n        \"FS_mayOpen\",\n        \"FS_checkOpExists\",\n        \"FS_nextfd\",\n        \"FS_getStreamChecked\",\n        \"FS_getStream\",\n        \"FS_createStream\",\n        \"FS_closeStream\",\n        \"FS_dupStream\",\n        \"FS_doSetAttr\",\n        \"FS_chrdev_stream_ops\",\n        \"FS_major\",\n        \"FS_minor\",\n        \"FS_makedev\",\n        \"FS_registerDevice\",\n        \"FS_getDevice\",\n        \"FS_getMounts\",\n        \"FS_syncfs\",\n        \"FS_mount\",\n        \"FS_unmount\",\n        \"FS_lookup\",\n        \"FS_mknod\",\n        \"FS_statfs\",\n        \"FS_statfsStream\",\n        \"FS_statfsNode\",\n        \"FS_create\",\n        \"FS_mkdir\",\n        \"FS_mkdev\",\n        \"FS_symlink\",\n        \"FS_rename\",\n        \"FS_rmdir\",\n        \"FS_readdir\",\n        \"FS_readlink\",\n        \"FS_stat\",\n        \"FS_fstat\",\n        \"FS_lstat\",\n        \"FS_doChmod\",\n        \"FS_chmod\",\n        \"FS_lchmod\",\n        \"FS_fchmod\",\n        \"FS_doChown\",\n        \"FS_chown\",\n        \"FS_lchown\",\n        \"FS_fchown\",\n        \"FS_doTruncate\",\n        \"FS_truncate\",\n        \"FS_ftruncate\",\n        \"FS_utime\",\n        \"FS_open\",\n        \"FS_close\",\n        \"FS_isClosed\",\n        \"FS_llseek\",\n        \"FS_read\",\n        \"FS_write\",\n        \"FS_mmap\",\n        \"FS_msync\",\n        \"FS_ioctl\",\n        \"FS_writeFile\",\n        \"FS_cwd\",\n        \"FS_chdir\",\n        \"FS_createDefaultDirectories\",\n        \"FS_createDefaultDevices\",\n        \"FS_createSpecialDirectories\",\n        \"FS_createStandardStreams\",\n        \"FS_staticInit\",\n        \"FS_init\",\n        \"FS_quit\",\n        \"FS_findObject\",\n        \"FS_analyzePath\",\n        \"FS_createFile\",\n        \"FS_createDataFile\",\n        \"FS_forceLoadFile\",\n        \"FS_createLazyFile\",\n        \"FS_absolutePath\",\n        \"FS_createFolder\",\n        \"FS_createLink\",\n        \"FS_joinPath\",\n        \"FS_mmapAlloc\",\n        \"FS_standardizePath\",\n        \"MEMFS\",\n        \"TTY\",\n        \"PIPEFS\",\n        \"SOCKFS\",\n        \"tempFixedLengthArray\",\n        \"miniTempWebGLFloatBuffers\",\n        \"miniTempWebGLIntBuffers\",\n        \"GL\",\n        \"AL\",\n        \"GLUT\",\n        \"EGL\",\n        \"GLEW\",\n        \"IDBStore\",\n        \"SDL\",\n        \"SDL_gfx\",\n        \"allocateUTF8\",\n        \"allocateUTF8OnStack\",\n        \"print\",\n        \"printErr\",\n        \"jstoi_s\",\n    ];\n\n    unexportedSymbols.forEach(unexportedRuntimeSymbol);\n\n    // End runtime exports\n    // Begin JS library exports\n    // End JS library exports\n    // end include: postlibrary.js\n    function checkIncomingModuleAPI() {\n        ignoredModuleProp(\"fetchSettings\");\n    }\n\n    // Imports from the Wasm binary.\n    var _swe_degnorm = (Module[\"_swe_degnorm\"] =\n        makeInvalidEarlyAccess(\"_swe_degnorm\"));\n\n    var _swe_vis_limit_mag = (Module[\"_swe_vis_limit_mag\"] =\n        makeInvalidEarlyAccess(\"_swe_vis_limit_mag\"));\n\n    var _swe_set_topo = (Module[\"_swe_set_topo\"] =\n        makeInvalidEarlyAccess(\"_swe_set_topo\"));\n\n    var _swe_revjul = (Module[\"_swe_revjul\"] =\n        makeInvalidEarlyAccess(\"_swe_revjul\"));\n\n    var _swe_deltat_ex = (Module[\"_swe_deltat_ex\"] =\n        makeInvalidEarlyAccess(\"_swe_deltat_ex\"));\n\n    var _swe_calc = (Module[\"_swe_calc\"] = makeInvalidEarlyAccess(\"_swe_calc\"));\n\n    var _swe_azalt = (Module[\"_swe_azalt\"] =\n        makeInvalidEarlyAccess(\"_swe_azalt\"));\n\n    var _swe_pheno_ut = (Module[\"_swe_pheno_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_pheno_ut\"));\n\n    var _swe_topo_arcus_visionis = (Module[\"_swe_topo_arcus_visionis\"] =\n        makeInvalidEarlyAccess(\"_swe_topo_arcus_visionis\"));\n\n    var _swe_heliacal_angle = (Module[\"_swe_heliacal_angle\"] =\n        makeInvalidEarlyAccess(\"_swe_heliacal_angle\"));\n\n    var _swe_heliacal_pheno_ut = (Module[\"_swe_heliacal_pheno_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_heliacal_pheno_ut\"));\n\n    var _swe_heliacal_ut = (Module[\"_swe_heliacal_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_heliacal_ut\"));\n\n    var _swe_get_planet_name = (Module[\"_swe_get_planet_name\"] =\n        makeInvalidEarlyAccess(\"_swe_get_planet_name\"));\n\n    var _swe_fixstar = (Module[\"_swe_fixstar\"] =\n        makeInvalidEarlyAccess(\"_swe_fixstar\"));\n\n    var _swe_fixstar_mag = (Module[\"_swe_fixstar_mag\"] =\n        makeInvalidEarlyAccess(\"_swe_fixstar_mag\"));\n\n    var _swe_calc_ut = (Module[\"_swe_calc_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_calc_ut\"));\n\n    var _swe_rise_trans = (Module[\"_swe_rise_trans\"] =\n        makeInvalidEarlyAccess(\"_swe_rise_trans\"));\n\n    var _swe_houses = (Module[\"_swe_houses\"] =\n        makeInvalidEarlyAccess(\"_swe_houses\"));\n\n    var _swe_sidtime0 = (Module[\"_swe_sidtime0\"] =\n        makeInvalidEarlyAccess(\"_swe_sidtime0\"));\n\n    var _swe_houses_armc_ex2 = (Module[\"_swe_houses_armc_ex2\"] =\n        makeInvalidEarlyAccess(\"_swe_houses_armc_ex2\"));\n\n    var _swe_difdeg2n = (Module[\"_swe_difdeg2n\"] =\n        makeInvalidEarlyAccess(\"_swe_difdeg2n\"));\n\n    var _swe_houses_ex = (Module[\"_swe_houses_ex\"] =\n        makeInvalidEarlyAccess(\"_swe_houses_ex\"));\n\n    var _swe_houses_ex2 = (Module[\"_swe_houses_ex2\"] =\n        makeInvalidEarlyAccess(\"_swe_houses_ex2\"));\n\n    var _swe_set_sid_mode = (Module[\"_swe_set_sid_mode\"] =\n        makeInvalidEarlyAccess(\"_swe_set_sid_mode\"));\n\n    var _swe_get_ayanamsa_ex = (Module[\"_swe_get_ayanamsa_ex\"] =\n        makeInvalidEarlyAccess(\"_swe_get_ayanamsa_ex\"));\n\n    var _swe_houses_armc = (Module[\"_swe_houses_armc\"] =\n        makeInvalidEarlyAccess(\"_swe_houses_armc\"));\n\n    var _swe_cotrans = (Module[\"_swe_cotrans\"] =\n        makeInvalidEarlyAccess(\"_swe_cotrans\"));\n\n    var _swe_house_name = (Module[\"_swe_house_name\"] =\n        makeInvalidEarlyAccess(\"_swe_house_name\"));\n\n    var _swe_house_pos = (Module[\"_swe_house_pos\"] =\n        makeInvalidEarlyAccess(\"_swe_house_pos\"));\n\n    var _swe_radnorm = (Module[\"_swe_radnorm\"] =\n        makeInvalidEarlyAccess(\"_swe_radnorm\"));\n\n    var _swe_sol_eclipse_where = (Module[\"_swe_sol_eclipse_where\"] =\n        makeInvalidEarlyAccess(\"_swe_sol_eclipse_where\"));\n\n    var _swe_sidtime = (Module[\"_swe_sidtime\"] =\n        makeInvalidEarlyAccess(\"_swe_sidtime\"));\n\n    var _swe_lun_occult_where = (Module[\"_swe_lun_occult_where\"] =\n        makeInvalidEarlyAccess(\"_swe_lun_occult_where\"));\n\n    var _swe_sol_eclipse_how = (Module[\"_swe_sol_eclipse_how\"] =\n        makeInvalidEarlyAccess(\"_swe_sol_eclipse_how\"));\n\n    var _swe_refrac_extended = (Module[\"_swe_refrac_extended\"] =\n        makeInvalidEarlyAccess(\"_swe_refrac_extended\"));\n\n    var _swe_sol_eclipse_when_glob = (Module[\"_swe_sol_eclipse_when_glob\"] =\n        makeInvalidEarlyAccess(\"_swe_sol_eclipse_when_glob\"));\n\n    var _swe_lun_occult_when_glob = (Module[\"_swe_lun_occult_when_glob\"] =\n        makeInvalidEarlyAccess(\"_swe_lun_occult_when_glob\"));\n\n    var _swe_sol_eclipse_when_loc = (Module[\"_swe_sol_eclipse_when_loc\"] =\n        makeInvalidEarlyAccess(\"_swe_sol_eclipse_when_loc\"));\n\n    var _swe_lun_occult_when_loc = (Module[\"_swe_lun_occult_when_loc\"] =\n        makeInvalidEarlyAccess(\"_swe_lun_occult_when_loc\"));\n\n    var _swe_azalt_rev = (Module[\"_swe_azalt_rev\"] =\n        makeInvalidEarlyAccess(\"_swe_azalt_rev\"));\n\n    var _swe_refrac = (Module[\"_swe_refrac\"] =\n        makeInvalidEarlyAccess(\"_swe_refrac\"));\n\n    var _swe_set_lapse_rate = (Module[\"_swe_set_lapse_rate\"] =\n        makeInvalidEarlyAccess(\"_swe_set_lapse_rate\"));\n\n    var _swe_lun_eclipse_how = (Module[\"_swe_lun_eclipse_how\"] =\n        makeInvalidEarlyAccess(\"_swe_lun_eclipse_how\"));\n\n    var _swe_lun_eclipse_when = (Module[\"_swe_lun_eclipse_when\"] =\n        makeInvalidEarlyAccess(\"_swe_lun_eclipse_when\"));\n\n    var _swe_lun_eclipse_when_loc = (Module[\"_swe_lun_eclipse_when_loc\"] =\n        makeInvalidEarlyAccess(\"_swe_lun_eclipse_when_loc\"));\n\n    var _swe_rise_trans_true_hor = (Module[\"_swe_rise_trans_true_hor\"] =\n        makeInvalidEarlyAccess(\"_swe_rise_trans_true_hor\"));\n\n    var _swe_pheno = (Module[\"_swe_pheno\"] =\n        makeInvalidEarlyAccess(\"_swe_pheno\"));\n\n    var _swe_nod_aps = (Module[\"_swe_nod_aps\"] =\n        makeInvalidEarlyAccess(\"_swe_nod_aps\"));\n\n    var _swe_nod_aps_ut = (Module[\"_swe_nod_aps_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_nod_aps_ut\"));\n\n    var _swe_get_orbital_elements = (Module[\"_swe_get_orbital_elements\"] =\n        makeInvalidEarlyAccess(\"_swe_get_orbital_elements\"));\n\n    var _swe_orbit_max_min_true_distance = (Module[\n        \"_swe_orbit_max_min_true_distance\"\n    ] = makeInvalidEarlyAccess(\"_swe_orbit_max_min_true_distance\"));\n\n    var _swe_gauquelin_sector = (Module[\"_swe_gauquelin_sector\"] =\n        makeInvalidEarlyAccess(\"_swe_gauquelin_sector\"));\n\n    var _swe_version = (Module[\"_swe_version\"] =\n        makeInvalidEarlyAccess(\"_swe_version\"));\n\n    var _swe_get_library_path = (Module[\"_swe_get_library_path\"] =\n        makeInvalidEarlyAccess(\"_swe_get_library_path\"));\n\n    var _swe_set_tid_acc = (Module[\"_swe_set_tid_acc\"] =\n        makeInvalidEarlyAccess(\"_swe_set_tid_acc\"));\n\n    var _free = (Module[\"_free\"] = makeInvalidEarlyAccess(\"_free\"));\n\n    var _swe_set_ephe_path = (Module[\"_swe_set_ephe_path\"] =\n        makeInvalidEarlyAccess(\"_swe_set_ephe_path\"));\n\n    var _swe_difrad2n = (Module[\"_swe_difrad2n\"] =\n        makeInvalidEarlyAccess(\"_swe_difrad2n\"));\n\n    var _swe_close = (Module[\"_swe_close\"] =\n        makeInvalidEarlyAccess(\"_swe_close\"));\n\n    var _swe_set_jpl_file = (Module[\"_swe_set_jpl_file\"] =\n        makeInvalidEarlyAccess(\"_swe_set_jpl_file\"));\n\n    var _swe_get_ayanamsa_ex_ut = (Module[\"_swe_get_ayanamsa_ex_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_get_ayanamsa_ex_ut\"));\n\n    var _swe_get_ayanamsa = (Module[\"_swe_get_ayanamsa\"] =\n        makeInvalidEarlyAccess(\"_swe_get_ayanamsa\"));\n\n    var _swe_get_ayanamsa_ut = (Module[\"_swe_get_ayanamsa_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_get_ayanamsa_ut\"));\n\n    var _swe_fixstar2 = (Module[\"_swe_fixstar2\"] =\n        makeInvalidEarlyAccess(\"_swe_fixstar2\"));\n\n    var _swe_fixstar2_ut = (Module[\"_swe_fixstar2_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_fixstar2_ut\"));\n\n    var _swe_fixstar2_mag = (Module[\"_swe_fixstar2_mag\"] =\n        makeInvalidEarlyAccess(\"_swe_fixstar2_mag\"));\n\n    var _swe_get_ayanamsa_name = (Module[\"_swe_get_ayanamsa_name\"] =\n        makeInvalidEarlyAccess(\"_swe_get_ayanamsa_name\"));\n\n    var _swe_time_equ = (Module[\"_swe_time_equ\"] =\n        makeInvalidEarlyAccess(\"_swe_time_equ\"));\n\n    var _swe_lmt_to_lat = (Module[\"_swe_lmt_to_lat\"] =\n        makeInvalidEarlyAccess(\"_swe_lmt_to_lat\"));\n\n    var _swe_lat_to_lmt = (Module[\"_swe_lat_to_lmt\"] =\n        makeInvalidEarlyAccess(\"_swe_lat_to_lmt\"));\n\n    var _swe_fixstar_ut = (Module[\"_swe_fixstar_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_fixstar_ut\"));\n\n    var _swe_calc_pctr = (Module[\"_swe_calc_pctr\"] =\n        makeInvalidEarlyAccess(\"_swe_calc_pctr\"));\n\n    var _swe_get_current_file_data = (Module[\"_swe_get_current_file_data\"] =\n        makeInvalidEarlyAccess(\"_swe_get_current_file_data\"));\n\n    var _swe_solcross = (Module[\"_swe_solcross\"] =\n        makeInvalidEarlyAccess(\"_swe_solcross\"));\n\n    var _swe_solcross_ut = (Module[\"_swe_solcross_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_solcross_ut\"));\n\n    var _swe_mooncross = (Module[\"_swe_mooncross\"] =\n        makeInvalidEarlyAccess(\"_swe_mooncross\"));\n\n    var _swe_mooncross_ut = (Module[\"_swe_mooncross_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_mooncross_ut\"));\n\n    var _swe_mooncross_node = (Module[\"_swe_mooncross_node\"] =\n        makeInvalidEarlyAccess(\"_swe_mooncross_node\"));\n\n    var _swe_mooncross_node_ut = (Module[\"_swe_mooncross_node_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_mooncross_node_ut\"));\n\n    var _swe_helio_cross = (Module[\"_swe_helio_cross\"] =\n        makeInvalidEarlyAccess(\"_swe_helio_cross\"));\n\n    var _swe_helio_cross_ut = (Module[\"_swe_helio_cross_ut\"] =\n        makeInvalidEarlyAccess(\"_swe_helio_cross_ut\"));\n\n    var _malloc = (Module[\"_malloc\"] = makeInvalidEarlyAccess(\"_malloc\"));\n\n    var _swe_date_conversion = (Module[\"_swe_date_conversion\"] =\n        makeInvalidEarlyAccess(\"_swe_date_conversion\"));\n\n    var _swe_julday = (Module[\"_swe_julday\"] =\n        makeInvalidEarlyAccess(\"_swe_julday\"));\n\n    var _swe_utc_time_zone = (Module[\"_swe_utc_time_zone\"] =\n        makeInvalidEarlyAccess(\"_swe_utc_time_zone\"));\n\n    var _swe_utc_to_jd = (Module[\"_swe_utc_to_jd\"] =\n        makeInvalidEarlyAccess(\"_swe_utc_to_jd\"));\n\n    var _swe_jdet_to_utc = (Module[\"_swe_jdet_to_utc\"] =\n        makeInvalidEarlyAccess(\"_swe_jdet_to_utc\"));\n\n    var _swe_jdut1_to_utc = (Module[\"_swe_jdut1_to_utc\"] =\n        makeInvalidEarlyAccess(\"_swe_jdut1_to_utc\"));\n\n    var _swe_deg_midp = (Module[\"_swe_deg_midp\"] =\n        makeInvalidEarlyAccess(\"_swe_deg_midp\"));\n\n    var _swe_rad_midp = (Module[\"_swe_rad_midp\"] =\n        makeInvalidEarlyAccess(\"_swe_rad_midp\"));\n\n    var _swe_cotrans_sp = (Module[\"_swe_cotrans_sp\"] =\n        makeInvalidEarlyAccess(\"_swe_cotrans_sp\"));\n\n    var _swe_deltat = (Module[\"_swe_deltat\"] =\n        makeInvalidEarlyAccess(\"_swe_deltat\"));\n\n    var _swe_get_tid_acc = (Module[\"_swe_get_tid_acc\"] =\n        makeInvalidEarlyAccess(\"_swe_get_tid_acc\"));\n\n    var _swe_set_delta_t_userdef = (Module[\"_swe_set_delta_t_userdef\"] =\n        makeInvalidEarlyAccess(\"_swe_set_delta_t_userdef\"));\n\n    var _swe_set_interpolate_nut = (Module[\"_swe_set_interpolate_nut\"] =\n        makeInvalidEarlyAccess(\"_swe_set_interpolate_nut\"));\n\n    var _swe_csnorm = (Module[\"_swe_csnorm\"] =\n        makeInvalidEarlyAccess(\"_swe_csnorm\"));\n\n    var _swe_difcsn = (Module[\"_swe_difcsn\"] =\n        makeInvalidEarlyAccess(\"_swe_difcsn\"));\n\n    var _swe_difdegn = (Module[\"_swe_difdegn\"] =\n        makeInvalidEarlyAccess(\"_swe_difdegn\"));\n\n    var _swe_difcs2n = (Module[\"_swe_difcs2n\"] =\n        makeInvalidEarlyAccess(\"_swe_difcs2n\"));\n\n    var _swe_csroundsec = (Module[\"_swe_csroundsec\"] =\n        makeInvalidEarlyAccess(\"_swe_csroundsec\"));\n\n    var _swe_d2l = (Module[\"_swe_d2l\"] = makeInvalidEarlyAccess(\"_swe_d2l\"));\n\n    var _swe_day_of_week = (Module[\"_swe_day_of_week\"] =\n        makeInvalidEarlyAccess(\"_swe_day_of_week\"));\n\n    var _swe_cs2timestr = (Module[\"_swe_cs2timestr\"] =\n        makeInvalidEarlyAccess(\"_swe_cs2timestr\"));\n\n    var _swe_cs2lonlatstr = (Module[\"_swe_cs2lonlatstr\"] =\n        makeInvalidEarlyAccess(\"_swe_cs2lonlatstr\"));\n\n    var _swe_cs2degstr = (Module[\"_swe_cs2degstr\"] =\n        makeInvalidEarlyAccess(\"_swe_cs2degstr\"));\n\n    var _swe_split_deg = (Module[\"_swe_split_deg\"] =\n        makeInvalidEarlyAccess(\"_swe_split_deg\"));\n\n    var _swe_set_astro_models = (Module[\"_swe_set_astro_models\"] =\n        makeInvalidEarlyAccess(\"_swe_set_astro_models\"));\n\n    var _swe_get_astro_models = (Module[\"_swe_get_astro_models\"] =\n        makeInvalidEarlyAccess(\"_swe_get_astro_models\"));\n\n    var _fflush = makeInvalidEarlyAccess(\"_fflush\");\n\n    var _strerror = makeInvalidEarlyAccess(\"_strerror\");\n\n    var _emscripten_stack_get_end = makeInvalidEarlyAccess(\n        \"_emscripten_stack_get_end\"\n    );\n\n    var _emscripten_stack_get_base = makeInvalidEarlyAccess(\n        \"_emscripten_stack_get_base\"\n    );\n\n    var _sbrk = makeInvalidEarlyAccess(\"_sbrk\");\n\n    var _emscripten_get_sbrk_ptr = makeInvalidEarlyAccess(\n        \"_emscripten_get_sbrk_ptr\"\n    );\n\n    var _emscripten_stack_init = makeInvalidEarlyAccess(\n        \"_emscripten_stack_init\"\n    );\n\n    var _emscripten_stack_get_free = makeInvalidEarlyAccess(\n        \"_emscripten_stack_get_free\"\n    );\n\n    var __emscripten_stack_restore = makeInvalidEarlyAccess(\n        \"__emscripten_stack_restore\"\n    );\n\n    var __emscripten_stack_alloc = makeInvalidEarlyAccess(\n        \"__emscripten_stack_alloc\"\n    );\n\n    var _emscripten_stack_get_current = makeInvalidEarlyAccess(\n        \"_emscripten_stack_get_current\"\n    );\n\n    function assignWasmExports(wasmExports) {\n        Module[\"_swe_degnorm\"] = _swe_degnorm = createExportWrapper(\n            \"swe_degnorm\",\n            1\n        );\n        Module[\"_swe_vis_limit_mag\"] = _swe_vis_limit_mag = createExportWrapper(\n            \"swe_vis_limit_mag\",\n            8\n        );\n        Module[\"_swe_set_topo\"] = _swe_set_topo = createExportWrapper(\n            \"swe_set_topo\",\n            3\n        );\n        Module[\"_swe_revjul\"] = _swe_revjul = createExportWrapper(\n            \"swe_revjul\",\n            6\n        );\n        Module[\"_swe_deltat_ex\"] = _swe_deltat_ex = createExportWrapper(\n            \"swe_deltat_ex\",\n            3\n        );\n        Module[\"_swe_calc\"] = _swe_calc = createExportWrapper(\"swe_calc\", 5);\n        Module[\"_swe_azalt\"] = _swe_azalt = createExportWrapper(\"swe_azalt\", 7);\n        Module[\"_swe_pheno_ut\"] = _swe_pheno_ut = createExportWrapper(\n            \"swe_pheno_ut\",\n            5\n        );\n        Module[\"_swe_topo_arcus_visionis\"] = _swe_topo_arcus_visionis =\n            createExportWrapper(\"swe_topo_arcus_visionis\", 13);\n        Module[\"_swe_heliacal_angle\"] = _swe_heliacal_angle =\n            createExportWrapper(\"swe_heliacal_angle\", 12);\n        Module[\"_swe_heliacal_pheno_ut\"] = _swe_heliacal_pheno_ut =\n            createExportWrapper(\"swe_heliacal_pheno_ut\", 9);\n        Module[\"_swe_heliacal_ut\"] = _swe_heliacal_ut = createExportWrapper(\n            \"swe_heliacal_ut\",\n            9\n        );\n        Module[\"_swe_get_planet_name\"] = _swe_get_planet_name =\n            createExportWrapper(\"swe_get_planet_name\", 2);\n        Module[\"_swe_fixstar\"] = _swe_fixstar = createExportWrapper(\n            \"swe_fixstar\",\n            5\n        );\n        Module[\"_swe_fixstar_mag\"] = _swe_fixstar_mag = createExportWrapper(\n            \"swe_fixstar_mag\",\n            3\n        );\n        Module[\"_swe_calc_ut\"] = _swe_calc_ut = createExportWrapper(\n            \"swe_calc_ut\",\n            5\n        );\n        Module[\"_swe_rise_trans\"] = _swe_rise_trans = createExportWrapper(\n            \"swe_rise_trans\",\n            10\n        );\n        Module[\"_swe_houses\"] = _swe_houses = createExportWrapper(\n            \"swe_houses\",\n            6\n        );\n        Module[\"_swe_sidtime0\"] = _swe_sidtime0 = createExportWrapper(\n            \"swe_sidtime0\",\n            3\n        );\n        Module[\"_swe_houses_armc_ex2\"] = _swe_houses_armc_ex2 =\n            createExportWrapper(\"swe_houses_armc_ex2\", 9);\n        Module[\"_swe_difdeg2n\"] = _swe_difdeg2n = createExportWrapper(\n            \"swe_difdeg2n\",\n            2\n        );\n        Module[\"_swe_houses_ex\"] = _swe_houses_ex = createExportWrapper(\n            \"swe_houses_ex\",\n            7\n        );\n        Module[\"_swe_houses_ex2\"] = _swe_houses_ex2 = createExportWrapper(\n            \"swe_houses_ex2\",\n            10\n        );\n        Module[\"_swe_set_sid_mode\"] = _swe_set_sid_mode = createExportWrapper(\n            \"swe_set_sid_mode\",\n            3\n        );\n        Module[\"_swe_get_ayanamsa_ex\"] = _swe_get_ayanamsa_ex =\n            createExportWrapper(\"swe_get_ayanamsa_ex\", 4);\n        Module[\"_swe_houses_armc\"] = _swe_houses_armc = createExportWrapper(\n            \"swe_houses_armc\",\n            6\n        );\n        Module[\"_swe_cotrans\"] = _swe_cotrans = createExportWrapper(\n            \"swe_cotrans\",\n            3\n        );\n        Module[\"_swe_house_name\"] = _swe_house_name = createExportWrapper(\n            \"swe_house_name\",\n            1\n        );\n        Module[\"_swe_house_pos\"] = _swe_house_pos = createExportWrapper(\n            \"swe_house_pos\",\n            6\n        );\n        Module[\"_swe_radnorm\"] = _swe_radnorm = createExportWrapper(\n            \"swe_radnorm\",\n            1\n        );\n        Module[\"_swe_sol_eclipse_where\"] = _swe_sol_eclipse_where =\n            createExportWrapper(\"swe_sol_eclipse_where\", 5);\n        Module[\"_swe_sidtime\"] = _swe_sidtime = createExportWrapper(\n            \"swe_sidtime\",\n            1\n        );\n        Module[\"_swe_lun_occult_where\"] = _swe_lun_occult_where =\n            createExportWrapper(\"swe_lun_occult_where\", 7);\n        Module[\"_swe_sol_eclipse_how\"] = _swe_sol_eclipse_how =\n            createExportWrapper(\"swe_sol_eclipse_how\", 5);\n        Module[\"_swe_refrac_extended\"] = _swe_refrac_extended =\n            createExportWrapper(\"swe_refrac_extended\", 7);\n        Module[\"_swe_sol_eclipse_when_glob\"] = _swe_sol_eclipse_when_glob =\n            createExportWrapper(\"swe_sol_eclipse_when_glob\", 6);\n        Module[\"_swe_lun_occult_when_glob\"] = _swe_lun_occult_when_glob =\n            createExportWrapper(\"swe_lun_occult_when_glob\", 8);\n        Module[\"_swe_sol_eclipse_when_loc\"] = _swe_sol_eclipse_when_loc =\n            createExportWrapper(\"swe_sol_eclipse_when_loc\", 7);\n        Module[\"_swe_lun_occult_when_loc\"] = _swe_lun_occult_when_loc =\n            createExportWrapper(\"swe_lun_occult_when_loc\", 9);\n        Module[\"_swe_azalt_rev\"] = _swe_azalt_rev = createExportWrapper(\n            \"swe_azalt_rev\",\n            5\n        );\n        Module[\"_swe_refrac\"] = _swe_refrac = createExportWrapper(\n            \"swe_refrac\",\n            4\n        );\n        Module[\"_swe_set_lapse_rate\"] = _swe_set_lapse_rate =\n            createExportWrapper(\"swe_set_lapse_rate\", 1);\n        Module[\"_swe_lun_eclipse_how\"] = _swe_lun_eclipse_how =\n            createExportWrapper(\"swe_lun_eclipse_how\", 5);\n        Module[\"_swe_lun_eclipse_when\"] = _swe_lun_eclipse_when =\n            createExportWrapper(\"swe_lun_eclipse_when\", 6);\n        Module[\"_swe_lun_eclipse_when_loc\"] = _swe_lun_eclipse_when_loc =\n            createExportWrapper(\"swe_lun_eclipse_when_loc\", 7);\n        Module[\"_swe_rise_trans_true_hor\"] = _swe_rise_trans_true_hor =\n            createExportWrapper(\"swe_rise_trans_true_hor\", 11);\n        Module[\"_swe_pheno\"] = _swe_pheno = createExportWrapper(\"swe_pheno\", 5);\n        Module[\"_swe_nod_aps\"] = _swe_nod_aps = createExportWrapper(\n            \"swe_nod_aps\",\n            9\n        );\n        Module[\"_swe_nod_aps_ut\"] = _swe_nod_aps_ut = createExportWrapper(\n            \"swe_nod_aps_ut\",\n            9\n        );\n        Module[\"_swe_get_orbital_elements\"] = _swe_get_orbital_elements =\n            createExportWrapper(\"swe_get_orbital_elements\", 5);\n        Module[\"_swe_orbit_max_min_true_distance\"] =\n            _swe_orbit_max_min_true_distance = createExportWrapper(\n                \"swe_orbit_max_min_true_distance\",\n                7\n            );\n        Module[\"_swe_gauquelin_sector\"] = _swe_gauquelin_sector =\n            createExportWrapper(\"swe_gauquelin_sector\", 10);\n        Module[\"_swe_version\"] = _swe_version = createExportWrapper(\n            \"swe_version\",\n            1\n        );\n        Module[\"_swe_get_library_path\"] = _swe_get_library_path =\n            createExportWrapper(\"swe_get_library_path\", 1);\n        Module[\"_swe_set_tid_acc\"] = _swe_set_tid_acc = createExportWrapper(\n            \"swe_set_tid_acc\",\n            1\n        );\n        Module[\"_free\"] = _free = createExportWrapper(\"free\", 1);\n        Module[\"_swe_set_ephe_path\"] = _swe_set_ephe_path = createExportWrapper(\n            \"swe_set_ephe_path\",\n            1\n        );\n        Module[\"_swe_difrad2n\"] = _swe_difrad2n = createExportWrapper(\n            \"swe_difrad2n\",\n            2\n        );\n        Module[\"_swe_close\"] = _swe_close = createExportWrapper(\"swe_close\", 0);\n        Module[\"_swe_set_jpl_file\"] = _swe_set_jpl_file = createExportWrapper(\n            \"swe_set_jpl_file\",\n            1\n        );\n        Module[\"_swe_get_ayanamsa_ex_ut\"] = _swe_get_ayanamsa_ex_ut =\n            createExportWrapper(\"swe_get_ayanamsa_ex_ut\", 4);\n        Module[\"_swe_get_ayanamsa\"] = _swe_get_ayanamsa = createExportWrapper(\n            \"swe_get_ayanamsa\",\n            1\n        );\n        Module[\"_swe_get_ayanamsa_ut\"] = _swe_get_ayanamsa_ut =\n            createExportWrapper(\"swe_get_ayanamsa_ut\", 1);\n        Module[\"_swe_fixstar2\"] = _swe_fixstar2 = createExportWrapper(\n            \"swe_fixstar2\",\n            5\n        );\n        Module[\"_swe_fixstar2_ut\"] = _swe_fixstar2_ut = createExportWrapper(\n            \"swe_fixstar2_ut\",\n            5\n        );\n        Module[\"_swe_fixstar2_mag\"] = _swe_fixstar2_mag = createExportWrapper(\n            \"swe_fixstar2_mag\",\n            3\n        );\n        Module[\"_swe_get_ayanamsa_name\"] = _swe_get_ayanamsa_name =\n            createExportWrapper(\"swe_get_ayanamsa_name\", 1);\n        Module[\"_swe_time_equ\"] = _swe_time_equ = createExportWrapper(\n            \"swe_time_equ\",\n            3\n        );\n        Module[\"_swe_lmt_to_lat\"] = _swe_lmt_to_lat = createExportWrapper(\n            \"swe_lmt_to_lat\",\n            4\n        );\n        Module[\"_swe_lat_to_lmt\"] = _swe_lat_to_lmt = createExportWrapper(\n            \"swe_lat_to_lmt\",\n            4\n        );\n        Module[\"_swe_fixstar_ut\"] = _swe_fixstar_ut = createExportWrapper(\n            \"swe_fixstar_ut\",\n            5\n        );\n        Module[\"_swe_calc_pctr\"] = _swe_calc_pctr = createExportWrapper(\n            \"swe_calc_pctr\",\n            6\n        );\n        Module[\"_swe_get_current_file_data\"] = _swe_get_current_file_data =\n            createExportWrapper(\"swe_get_current_file_data\", 4);\n        Module[\"_swe_solcross\"] = _swe_solcross = createExportWrapper(\n            \"swe_solcross\",\n            4\n        );\n        Module[\"_swe_solcross_ut\"] = _swe_solcross_ut = createExportWrapper(\n            \"swe_solcross_ut\",\n            4\n        );\n        Module[\"_swe_mooncross\"] = _swe_mooncross = createExportWrapper(\n            \"swe_mooncross\",\n            4\n        );\n        Module[\"_swe_mooncross_ut\"] = _swe_mooncross_ut = createExportWrapper(\n            \"swe_mooncross_ut\",\n            4\n        );\n        Module[\"_swe_mooncross_node\"] = _swe_mooncross_node =\n            createExportWrapper(\"swe_mooncross_node\", 5);\n        Module[\"_swe_mooncross_node_ut\"] = _swe_mooncross_node_ut =\n            createExportWrapper(\"swe_mooncross_node_ut\", 5);\n        Module[\"_swe_helio_cross\"] = _swe_helio_cross = createExportWrapper(\n            \"swe_helio_cross\",\n            7\n        );\n        Module[\"_swe_helio_cross_ut\"] = _swe_helio_cross_ut =\n            createExportWrapper(\"swe_helio_cross_ut\", 7);\n        Module[\"_malloc\"] = _malloc = createExportWrapper(\"malloc\", 1);\n        Module[\"_swe_date_conversion\"] = _swe_date_conversion =\n            createExportWrapper(\"swe_date_conversion\", 6);\n        Module[\"_swe_julday\"] = _swe_julday = createExportWrapper(\n            \"swe_julday\",\n            5\n        );\n        Module[\"_swe_utc_time_zone\"] = _swe_utc_time_zone = createExportWrapper(\n            \"swe_utc_time_zone\",\n            13\n        );\n        Module[\"_swe_utc_to_jd\"] = _swe_utc_to_jd = createExportWrapper(\n            \"swe_utc_to_jd\",\n            9\n        );\n        Module[\"_swe_jdet_to_utc\"] = _swe_jdet_to_utc = createExportWrapper(\n            \"swe_jdet_to_utc\",\n            8\n        );\n        Module[\"_swe_jdut1_to_utc\"] = _swe_jdut1_to_utc = createExportWrapper(\n            \"swe_jdut1_to_utc\",\n            8\n        );\n        Module[\"_swe_deg_midp\"] = _swe_deg_midp = createExportWrapper(\n            \"swe_deg_midp\",\n            2\n        );\n        Module[\"_swe_rad_midp\"] = _swe_rad_midp = createExportWrapper(\n            \"swe_rad_midp\",\n            2\n        );\n        Module[\"_swe_cotrans_sp\"] = _swe_cotrans_sp = createExportWrapper(\n            \"swe_cotrans_sp\",\n            3\n        );\n        Module[\"_swe_deltat\"] = _swe_deltat = createExportWrapper(\n            \"swe_deltat\",\n            1\n        );\n        Module[\"_swe_get_tid_acc\"] = _swe_get_tid_acc = createExportWrapper(\n            \"swe_get_tid_acc\",\n            0\n        );\n        Module[\"_swe_set_delta_t_userdef\"] = _swe_set_delta_t_userdef =\n            createExportWrapper(\"swe_set_delta_t_userdef\", 1);\n        Module[\"_swe_set_interpolate_nut\"] = _swe_set_interpolate_nut =\n            createExportWrapper(\"swe_set_interpolate_nut\", 1);\n        Module[\"_swe_csnorm\"] = _swe_csnorm = createExportWrapper(\n            \"swe_csnorm\",\n            1\n        );\n        Module[\"_swe_difcsn\"] = _swe_difcsn = createExportWrapper(\n            \"swe_difcsn\",\n            2\n        );\n        Module[\"_swe_difdegn\"] = _swe_difdegn = createExportWrapper(\n            \"swe_difdegn\",\n            2\n        );\n        Module[\"_swe_difcs2n\"] = _swe_difcs2n = createExportWrapper(\n            \"swe_difcs2n\",\n            2\n        );\n        Module[\"_swe_csroundsec\"] = _swe_csroundsec = createExportWrapper(\n            \"swe_csroundsec\",\n            1\n        );\n        Module[\"_swe_d2l\"] = _swe_d2l = createExportWrapper(\"swe_d2l\", 1);\n        Module[\"_swe_day_of_week\"] = _swe_day_of_week = createExportWrapper(\n            \"swe_day_of_week\",\n            1\n        );\n        Module[\"_swe_cs2timestr\"] = _swe_cs2timestr = createExportWrapper(\n            \"swe_cs2timestr\",\n            4\n        );\n        Module[\"_swe_cs2lonlatstr\"] = _swe_cs2lonlatstr = createExportWrapper(\n            \"swe_cs2lonlatstr\",\n            4\n        );\n        Module[\"_swe_cs2degstr\"] = _swe_cs2degstr = createExportWrapper(\n            \"swe_cs2degstr\",\n            2\n        );\n        Module[\"_swe_split_deg\"] = _swe_split_deg = createExportWrapper(\n            \"swe_split_deg\",\n            7\n        );\n        Module[\"_swe_set_astro_models\"] = _swe_set_astro_models =\n            createExportWrapper(\"swe_set_astro_models\", 2);\n        Module[\"_swe_get_astro_models\"] = _swe_get_astro_models =\n            createExportWrapper(\"swe_get_astro_models\", 3);\n        _fflush = createExportWrapper(\"fflush\", 1);\n        _strerror = createExportWrapper(\"strerror\", 1);\n        _emscripten_stack_get_end = wasmExports[\"emscripten_stack_get_end\"];\n        _emscripten_stack_get_base = wasmExports[\"emscripten_stack_get_base\"];\n        _sbrk = createExportWrapper(\"sbrk\", 1);\n        _emscripten_get_sbrk_ptr = createExportWrapper(\n            \"emscripten_get_sbrk_ptr\",\n            0\n        );\n        _emscripten_stack_init = wasmExports[\"emscripten_stack_init\"];\n        _emscripten_stack_get_free = wasmExports[\"emscripten_stack_get_free\"];\n        __emscripten_stack_restore = wasmExports[\"_emscripten_stack_restore\"];\n        __emscripten_stack_alloc = wasmExports[\"_emscripten_stack_alloc\"];\n        _emscripten_stack_get_current =\n            wasmExports[\"emscripten_stack_get_current\"];\n    }\n\n    var wasmImports = {\n        /** @export */ __syscall_fcntl64: ___syscall_fcntl64,\n        /** @export */ __syscall_ioctl: ___syscall_ioctl,\n        /** @export */ __syscall_openat: ___syscall_openat,\n        /** @export */ __syscall_readlinkat: ___syscall_readlinkat,\n        /** @export */ _abort_js: __abort_js,\n        /** @export */ alignfault,\n        /** @export */ emscripten_resize_heap: _emscripten_resize_heap,\n        /** @export */ environ_get: _environ_get,\n        /** @export */ environ_sizes_get: _environ_sizes_get,\n        /** @export */ fd_close: _fd_close,\n        /** @export */ fd_read: _fd_read,\n        /** @export */ fd_seek: _fd_seek,\n        /** @export */ fd_write: _fd_write,\n        /** @export */ segfault,\n    };\n\n    var wasmExports = await createWasm();\n\n    // include: postamble.js\n    // === Auto-generated postamble setup entry stuff ===\n    var calledRun;\n\n    function stackCheckInit() {\n        // This is normally called automatically during __wasm_call_ctors but need to\n        // get these values before even running any of the ctors so we call it redundantly\n        // here.\n        _emscripten_stack_init();\n        // TODO(sbc): Move writeStackCookie to native to to avoid this.\n        writeStackCookie();\n    }\n\n    function run() {\n        if (runDependencies > 0) {\n            dependenciesFulfilled = run;\n            return;\n        }\n        stackCheckInit();\n        preRun();\n        // a preRun added a dependency, run will be called later\n        if (runDependencies > 0) {\n            dependenciesFulfilled = run;\n            return;\n        }\n        function doRun() {\n            // run may have just been called through dependencies being fulfilled just in this very frame,\n            // or while the async setStatus time below was happening\n            assert(!calledRun);\n            calledRun = true;\n            Module[\"calledRun\"] = true;\n            if (ABORT) return;\n            initRuntime();\n            readyPromiseResolve?.(Module);\n            Module[\"onRuntimeInitialized\"]?.();\n            consumedModuleProp(\"onRuntimeInitialized\");\n            assert(\n                !Module[\"_main\"],\n                'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]'\n            );\n            postRun();\n        }\n        if (Module[\"setStatus\"]) {\n            Module[\"setStatus\"](\"Running...\");\n            setTimeout(() => {\n                setTimeout(() => Module[\"setStatus\"](\"\"), 1);\n                doRun();\n            }, 1);\n        } else {\n            doRun();\n        }\n        checkStackCookie();\n    }\n\n    function checkUnflushedContent() {\n        // Compiler settings do not allow exiting the runtime, so flushing\n        // the streams is not possible. but in ASSERTIONS mode we check\n        // if there was something to flush, and if so tell the user they\n        // should request that the runtime be exitable.\n        // Normally we would not even include flush() at all, but in ASSERTIONS\n        // builds we do so just for this check, and here we see if there is any\n        // content to flush, that is, we check if there would have been\n        // something a non-ASSERTIONS build would have not seen.\n        // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0\n        // mode (which has its own special function for this; otherwise, all\n        // the code is inside libc)\n        var oldOut = out;\n        var oldErr = err;\n        var has = false;\n        out = err = x => {\n            has = true;\n        };\n        try {\n            // it doesn't matter if it fails\n            _fflush(0);\n            // also flush in the JS FS layer\n            [\"stdout\", \"stderr\"].forEach(name => {\n                var info = FS.analyzePath(\"/dev/\" + name);\n                if (!info) return;\n                var stream = info.object;\n                var rdev = stream.rdev;\n                var tty = TTY.ttys[rdev];\n                if (tty?.output?.length) {\n                    has = true;\n                }\n            });\n        } catch (e) {}\n        out = oldOut;\n        err = oldErr;\n        if (has) {\n            warnOnce(\n                \"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.\"\n            );\n        }\n    }\n\n    function preInit() {\n        if (Module[\"preInit\"]) {\n            if (typeof Module[\"preInit\"] == \"function\")\n                Module[\"preInit\"] = [Module[\"preInit\"]];\n            while (Module[\"preInit\"].length > 0) {\n                Module[\"preInit\"].shift()();\n            }\n        }\n        consumedModuleProp(\"preInit\");\n    }\n\n    preInit();\n\n    run();\n\n    // end include: postamble.js\n    // include: postamble_modularize.js\n    // In MODULARIZE mode we wrap the generated code in a factory function\n    // and return either the Module itself, or a promise of the module.\n    // We assign to the `moduleRtn` global here and configure closure to see\n    // this as and extern so it won't get minified.\n    if (runtimeInitialized) {\n        moduleRtn = Module;\n    } else {\n        // Set up the promise that indicates the Module is initialized\n        moduleRtn = new Promise((resolve, reject) => {\n            readyPromiseResolve = resolve;\n            readyPromiseReject = reject;\n        });\n    }\n\n    // Assertion for attempting to access module properties on the incoming\n    // moduleArg.  In the past we used this object as the prototype of the module\n    // and assigned properties to it, but now we return a distinct object.  This\n    // keeps the instance private until it is ready (i.e the promise has been\n    // resolved).\n    for (const prop of Object.keys(Module)) {\n        if (!(prop in moduleArg)) {\n            Object.defineProperty(moduleArg, prop, {\n                configurable: true,\n                get() {\n                    abort(\n                        `Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`\n                    );\n                },\n            });\n        }\n    }\n\n    return moduleRtn;\n}\n\n// Export using a UMD style export, or ES6 exports if selected\nexport default Module;\n","import { type FixedLengthArray, toFixedLengthArray } from \"fixed-len-array\";\nimport {\n    ArrayPointer,\n    NumberPointer,\n    StringPointer,\n    TypeConverter,\n} from \"wasp-lib\";\n\nimport { EpheFileMetadata } from \"./utils/ephe_file_metadata\";\nimport { getBaseURLPath } from \"./utils/get_base_url_path\";\nimport { SWEerror } from \"./utils/swe_error\";\nimport Module, { type SwissephModule } from \"./wasm/swisseph\";\n\n/** Wrapper class for Swiss Ephemeris WebAssembly bindings. */\nexport default class SwissEPH {\n    public readonly TRUE = 1;\n    public readonly FALSE = 0;\n    public readonly OK = 0;\n    public readonly ERR = -1;\n    public readonly NOT_AVAILABLE = -2;\n    public readonly BEYOND_EPH_LIMITS = -3;\n\n    /** Degree as string, utf8 encoding */\n    public readonly ODEGREE_STRING = \"°\";\n    /** Biggest value for REAL8 */\n    public readonly HUGE = 1.7e308;\n    /** 3.14159265358979323846 */\n    public readonly M_PI = Math.PI;\n    /**\n     * Forward static obsolete used for string declarations, allowing 255\n     * char+\\0\n     */\n    public readonly AS_MAXCH = 256;\n    public readonly RADTODEG = 180.0 / this.M_PI;\n    public readonly DEGTORAD = this.M_PI / 180.0;\n    /** Degree expressed in centiseconds */\n    public readonly DEG = 360000;\n    /** 7.5 degrees */\n    public readonly DEG7_30 = 2700000;\n    public readonly DEG15 = 15 * this.DEG;\n    public readonly DEG24 = 24 * this.DEG;\n    public readonly DEG30 = 30 * this.DEG;\n    public readonly DEG60 = 60 * this.DEG;\n    public readonly DEG90 = 90 * this.DEG;\n    public readonly DEG120 = 120 * this.DEG;\n    public readonly DEG150 = 150 * this.DEG;\n    public readonly DEG180 = 180 * this.DEG;\n    public readonly DEG270 = 270 * this.DEG;\n    public readonly DEG360 = 360 * this.DEG;\n    /** CSTORAD = 4.84813681109536E-08 centisec to rad: pi / 180 /3600/100 */\n    public readonly CSTORAD = this.DEGTORAD / 360000.0;\n    /** RADTOCS = 2.06264806247096E+07 rad to centisec 180_3600_100/pi */\n    public readonly RADTOCS = this.RADTODEG * 360000.0;\n    /** Centisec to degree */\n    public readonly CS2DEG = 1.0 / 360000.0;\n    /** Open binary file for reading */\n    public readonly BFILE_R_ACCESS = \"rb\";\n    /** Open binary file for writing and reading */\n    public readonly BFILE_RW_ACCESS = \"r+b\";\n    /** Create/open binary file for write */\n    public readonly BFILE_W_CREATE = \"wb\";\n    /** Create/open binary file for append */\n    public readonly BFILE_A_ACCESS = \"a+b\";\n    /** Semicolon as PATH separator */\n    public readonly PATH_SEPARATOR = \";\";\n    /** Default file creation mode */\n    public readonly OPEN_MODE = \"0666\";\n    /** Open text file for reading */\n    public readonly FILE_R_ACCESS = \"rt\";\n    /** Open text file for writing and reading */\n    public readonly FILE_RW_ACCESS = \"r+t\";\n    /** Create/open text file for write */\n    public readonly FILE_W_CREATE = \"wt\";\n    /** Create/open text file for append */\n    public readonly FILE_A_ACCESS = \"a+t\";\n    /**\n     * Attention, all backslashes for msdos directry names must be written as\n     * because it is the C escape character glue string for directory/file\n     */\n    public readonly DIR_GLUE = \"\\\\\";\n    public readonly SE_AUNIT_TO_KM = 149597870.7;\n    public readonly SE_AUNIT_TO_LIGHTYEAR = 1.0 / 63241.07708427;\n    public readonly SE_AUNIT_TO_PARSEC = 1.0 / 206264.8062471;\n    /** Values for gregflag in swe_julday() and swe_revjul() */\n    public readonly SE_JUL_CAL = 0;\n    public readonly SE_GREG_CAL = 1;\n    /** Planet numbers for the ipl parameter in swe_calc() */\n    public readonly SE_ECL_NUT = -1;\n    public readonly SE_SUN = 0;\n    public readonly SE_MOON = 1;\n    public readonly SE_MERCURY = 2;\n    public readonly SE_VENUS = 3;\n    public readonly SE_MARS = 4;\n    public readonly SE_JUPITER = 5;\n    public readonly SE_SATURN = 6;\n    public readonly SE_URANUS = 7;\n    public readonly SE_NEPTUNE = 8;\n    public readonly SE_PLUTO = 9;\n    public readonly SE_MEAN_NODE = 10;\n    public readonly SE_TRUE_NODE = 11;\n    public readonly SE_MEAN_APOG = 12;\n    public readonly SE_OSCU_APOG = 13;\n    public readonly SE_EARTH = 14;\n    public readonly SE_CHIRON = 15;\n    public readonly SE_PHOLUS = 16;\n    public readonly SE_CERES = 17;\n    public readonly SE_PALLAS = 18;\n    public readonly SE_JUNO = 19;\n    public readonly SE_VESTA = 20;\n    public readonly SE_INTP_APOG = 21;\n    public readonly SE_INTP_PERG = 22;\n    public readonly SE_NPLANETS = 23;\n    public readonly SE_PLMOON_OFFSET = 9000;\n    public readonly SE_AST_OFFSET = 10000;\n    public readonly SE_VARUNA = this.SE_AST_OFFSET + 20000;\n    public readonly SE_FICT_OFFSET = 40;\n    public readonly SE_FICT_OFFSET_1 = 39;\n    public readonly SE_FICT_MAX = 999;\n    public readonly SE_NFICT_ELEM = 15;\n    public readonly SE_COMET_OFFSET = 1000;\n    public readonly SE_NALL_NAT_POINTS = this.SE_NPLANETS + this.SE_NFICT_ELEM;\n    /** Hamburger or Uranian \"planets\" */\n    public readonly SE_CUPIDO = 40;\n    public readonly SE_HADES = 41;\n    public readonly SE_ZEUS = 42;\n    public readonly SE_KRONOS = 43;\n    public readonly SE_APOLLON = 44;\n    public readonly SE_ADMETOS = 45;\n    public readonly SE_VULKANUS = 46;\n    public readonly SE_POSEIDON = 47;\n    /** Other fictitious bodies */\n    public readonly SE_ISIS = 48;\n    public readonly SE_NIBIRU = 49;\n    public readonly SE_HARRINGTON = 50;\n    public readonly SE_NEPTUNE_LEVERRIER = 51;\n    public readonly SE_NEPTUNE_ADAMS = 52;\n    public readonly SE_PLUTO_LOWELL = 53;\n    public readonly SE_PLUTO_PICKERING = 54;\n    public readonly SE_VULCAN = 55;\n    public readonly SE_WHITE_MOON = 56;\n    public readonly SE_PROSERPINA = 57;\n    public readonly SE_WALDEMATH = 58;\n    public readonly SE_FIXSTAR = -10;\n    public readonly SE_ASC = 0;\n    public readonly SE_MC = 1;\n    public readonly SE_ARMC = 2;\n    public readonly SE_VERTEX = 3;\n    public readonly SE_EQUASC = 4; /** \"equatorial ascendant\" */\n    public readonly SE_COASC1 = 5; /** \"co-ascendant\" ( W. Koch) */\n    public readonly SE_COASC2 = 6; /** \"co-ascendant\" ( M. Munkasey) */\n    public readonly SE_POLASC = 7; /** \"polar ascendant\" ( M. Munkasey) */\n    public readonly SE_NASCMC = 8;\n    /**\n     * Flag bits for parameter iflag in swe_calc() The flag bits are defined in\n     * such a way that iflag = 0 delivers what one usually wants:\n     *\n     * - The default ephemeris ( SWISS EPHEMERIS) is used,\n     * - Apparent geocentric positions referring to the true equinox of date are\n     *   returned. If not only coordinates, but also speed values are required,\n     *   use flag = SEFLG_SPEED. The 'L' behind the number indicates that 32-bit\n     *   integers ( Long) are used.\n     */\n    /** Use JPL ephemeris */\n    public readonly SEFLG_JPLEPH = 1;\n    /** Use SWISSEPH ephemeris */\n    public readonly SEFLG_SWIEPH = 2;\n    /** Use Moshier ephemeris */\n    public readonly SEFLG_MOSEPH = 4;\n    /** Heliocentric position */\n    public readonly SEFLG_HELCTR = 8;\n    /** True/geometric position, not apparent position */\n    public readonly SEFLG_TRUEPOS = 16;\n    /** No precession, i.e. give J2000 equinox */\n    public readonly SEFLG_J2000 = 32;\n    /** No nutation, i.e. mean equinox of date */\n    public readonly SEFLG_NONUT = 64;\n    /**\n     * Speed from 3 positions (do not use it, SEFLG_SPEED is faster and more\n     * precise.)\n     */\n    public readonly SEFLG_SPEED3 = 128;\n    /** High precision speed */\n    public readonly SEFLG_SPEED = 256;\n    /** Turn off gravitational deflection */\n    public readonly SEFLG_NOGDEFL = 512;\n    /** Turn off 'annual' aberration of light */\n    public readonly SEFLG_NOABERR = 1024;\n    /**\n     * Astrometric position, i.e. with light - time, but without aberration and\n     * light deflection\n     */\n    public readonly SEFLG_ASTROMETRIC = this.SEFLG_NOABERR | this.SEFLG_NOGDEFL;\n    /** Equatorial positions are wanted */\n    public readonly SEFLG_EQUATORIAL = 2 * 1024;\n    /** Cartesian, not polar, coordinates */\n    public readonly SEFLG_XYZ = 4 * 1024;\n    /** Coordinates in radians, not degrees */\n    public readonly SEFLG_RADIANS = 8 * 1024;\n    /** Barycentric position */\n    public readonly SEFLG_BARYCTR = 16 * 1024;\n    /** Topocentric position */\n    public readonly SEFLG_TOPOCTR = 32 * 1024;\n    /** Used for Astronomical Almanac mode in calculation of Kepler elipses */\n    public readonly SEFLG_ORBEL_AA = this.SEFLG_TOPOCTR;\n    /** Tropical position ( default) */\n    public readonly SEFLG_TROPICAL = 0;\n    /** Sidereal position */\n    public readonly SEFLG_SIDEREAL = 64 * 1024;\n    /** ICRS ( DE406 reference frame) */\n    public readonly SEFLG_ICRS = 128 * 1024;\n    /** Reproduce JPL Horizons 1962 - today to 0.002 arcsec. */\n    public readonly SEFLG_DPSIDEPS_1980 = 256 * 1024;\n    public readonly SEFLG_JPLHOR = this.SEFLG_DPSIDEPS_1980;\n    /** Approximate JPL Horizons 1962 - today */\n    public readonly SEFLG_JPLHOR_APPROX = 512 * 1024;\n    /**\n     * Calculate position of center of body ( COB) of planet, not barycenter of\n     * its system\n     */\n    public readonly SEFLG_CENTER_BODY = 1024 * 1024;\n    /** Test raw data in files sepm9* */\n    public readonly SEFLG_TEST_PLMOON =\n        (2 * 1024 * 1024) |\n        this.SEFLG_J2000 |\n        this.SEFLG_ICRS |\n        this.SEFLG_HELCTR |\n        this.SEFLG_TRUEPOS;\n\n    public readonly SE_SIDBITS = 256;\n    /** For projection onto ecliptic of t0 */\n    public readonly SE_SIDBIT_ECL_T0 = 256;\n    /** For projection onto solar system plane */\n    public readonly SE_SIDBIT_SSY_PLANE = 512;\n    /** With user-defined ayanamsha, t0 is UT */\n    public readonly SE_SIDBIT_USER_UT = 1024;\n    /**\n     * Ayanamsha measured on ecliptic of date; see commentaries in sweph.c:\n     * swi_get_ayanamsa_ex().\n     */\n    public readonly SE_SIDBIT_ECL_DATE = 2048;\n    /**\n     * Test feature: don't apply const ant offset to ayanamsha see commentary\n     * above sweph.c: get_aya_correction()\n     */\n    public readonly SE_SIDBIT_NO_PREC_OFFSET = 4096;\n    /** Test feature: calculate ayanamsha using its original precession model */\n    public readonly SE_SIDBIT_PREC_ORIG = 8192;\n    /** Sidereal modes ( ayanamsas) */\n    public readonly SE_SIDM_FAGAN_BRADLEY = 0;\n    public readonly SE_SIDM_LAHIRI = 1;\n    public readonly SE_SIDM_DELUCE = 2;\n    public readonly SE_SIDM_RAMAN = 3;\n    public readonly SE_SIDM_USHASHASHI = 4;\n    public readonly SE_SIDM_KRISHNAMURTI = 5;\n    public readonly SE_SIDM_DJWHAL_KHUL = 6;\n    public readonly SE_SIDM_YUKTESHWAR = 7;\n    public readonly SE_SIDM_JN_BHASIN = 8;\n    public readonly SE_SIDM_BABYL_KUGLER1 = 9;\n    public readonly SE_SIDM_BABYL_KUGLER2 = 10;\n    public readonly SE_SIDM_BABYL_KUGLER3 = 11;\n    public readonly SE_SIDM_BABYL_HUBER = 12;\n    public readonly SE_SIDM_BABYL_ETPSC = 13;\n    public readonly SE_SIDM_ALDEBARAN_15TAU = 14;\n    public readonly SE_SIDM_HIPPARCHOS = 15;\n    public readonly SE_SIDM_SASSANIAN = 16;\n    public readonly SE_SIDM_GALCENT_0SAG = 17;\n    public readonly SE_SIDM_J2000 = 18;\n    public readonly SE_SIDM_J1900 = 19;\n    public readonly SE_SIDM_B1950 = 20;\n    public readonly SE_SIDM_SURYASIDDHANTA = 21;\n    public readonly SE_SIDM_SURYASIDDHANTA_MSUN = 22;\n    public readonly SE_SIDM_ARYABHATA = 23;\n    public readonly SE_SIDM_ARYABHATA_MSUN = 24;\n    public readonly SE_SIDM_SS_REVATI = 25;\n    public readonly SE_SIDM_SS_CITRA = 26;\n    public readonly SE_SIDM_TRUE_CITRA = 27;\n    public readonly SE_SIDM_TRUE_REVATI = 28;\n    public readonly SE_SIDM_TRUE_PUSHYA = 29;\n    public readonly SE_SIDM_GALCENT_RGILBRAND = 30;\n    public readonly SE_SIDM_GALEQU_IAU1958 = 31;\n    public readonly SE_SIDM_GALEQU_TRUE = 32;\n    public readonly SE_SIDM_GALEQU_MULA = 33;\n    public readonly SE_SIDM_GALALIGN_MARDYKS = 34;\n    public readonly SE_SIDM_TRUE_MULA = 35;\n    public readonly SE_SIDM_GALCENT_MULA_WILHELM = 36;\n    public readonly SE_SIDM_ARYABHATA_522 = 37;\n    public readonly SE_SIDM_BABYL_BRITTON = 38;\n    public readonly SE_SIDM_TRUE_SHEORAN = 39;\n    public readonly SE_SIDM_GALCENT_COCHRANE = 40;\n    public readonly SE_SIDM_GALEQU_FIORENZA = 41;\n    public readonly SE_SIDM_VALENS_MOON = 42;\n    public readonly SE_SIDM_LAHIRI_1940 = 43;\n    public readonly SE_SIDM_LAHIRI_VP285 = 44;\n    public readonly SE_SIDM_KRISHNAMURTI_VP291 = 45;\n    public readonly SE_SIDM_LAHIRI_ICRC = 46;\n    // public SE_SIDM_MANJULA = 43\n    /** User-defined ayanamsha, t0 is TT */\n    public readonly SE_SIDM_USER = 255;\n    public readonly SE_NSIDM_PREDEF = 47;\n    /** Used for swe_nod_aps(): */\n    /** Mean nodes/apsides */\n    public readonly SE_NODBIT_MEAN = 1;\n    /** Osculating nodes/apsides */\n    public readonly SE_NODBIT_OSCU = 2;\n    /** Same, but motion about solar system barycenter is considered */\n    public readonly SE_NODBIT_OSCU_BAR = 4;\n    /** Focal point of orbit instead of aphelion */\n    public readonly SE_NODBIT_FOPOINT = 256;\n    /** Default ephemeris used when no ephemeris flagbit is set */\n    public readonly SEFLG_DEFAULTEPH = this.SEFLG_SWIEPH;\n    /**\n     * Maximum size of fixstar name; the parameter star in swe_fixstar must\n     * allow twice this space for the returned star name.\n     */\n    public readonly SE_MAX_STNAME = 256;\n    /** Defines for eclipse computations */\n    public readonly SE_ECL_CENTRAL = 1;\n    public readonly SE_ECL_NONCENTRAL = 2;\n    public readonly SE_ECL_TOTAL = 4;\n    public readonly SE_ECL_ANNULAR = 8;\n    public readonly SE_ECL_PARTIAL = 16;\n    public readonly SE_ECL_ANNULAR_TOTAL = 32;\n    /** = annular-total */\n    public readonly SE_ECL_HYBRID = 32;\n    public readonly SE_ECL_PENUMBRAL = 64;\n    public readonly SE_ECL_ALLTYPES_SOLAR =\n        this.SE_ECL_CENTRAL |\n        this.SE_ECL_NONCENTRAL |\n        this.SE_ECL_TOTAL |\n        this.SE_ECL_ANNULAR |\n        this.SE_ECL_PARTIAL |\n        this.SE_ECL_ANNULAR_TOTAL;\n\n    public readonly SE_ECL_ALLTYPES_LUNAR =\n        this.SE_ECL_TOTAL | this.SE_ECL_PARTIAL | this.SE_ECL_PENUMBRAL;\n\n    public readonly SE_ECL_VISIBLE = 128;\n    public readonly SE_ECL_MAX_VISIBLE = 256;\n    /** Begin of partial eclipse */\n    public readonly SE_ECL_1ST_VISIBLE = 512;\n    /** Begin of partial eclipse */\n    public readonly SE_ECL_PARTBEG_VISIBLE = 512;\n    /** Begin of total eclipse */\n    public readonly SE_ECL_2ND_VISIBLE = 1024;\n    /** Begin of total eclipse */\n    public readonly SE_ECL_TOTBEG_VISIBLE = 1024;\n    /** End of total eclipse */\n    public readonly SE_ECL_3RD_VISIBLE = 2048;\n    /** End of total eclipse */\n    public readonly SE_ECL_TOTEND_VISIBLE = 2048;\n    /** End of partial eclipse */\n    public readonly SE_ECL_4TH_VISIBLE = 4096;\n    /** End of partial eclipse */\n    public readonly SE_ECL_PARTEND_VISIBLE = 4096;\n    /** Begin of penumbral eclipse */\n    public readonly SE_ECL_PENUMBBEG_VISIBLE = 8192;\n    /** End of penumbral eclipse */\n    public readonly SE_ECL_PENUMBEND_VISIBLE = 16384;\n    /** Occultation begins during the day */\n    public readonly SE_ECL_OCC_BEG_DAYLIGHT = 8192;\n    /** Occultation ends during the day */\n    public readonly SE_ECL_OCC_END_DAYLIGHT = 16384;\n    /**\n     * Check if the next conjunction of the moon with a planet is an\n     * occultation; don't search further\n     */\n    public readonly SE_ECL_ONE_TRY = 32 * 1024;\n    /** For swe_rise_transit() */\n    public readonly SE_CALC_RISE = 1;\n    public readonly SE_CALC_SET = 2;\n    public readonly SE_CALC_MTRANSIT = 4;\n    public readonly SE_CALC_ITRANSIT = 8;\n    /**\n     * To be or'ed to SE_CALC_RISE/SET, if rise or set of disc center is\n     * required\n     */\n    public readonly SE_BIT_DISC_CENTER = 256;\n    /**\n     * To be or'ed to SE_CALC_RISE/SET, if rise or set of lower limb of disc is\n     * requried\n     */\n    public readonly SE_BIT_DISC_BOTTOM = 8192;\n    /**\n     * Use geocentric rather than topocentric position of object and ignore its\n     * ecliptic latitude\n     */\n    public readonly SE_BIT_GEOCTR_NO_ECL_LAT = 128;\n    /** To be or'ed to SE_CALC_RISE/SET, if refraction is to be ignored */\n    public readonly SE_BIT_NO_REFRACTION = 512;\n    /** To be or'ed to SE_CALC_RISE/SET */\n    public readonly SE_BIT_CIVIL_TWILIGHT = 1024;\n    /** To be or'ed to SE_CALC_RISE/SET */\n    public readonly SE_BIT_NAUTIC_TWILIGHT = 2048;\n    /** To be or'ed to SE_CALC_RISE/SET */\n    public readonly SE_BIT_ASTRO_TWILIGHT = 4096;\n    /** Or'ed to SE_CALC_RISE/SET: neglect the effect of distance on disc size */\n    public readonly SE_BIT_FIXED_DISC_SIZE = 16384;\n    /**\n     * This is only an Astrodienst in-house test flag.It forces the usage of the\n     * old, slow calculation of risings and settings.\n     */\n    public readonly SE_BIT_FORCE_SLOW_METHOD = 32768;\n    public readonly SE_BIT_HINDU_RISING =\n        this.SE_BIT_DISC_CENTER |\n        this.SE_BIT_NO_REFRACTION |\n        this.SE_BIT_GEOCTR_NO_ECL_LAT;\n\n    /** For swe_azalt() and swe_azalt_rev() */\n    public readonly SE_ECL2HOR = 0;\n    public readonly SE_EQU2HOR = 1;\n    public readonly SE_HOR2ECL = 0;\n    public readonly SE_HOR2EQU = 1;\n    /** For swe_refrac() */\n    public readonly SE_TRUE_TO_APP = 0;\n    public readonly SE_APP_TO_TRUE = 1;\n    /**\n     * Only used for experimenting with various JPL ephemeris files which are\n     * available at Astrodienst's internal network\n     */\n    public readonly SE_DE_NUMBER = 431;\n    public readonly SE_FNAME_DE200 = \"de200.eph\";\n    public readonly SE_FNAME_DE403 = \"de403.eph\";\n    public readonly SE_FNAME_DE404 = \"de404.eph\";\n    public readonly SE_FNAME_DE405 = \"de405.eph\";\n    public readonly SE_FNAME_DE406 = \"de406.eph\";\n    public readonly SE_FNAME_DE431 = \"de431.eph\";\n    public readonly SE_FNAME_DFT = this.SE_FNAME_DE431;\n    public readonly SE_FNAME_DFT2 = this.SE_FNAME_DE406;\n    public readonly SE_STARFILE_OLD = \"fixstars.cat\";\n    public readonly SE_STARFILE = \"sefstars.txt\";\n    public readonly SE_ASTNAMFILE = \"seasnam.txt\";\n    public readonly SE_FICTFILE = \"seorbel.txt\";\n    /** Defines for swe_split_deg() ( in swephlib.c) */\n    public readonly SE_SPLIT_DEG_ROUND_SEC = 1;\n    public readonly SE_SPLIT_DEG_ROUND_MIN = 2;\n    public readonly SE_SPLIT_DEG_ROUND_DEG = 4;\n    public readonly SE_SPLIT_DEG_ZODIACAL = 8;\n    public readonly SE_SPLIT_DEG_NAKSHATRA = 1024;\n    /**\n     * Don't round to next sign, e.g. 29.9999999 will be rounded to 29d59'59\" (\n     * or 29d59' or 29d)\n     */\n    public readonly SE_SPLIT_DEG_KEEP_SIGN = 16;\n    /**\n     * Don't round to next degree e.g. 13.9999999 will be rounded to 13d59'59\" (\n     * or 13d59' or 13d)\n     */\n    public readonly SE_SPLIT_DEG_KEEP_DEG = 32;\n    /** For heliacal functions */\n    public readonly SE_HELIACAL_RISING = 1;\n    public readonly SE_HELIACAL_SETTING = 2;\n    public readonly SE_MORNING_FIRST = this.SE_HELIACAL_RISING;\n    public readonly SE_EVENING_LAST = this.SE_HELIACAL_SETTING;\n    public readonly SE_EVENING_FIRST = 3;\n    public readonly SE_MORNING_LAST = 4;\n    /** Still not implemented */\n    public readonly SE_ACRONYCHAL_RISING = 5;\n    /** Still not implemented */\n    public readonly SE_ACRONYCHAL_SETTING = 6;\n    public readonly SE_COSMICAL_SETTING = this.SE_ACRONYCHAL_SETTING;\n    public readonly SE_HELFLAG_LONG_SEARCH = 128;\n    public readonly SE_HELFLAG_HIGH_PRECISION = 256;\n    public readonly SE_HELFLAG_OPTICAL_PARAMS = 512;\n    public readonly SE_HELFLAG_NO_DETAILS = 1024;\n    /** 2048 */\n    public readonly SE_HELFLAG_SEARCH_1_PERIOD = 1 << 11;\n    /** 4096 */\n    public readonly SE_HELFLAG_VISLIM_DARK = 1 << 12;\n    /** 8192 */\n    public readonly SE_HELFLAG_VISLIM_NOMOON = 1 << 13;\n    /** The following undocumented defines are for test reasons only */\n    /** 16384 */\n    public readonly SE_HELFLAG_VISLIM_PHOTOPIC = 1 << 14;\n    /** 32768 */\n    public readonly SE_HELFLAG_VISLIM_SCOTOPIC = 1 << 15;\n    /** 65536 */\n    public readonly SE_HELFLAG_AV = 1 << 16;\n    /** 65536 */\n    public readonly SE_HELFLAG_AVKIND_VR = 1 << 16;\n    public readonly SE_HELFLAG_AVKIND_PTO = 1 << 17;\n    public readonly SE_HELFLAG_AVKIND_MIN7 = 1 << 18;\n    public readonly SE_HELFLAG_AVKIND_MIN9 = 1 << 19;\n    public readonly SE_HELFLAG_AVKIND =\n        this.SE_HELFLAG_AVKIND_VR |\n        this.SE_HELFLAG_AVKIND_PTO |\n        this.SE_HELFLAG_AVKIND_MIN7 |\n        this.SE_HELFLAG_AVKIND_MIN9;\n\n    public readonly TJD_INVALID = 99999999.0;\n    public readonly SIMULATE_VICTORVB = 1;\n    /** Unused and redundant */\n    public readonly SE_HELIACAL_LONG_SEARCH = 128;\n    public readonly SE_HELIACAL_HIGH_PRECISION = 256;\n    public readonly SE_HELIACAL_OPTICAL_PARAMS = 512;\n    public readonly SE_HELIACAL_NO_DETAILS = 1024;\n    /** 2048 */\n    public readonly SE_HELIACAL_SEARCH_1_PERIOD = 1 << 11;\n    /** 4096 */\n    public readonly SE_HELIACAL_VISLIM_DARK = 1 << 12;\n    /** 8192 */\n    public readonly SE_HELIACAL_VISLIM_NOMOON = 1 << 13;\n    /** 16384 */\n    public readonly SE_HELIACAL_VISLIM_PHOTOPIC = 1 << 14;\n    /** 32768 */\n    public readonly SE_HELIACAL_AVKIND_VR = 1 << 15;\n    public readonly SE_HELIACAL_AVKIND_PTO = 1 << 16;\n    public readonly SE_HELIACAL_AVKIND_MIN7 = 1 << 17;\n    public readonly SE_HELIACAL_AVKIND_MIN9 = 1 << 18;\n    public readonly SE_HELIACAL_AVKIND =\n        this.SE_HELFLAG_AVKIND_VR |\n        this.SE_HELFLAG_AVKIND_PTO |\n        this.SE_HELFLAG_AVKIND_MIN7 |\n        this.SE_HELFLAG_AVKIND_MIN9;\n\n    public readonly SE_PHOTOPIC_FLAG = 0;\n    public readonly SE_SCOTOPIC_FLAG = 1;\n    public readonly SE_MIXEDOPIC_FLAG = 2;\n    /**\n     * For swe_set_tid_acc() and ephemeris-dependent delta t: intrinsic tidal\n     * acceleration in the mean motion of the moon, not given in the parameters\n     * list of the ephemeris files but computed by Chapront / Chapront - Touzé /\n     * Francou A & A 387(2002), p. 705.\n     */\n    public readonly SE_TIDAL_DE200 = -23.8946;\n    /** Was ( -25.8) until V. 1.76.2 */\n    public readonly SE_TIDAL_DE403 = -25.58;\n    /** Was ( -25.8) until V. 1.76.2 */\n    public readonly SE_TIDAL_DE404 = -25.58;\n    /** Was ( -25.7376) until V. 1.76.2 */\n    public readonly SE_TIDAL_DE405 = -25.826;\n    /** Was ( -25.7376) until V. 1.76.2 */\n    public readonly SE_TIDAL_DE406 = -25.826;\n    /** JPL Interoffice Memorandum 14-mar-2008 on DE421 Lunar Orbit */\n    public readonly SE_TIDAL_DE421 = -25.85;\n    /** JPL Interoffice Memorandum 14-mar-2008 on DE421 ( sic!) Lunar Orbit */\n    public readonly SE_TIDAL_DE422 = -25.85;\n    /** JPL Interoffice Memorandum 9-jul-2013 on DE430 Lunar Orbit */\n    public readonly SE_TIDAL_DE430 = -25.82;\n    /**\n     * IPN Progress Report 42-196 • February 15, 2014, p. 15; was ( -25.82) in\n     * V. 2.00.00\n     */\n    public readonly SE_TIDAL_DE431 = -25.8;\n    /** Unpublished value, from email by Jon Giorgini to DK on 11 Apr 2021 */\n    public readonly SE_TIDAL_DE441 = -25.936;\n    public readonly SE_TIDAL_26 = -26.0;\n    public readonly SE_TIDAL_STEPHENSON_2016 = -25.85;\n    public readonly SE_TIDAL_DEFAULT = this.SE_TIDAL_DE431;\n    public readonly SE_TIDAL_AUTOMATIC = 999999;\n    public readonly SE_TIDAL_MOSEPH = this.SE_TIDAL_DE404;\n    public readonly SE_TIDAL_SWIEPH = this.SE_TIDAL_DEFAULT;\n    public readonly SE_TIDAL_JPLEPH = this.SE_TIDAL_DEFAULT;\n    /** For swe_set_delta_t_userdef() */\n    public readonly SE_DELTAT_AUTOMATIC = -1e-10;\n    public readonly SE_MODEL_DELTAT = 0;\n    public readonly SE_MODEL_PREC_LONGTERM = 1;\n    public readonly SE_MODEL_PREC_SHORTTERM = 2;\n    public readonly SE_MODEL_NUT = 3;\n    public readonly SE_MODEL_BIAS = 4;\n    public readonly SE_MODEL_JPLHOR_MODE = 5;\n    public readonly SE_MODEL_JPLHORA_MODE = 6;\n    public readonly SE_MODEL_SIDT = 7;\n    public readonly NSE_MODELS = 8;\n    /** Precession models */\n    public readonly SEMOD_NPREC = 11;\n    public readonly SEMOD_PREC_IAU_1976 = 1;\n    public readonly SEMOD_PREC_LASKAR_1986 = 2;\n    public readonly SEMOD_PREC_WILL_EPS_LASK = 3;\n    public readonly SEMOD_PREC_WILLIAMS_1994 = 4;\n    public readonly SEMOD_PREC_SIMON_1994 = 5;\n    public readonly SEMOD_PREC_IAU_2000 = 6;\n    public readonly SEMOD_PREC_BRETAGNON_2003 = 7;\n    public readonly SEMOD_PREC_IAU_2006 = 8;\n    public readonly SEMOD_PREC_VONDRAK_2011 = 9;\n    public readonly SEMOD_PREC_OWEN_1990 = 10;\n    public readonly SEMOD_PREC_NEWCOMB = 11;\n    public readonly SEMOD_PREC_DEFAULT = this.SEMOD_PREC_VONDRAK_2011;\n    /**\n     * SE versions before 1.70 used IAU 1976 precession for a limited time range\n     * of 2 centuries in combination with the long - term precession Simon\n     * 1994.\n     */\n    public readonly SEMOD_PREC_DEFAULT_SHORT = this.SEMOD_PREC_VONDRAK_2011;\n    /** Nutation models */\n    public readonly SEMOD_NNUT = 5;\n    public readonly SEMOD_NUT_IAU_1980 = 1;\n    /**\n     * Herring's ( 1987) corrections to IAU 1980 nutation series.AA(1996)\n     * neglects them.\n     */\n    public readonly SEMOD_NUT_IAU_CORR_1987 = 2;\n    /** Very time consuming ! */\n    public readonly SEMOD_NUT_IAU_2000A = 3;\n    /** Fast, but precision of milli-arcsec */\n    public readonly SEMOD_NUT_IAU_2000B = 4;\n    public readonly SEMOD_NUT_WOOLARD = 5;\n    /** Fast, but precision of milli-arcsec */\n    public readonly SEMOD_NUT_DEFAULT = this.SEMOD_NUT_IAU_2000B;\n    /** Methods for sidereal time */\n    public readonly SEMOD_NSIDT = 4;\n    public readonly SEMOD_SIDT_IAU_1976 = 1;\n    public readonly SEMOD_SIDT_IAU_2006 = 2;\n    public readonly SEMOD_SIDT_IERS_CONV_2010 = 3;\n    public readonly SEMOD_SIDT_LONGTERM = 4;\n    public readonly SEMOD_SIDT_DEFAULT = this.SEMOD_SIDT_LONGTERM;\n    // const  SEMOD_SIDT_DEFAULT = SEMOD_SIDT_IERS_CONV_2010\n    /** Frame bias methods */\n    public readonly SEMOD_NBIAS = 3;\n    /** Ignore frame bias */\n    public readonly SEMOD_BIAS_NONE = 1;\n    /** Use frame bias matrix IAU 2000 */\n    public readonly SEMOD_BIAS_IAU2000 = 2;\n    /** Use frame bias matrix IAU 2006 */\n    public readonly SEMOD_BIAS_IAU2006 = 3;\n    public readonly SEMOD_BIAS_DEFAULT = this.SEMOD_BIAS_IAU2006;\n    /**\n     * Methods of JPL Horizons ( iflag & SEFLG_JPLHOR), using daily dpsi, deps;\n     * see explanations below\n     */\n    public readonly SEMOD_NJPLHOR = 2;\n    /** Daily dpsi and deps from file are */\n    public readonly SEMOD_JPLHOR_LONG_AGREEMENT = 1;\n    /**\n     * Limited to 1962 - today.JPL uses the first and last value for all dates\n     * beyond this time range.\n     */\n    public readonly SEMOD_JPLHOR_DEFAULT = this.SEMOD_JPLHOR_LONG_AGREEMENT;\n    /**\n     * Note, currently this is the only option for SEMOD_JPLHOR..\n     * SEMOD_JPLHOR_LONG_AGREEMENT, if combined with SEFLG_JPLHOR provides good\n     * agreement with JPL Horizons for 9998 BC(-9997) until 9999 CE.\n     *\n     * - After 20 - jan - 1962 until today, Horizons uses correct dpsi and deps.\n     * - For dates before that, it uses dpsi and deps of 20 - jan - 1962, which\n     *   provides a continuous ephemeris, but does not make sense otherwise.\n     * - Before 1.1.1799 and after 1.1.2202, the precession model Owen 1990 is\n     *   used, as in Horizons. An agreement with Horizons to a couple of milli\n     *   arc seconds is achieved for the whole time range of Horizons. (BC 9998\n     *\n     *   - Mar - 20 to AD 9999 - Dec - 31 TT.) methods of approximation of JPL\n     *       Horizons ( iflag & SEFLG_JPLHORA), without dpsi, deps; see\n     *       explanations below\n     */\n    public readonly SEMOD_NJPLHORA = 3;\n    public readonly SEMOD_JPLHORA_1 = 1;\n    public readonly SEMOD_JPLHORA_2 = 2;\n    public readonly SEMOD_JPLHORA_3 = 3;\n    public readonly SEMOD_JPLHORA_DEFAULT = this.SEMOD_JPLHORA_3;\n    /**\n     * With SEMOD_JPLHORA_1, planetary positions are always calculated using a\n     * recent precession / nutation model.Frame bias matrix is applied with some\n     * correction to RA and another correction added to epsilon. this provides a\n     * very good approximation of JPL Horizons positions. With SEMOD_JPLHORA_2,\n     * frame bias as recommended by IERS Conventions 2003 and 2010 is not\n     * applied.Instead, dpsi_bias and deps_bias are added to nutation.this\n     * procedure is found in some older astronomical software. Equatorial\n     * apparent positions will be close to JPL Horizons (within a few mas)\n     * between 1962 and current years.Ecl.longitude will be good, latitude bad.\n     * With SEMOD_JPLHORA_3 works like SEMOD_JPLHORA_3 after 1962, but like\n     * SEFLG_JPLHOR before that.this allows EXTREMELY good agreement with JPL\n     * Horizons over its whole time range.\n     */\n    public readonly SEMOD_NDELTAT = 5;\n    public readonly SEMOD_DELTAT_STEPHENSON_MORRISON_1984 = 1;\n    public readonly SEMOD_DELTAT_STEPHENSON_1997 = 2;\n    public readonly SEMOD_DELTAT_STEPHENSON_MORRISON_2004 = 3;\n    public readonly SEMOD_DELTAT_ESPENAK_MEEUS_2006 = 4;\n    public readonly SEMOD_DELTAT_STEPHENSON_ETC_2016 = 5;\n    /** Public SEMOD_DELTAT_DEFAULT = SEMOD_DELTAT_ESPENAK_MEEUS_2006; */\n    public readonly SEMOD_DELTAT_DEFAULT =\n        this.SEMOD_DELTAT_STEPHENSON_ETC_2016;\n\n    /** The Swisseph Emscripten WebAssembly Module instance. */\n    public wasm: SwissephModule;\n\n    /**\n     * Creates a new instance.\n     *\n     * @param wasm - Swisseph Emscripten WebAssembly Module instance\n     */\n    constructor(wasm: SwissephModule) {\n        this.wasm = wasm;\n    }\n\n    /**\n     * Static method for creating and initializing the Swisseph module.\n     *\n     * @returns {Promise<SwissEPH>} : Promise<SwissEPH>\n     */\n    static async init(): Promise<SwissEPH> {\n        /** Swisseph Emscripten Module instance */\n        const wasm = await Module();\n        return new SwissEPH(wasm);\n    }\n\n    /**\n     * Converts horizontal coordinates (azimuth and altitude) to either ecliptic\n     * or equatorial coordinates, based on the observer's geographical position\n     * and desired coordinate system.\n     *\n     * @param tjd_ut - Julian day in Universal Time (UT).\n     * @param calc_flag - Calculation mode flag: `SE_HOR2ECL` for ecliptic or\n     *   `SE_HOR2EQU` for equatorial conversion.\n     * @param geopos - Observer's geographic position as a tuple: `[longitude,\n     *   latitude, elevation]` in degrees/meters.\n     * @param xin - Horizontal coordinates as `[azimuth, true altitude]` in\n     *   degrees.\n     * @returns {CelestialCoordinates2D} An Array of 2 numbers representing\n     *   celestial coordinates in either:\n     *\n     *   - **Ecliptic coordinates**: (λ, β) when using `SE_HOR2ECL`\n     *   - **Equatorial coordinates**: (α, δ) when using `SE_HOR2EQU`\n     *\n     *   Array format:\n     *\n     *   - `[0]` → longitude / right ascension\n     *   - `[1]` → latitude / declination\n     */\n    swe_azalt_rev(\n        tjd_ut: number,\n        calc_flag: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        xin: [azimuth: number, true_altitude: number]\n    ): CelestialCoordinates2D {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const xinPtr = ArrayPointer.from(this.wasm, \"double\", 2, xin);\n        const outPtr = ArrayPointer.alloc(this.wasm, \"double\", 2);\n        this.wasm._swe_azalt_rev(\n            tjd_ut,\n            calc_flag,\n            geoposPtr.ptr,\n            xinPtr.ptr,\n            outPtr.ptr\n        );\n        xinPtr.free();\n        geoposPtr.free();\n        return outPtr.readAndFree();\n    }\n\n    /**\n     * Converts ecliptic or equatorial coordinates into horizontal coordinates\n     * based on observer's geographic location and atmospheric conditions.\n     *\n     * @param {number} tjd_ut - Julian Day in Universal Time\n     * @param {number} calc_flag - Calculation flag: `0 (SE_ECL2HOR)` for\n     *   ecliptic, `1 (SE_EQU2HOR)` for equatorial to horizontal\n     * @param {[number, number, number]} geopos - Observer's geographic\n     *   coordinates as `[longitude, latitude, elevation]`\n     * @param {number} atpress - Atmospheric pressure in mbar/hPa (0 to\n     *   auto-estimate)\n     * @param {number} attemp - Atmospheric temperature in °C\n     * @param {[number, number, number]} xin - Input coordinates:\n     *   `[longitude/right ascension, latitude/declination, distance\n     *   (optional)]`\n     * @returns {HorizontalCoordinates} Array of 2 numbers representing\n     *   horizontal coordinates of a celestial object:\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Azimuth in degrees (measured from the south point, increasing\n     *       westwards)\n     *   - `[1]` → True altitude above the horizon in degrees\n     *   - `[2]` → Apparent altitude in degrees (corrected for atmospheric\n     *       refraction)\n     */\n    swe_azalt(\n        tjd_ut: number,\n        calc_flag: number,\n        geopos: [number, number, number],\n        atpress: number,\n        attemp: number,\n        xin: [number, number, number]\n    ): HorizontalCoordinates {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const xinPtr = ArrayPointer.from(this.wasm, \"double\", 3, xin);\n        const outPtr = ArrayPointer.alloc(this.wasm, \"double\", 3); // Allocate space for 3 doubles: az, alt, ap\n        this.wasm._swe_azalt(\n            tjd_ut,\n            calc_flag,\n            geoposPtr.ptr,\n            atpress,\n            attemp,\n            xinPtr.ptr,\n            outPtr.ptr\n        );\n        geoposPtr.free();\n        xinPtr.free();\n        return outPtr.readAndFree();\n    }\n\n    /**\n     * Computes the planetocentric apparent position of a target celestial body\n     * as seen from another planet. Useful for generating ephemerides from the\n     * perspective of a different planet — for example, Jupiter-centric\n     * positions of other planets.\n     *\n     * @param {number} tjd_et - Julian day (ephemeris time, TT)\n     * @param {number} ipl - Target body ID (e.g., SE_MARS)\n     * @param {number} iplctr - Center body ID (e.g., SE_JUPITER)\n     * @param {number} iflag - Computation flags (bitwise ORed SEFLG swe)\n     * @returns {CelestialCoordinatesAdvance} Array of 6 numbers representing\n     *   celestial position:\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True\n     *       Obliquity (ε) depending on flags\n     *   - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n     *       depending on flags\n     *   - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ)\n     *       depending on flags\n     *   - `[3]` → Longitude daily speed (λs), Right Ascension daily speed (αs),\n     *       Cartesian X speed (xs), or Nutation in obliquity (Δε)\n     *   - `[4]` → Latitude daily speed (βs), Declination daily speed (δs),\n     *       Cartesian Y speed (ys)\n     *   - `[5]` → Distance daily speed (aus), Cartesian Z speed (zs)\n     *\n     * @throws {SWEerror} - SWEerror If fails.\n     */\n    swe_calc_pctr(\n        tjd_et: number,\n        ipl: number,\n        iplctr: number,\n        iflag: number\n    ): CelestialCoordinatesAdvance {\n        const xxPtr = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serrPtr = StringPointer.alloc(this.wasm, this.AS_MAXCH); // Predefined buffer length for error strings\n        const flag = this.wasm._swe_calc_pctr(\n            tjd_et,\n            ipl,\n            iplctr,\n            iflag,\n            xxPtr.ptr,\n            serrPtr.ptr\n        );\n        const errorMsg = serrPtr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(errorMsg, flag);\n        return xxPtr.readAndFree();\n    }\n\n    /**\n     * Computes positions of planets, asteroids, lunar nodes, and apogees for a\n     * given Julian date.\n     *\n     * @param {number} tjd_ut - Julian day in universal time.\n     * @param {number} ipl - Target object ID (planet, asteroid, etc.).\n     * @param {number} iflag - Calculation flags controlling precision and\n     *   output format.\n     * @returns {CelestialCoordinatesAdvance} Array of 6 numbers representing\n     *   celestial position:\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True\n     *       Obliquity (ε) depending on flags\n     *   - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n     *       depending on flags\n     *   - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ)\n     *       depending on flags\n     *   - `[3]` → Longitude daily speed (λs), Right Ascension daily speed (αs),\n     *       Cartesian X speed (xs), or Nutation in obliquity (Δε)\n     *   - `[4]` → Latitude daily speed (βs), Declination daily speed (δs),\n     *       Cartesian Y speed (ys)\n     *   - `[5]` → Distance daily speed (aus), Cartesian Z speed (zs)\n     *\n     * @throws {SWEerror} - SWEerror If fails.\n     */\n    swe_calc_ut(\n        tjd_ut: number,\n        ipl: number,\n        iflag: number\n    ): CelestialCoordinatesAdvance {\n        const xxPtr = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serrPtr = StringPointer.alloc(\n            this.wasm,\n            this.AS_MAXCH\n        ); /** Error buffer (char *) */\n        const flag = this.wasm._swe_calc_ut(\n            tjd_ut,\n            ipl,\n            iflag,\n            xxPtr.ptr,\n            serrPtr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serrPtr.readAndFree(), flag);\n        return xxPtr.readAndFree();\n    }\n\n    /**\n     * Compute positions of planets, asteroids, lunar nodes and apogees from\n     * ephemeris time\n     *\n     * @param tjd_et - Julian day in terrestrial/ephemeris time.\n     * @param ipl - Target object ID (planet, asteroid, etc.).\n     * @param iflag - Calculation flags controlling precision and output format.\n     * @returns {CelestialCoordinatesAdvance} Array of 6 numbers representing\n     *   celestial position:\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True\n     *       Obliquity (ε) depending on flags\n     *   - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n     *       depending on flags\n     *   - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ)\n     *       depending on flags\n     *   - `[3]` → Longitude daily speed (λs), Right Ascension daily speed (αs),\n     *       Cartesian X speed (xs), or Nutation in obliquity (Δε)\n     *   - `[4]` → Latitude daily speed (βs), Declination daily speed (δs),\n     *       Cartesian Y speed (ys)\n     *   - `[5]` → Distance daily speed (aus), Cartesian Z speed (zs)\n     *\n     * @throws {SWEerror} - SWEerror If fails.\n     */\n    swe_calc(\n        tjd_et: number,\n        ipl: number,\n        iflag: number\n    ): CelestialCoordinatesAdvance {\n        const xxPtr = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serrPtr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_calc(\n            tjd_et,\n            ipl,\n            iflag,\n            xxPtr.ptr,\n            serrPtr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serrPtr.readAndFree(), flag);\n        return xxPtr.readAndFree();\n    }\n\n    /**\n     * Reset swisseph internals and cleanup file handles Not usually required as\n     * Node cleans after itself\n     */\n    swe_close(): void {\n        this.wasm._swe_close();\n    }\n\n    /**\n     * Transform between ecliptic and equatorial coordinate systems including\n     * motion speeds From equatorial to ecliptic, obliquity must be positive\n     * From ecliptic to equatorial, obliquity must be negative Distances are not\n     * affected and can be 0\n     *\n     * @param {CelestialCoordinatesAdvance} xpo - Input coordinates in ecliptic\n     *   or equatorial coordinates [lon, lat, dist, lonSpd, latSpd, distSpd]\n     * @param {number} eps - Positive or negative obliquity of the ecliptic\n     * @returns {CelestialCoordinatesAdvance} Array of 6 numbers representing\n     *   celestial position:\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True\n     *       Obliquity (ε) depending on flags\n     *   - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n     *       depending on flags\n     *   - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ)\n     *       depending on flags\n     *   - `[3]` → Longitude daily speed (λs), Right Ascension daily speed (αs),\n     *       Cartesian X speed (xs), or Nutation in obliquity (Δε)\n     *   - `[4]` → Latitude daily speed (βs), Declination daily speed (δs),\n     *       Cartesian Y speed (ys)\n     *   - `[5]` → Distance daily speed (aus), Cartesian Z speed (zs)\n     */\n    swe_cotrans_sp(\n        xpo: CelestialCoordinatesAdvance,\n        eps: number\n    ): CelestialCoordinatesAdvance {\n        const xpoPtr = ArrayPointer.from(this.wasm, \"double\", 6, xpo);\n        const xpnPtr = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        this.wasm._swe_cotrans_sp(xpoPtr.ptr, xpnPtr.ptr, eps);\n        xpoPtr.free();\n        return xpnPtr.readAndFree();\n    }\n\n    /**\n     * Transform between ecliptic and equatorial coordinate systems From\n     * equatorial to ecliptic, obliquity must be positive From ecliptic to\n     * equatorial, obliquity must be negative Distance is not affected and can\n     * be 0\n     *\n     * @param {CelestialCoordinates3D} xpo - Input coordinates in ecliptic or\n     *   equatorial coordinates [lon, lat, dist]\n     * @param {number} eps - Positive or negative obliquity of the ecliptic\n     * @returns {CelestialCoordinates3D} Array of 3 numbers representing\n     *   celestial position:\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True\n     *       Obliquity (ε) depending on flags\n     *   - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n     *       depending on flags\n     *   - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ)\n     *       depending on flags\n     */\n    swe_cotrans(\n        xpo: CelestialCoordinates3D,\n        eps: number\n    ): CelestialCoordinates3D {\n        const xpoPtr = ArrayPointer.from(this.wasm, \"double\", 3, xpo);\n        const xpnPtr = ArrayPointer.alloc(this.wasm, \"double\", 3);\n        this.wasm._swe_cotrans(xpoPtr.ptr, xpnPtr.ptr, eps);\n        xpoPtr.free();\n        return xpnPtr.readAndFree();\n    }\n\n    /**\n     * Convert centiseconds to degrees string\n     *\n     * @param csec - Centiseconds value\n     * @returns String\n     */\n    swe_cs2degstr(csec: number): string {\n        const out = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        this.wasm._swe_cs2degstr(csec, out.ptr);\n        return out.readAndFree();\n    }\n\n    /**\n     * Convert centiseconds to longitude or latitude string with user defined\n     * sign character\n     *\n     * @param csec - Centiseconds value\n     * @param pchar - Sign character for positive values\n     * @param mchar - Sign character for negative values\n     * @returns String\n     */\n    swe_cs2lonlatstr(csec: number, pchar: string, mchar: string): string {\n        const out = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        this.wasm._swe_cs2lonlatstr(\n            csec,\n            pchar.charCodeAt(0),\n            mchar.charCodeAt(0),\n            out.ptr\n        );\n        return out.readAndFree();\n    }\n\n    /**\n     * Convert centiseconds to time string\n     *\n     * @param csec - Centiseconds value\n     * @param sep - Separator character\n     * @param suppresszero - Omit seconds if they are zero\n     * @returns String\n     */\n    swe_cs2timestr(csec: number, sep: string, suppresszero: boolean): string {\n        const out = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        this.wasm._swe_cs2lonlatstr(\n            csec,\n            sep.charCodeAt(0),\n            TypeConverter.boolToC(suppresszero),\n            out.ptr\n        );\n        return out.readAndFree();\n    }\n\n    /**\n     * Normalize centiseconds to 360 degrees range\n     *\n     * @param csec - Centiseconds value\n     * @returns Number\n     */\n    swe_csnorm(csec: number): number {\n        return this.wasm._swe_csnorm(csec);\n    }\n\n    /**\n     * Round centiseconds to nearest second\n     *\n     * @param csec - Centiseconds value\n     * @returns Number\n     */\n    swe_csroundsec(csec: number): number {\n        return this.wasm._swe_csroundsec(csec);\n    }\n\n    /**\n     * Round double precision value to long integer\n     *\n     * @param x - Double value\n     * @returns Number\n     */\n    swe_d2l(csec: number): number {\n        return this.wasm._swe_d2l(csec);\n    }\n\n    /**\n     * Calculate julian day and check if the date is valid\n     *\n     * @param {number} year Full year\n     * @param {number} month Month (1-12)\n     * @param {number} day Day (1-31)\n     * @param {number} uttime Universal time in decimal Hour fraction (0-23.999)\n     * @param {char} calendar: Calendar system, 'g' for gregorian calendar, 'j'\n     *   for julian calendar calendar g[regorian]|j[ulian]|a[stro = greg]\n     * @returns {Number} Julian day numeric value\n     */\n    swe_date_conversion(\n        year: number,\n        month: number,\n        day: number,\n        uttime: number,\n        calendar: \"g\" | \"j\" = \"j\"\n    ): number {\n        const tjd = NumberPointer.alloc(this.wasm, \"double\");\n        const flag = this.wasm._swe_date_conversion(\n            year,\n            month,\n            day,\n            uttime,\n            TypeConverter.charToC(calendar),\n            tjd.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(\"illegal date\", flag);\n        return tjd.readAndFree();\n    }\n\n    /**\n     * Find which day of the week a particular date is\n     *\n     * @param {number} jd Julian day value in universal time number // 0 =\n     *   monday, ... 6 = sunday;\n     */\n    swe_day_of_week(jd: number): number {\n        return this.wasm._swe_day_of_week(jd);\n    }\n\n    /**\n     * Normalize degree value to 0-360 range\n     *\n     * @param {number} deg Degree value number // Normalized degree value;\n     */\n    swe_degnorm(deg: number): number {\n        return this.wasm._swe_degnorm(deg);\n    }\n\n    /**\n     * Obtain the Delta T value for a date using a particular ephemeris system\n     *\n     * @param {number} tjd Julian day value in Universal Time\n     * @param {number} iflag Ephemeris flag (SEFLG_SWIEPH, SEFLG_JPLEPH or\n     *   SEFLG_MOSEPH)\n     * @returns {number} Delta T value\n     * @throws {SWEerror} Warning message if any\n     */\n    swe_deltat_ex(tjd: number, iflag: number): number {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const out = this.wasm._swe_deltat_ex(tjd, iflag, serr.ptr);\n        const error = serr.readAndFree();\n        if (error.trim().length > 1) throw new SWEerror(error, this.ERR);\n        return out;\n    }\n\n    /**\n     * Obtain the Delta T value for a particular date\n     *\n     * @param {number} tjd Julian day value in Universal Time number // Delta T\n     *   value\n     */\n    swe_deltat(tjd: number): number {\n        return this.wasm._swe_deltat(tjd);\n    }\n\n    /**\n     * Arc distance between two points in centiseconds\n     *\n     * @param {number} csecP1 First point in centiseconds\n     * @param {number} csecP2 Second point in centiseconds number // Distance in\n     *   centiseconds from -64800000 to 64800000 (negative if second point is\n     *   ahead of the first)\n     */\n    swe_difcs2n(csecP1: number, csecP2: number): number {\n        return this.wasm._swe_difcs2n(csecP1, csecP2);\n    }\n\n    /**\n     * Arc distance between two points in centiseconds in a single direction\n     *\n     * @param {number} csec1 First point in centiseconds\n     * @param {number} csec2 Second point in centiseconds number // Distance in\n     *   centiseconds from 0 to 129600000\n     */\n    swe_difcsn(csecP1: number, csecP2: number): number {\n        return this.wasm._swe_difcsn(csecP1, csecP2);\n    }\n\n    /**\n     * Arc distance between two points in degrees\n     *\n     * @param {number} deg1 First point in degrees\n     * @param {number} deg2 Second point in degrees number // Distance in\n     *   degrees from -180 to 180 (negative if second point is ahead of the\n     *   first)\n     */\n    swe_difdeg2n(deg1: number, deg2: number): number {\n        return this.wasm._swe_difdeg2n(deg1, deg2);\n    }\n\n    /**\n     * Arc distance between two points in degrees in a single direction\n     *\n     * @param {number} deg1 First point in degrees\n     * @param {number} deg2 Second point in degrees number // Distance in\n     *   degrees from 0 to 360\n     */\n    swe_difdegn(deg1: number, deg2: number): number {\n        return this.wasm._swe_difdegn(deg1, deg2);\n    }\n\n    /**\n     * Get the visual magnitude (brightness) of a fixed star\n     *\n     * @param star: Name of the star to search for in the sefstars.txt file\n     * @returns Object { name: string, // The name of the matched star from the\n     *   sefstars.txt file data: number // The star's magnitude value } Star:\n     *   ${result.name} Magnitude: ${result.data} `)\n     */\n    swe_fixstar_mag(star: string): {\n        /** Star name The full star name as it appears in the sefstars.txt file */\n        star_name: string;\n        /** Magnitude value */\n        mag: number;\n    } {\n        const mag = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starPtr = StringPointer.from(this.wasm, star.length, star);\n        const flag = this.wasm._swe_fixstar_mag(starPtr.ptr, mag.ptr, serr.ptr);\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return {\n            star_name: starPtr.readAndFree(),\n            mag: mag.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculate the positions of a star from universal time\n     *\n     * @param star: Name of the star to search for in the sefstars.txt file\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} iflag Calculation flags\n     * @returns Object { name: string, // The name of the matched star from the\n     *   sefstars.txt file data: Array<number> [ lon, // Longitude, right\n     *   ascension or cartesian X lat, // Latitude, declination or cartesian Y\n     *   dist, // Distance in AU or cartesian Z lonSpd, // Daily speed for lon\n     *   latSpd, // Daily speed for lat distSpd, // Daily speed for dist ] }\n     *   Name: ${result.name} Longitude: ${result.data[0]} `);\n     */\n    swe_fixstar_ut(star: string, tjd_ut: number, iflag: number): FixstarResult {\n        const xx = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starPtr = StringPointer.from(this.wasm, star.length, star);\n        const flag = this.wasm._swe_fixstar_ut(\n            starPtr.ptr,\n            tjd_ut,\n            iflag,\n            xx.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return {\n            star_name: starPtr.readAndFree(),\n            data: xx.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculates the apparent position and motion of a fixed star for a given\n     * Julian date in ephemeris/terrestrial time.\n     *\n     * @param {string} star - Name of the star (must match an entry in\n     *   `sefstars.txt`).\n     * @param {number} tjd_et - Julian day number in ephemeris time (ET).\n     * @param {number} iflag - Bitwise flags that control the calculation mode\n     *   and output format.\n     * @returns {FixstarResult} An object containing:\n     *\n     *   - `star_name`: Full name of the resolved star from `sefstars.txt`\n     *   - `data`: Array of 6 numbers representing the star's celestial coordinates\n     *       and daily motion\n     *\n     * @throws {SWEerror} If the star cannot be found or the calculation fails.\n     */\n    swe_fixstar(star: string, tjd_et: number, iflag: number): FixstarResult {\n        const xx = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starPtr = StringPointer.from(this.wasm, star.length, star);\n        const flag = this.wasm._swe_fixstar(\n            starPtr.ptr,\n            tjd_et,\n            iflag,\n            xx.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) {\n            throw new SWEerror(serr.readAndFree(), flag);\n        }\n        return {\n            star_name: starPtr.readAndFree(),\n            data: xx.readAndFree(),\n        };\n    }\n\n    /**\n     * Get the visual magnitude (brightness) of a fixed star\n     *\n     * @param {string} star - Name of the star (must match an entry in\n     *   `sefstars.txt`).\n     * @returns {FixstarMagnitude} An object containing:\n     *\n     *   - `star_name`: Full name of the resolved star from `sefstars.txt`\n     *   - `magnitude`: The star's magnitude value\n     *\n     * @throws {SWEerror} If the star cannot be found or the calculation fails.\n     */\n    swe_fixstar2_mag(star: string): FixstarMagnitude {\n        const mag = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starPtr = StringPointer.from(this.wasm, star.length, star);\n        const flag = this.wasm._swe_fixstar2_mag(\n            starPtr.ptr,\n            mag.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return {\n            star_name: starPtr.readAndFree(),\n            magnitude: mag.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculate the positions of a star from universal time\n     *\n     * @param star: Name of the star to search for in the sefstars.txt file\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} iflag Calculation flags\n     * @returns Object { name: string, // The name of the matched star from the\n     *   sefstars.txt file data: Array<number> [ lon, // Longitude, right\n     *   ascension or cartesian X lat, // Latitude, declination or cartesian Y\n     *   dist, // Distance in AU or cartesian Z lonSpd, // Daily speed for lon\n     *   latSpd, // Daily speed for lat distSpd, // Daily speed for dist ] }\n     *   Name: ${result.name} Longitude: ${result.data[0]} `);\n     */\n    swe_fixstar2_ut(\n        star: string,\n        tjd_ut: number,\n        iflag: number\n    ): {\n        /** Star name The full star name as it appears in the sefstars.txt file */\n        star_name: string;\n        /**\n         * Array of values returned by the calculation By default the values are\n         * in ecliptic coordinates (longitude, latitude, distance) If\n         * `SEFLG_SPEED` or `SEFLG_SPEED3` are used, the daily speeds for each\n         * value are also retured, otherwise they are 0 If `SEFLG_EQUATORIAL` is\n         * used, the values are in equatorial coordinates instead (right\n         * ascension, declination, distance) If `SELFG_XYZ` is used, the values\n         * are in cartesian coordinates instead (X, Y, Z)\n         */\n        data: CelestialCoordinatesAdvance;\n    } {\n        const xx = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starPtr = StringPointer.from(this.wasm, star.length, star);\n        const flag = this.wasm._swe_fixstar2_ut(\n            starPtr.ptr,\n            tjd_ut,\n            iflag,\n            xx.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return {\n            star_name: starPtr.readAndFree(),\n            data: xx.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculate the positions of a star from ephemeris/terrestrial time\n     *\n     * @param star: Name of the star to search for in the sefstars.txt file\n     * @param {number} tjd_et Julian day in ephemeris/terrestrial time\n     * @param {number} iflag Calculation flags\n     * @returns Object { name: string, // The name of the matched star from the\n     *   sefstars.txt file data: Array<number> [ lon, // Longitude, right\n     *   ascension or cartesian X lat, // Latitude, declination or cartesian Y\n     *   dist, // Distance in AU or cartesian Z lonSpd, // Daily speed for lon\n     *   latSpd, // Daily speed for lat distSpd, // Daily speed for dist ] }\n     *   Name: ${result.name} Longitude: ${result.data[0]} `);\n     */\n    swe_fixstar2(\n        star: string,\n        tjd_et: number,\n        iflag: number\n    ): {\n        /** Star name The full star name as it appears in the sefstars.txt file */\n        star_name: string;\n        /**\n         * Array of values returned by the calculation By default the values are\n         * in ecliptic coordinates (longitude, latitude, distance) If\n         * `SEFLG_SPEED` or `SEFLG_SPEED3` are used, the daily speeds for each\n         * value are also retured, otherwise they are 0 If `SEFLG_EQUATORIAL` is\n         * used, the values are in equatorial coordinates instead (right\n         * ascension, declination, distance) If `SELFG_XYZ` is used, the values\n         * are in cartesian coordinates instead (X, Y, Z)\n         */\n        data: CelestialCoordinatesAdvance;\n    } {\n        const xx = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starPtr = StringPointer.from(this.wasm, star.length, star);\n        const flag = this.wasm._swe_fixstar2(\n            starPtr.ptr,\n            tjd_et,\n            iflag,\n            xx.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return {\n            star_name: starPtr.readAndFree(),\n            data: xx.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculates the **Gauquelin Sector** position of a celestial body or star\n     * based on the observer's location and time.\n     *\n     * ### Parameters\n     *\n     * @param tjd_ut - Julian day in Universal Time\n     * @param ipl - Planet/star ID (ignored if `starname` is provided)\n     * @param starname - Star name (C-style string), or `null` to use `ipl`\n     * @param iflag - Calculation flags (e.g., `SEFLG_SWIEPH`)\n     * @param imeth - Gauquelin sector calculation method\n     * @param geopos - Geographic coordinates `[longitude, latitude, elevation]`\n     * @param atpress - Atmospheric pressure in mbar/hPa\n     * @param attemp - Atmospheric temperature in Celsius\n     * @returns `number` — The Gauquelin sector (decimal, with fraction part)\n     *\n     *   ### Throws\n     *\n     *   Throws `SWEerror` if the underlying C function returns an error flag.\n     *\n     *   Const result = swe_gauquelin_sector(2413256, swe.SE_MOON, null,\n     *   swe.SEFLG_SWIEPH, 0, [15, 10, 0], 0, 0); console.log(`Sector:\n     *   ${Math.floor(result)}`);\n     */\n    swe_gauquelin_sector(\n        tjd_ut: number,\n        ipl: number,\n        starname: string | null,\n        iflag: number,\n        imeth: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        atpress: number,\n        attemp: number\n    ): number {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starnamePtr = starname\n            ? StringPointer.from(this.wasm, starname.length, starname)\n            : StringPointer.alloc(this.wasm, 0);\n        const dgsect = NumberPointer.alloc(this.wasm, \"double\");\n        const flag = this.wasm._swe_gauquelin_sector(\n            tjd_ut,\n            ipl,\n            starnamePtr.ptr,\n            iflag,\n            imeth,\n            geoposPtr.ptr,\n            atpress,\n            attemp,\n            dgsect.ptr,\n            serr.ptr\n        );\n        starnamePtr.free();\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return dgsect.readAndFree();\n    }\n\n    /**\n     * Computes the **Ayanamsa** value (precession correction) for a given\n     * Universal Time Julian Day, using the current ephemeris mode and optional\n     * nutation flags.\n     *\n     * ### Parameters\n     *\n     * @param tjd_ut - Julian day in Universal Time\n     * @param iflags - Ephemeris flags (e.g., `SEFLG_SWIEPH`, `SEFLG_JPLHOR`)\n     * @returns `number` — The computed Ayanamsa value (in degrees)\n     *\n     *   ### Throws\n     *\n     *   Throws `SWEerror` if computation fails or flags are incompatible.\n     *\n     *   Const result = swe_get_ayanamsa_ex_ut(2314234, swe.SEFLG_SWIEPH);\n     *   console.log(`Ayanamsa: ${result}`);\n     */\n    swe_get_ayanamsa_ex_ut(tjd_ut: number, iflags: number): number {\n        const ayan = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_get_ayanamsa_ex_ut(\n            tjd_ut,\n            iflags,\n            ayan.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return ayan.readAndFree();\n    }\n\n    /**\n     * Computes the **Ayanamsa** value (precession correction) for a given\n     * Ephemeris/Terrestrial time Julian Day, using the current ephemeris mode\n     * and optional nutation flags.\n     *\n     * ### Parameters\n     *\n     * @param tjd_ut - Julian day in ephemeris/terrestrial time.\n     * @param iflags - Ephemeris flags (e.g., `SEFLG_SWIEPH`, `SEFLG_JPLHOR`)\n     * @returns `number` — The computed Ayanamsa value (in degrees)\n     *\n     *   ### Throws\n     *\n     *   Throws `SWEerror` if computation fails or flags are incompatible.\n     *\n     *   Const result = swe_get_ayanamsa_ex(2314234, swe.SEFLG_SWIEPH);\n     *   console.log(`Ayanamsa: ${result}`);\n     */\n    swe_get_ayanamsa_ex(tjd_et: number, iflags: number): number {\n        const ayan = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_get_ayanamsa_ex_ut(\n            tjd_et,\n            iflags,\n            ayan.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return ayan.readAndFree();\n    }\n\n    /**\n     * Returns the name of a predefined **Ayanamsa** based on its constant ID.\n     *\n     * ### Parameters\n     *\n     * @param isidmode - Ayanamsa ID (e.g., `SE_SIDM_LAHIRI`, `SE_SIDM_RAMAN`,\n     *   etc.)\n     * @returns `string` — The name of the corresponding Ayanamsa\n     */\n    swe_get_ayanamsa_name(isidmode: number): string {\n        return this.wasm.UTF8ToString(\n            this.wasm._swe_get_ayanamsa_name(isidmode)\n        );\n    }\n\n    /**\n     * Computes the **Ayanamsa** (precession correction) value for a given\n     * Julian day in **Universal Time** without considering nutation.\n     *\n     * ### Parameters\n     *\n     * @param tjd_ut - Julian Day in Universal Time (UT)\n     * @returns `number` — Ayanamsa value in degrees for the given date\n     */\n    swe_get_ayanamsa_ut(tjd_ut: number): number {\n        return this.wasm._swe_get_ayanamsa_ut(tjd_ut);\n    }\n\n    /**\n     * Computes the **Ayanamsa** (precession correction) value for a given\n     * Julian day in **Ephemeris Time (ET)**, without accounting for nutation.\n     *\n     * ### Parameters\n     *\n     * @param tjd_et - Julian Day in Ephemeris/Terrestrial Time (ET)\n     * @returns `number` — Ayanamsa value in degrees for the specified date\n     */\n    swe_get_ayanamsa(tjd_et: number): number {\n        return this.wasm._swe_get_ayanamsa(tjd_et);\n    }\n\n    /**\n     * Retrieves metadata about the **most recently used ephemeris file** of a\n     * given type. this function must be called _after_ a successful ephemeris\n     * calculation (e.g., `calc()` or `swe_calc_ut()`).\n     *\n     * ### Parameters\n     *\n     * @param ifno - Ephemeris file type index (0 for planetary, etc.)\n     * @returns `Object` — Ephemeris file metadata: { path: string; // Absolute\n     *   or relative path to the ephemeris file used start: number; // Start\n     *   Julian Day of ephemeris data in the file end: number; // End Julian Day\n     *   of ephemeris data in the file denum: number; // JPL DE version number\n     *   used (e.g., 431) }\n     *\n     *   // Perform a calculation to ensure ephemeris file is loaded calc(2342342,\n     *   swe.SE_VENUS, swe.SEFLG_SWIEPH);\n     */\n    swe_get_current_file_data(ifno: number): {\n        /** Path to ephemeris file */\n        path: string;\n        /** Ephemeris start date for this file */\n        start: number;\n        /** Ephemeris end date for this file */\n        end: number;\n        /** JPL ephemeris version used to generate the file */\n        denum: number;\n    } {\n        const tfstart = NumberPointer.alloc(this.wasm, \"double\");\n        const tfend = NumberPointer.alloc(this.wasm, \"double\");\n        const denum = NumberPointer.alloc(this.wasm, \"double\");\n\n        return {\n            path: this.wasm.UTF8ToString(\n                this.wasm._swe_get_current_file_data(\n                    ifno,\n                    tfstart.ptr,\n                    tfend.ptr,\n                    denum.ptr\n                )\n            ),\n            start: tfstart.readAndFree(),\n            end: tfend.readAndFree(),\n            denum: denum.readAndFree(),\n        };\n    }\n\n    /**\n     * Returns the file system path to the Swiss Ephemeris library currently in\n     * use.\n     *\n     * @returns `string` — Path to the Swiss Ephemeris shared library.\n     */\n    swe_get_library_path(): string {\n        const path = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        this.wasm._swe_get_library_path(path.ptr);\n        return path.readAndFree();\n    }\n\n    /**\n     * Get an object's orbital elements for a given date in\n     * ephemeris/terrestrial time\n     *\n     * @param tjd_et - Number // Julian day in ephemeris/terrestrial time\n     * @param ipl - Number // Object ID\n     * @param iflag - Number // Calculation flags\n     * @returns {OrbitalElements} Array of orbital elements\n     */\n    swe_get_orbital_elements(\n        tjd_et: number,\n        ipl: number,\n        iflag: number\n    ): OrbitalElements {\n        const dataPtr = ArrayPointer.alloc(this.wasm, \"double\", 50);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_get_orbital_elements(\n            tjd_et,\n            ipl,\n            iflag,\n            dataPtr.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        return toFixedLengthArray(dataPtr.readAndFree(), 17, 0);\n    }\n\n    /**\n     * Get the name of an astronomical object by its ID.\n     *\n     * @param {number} ipl Object ID (planet, asteroid, etc.)\n     * @returns {String} Name of the object\n     */\n    swe_get_planet_name(ipl: number): string {\n        const planet = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        this.wasm._swe_get_planet_name(ipl, planet.ptr);\n        return planet.readAndFree();\n    }\n\n    /**\n     * Get internal tidal acceleration\n     *\n     * @returns {number} Tidal acceleration\n     */\n    swe_get_tid_acc(): number {\n        return this.wasm._swe_get_tid_acc();\n    }\n\n    /**\n     * Obtain additional data used for calculation of heliacal risings and\n     * settings\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number[]} dgeo Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @param {number[]} datm Atmospheric conditions [pressure, temperature,\n     *   humidity, meteorological range]\n     * @param {number[]} dobs Observer description [age, sellen ratio, optical\n     *   type, optical magnification, optical aperture, optical transmission]\n     * @param object_name: Name of fixed star or planet\n     * @param {number} event_type Event type\n     * @param {number} hel_flag Calculation flag\n     * @returns {HeliacalPhenomena} Detailed heliacal visibility data\n     */\n    swe_heliacal_pheno_ut(\n        tjd_ut: number,\n        dgeo: [longitude: number, latitude: number, elevation: number],\n        datm: [\n            pressure: number,\n            temperature: number,\n            humidity: number,\n            meteorological_range: number,\n        ],\n        dobs: [\n            age: number,\n            sellen_ratio: number,\n            optical_type: number,\n            optical_magnification: number,\n            optical_aperture: number,\n            optical_transmission: number,\n        ],\n        object_name: string,\n        event_type: number,\n        hel_flag: number\n    ): HeliacalPhenomena {\n        const dgeoPtr = ArrayPointer.from(this.wasm, \"double\", 3, dgeo);\n        const datmPtr = ArrayPointer.from(this.wasm, \"double\", 4, datm);\n        const dobsPtr = ArrayPointer.from(this.wasm, \"double\", 6, dobs);\n        const object_namePtr = StringPointer.from(\n            this.wasm,\n            object_name.length,\n            object_name\n        );\n        const retPtr = ArrayPointer.alloc(this.wasm, \"double\", 50);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n\n        const flag = this.wasm._swe_heliacal_pheno_ut(\n            tjd_ut,\n            dgeoPtr.ptr,\n            datmPtr.ptr,\n            dobsPtr.ptr,\n            object_namePtr.ptr,\n            event_type,\n            hel_flag,\n            retPtr.ptr,\n            serr.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(serr.readAndFree(), flag);\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        dgeoPtr.free();\n        datmPtr.free();\n        dobsPtr.free();\n        object_namePtr.free();\n        return toFixedLengthArray(retPtr.readAndFree(), 30, 0);\n    }\n\n    /**\n     * Calculate the Julian day of the next heliacal phenomenon after a given UT\n     * start date. It works between geographic latitudes 60 South and 60 North.\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number[]} dgeo Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @param {number[]} datm Atmospheric conditions [pressure, temperature,\n     *   humidity, meteorological range]\n     * @param {number[]} dobs Observer description [age, sellen ratio, optical\n     *   type, optical magnification, optical aperture, optical transmission]\n     * @param object_name: Name of fixed star or planet\n     * @param {number} event_type Event type\n     * @param {number} hel_flag Calculation flag\n     * @returns {HeliacalVisibilityWindow} An array of Julian Dates related to\n     *   the visibility of a celestial object, depending on the selected\n     *   heliacal algorithm (`hel_flag`).\n     *\n     *   Array format:\n     *\n     *   - `[0]` → Start of visibility (`vis_start`)\n     *   - `[1]` → Optimum visibility (`vis_opt`) — May be `0` if `hel_flag >=\n     *       SE_HELFLAG_AV`\n     *   - `[2]` → End of visibility (`vis_end`) — May be `0` if `hel_flag >=\n     *       SE_HELFLAG_AV`\n     */\n    swe_heliacal_ut(\n        tjd_ut: number,\n        dgeo: [longitude: number, latitude: number, elevation: number],\n        datm: [\n            pressure: number,\n            temperature: number,\n            humidity: number,\n            meteorological_range: number,\n        ],\n        dobs: [\n            age: number,\n            sellen_ratio: number,\n            optical_type: number,\n            optical_magnification: number,\n            optical_aperture: number,\n            optical_transmission: number,\n        ],\n        object_name: string,\n        event_type: number,\n        hel_flag: number\n    ): HeliacalVisibilityWindow {\n        const dgeoPtr = ArrayPointer.from(this.wasm, \"double\", 3, dgeo);\n        const datmPtr = ArrayPointer.from(this.wasm, \"double\", 4, datm);\n        const dobsPtr = ArrayPointer.from(this.wasm, \"double\", 6, dobs);\n        const object_namePtr = StringPointer.from(\n            this.wasm,\n            object_name.length,\n            object_name\n        );\n        const retPtr = ArrayPointer.alloc(this.wasm, \"double\", 50);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n\n        const flag = this.wasm._swe_heliacal_ut(\n            tjd_ut,\n            dgeoPtr.ptr,\n            datmPtr.ptr,\n            dobsPtr.ptr,\n            object_namePtr.ptr,\n            event_type,\n            hel_flag,\n            retPtr.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        dgeoPtr.free();\n        datmPtr.free();\n        dobsPtr.free();\n        object_namePtr.free();\n        return toFixedLengthArray(retPtr.readAndFree(), 3, 0);\n    }\n\n    /**\n     * Compute a planets heliocentric crossing over some longitude\n     *\n     * @param {number} ipl Object ID\n     * @param {number} x2cross Longitude point to search for\n     * @param {number} jd_ut Start date in julian days in universal time\n     * @param {number} flag Calculation flag\n     * @param {number} dir Search direction, 0 = forwards, -1 = backwards date:\n     *   number // Next crossing date in julian days in universal time\n     */\n    swe_helio_cross_ut(\n        ipl: number,\n        x2cross: number,\n        jd_ut: number,\n        iflag: number,\n        dir: number\n    ): number {\n        const jd_cross = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_helio_cross_ut(\n            ipl,\n            x2cross,\n            jd_ut,\n            iflag,\n            dir,\n            jd_cross.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return jd_cross.readAndFree();\n    }\n\n    /**\n     * Compute a planets heliocentric crossing over some longitude\n     *\n     * @param {number} ipl Object ID\n     * @param {number} x2cross Longitude point to search for\n     * @param {number} jd_et Start date in julian days in ephemeris/terrestrial\n     *   time\n     * @param {number} flag Calculation flag\n     * @param {number} dir Search direction, 0 = forwards, -1 = backwards\n     * @returns Object { date: number // Next crossing date in julian days in\n     *   ephemeris/terrestrial time }\n     */\n    swe_helio_cross(\n        ipl: number,\n        x2cross: number,\n        jd_et: number,\n        iflag: number,\n        dir: number\n    ): number {\n        const jd_cross = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_helio_cross(\n            ipl,\n            x2cross,\n            jd_et,\n            iflag,\n            dir,\n            jd_cross.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return jd_cross.readAndFree();\n    }\n\n    /**\n     * Get the name of a house system\n     *\n     * @param hsys: House system ID House system name\n     */\n    swe_house_name(hsys: HouseSystems): string {\n        return this.wasm.UTF8ToString(\n            this.wasm._swe_house_name(hsys.charCodeAt(0))\n        );\n    }\n\n    /**\n     * Calculate the house position of an object this function attempts to\n     * obtain a visually accurate house position by also taking\n     * latitude/declination into account\n     *\n     * @param {number} armc Right ascension\n     * @param {number} geolat Geographic latitude\n     * @param {number} eps Obliquity of the ecliptic\n     * @param hsys: House system ID\n     * @param {number[]} xpin Object position in ecliptic tropical coordinates\n     *   [longitude, latitude]\n     * @returns {number} House position including fraction\n     */\n    swe_house_pos(\n        armc: number,\n        geolat: number,\n        eps: number,\n        hsys: HouseSystems,\n        xpin: [longitude: number, latitude: number]\n    ): number {\n        const xpinPtr = ArrayPointer.from(this.wasm, \"double\", 2, xpin);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const house = this.wasm._swe_house_pos(\n            armc,\n            geolat,\n            eps,\n            hsys.charCodeAt(0),\n            xpinPtr.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (error.trim().length > 1) throw new SWEerror(error, this.ERR);\n        return house;\n    }\n\n    /**\n     * Calculate houses and other points from right ascension and obliquity\n     * including momentary motion speeds this function can be used to calculate\n     * houses without a date, such as composite houses It also returns an error\n     * message in case something goes wrong\n     *\n     * @param {number} armc Right ascension of the midheaven\n     * @param {number} geolat Geographic latitude\n     * @param {number} eps Obliquity of the ecliptic\n     * @param {string} hsys: House system ID\n     * @param {number} decl? Declination of the Sun (sunshine/makransky houses\n     *   only)\n     * @returns Object { data: Object { houses: Array<number> [ house_1: number,\n     *   // Longitude of the first house house_2: number, // Longitude of the\n     *   second house house_3: number, // Longitude of the third house ... // 36\n     *   houses if gauquelin sectors, 12 houses otherwise ], ascmc:\n     *   Array<number> [ asc: number, // Ascendant mc: number, // Midheaven\n     *   armc: number, // Right Ascension of the midheaven vertex: number, //\n     *   Vertex equasc: number, // Equatorial Ascendant coasc1: number, //\n     *   Co-Ascendant (Walter Koch) coasc2: number, // Co-Ascendant (Michael\n     *   Munkasey) polasc: number, // Polar Ascendant (Michael Munkasey) ],\n     *   housesSpeed: Array<number> [ ... // Longitude speeds for the houses ],\n     *   AscendantPointsSpeed: Array<number> [ ... // Longitude speeds for the\n     *   points ] } }\n     */\n    swe_houses_armc_ex2<HS extends HouseSystems>(\n        armc: number,\n        geolat: number,\n        eps: number,\n        hsys: HS,\n        decl?: number\n    ): ConditionalReturnType<HS, { G: HousesEx<37> }, HousesEx<13>> {\n        const cuspLen = hsys === \"G\" ? 37 : 13;\n        const cusps = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const cusp_speed = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const ascmc = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const ascmc_speed = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        if (decl !== undefined && !isNaN(decl)) {\n            ascmc.add(9, decl);\n        }\n        const flag = this.wasm._swe_houses_armc_ex2(\n            armc,\n            geolat,\n            eps,\n            hsys.charCodeAt(0),\n            cusps.ptr,\n            ascmc.ptr,\n            cusp_speed.ptr,\n            ascmc_speed.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n\n        const ret = {} as ConditionalReturnType<\n            HS,\n            { G: HousesEx<37> },\n            HousesEx<13>\n        >;\n        ret.cusps = toFixedLengthArray(cusps.readAndFree(), cuspLen, 0);\n        ret.ascmc = toFixedLengthArray(ascmc.readAndFree(), 8, 0);\n        ret.cusp_speed = toFixedLengthArray(\n            cusp_speed.readAndFree(),\n            cuspLen,\n            0\n        );\n        ret.ascmc_speed = toFixedLengthArray(ascmc_speed.readAndFree(), 8, 0);\n        return ret;\n    }\n\n    /**\n     * Calculate houses and other points from right ascension and obliquity this\n     * function can be used to calculate houses without a date, such as\n     * composite houses\n     *\n     * @param {number} armc Right ascension of the midheaven\n     * @param {number} geolat Geographic latitude\n     * @param {number} eps Obliquity of the ecliptic\n     * @param hsys: House system ID\n     * @param {number} decl? Declination of the Sun (sunshine/makransky houses\n     *   only)\n     * @returns Object { data: Object { houses: Array<number> [ house_1: number,\n     *   // Longitude of the first house house_2: number, // Longitude of the\n     *   second house house_3: number, // Longitude of the third house ... // 36\n     *   houses if gauquelin sectors, 12 houses otherwise ], ascmc:\n     *   Array<number> [ asc: number, // Ascendant mc: number, // Midheaven\n     *   armc: number, // Right Ascension of the midheaven vertex: number, //\n     *   Vertex equasc: number, // Equatorial Ascendant coasc1: number, //\n     *   Co-Ascendant (Walter Koch) coasc2: number, // Co-Ascendant (Michael\n     *   Munkasey) polasc: number, // Polar Ascendant (Michael Munkasey) ] } }\n     */\n    swe_houses_armc<HS extends HouseSystems>(\n        armc: number,\n        geolat: number,\n        eps: number,\n        hsys: HS,\n        decl?: number\n    ): ConditionalReturnType<HS, { G: Houses<37> }, Houses<13>> {\n        const cuspLen = hsys === \"G\" ? 37 : 13;\n        const cusps = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const ascmc = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        if (decl !== undefined && !isNaN(decl)) {\n            ascmc.add(9, decl);\n        }\n        const flag = this.wasm._swe_houses_armc(\n            armc,\n            geolat,\n            eps,\n            hsys.charCodeAt(0),\n            cusps.ptr,\n            ascmc.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(\"swe_houses_armc\", flag);\n\n        const ret = {} as ConditionalReturnType<\n            HS,\n            { G: Houses<37> },\n            Houses<13>\n        >;\n        ret.cusps = toFixedLengthArray(cusps.readAndFree(), cuspLen, 0);\n        ret.ascmc = toFixedLengthArray(ascmc.readAndFree(), 8, 0);\n        return ret;\n    }\n\n    /**\n     * Calculate houses and other ascmc with support for calculation flags\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} iflag Calculation flags\n     * @param {number} geolat Geographic latitude\n     * @param {number} geolon Geographic longitude\n     * @param hsys: House system ID\n     * @returns Object { data: Object { houses: Array<number> [ house_1: number,\n     *   // Longitude of the first house house_2: number, // Longitude of the\n     *   second house house_3: number, // Longitude of the third house ... // 36\n     *   houses if gauquelin sectors, 12 houses otherwise ], ascmc:\n     *   Array<number> [ asc: number, // Ascendant mc: number, // Midheaven\n     *   armc: number, // Right Ascension of the midheaven vertex: number, //\n     *   Vertex equasc: number, // Equatorial Ascendant coasc1: number, //\n     *   Co-Ascendant (Walter Koch) coasc2: number, // Co-Ascendant (Michael\n     *   Munkasey) polasc: number, // Polar Ascendant (Michael Munkasey) ] } }\n     */\n    swe_houses_ex<HS extends HouseSystems>(\n        tjd_ut: number,\n        iflag: number,\n        geolat: number,\n        geolon: number,\n        hsys: HS\n    ): ConditionalReturnType<HS, { G: Houses<37> }, Houses<13>> {\n        const cuspLen = hsys === \"G\" ? 37 : 13;\n        const cusps = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const ascmc = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const flag = this.wasm._swe_houses_ex(\n            tjd_ut,\n            iflag,\n            geolat,\n            geolon,\n            hsys.charCodeAt(0),\n            cusps.ptr,\n            ascmc.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(\"swe_houses_ex\", flag);\n\n        const ret = {} as ConditionalReturnType<\n            HS,\n            { G: Houses<37> },\n            Houses<13>\n        >;\n        ret.cusps = toFixedLengthArray(cusps.readAndFree(), cuspLen, 0);\n        ret.ascmc = toFixedLengthArray(ascmc.readAndFree(), 8, 0);\n        return ret;\n    }\n\n    /**\n     * Calculate the houses and other ascmc with support for calculation flags\n     * and including momentary motion speeds this function also outputs an error\n     * message in case something goes wrong\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} iflag Calculation flags\n     * @param {number} geolat Geographic latitude\n     * @param {number} geolon Geographic longitude\n     * @param hsys: House system ID\n     * @returns Object { data: Object { houses: Array<number> [ house_1: number,\n     *   // Longitude of the first house house_2: number, // Longitude of the\n     *   second house house_3: number, // Longitude of the third house ... // 36\n     *   houses if gauquelin sectors, 12 houses otherwise ], ascmc:\n     *   Array<number> [ asc: number, // Ascendant mc: number, // Midheaven\n     *   armc: number, // Right Ascension of the midheaven vertex: number, //\n     *   Vertex equasc: number, // Equatorial Ascendant coasc1: number, //\n     *   Co-Ascendant (Walter Koch) coasc2: number, // Co-Ascendant (Michael\n     *   Munkasey) polasc: number, // Polar Ascendant (Michael Munkasey) ],\n     *   housesSpeed: Array<number> [ ... // Longitude speeds for the houses ],\n     *   AscendantPointsSpeeds: Array<number> [ ... // Longitude speeds for the\n     *   ascmc ] } }\n     */\n    swe_houses_ex2<HS extends HouseSystems>(\n        tjd_ut: number,\n        iflag: number,\n        geolat: number,\n        geolon: number,\n        hsys: HS\n    ): ConditionalReturnType<HS, { G: HousesEx<37> }, HousesEx<13>> {\n        const cuspLen = hsys === \"G\" ? 37 : 13;\n        const cusps = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const ascmc = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const cusp_speed = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const ascmc_speed = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_houses_ex2(\n            tjd_ut,\n            iflag,\n            geolat,\n            geolon,\n            hsys.charCodeAt(0),\n            cusps.ptr,\n            ascmc.ptr,\n            cusp_speed.ptr,\n            ascmc_speed.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n\n        const ret = {} as ConditionalReturnType<\n            HS,\n            { G: HousesEx<37> },\n            HousesEx<13>\n        >;\n        ret.cusps = toFixedLengthArray(cusps.readAndFree(), cuspLen, 0);\n        ret.ascmc = toFixedLengthArray(ascmc.readAndFree(), 8, 0);\n        ret.cusp_speed = toFixedLengthArray(\n            cusp_speed.readAndFree(),\n            cuspLen,\n            0\n        );\n        ret.ascmc_speed = toFixedLengthArray(ascmc_speed.readAndFree(), 8, 0);\n        return ret;\n    }\n\n    /**\n     * Calculate houses and other ascmc\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} geolat Geographic latitude\n     * @param {number} geolon Geographic longitude\n     * @param hsys: House system ID\n     * @returns Object { data: Object { houses: Array<number> [ house_1: number,\n     *   // Longitude of the first house house_2: number, // Longitude of the\n     *   second house house_3: number, // Longitude of the third house ... // 36\n     *   houses if gauquelin sectors, 12 houses otherwise ], ascmc:\n     *   Array<number> [ asc: number, // Ascendant mc: number, // Midheaven\n     *   armc: number, // Right Ascension of the midheaven vertex: number, //\n     *   Vertex equasc: number, // Equatorial Ascendant coasc1: number, //\n     *   Co-Ascendant (Walter Koch) coasc2: number, // Co-Ascendant (Michael\n     *   Munkasey) polasc: number, // Polar Ascendant (Michael Munkasey) ] } }\n     */\n    swe_houses<HS extends HouseSystems>(\n        tjd_ut: number,\n        geolat: number,\n        geolon: number,\n        hsys: HS\n    ): ConditionalReturnType<HS, { G: Houses<37> }, Houses<13>> {\n        const cuspLen = hsys === \"G\" ? 37 : 13;\n        const cusps = ArrayPointer.alloc(this.wasm, \"double\", 37);\n        const ascmc = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const flag = this.wasm._swe_houses(\n            tjd_ut,\n            geolat,\n            geolon,\n            hsys.charCodeAt(0),\n            cusps.ptr,\n            ascmc.ptr\n        );\n        if (flag < this.OK) throw new SWEerror(\"swe_houses\", flag);\n\n        const ret = {} as ConditionalReturnType<\n            HS,\n            { G: Houses<37> },\n            Houses<13>\n        >;\n        ret.cusps = toFixedLengthArray(cusps.readAndFree(), cuspLen, 0);\n        ret.ascmc = toFixedLengthArray(ascmc.readAndFree(), 8, 0);\n        return ret;\n    }\n\n    /**\n     * Convert julian day in ephemeris/terrestrial time to calendar date\n     *\n     * @param {number} tjd_et Julian day in ephemeris/terrestrial time\n     * @param {number} gregflag Calendar system, SE_GREG_CAL for gregorian\n     *   calendar, SE_JUL_CAL for julian calendar\n     * @returns Object { year: number; // Full year month: number; // Month\n     *   (1-12) day: number; // Day (1-31) hour: number; // Hour (0-23) minute:\n     *   number; // Minute (0-59) second: number; // Second including fraction\n     *   (0-59.99999) }\n     */\n    swe_jdet_to_utc(tjd_et: number, gregflag: number): DateTimeObject {\n        const year = NumberPointer.alloc(this.wasm, \"i32\");\n        const month = NumberPointer.alloc(this.wasm, \"i32\");\n        const day = NumberPointer.alloc(this.wasm, \"i32\");\n        const hour = NumberPointer.alloc(this.wasm, \"i32\");\n        const minute = NumberPointer.alloc(this.wasm, \"i32\");\n        const second = NumberPointer.alloc(this.wasm, \"double\");\n        this.wasm._swe_jdet_to_utc(\n            tjd_et,\n            gregflag,\n            year.ptr,\n            month.ptr,\n            day.ptr,\n            hour.ptr,\n            minute.ptr,\n            second.ptr\n        );\n        return {\n            year: year.readAndFree(),\n            month: month.readAndFree(),\n            day: day.readAndFree(),\n            hour: hour.readAndFree(),\n            minute: minute.readAndFree(),\n            second: second.readAndFree(),\n        };\n    }\n\n    /**\n     * Convert julian day in universal time to calendar date\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} gregflag Calendar system, SE_GREG_CAL for gregorian\n     *   calendar, SE_JUL_CAL for julian calendar\n     * @returns Object { year: number; // Full year month: number; // Month\n     *   (1-12) day: number; // Day (1-31) hour: number; // Hour (0-23) minute:\n     *   number; // Minute (0-59) second: number; // Second including fraction\n     *   (0-59.99999) }\n     */\n    swe_jdut1_to_utc(tjd_ut: number, gregflag: number): DateTimeObject {\n        const year = NumberPointer.alloc(this.wasm, \"i32\");\n        const month = NumberPointer.alloc(this.wasm, \"i32\");\n        const day = NumberPointer.alloc(this.wasm, \"i32\");\n        const hour = NumberPointer.alloc(this.wasm, \"i32\");\n        const minute = NumberPointer.alloc(this.wasm, \"i32\");\n        const second = NumberPointer.alloc(this.wasm, \"double\");\n        this.wasm._swe_jdut1_to_utc(\n            tjd_ut,\n            gregflag,\n            year.ptr,\n            month.ptr,\n            day.ptr,\n            hour.ptr,\n            minute.ptr,\n            second.ptr\n        );\n        return {\n            year: year.readAndFree(),\n            month: month.readAndFree(),\n            day: day.readAndFree(),\n            hour: hour.readAndFree(),\n            minute: minute.readAndFree(),\n            second: second.readAndFree(),\n        };\n    }\n\n    /**\n     * Convert a calendar date to julian day in universal time\n     *\n     * @param {number} year Full year\n     * @param {number} month Month (1-12)\n     * @param {number} day Day (1-31)\n     * @param {number} hour Hour with fraction (0-23.99999)\n     * @param {number} gregflag Calendar system, SE_GREG_CAL for gregorian\n     *   calendar, SE_JUL_CAL for julian calendar number // Julian day value in\n     *   universal time\n     */\n    swe_julday(\n        year: number,\n        month: number,\n        day: number,\n        hour: number,\n        gregflag: number\n    ): number {\n        return this.wasm._swe_julday(year, month, day, hour, gregflag);\n    }\n\n    /**\n     * Transform local apparent time to local mean time\n     *\n     * @param {number} tjd_lat Local apparent time in julian day in universal\n     *   time\n     * @param {number} geolon Geographic longitude\n     * @returns Object { error: string, // Error message in case of error data:\n     *   number // Local mean time in julian day in universal time }\n     */\n    swe_lat_to_lmt(tjd_lat: number, geolon: number): number {\n        const tjd_lmt = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_lat_to_lmt(\n            tjd_lat,\n            geolon,\n            tjd_lmt.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return tjd_lmt.readAndFree();\n    }\n\n    /**\n     * Transform local mean time to local apparent time\n     *\n     * @param {number} tjd_lmt Local mean time in julian day in universal time\n     * @param {number} geolon Geographic longitude\n     * @returns Object { error: string, // Error message in case of error data:\n     *   number // Local apparent time in julian day in universal time }\n     */\n    swe_lmt_to_lat(tjd_lmt: number, geolon: number): number {\n        const tjd_lat = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_lmt_to_lat(\n            tjd_lmt,\n            geolon,\n            tjd_lat.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return tjd_lat.readAndFree();\n    }\n\n    /**\n     * Get lunar eclipse data for a given date\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ifl Ephemeris flag\n     * @param {number[]} geopos Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @returns Object { flag: number, // ERR, eclipse type (SE_ECL_TOTAL,\n     *   SE_ECL_PENUMBRAL, SE_ECL_PARTIAL) or 0 if no eclipse error: string, //\n     *   Error message in case of error data: Array<number> [ umbral_mag, //\n     *   Umbral magnitude at jd penumbral_mag, // Penumbral magnitude -, //\n     *   Unused -, // Unused azimuth, // Azimuth of the moon at jd\n     *   true_altitude, // True altitude of the moon above horizon at jd\n     *   apparent_altitude, // Apparent altitude of the moon above horizon at jd\n     *   distance, // Distance of the moon from opposition in degrees\n     *   eclipse_mag, // Eclipse magnitude (same as umbral magnitude)\n     *   saros_number, // Saros series number (if available, otherwise\n     *   -99999999) saros_member // Saros series member number (if available,\n     *   otherwise -99999999) ] } type: ${result.flag} magnitude:\n     *   ${result.data[0]} `)\n     */\n    swe_lun_eclipse_how(\n        tjd_ut: number,\n        ifl: number,\n        geopos: [longitude: number, latitude: number, elevation: number]\n    ): LunarEclipseCharacteristics {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_lun_eclipse_how(\n            tjd_ut,\n            ifl,\n            geoposPtr.ptr,\n            attr.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return toFixedLengthArray(attr.readAndFree(), 11, 0);\n    }\n\n    /**\n     * Search for lunar eclipses at a given location\n     *\n     * @param {number} tjd_start Julian day in universal time to start searching\n     *   from\n     * @param {number} ifl Ephemeris flag\n     * @param {number[]} geopos Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @param backwards: Boolean // Search backwards in time instead\n     * @returns Object { flag: number, // ERR, eclipse type (SE_ECL_TOTAL,\n     *   SE_ECL_PENUMBRAL, SE_ECL_PARTIAL) or 0 if no eclipse found error:\n     *   string, // Error message in case of error data: Array<number> [\n     *   eclipse_max, // Time of maximum eclipse in jd -, // Unused\n     *   partial_start, // Time of partial phase start partial_end, // Time of\n     *   partial phase end total_start, // Time of totality start total_end, //\n     *   Time of totality end penumbral_start, // Time of penumbral phase start\n     *   penumbral_end, // Time of penumbral phase end rise, // Time of\n     *   moonrise, if it occurs during the eclipse set, // Time of moonset, if\n     *   it occurs during the eclipse ], Array: Array<number> [ umbral_mag, //\n     *   Umbral magnitude at jd penumbral_mag, // Penumbral magnitude -, //\n     *   Unused -, // Unused azimuth, // Azimuth of the moon at jd\n     *   true_altitude, // True altitude of the moon above horizon at jd\n     *   apparent_altitude, // Apparent altitude of the moon above horizon at jd\n     *   distance, // Distance of the moon from opposition in degrees\n     *   eclipse_mag, // Eclipse magnitude (same as umbral magnitude)\n     *   saros_number, // Saros series number (if available, otherwise\n     *   -99999999) saros_member // Saros series member number (if available,\n     *   otherwise -99999999) ] } type: ${result.flag} eclipse_max:\n     *   ${result.data[0]} `)\n     */\n    swe_lun_eclipse_when_loc(\n        tjd_start: number,\n        ifl: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        backwards: boolean\n    ): {\n        /** Array of eclipse timings */\n        data: EclipsePhaseTimesWithMoonriseSet;\n        /** Array of additional data about the lunar eclipse */\n        Array: LunarEclipseCharacteristics;\n    } {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_lun_eclipse_when_loc(\n            tjd_start,\n            ifl,\n            geoposPtr.ptr,\n            ret.ptr,\n            attr.ptr,\n            TypeConverter.boolToC(backwards),\n            serr.ptr\n        );\n        geoposPtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            data: ret.readAndFree(),\n            Array: toFixedLengthArray(attr.readAndFree(), 11, 0),\n        };\n    }\n\n    /**\n     * Search for lunar eclipses\n     *\n     * @param {number} tjd_start Julian day in universal time to start searching\n     *   from\n     * @param {number} ifl Ephemeris flag\n     * @param {number} ifltype Eclipse type (SE_ECL_TOTAL, SE_ECL_PENUMBRAL,\n     *   SE_ECL_PARTIAL or 0 for any)\n     * @param backwards: Boolean // Search backwards in time instead\n     * @returns Object { flag: number, // ERR, eclipse type (SE_ECL_TOTAL,\n     *   SE_ECL_PENUMBRAL, SE_ECL_PARTIAL) or 0 if no eclipse found error:\n     *   string, // Error message in case of error data: Array<number> [\n     *   eclipse_max, // Time of maximum eclipse in jd -, // Unused\n     *   partial_start, // Time of partial phase start partial_end, // Time of\n     *   partial phase end total_start, // Time of totality start total_end, //\n     *   Time of totality end penumbral_start, // Time of penumbral phase start\n     *   penumbral_end, // Time of penumbral phase end ] } type: ${result.flag}\n     *   eclipse_max: ${result.data[0]} `)\n     */\n    swe_lun_eclipse_when(\n        tjd_start: number,\n        ifl: number,\n        ifltype: number,\n        backwards: boolean\n    ): EclipsePhaseTimes {\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_lun_eclipse_when(\n            tjd_start,\n            ifl,\n            ifltype,\n            ret.ptr,\n            TypeConverter.boolToC(backwards),\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return toFixedLengthArray(ret.readAndFree(), 8, 0);\n    }\n\n    /**\n     * Search for lunar eclipses globally\n     *\n     * @param {number} tjd_start Julian day in universal time to start searching\n     *   from\n     * @param {number} ipl Object ID\n     * @param starname: String | null // Star name if star, otherwise set to\n     *   null\n     * @param {number} ifl Ephemeris flag\n     * @param {number} ifltype Eclipse type (SE_ECL_TOTAL, SE_ECL_ANNULAR,\n     *   SE_ECL_PARTIAL, SE_ECL_ANNULAR_TOTAL, SE_ECL_CENTRAL, SE_ECL_NONCENTRAL\n     *   or 0 for any)\n     * @param backwards: Boolean // Search backwards in time instead\n     * @returns Object { flag: number, // ERR, eclipse type (SE_ECL_TOTAL,\n     *   SE_ECL_ANNULAR, SE_ECL_PARTIAL, SE_ECL_ANNULAR_TOTAL, SE_ECL_CENTRAL,\n     *   SE_ECL_NONCENTRAL) or 0 if no eclipse found error: string, // Error\n     *   message in case of error data: Array<number> [ eclipse_max, // Time of\n     *   maximum eclipse in jd local_noon, // Time when eclipse takes place at\n     *   local apparent noon eclipse_start, // Time of eclipse start\n     *   eclipse_end, // Time of eclipse end total_start, // Time of totality\n     *   start total_end, // Time of totality end center_start, // Time of\n     *   center line start center_end, // Time of center line end annular_total,\n     *   // Time when annular-total eclipse becomes total total_annular // Time\n     *   when annular-total eclipse becomes annular again ] } type:\n     *   ${result.flag} eclipse_max: ${result.data[0]} `)\n     */\n    swe_lun_occult_when_glob(\n        tjd_start: number,\n        ipl: number,\n        starname: string | null | undefined,\n        ifl: number,\n        ifltype: number,\n        backwards: boolean\n    ): EclipsePhaseTimesAdvance {\n        const starnamePtr = starname\n            ? StringPointer.from(this.wasm, starname.length, starname)\n            : StringPointer.alloc(this.wasm, 0);\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_lun_occult_when_glob(\n            tjd_start,\n            ipl,\n            starnamePtr.ptr,\n            ifl,\n            ifltype,\n            ret.ptr,\n            TypeConverter.boolToC(backwards),\n            serr.ptr\n        );\n        starnamePtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return ret.readAndFree();\n    }\n\n    /**\n     * Search for lunar eclipses locally\n     *\n     * @param {number} tjd_start Julian day in universal time to start searching\n     *   from\n     * @param {number} ipl Object ID\n     * @param starname: String | null // Star name if star, otherwise set to\n     *   null\n     * @param {number} ifl Ephemeris flag\n     * @param {number[]} geopos Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @param backwards: Boolean // Search backwards in time instead\n     * @returns Object { flag: number, // ERR, eclipse/occulation type or 0 if\n     *   none found error: string, // Error message in case of error data:\n     *   Array<number> [ max_eclipse: number, // Time of maximum eclipse\n     *   first_contact: number, // Time of first contact second_contact: number,\n     *   // Time of second contact third_contact: number, // Time of third\n     *   contact fourth_contact: number, // Time of fourth contact sunrise:\n     *   number, // Time of sunrise between first and forth contact sunset:\n     *   number // Time of sunset between first and forth contact ], Array:\n     *   Array<number> [ solar_diameter: number, // Fraction of solar diameter\n     *   covered by moon (magnitude) lunar_diameter: number, // Ratio of lunar\n     *   diameter to solar one solar_disc: number, // Fraction of solar disc\n     *   covered by moon (obscuration) core_shadow: number, // Diameter of core\n     *   shadow in km sun_azimuth: number, // Azimuth of sun at tjd\n     *   true_altitude: number, // True altitude of sun above horizon at tjd\n     *   mean_altitude: number, // Apparent altitude of sun above horizon at tjd\n     *   elongation: number // Elongation of moon in degrees ] } type:\n     *   ${result.flag} eclipse_max: ${result.data[0]} `)\n     */\n    swe_lun_occult_when_loc(\n        tjd_start: number,\n        ipl: number,\n        starname: string | null,\n        ifl: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        backwards: boolean\n    ): {\n        /** Array of eclipse timings */\n        data: EclipseContactTimes;\n        /** Array of additional data about the lunar eclipse */\n        Array: EclipseCharacteristics;\n    } {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starnamePtr = starname\n            ? StringPointer.from(this.wasm, starname.length, starname)\n            : StringPointer.alloc(this.wasm, 0);\n        const flag = this.wasm._swe_lun_occult_when_loc(\n            tjd_start,\n            ipl,\n            starnamePtr.ptr,\n            ifl,\n            geoposPtr.ptr,\n            ret.ptr,\n            attr.ptr,\n            TypeConverter.boolToC(backwards),\n            serr.ptr\n        );\n        geoposPtr.free();\n        starnamePtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            data: toFixedLengthArray(ret.readAndFree(), 7, 0),\n            Array: toFixedLengthArray(attr.readAndFree(), 8, 0),\n        };\n    }\n\n    /**\n     * Get geographical coordinates for an eclipse\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ipl Object ID\n     * @param starname: String | null // Star name if star, otherwise set to\n     *   null\n     * @param {number} ifl Ephemeris flag\n     * @returns Object { flag: number, // ERR, eclipse/occulation type or 0 if\n     *   none found error: string, // Error message in case of error data:\n     *   Array<number> [ central_long: number, // Geographic longitude of\n     *   central line central_lat: number, // Geographic latitude of central\n     *   line north_umbra_long: number, // Geographic longitude of northern\n     *   limit of umbra north_umbra_lat: number, // Geographic latitude of\n     *   northern limit of umbra south_umbra_long: number, // Geographic\n     *   longitude of southern limit of umbra south_umbra_lat: number, //\n     *   Geographic latitude of southern limit of umbra north_penumbra_long:\n     *   number, // Geographic longitude of northern limit of penumbra\n     *   north_penumbra_lat: number, // Geographic latitude of northern limit of\n     *   penumbra south_penumbra_long: number, // Geographic longitude of\n     *   southern limit of penumbra south_penumbra_lat: number // Geographic\n     *   latitude of southern limit of penumbra ], Array: Array<number> [\n     *   diameter_fraction: number, // Fraction of object's diameter covered by\n     *   moon (magnitude) diameter_ratio: number, // Ratio of lunar diameter to\n     *   object's diameter disc_fraction: number, // Fraction of object's disc\n     *   covered by moon (obscuration) core_shadow: number, // Diameter of core\n     *   shadow in km azimuth: number, // Azimuth of object at tjd\n     *   true_altitude: number, // True altitude of object above horizon at tjd\n     *   apparent_altitude: number, // Apparent altitude of object above horizon\n     *   at tjd angular_distance: number, // Angular distance of moon from\n     *   object in degrees ] } type: ${result.flag} longitude: ${result.data[0]}\n     *   `)\n     */\n    swe_lun_occult_where(\n        tjd_ut: number,\n        ipl: number,\n        starname: string | null,\n        ifl: number\n    ): {\n        /** Array of eclipse coordinates */\n        data: EclipseGeographicCoords;\n        /** Array of additional data about the eclipse */\n        Array: [\n            /** Fraction of object's diameter covered by moon (magnitude) */\n            object_diameter: number,\n            /** Ratio of lunar diameter to object's diameter */\n            lunar_diameter: number,\n            /** Fraction of object's disc covered by moon (obscuration) */\n            object_disc: number,\n            /** Diameter of core shadow in km */\n            core_shadow: number,\n            /** Azimuth of object at tjd */\n            object_azimuth: number,\n            /** True altitude of object above horizon at tjd */\n            true_altitude: number,\n            /** Apparent altitude of object above horizon at tjd */\n            apparent_altitude: number,\n            /** Angular distance of moon from object in degrees */\n            angular_distance: number,\n        ];\n    } {\n        const geopos = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starnamePtr = starname\n            ? StringPointer.from(this.wasm, starname.length, starname)\n            : StringPointer.alloc(this.wasm, 0);\n        const flag = this.wasm._swe_lun_occult_where(\n            tjd_ut,\n            ipl,\n            starnamePtr.ptr,\n            ifl,\n            geopos.ptr,\n            attr.ptr,\n            serr.ptr\n        );\n        starnamePtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            data: geopos.readAndFree(),\n            Array: toFixedLengthArray(attr.readAndFree(), 8, 0),\n        };\n    }\n\n    /**\n     * Compute the next Moon crossing over its node, by finding zero latitude\n     * crossing\n     *\n     * @param {number} jd_ut Start date in julian days in universal time\n     * @param {number} flag Calculation flag\n     * @returns Object { date: number, // Date of the crossing in julian days in\n     *   universal time error: string, // Error message if resulting date is\n     *   smaller than starting date longitude: number, // Ecliptic longitude\n     *   where the crossing happens latitude: number // Ecliptic latitude\n     *   precision margin for the crossing date }\n     */\n    swe_mooncross_node_ut(\n        jd_ut: number,\n        flag: number\n    ): {\n        /** Ecliptic longitude where the crossing happens */\n        longitude: number;\n        /** Ecliptic latitude margin of precision for the crossing date */\n        latitude: number;\n        /*\n         * next Moon crossing over node in UT\n         */\n        jd: number;\n    } {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const xlon = NumberPointer.alloc(this.wasm, \"double\");\n        const xlat = NumberPointer.alloc(this.wasm, \"double\");\n        const jd = this.wasm._swe_mooncross_node_ut(\n            jd_ut,\n            flag,\n            xlon.ptr,\n            xlat.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            jd,\n            longitude: xlon.readAndFree(),\n            latitude: xlat.readAndFree(),\n        };\n    }\n\n    /**\n     * Compute the next Moon crossing over its node, by finding zero latitude\n     * crossing\n     *\n     * @param {number} jd_et Start date in julian days in ephemeris/terrestrial\n     *   time\n     * @param {number} flag Calculation flag\n     * @returns Object { date: number, // Date of the crossing in julian days in\n     *   ephemeris/terrestrial time error: string, // Error message if resulting\n     *   date is smaller than starting date longitude: number, // Ecliptic\n     *   longitude where the crossing happens latitude: number // Ecliptic\n     *   latitude precision margin for the crossing date }\n     */\n    swe_mooncross_node(\n        jd_et: number,\n        flag: number\n    ): {\n        /** Ecliptic longitude where the crossing happens */\n        longitude: number;\n        /** Ecliptic latitude margin of precision for the crossing date */\n        latitude: number;\n        /*\n         * next Moon crossing over node in UT\n         */\n        jd: number;\n    } {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const xlon = NumberPointer.alloc(this.wasm, \"double\");\n        const xlat = NumberPointer.alloc(this.wasm, \"double\");\n        const jd = this.wasm._swe_mooncross_node(\n            jd_et,\n            flag,\n            xlon.ptr,\n            xlat.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            jd,\n            longitude: xlon.readAndFree(),\n            latitude: xlat.readAndFree(),\n        };\n    }\n\n    /**\n     * Compute Moon's crossing over some longitude\n     *\n     * @param {number} x2cross Ecliptic latitude position to search for\n     * @param {number} jd_ut Start date in julian days in universal time\n     * @param {number} flag Calculation flag\n     * @returns Object { date: number, // Date of the crossing in julian days in\n     *   universal time error: string, // Error message if resulting date is\n     *   smaller than starting date }\n     */\n    swe_mooncross_ut(x2cross: number, jd_ut: number, flag: number): number {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const jd = this.wasm._swe_mooncross_ut(x2cross, jd_ut, flag, serr.ptr);\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return jd;\n    }\n\n    /**\n     * Compute Moon's crossing over some longitude\n     *\n     * @param {number} x2cross Ecliptic latitude position to search for\n     * @param {number} jd_et Start date in julian days in ephemeris/terrestrial\n     *   time\n     * @param {number} flag Calculation flag\n     * @returns Object { date: number, // Date of the crossing in julian days in\n     *   ephemeris/terrestrial time error: string, // Error message if resulting\n     *   date is smaller than starting date }\n     */\n    swe_mooncross(x2cross: number, jd_et: number, flag: number): number {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const jd = this.wasm._swe_mooncross(x2cross, jd_et, flag, serr.ptr);\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return jd;\n    }\n\n    /**\n     * Calculate an object's nodes and apsides from universal time If the\n     * calculation method includes `SE_NODBIT_FOPOINT`, the `aphelion` field\n     * contains the values for the object's \"second focus\" instead\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ipl Object ID\n     * @param {number} iflag Calculation flags\n     * @param {number} method Calculation method flags\n     * @returns Object { flag: number, // Computed flags or ERR error: string,\n     *   // Error message in case of error data: Object { ascending:\n     *   Array<number> [ lon, // Longitude, right ascension, or cartesian X lat,\n     *   // Latitude, declination or cartesian Y dist, // Distance in AU or\n     *   cartesian Z lonSpd, // Daily speed for lon latSpd, // Daily speed for\n     *   lat distSpd, // Daily speed for dist ], descending: Array<number> [\n     *   lon, // Longitude, right ascension, or cartesian X lat, // Latitude,\n     *   declination or cartesian Y dist, // Distance in AU or cartesian Z\n     *   lonSpd, // Daily speed for lon latSpd, // Daily speed for lat distSpd,\n     *   // Daily speed for dist ], perihelion: Array<number> [ lon, //\n     *   Longitude, right ascension, or cartesian X lat, // Latitude,\n     *   declination or cartesian Y dist, // Distance in AU or cartesian Z\n     *   lonSpd, // Daily speed for lon latSpd, // Daily speed for lat distSpd,\n     *   // Daily speed for dist ], aphelion: Array<number> [ lon, // Longitude,\n     *   right ascension, or cartesian X lat, // Latitude, declination or\n     *   cartesian Y dist, // Distance in AU or cartesian Z lonSpd, // Daily\n     *   speed for lon latSpd, // Daily speed for lat distSpd, // Daily speed\n     *   for dist ], } }\n     */\n    swe_nod_aps_ut(\n        tjd_ut: number,\n        ipl: number,\n        iflag: number,\n        method: number\n    ): NodAps {\n        const asc = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const dsc = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const per = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const aph = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_nod_aps_ut(\n            tjd_ut,\n            ipl,\n            iflag,\n            method,\n            asc.ptr,\n            dsc.ptr,\n            per.ptr,\n            aph.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            ascending: asc.readAndFree(),\n            descending: dsc.readAndFree(),\n            perihelion: per.readAndFree(),\n            aphelion: aph.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculate an object's nodes and apsides from ephemeris/terrestrial time\n     * If the calculation method includes `SE_NODBIT_FOPOINT`, the `aphelion`\n     * field contains the values for the object's \"second focus\" instead\n     *\n     * @param {number} tjd_et Julian day in ephemeris/terrestrial time\n     * @param {number} ipl Object ID\n     * @param {number} iflag Calculation flags\n     * @param {number} method Calculation method flags\n     * @returns Object { flag: number, // Computed flags or ERR error: string,\n     *   // Error message in case of error data: Object { ascending:\n     *   Array<number> [ lon, // Longitude, right ascension, or cartesian X lat,\n     *   // Latitude, declination or cartesian Y dist, // Distance in AU or\n     *   cartesian Z lonSpd, // Daily speed for lon latSpd, // Daily speed for\n     *   lat distSpd, // Daily speed for dist ], descending: Array<number> [\n     *   lon, // Longitude, right ascension, or cartesian X lat, // Latitude,\n     *   declination or cartesian Y dist, // Distance in AU or cartesian Z\n     *   lonSpd, // Daily speed for lon latSpd, // Daily speed for lat distSpd,\n     *   // Daily speed for dist ], perihelion: Array<number> [ lon, //\n     *   Longitude, right ascension, or cartesian X lat, // Latitude,\n     *   declination or cartesian Y dist, // Distance in AU or cartesian Z\n     *   lonSpd, // Daily speed for lon latSpd, // Daily speed for lat distSpd,\n     *   // Daily speed for dist ], aphelion: Array<number> [ lon, // Longitude,\n     *   right ascension, or cartesian X lat, // Latitude, declination or\n     *   cartesian Y dist, // Distance in AU or cartesian Z lonSpd, // Daily\n     *   speed for lon latSpd, // Daily speed for lat distSpd, // Daily speed\n     *   for dist ], } }\n     */\n    swe_nod_aps(\n        tjd_et: number,\n        ipl: number,\n        iflag: number,\n        method: number\n    ): NodAps {\n        const asc = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const dsc = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const per = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const aph = ArrayPointer.alloc(this.wasm, \"double\", 6);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_nod_aps(\n            tjd_et,\n            ipl,\n            iflag,\n            method,\n            asc.ptr,\n            dsc.ptr,\n            per.ptr,\n            aph.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            ascending: asc.readAndFree(),\n            descending: dsc.readAndFree(),\n            perihelion: per.readAndFree(),\n            aphelion: aph.readAndFree(),\n        };\n    }\n\n    /**\n     * Get orbital maximum and minimum possible distances\n     *\n     * @param {number} tjd_et Julian day in ephemeris/terrestrial time\n     * @param {number} ipl Object ID\n     * @param {number} iflag Calculation flags\n     * @returns Object { error: string, // Error message or warning if any data:\n     *   Object { max: number, // maximum possible distance min: number, //\n     *   minimum possible distance true: number // current true distance } }\n     */\n    swe_orbit_max_min_true_distance(\n        tjd_et: number,\n        ipl: number,\n        iflag: number\n    ): {\n        /** Maximum possible distance */\n        max: number;\n        /** Minimum possible distance */\n        min: number;\n        /** Current true distance */\n        true: number;\n    } {\n        const dmax = NumberPointer.alloc(this.wasm, \"double\");\n        const dmin = NumberPointer.alloc(this.wasm, \"double\");\n        const dtrue = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_orbit_max_min_true_distance(\n            tjd_et,\n            ipl,\n            iflag,\n            dmax.ptr,\n            dmin.ptr,\n            dtrue.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            max: dmax.readAndFree(),\n            min: dmin.readAndFree(),\n            true: dtrue.readAndFree(),\n        };\n    }\n\n    /**\n     * Compute phase, phase angle, elongation, apparent diameter, apparent\n     * magnitude for the Sun, the Moon, all planets and asteroids\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ipl Object ID\n     * @param {number} iflag Calculation flags\n     * @returns Object { error: string, // Error message or warning if any data:\n     *   Array<number> [ phase_angle: number, // Phase angle (Earth-planet-sun)\n     *   phase: number, // Phase (illumined fraction of disc) elongation:\n     *   number, // Elongation of planet diameter: number, // Apparent diameter\n     *   of disc magnitude: number // Apparent magnitude ] }\n     */\n    swe_pheno_ut(\n        tjd_ut: number,\n        ipl: number,\n        iflag: number\n    ): [\n        /** Phase angle (Earth-planet-sun) */\n        phase_angle: number,\n        /** Phase (illumined fraction of disc) */\n        phase: number,\n        /** Elongation of planet */\n        elongation: number,\n        /** Apparent diameter of disc */\n        diameter: number,\n        /** Apparent magnitude */\n        magnitude: number,\n    ] {\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_pheno_ut(\n            tjd_ut,\n            ipl,\n            iflag,\n            attr.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return toFixedLengthArray(attr.readAndFree(), 5, 0);\n    }\n\n    /**\n     * Compute phase, phase angle, elongation, apparent diameter, apparent\n     * magnitude for the Sun, the Moon, all planets and asteroids\n     *\n     * @param {number} tjd_et Julian day in ephemeris/terrestrial time\n     * @param {number} ipl Object ID\n     * @param {number} iflag Calculation flags\n     * @returns Object { error: string, // Error message or warning if any data:\n     *   Array<number> [ phase_angle: number, // Phase angle (Earth-planet-sun)\n     *   phase: number, // Phase (illumined fraction of disc) elongation:\n     *   number, // Elongation of planet diameter: number, // Apparent diameter\n     *   of disc magnitude: number // Apparent magnitude ] }\n     */\n    swe_pheno(\n        tjd_et: number,\n        ipl: number,\n        iflag: number\n    ): [\n        /** Phase angle (Earth-planet-sun) */\n        phase_angle: number,\n        /** Phase (illumined fraction of disc) */\n        phase: number,\n        /** Elongation of planet */\n        elongation: number,\n        /** Apparent diameter of disc */\n        diameter: number,\n        /** Apparent magnitude */\n        magnitude: number,\n    ] {\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_pheno(\n            tjd_et,\n            ipl,\n            iflag,\n            attr.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return toFixedLengthArray(attr.readAndFree(), 5, 0);\n    }\n\n    /**\n     * Normalize radians to 0π-2π range\n     *\n     * @param {number} drad Degree value in radians number // Normalized radian\n     *   value\n     */\n    swe_radnorm(drad: number): number {\n        return this.wasm._swe_radnorm(drad);\n    }\n\n    /**\n     * Calculate true altitude from the apparent altitude or apparent altitude\n     * from true altitude Extended function also supports negative heights and\n     * more\n     *\n     * @param {number} inalt Input altitude in degrees above the horizon\n     * @param {number} geoalt Altitude of the observer above sea level in meters\n     * @param {number} atpress Atmospheric pressure in mbar/hpa\n     * @param {number} attemp Atmospheric temperature in celsius\n     * @param {number} lapse_rate (attemp/geoalt) = [°K/m]\n     * @param {number} calc_flag Calculation flag (SE_TRUE_TO_APP or\n     *   SE_APP_TO_TRUE)\n     * @returns Object { data: number, // Converted altitude extended:\n     *   Array<number> [ true_altitude, // True altitude if possible, otherwise\n     *   input value apparent_altitude, // Apparent altitude if possible,\n     *   otherwise input value refraction, // Refraction value dip // Dip of the\n     *   horizon ] }\n     */\n    swe_refrac_extended(\n        inalt: number,\n        geoalt: number,\n        atpress: number,\n        attemp: number,\n        lapse_rate: number,\n        calc_flag: number\n    ): {\n        /** Converted altitude value */\n        altitude: number;\n        /** Array containing additional output from altitude conversion */\n        extended: [\n            /** True altitude if possible, otherwise input value */\n            true_altitude: number,\n            /** Apparent altitude if possible, otherwise input value */\n            apparent_altitude: number,\n            /** Refraction value */\n            refraction: number,\n            /** Dip of the horizon */\n            dip: number,\n        ];\n    } {\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const altitude = this.wasm._swe_refrac_extended(\n            inalt,\n            geoalt,\n            atpress,\n            attemp,\n            lapse_rate,\n            calc_flag,\n            ret.ptr\n        );\n        return {\n            altitude,\n            extended: toFixedLengthArray(ret.readAndFree(), 4, 0),\n        };\n    }\n\n    /**\n     * Calculate true altitude from the apparent altitude or apparent altitude\n     * from true altitude\n     *\n     * @param {number} inalt Input altitude in degrees above the horizon\n     * @param {number} atpress Atmospheric pressure in mbar/hpa\n     * @param {number} attemp Atmospheric temperature in celsius\n     * @param {number} calc_flag Calculation flag (SE_TRUE_TO_APP or\n     *   SE_APP_TO_TRUE) number // Converted altitude\n     */\n    swe_refrac(\n        inalt: number,\n        atpress: number,\n        attemp: number,\n        calc_flag: number\n    ): number {\n        return this.wasm._swe_refrac(inalt, atpress, attemp, calc_flag);\n    }\n\n    /**\n     * Compute year, month, day and hour from a julian day number\n     *\n     * @param {number} tjd Julian day in universal time\n     * @param {number} gregflag Calendar system, SE_GREG_CAL for gregorian\n     *   calendar, SE_JUL_CAL for julian calendar\n     * @returns Object { year: number; month: number; day: number; hour: number;\n     *   }\n     */\n    swe_revjul(\n        tjd: number,\n        gregflag: number\n    ): {\n        /** Full year */\n        year: number;\n        /** Month (1-12) */\n        month: number;\n        /** Day (1-31) */\n        day: number;\n        /** Hour including fraction (0-23.99999) */\n        hour: number;\n    } {\n        const year = NumberPointer.alloc(this.wasm, \"i32\");\n        const month = NumberPointer.alloc(this.wasm, \"i32\");\n        const day = NumberPointer.alloc(this.wasm, \"i32\");\n        const hour = NumberPointer.alloc(this.wasm, \"double\");\n        this.wasm._swe_revjul(\n            tjd,\n            gregflag,\n            year.ptr,\n            month.ptr,\n            day.ptr,\n            hour.ptr\n        );\n        return {\n            year: year.readAndFree(),\n            month: month.readAndFree(),\n            day: day.readAndFree(),\n            hour: hour.readAndFree(),\n        };\n    }\n\n    /**\n     * Compute the times of rising, setting and meridian transits for all\n     * planets, asteroids, the moon, and the fixed stars this funcation also\n     * supports custom local horizon altitude\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ipl Object ID\n     * @param starname: String | null // Name of the star if a star is desired,\n     *   null otherwise\n     * @param {number} epheflag Ephemeris flag\n     * @param {number} rsmi Transit type (SE_CALC_RISE, SE_CALC_SET,\n     *   SE_CALC_MTRANSIT, SE_CALC_ITRANSIT) plus additional transit flags\n     * @param {number[]} geopos Geographic coordinates of the observer\n     *   [longitude, latitude, elevation]\n     * @param {number} atpress Atmospheric pressure in mbar/hpa\n     * @param {number} attemp Atmospheric temperature in celsius\n     * @param {number} horhgt Height of local horizon in degrees at the point\n     *   where the body rises or sets\n     * @returns Object { flag: number, // OK, ERR or -2 if circumpolar object\n     *   error: string, // Error message if any data: number // Transit time in\n     *   julian days in universal time }\n     */\n    swe_rise_trans_true_hor(\n        tjd_ut: number,\n        ipl: number,\n        starname: string | null,\n        epheflag: number,\n        rsmi: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        atpress: number,\n        attemp: number,\n        horhgt: number\n    ): number {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const ret = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starnamePtr = starname\n            ? StringPointer.from(this.wasm, starname.length, starname)\n            : StringPointer.alloc(this.wasm, 0);\n        const flag = this.wasm._swe_rise_trans_true_hor(\n            tjd_ut,\n            ipl,\n            starnamePtr.ptr,\n            epheflag,\n            rsmi,\n            geoposPtr.ptr,\n            atpress,\n            attemp,\n            horhgt,\n            ret.ptr,\n            serr.ptr\n        );\n        geoposPtr.free();\n        starnamePtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return ret.readAndFree();\n    }\n\n    /**\n     * Compute the times of rising, setting and meridian transits for all\n     * planets, asteroids, the moon, and the fixed stars\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ipl Object ID\n     * @param starname: String | null // Name of the star if a star is desired,\n     *   null otherwise\n     * @param {number} epheflag Ephemeris flag\n     * @param {number} rsmi Transit type (SE_CALC_RISE, SE_CALC_SET,\n     *   SE_CALC_MTRANSIT, SE_CALC_ITRANSIT) plus additional transit flags\n     * @param {number[]} geopos Geographic coordinates of the observer\n     *   [longitude, latitude, elevation]\n     * @param {number} atpress Atmospheric pressure in mbar/hpa\n     * @param {number} attemp Atmospheric temperature in celsius\n     * @returns Object { flag: number, // OK, ERR or -2 if circumpolar object\n     *   error: string, // Error message if any data: number // Transit time in\n     *   julian days in universal time }\n     */\n    swe_rise_trans(\n        tjd_ut: number,\n        ipl: number,\n        starname: string | null,\n        epheflag: number,\n        rsmi: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        atpress: number,\n        attemp: number\n    ): number {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const ret = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const starnamePtr = starname\n            ? StringPointer.from(this.wasm, starname.length, starname)\n            : StringPointer.alloc(this.wasm, 0);\n        const flag = this.wasm._swe_rise_trans(\n            tjd_ut,\n            ipl,\n            starnamePtr.ptr,\n            epheflag,\n            rsmi,\n            geoposPtr.ptr,\n            atpress,\n            attemp,\n            ret.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return ret.readAndFree();\n    }\n\n    /**\n     * Sets a custom Delta T value to be used by Swiss Ephemeris time-based\n     * functions.\n     *\n     * Once set, this Delta T value will be returned by `swe_deltat()` and\n     * `swe_deltat_ex()`, and will be used internally by all functions that\n     * require Universal Time (UT) as input, such as `swe_calc_ut()`, eclipse\n     * calculations, and heliacal functions.\n     *\n     * To revert to automatic Delta T calculation, pass `SE_DELTAT_AUTOMATIC` as\n     * the argument.\n     *\n     * @example\n     *     // Set custom Delta T value\n     *     swe.swe_set_delta_t_userdef(66.5);\n     *\n     *     // Reset to automatic Delta T\n     *     swe.swe_set_delta_t_userdef(swe.SE_DELTAT_AUTOMATIC);\n     *\n     * @param t_acc - Custom Delta T value in seconds. Use `SE_DELTAT_AUTOMATIC`\n     *   to reset to automatic mode.\n     */\n    swe_set_delta_t_userdef(t_acc: number): void {\n        return this.wasm._swe_set_delta_t_userdef(t_acc);\n    }\n\n    /**\n     * Loads ephemeris files from a remote or local path into WASM FS and sets\n     * the ephemeris path.\n     *\n     * @example\n     *     await swe.swe_set_ephe_path(\"https://unpkg.com/sweph-wasm/ephe/\", [\n     *         \"seas_18.se1\",\n     *         \"sepl_18.se1\",\n     *         \"semo_18.se1\",\n     *     ]);\n     *\n     * @param epheUrl - Base URL or directory path containing `.se1` ephemeris\n     *   files.\n     * @throws {SWEerror} If no ephemeris files are successfully loaded.\n     */\n    async swe_set_ephe_path(\n        epheUrl: string = \"https://unpkg.com/sweph-wasm/ephe/\",\n        fileNames: Array<string> = [\"seas_18.se1\", \"sepl_18.se1\", \"semo_18.se1\"]\n    ): Promise<void> {\n        const epheDir = \"/ephe\";\n        // Create ephemeris directory in WASM FS if it doesn't exist\n        if (!this.wasm.FS.analyzePath(epheDir, true).exists) {\n            this.wasm.FS.mkdir(epheDir);\n        }\n        const baseUrl = getBaseURLPath(epheUrl);\n        const loaded: string[] = [];\n        for (const { name, desc, category } of EpheFileMetadata) {\n            try {\n                if (fileNames && !fileNames.includes(name)) continue;\n                const response = await fetch(`${baseUrl}/${name}`);\n                if (response.ok && response.status === 200) {\n                    const buffer = await response.arrayBuffer();\n                    const data = new Uint8Array(buffer);\n                    // ✅ 2. Delete file if it already exists before creating\n                    const filePath = `${epheDir}/${name}`;\n                    if (this.wasm.FS.analyzePath(filePath).exists) {\n                        this.wasm.FS.unlink(filePath); // remove existing file\n                    }\n                    this.wasm.FS.createDataFile(\n                        epheDir,\n                        name,\n                        data,\n                        true, // readable\n                        true, // writable\n                        true // canOwn\n                    );\n                    loaded.push(\n                        `${name.padEnd(14)}: ${category.padEnd(28)} [${desc}]`\n                    );\n                }\n            } catch (err) {\n                console.error(`Skipped ${name} due to error:`, err);\n            }\n        }\n        if (loaded.length === 0) {\n            throw new SWEerror(\n                `No ephemeris files loaded from \"${epheUrl}\"`,\n                this.ERR\n            );\n        }\n        console.log(loaded.join(\"\\n\"));\n        console.log(`Total ephemeris files loaded: ${loaded.length}`);\n        // Set ephemeris path in Swiss Ephemeris\n        const ephePathPtr = StringPointer.from(\n            this.wasm,\n            epheDir.length,\n            epheDir\n        );\n        this.wasm._swe_set_ephe_path(ephePathPtr.ptr);\n        ephePathPtr.free();\n    }\n\n    /**\n     * Sets the filename of the JPL ephemeris file to be used by Swiss\n     * Ephemeris.\n     *\n     * By default, Swiss Ephemeris uses the file defined by `SE_FNAME_DFT`,\n     * typically `\"de431.eph\"` or `\"de406.eph\"`. If you want to use a different\n     * JPL ephemeris file (e.g., `\"de405.eph\"`), use this function to specify\n     * its name.\n     *\n     * The specified file must exist in the ephemeris path (e.g., `/ephe`) and\n     * have a maximum length of 256 bytes. If the filename exceeds this limit,\n     * it will be truncated, and errors may occur during subsequent ephemeris\n     * calculations.\n     *\n     * @param file - The name of the JPL ephemeris file to use (e.g.,\n     *   `\"de405.eph\"`).\n     */\n    swe_set_jpl_file(file: string): void {\n        const filePathPtr = StringPointer.from(this.wasm, file.length, file);\n        this.wasm._swe_set_jpl_file(filePathPtr.ptr);\n        filePathPtr.free();\n    }\n\n    /**\n     * Set ayanamsa for sidereal mode For predefined ayanamsas, set second and\n     * third parameters to 0\n     *\n     * @param {number} sid_mode Ayanamsa ID\n     * @param {number} t0 Reference date in jd_ut for custom ayanamsas\n     * @param {number} ayan_t0 Initial value in degrees for custom ayanamsas //\n     *   set ayanamsa to Lahiri swe_set_sid_mode(swe.SE_SIDM_LAHIRI, 0, 0) //\n     *   define custom ayanamsa as 25 degrees at J2000\n     *   swe_set_sid_mode(swe.SE_SIDM_USER, 2451545, 25)\n     */\n    swe_set_sid_mode(sid_mode: number, t0: number, ayan_t0: number): void {\n        this.wasm._swe_set_sid_mode(sid_mode, t0, ayan_t0);\n    }\n\n    /**\n     * Set custom tidal acceleration\n     *\n     * @param {number} t_acc Tidal acceleration value // set custom value\n     *   set_tid_acc(25.90); // set predefined value\n     *   set_tid_acc(swe.SE_TIDAL_DE403); // reset to auto\n     *   set_tid_acc(swe.SE_TIDAL_AUTOMATIC);\n     */\n    swe_set_tid_acc(t_acc: number): void {\n        this.wasm._swe_set_tid_acc(t_acc);\n    }\n\n    /**\n     * Set geographic coordinates for topocentric mode\n     *\n     * @param {number} geolon Geographic longitude in degrees\n     * @param {number} geolat Geographic latitude in degrees\n     * @param {number} elevation Elevation in meters // set observer to 124'30E,\n     *   23'30N, 1250 meters above sea level; set_topo(124.5, 23.5, 1250); //\n     *   call swe_with topocentric flag let result = calc(2342341, swe.SE_MOON,\n     *   swe.SEFLG_SWIEPH | swe.SEFLG_TOPOCTR)\n     */\n    swe_set_topo(geolon: number, geolat: number, elevation: number): void {\n        this.wasm._swe_set_topo(geolon, geolat, elevation);\n    }\n\n    /**\n     * Calculate sidereal time at the greenwich meridian\n     *\n     * @param {number} tjd_ut Julian day in universal time number // Sidereal\n     *   time in hours (0-23.99999)\n     */\n    swe_sidtime(tjd_ut: number): number {\n        return this.wasm._swe_sidtime(tjd_ut);\n    }\n\n    /**\n     * Calculate sidereal time at the greenwich meridian with custom obliquity\n     * and nutation\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} eps Obliquity of the ecliptic\n     * @param {number} nut Nutation number // Sidereal time in hours\n     *   (0-23.99999)\n     */\n    swe_sidtime0(tjd_ut: number, eps: number, nut: number): number {\n        return this.wasm._swe_sidtime0(tjd_ut, eps, nut);\n    }\n\n    /**\n     * Get solar eclipse data for a given date\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ifl Ephemeris flag\n     * @param {number[]} geopos Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @returns\n     *\n     *   Array< [ solar_diameter, // Fraction of solar diameter covered by moon\n     *   lunar_diameter, // Ratio of lunar diameter to solar one solar_disc, //\n     *   Fraction of the solar disc covered by moon (obscuration) core_shadow,\n     *   // Diameter of core shadow in km azimuth, // Azimuth of the sun at jd\n     *   true_altitude, // True altitude of the sun above horizon at jd\n     *   apparent_altitude, // Apparent altitude of the sun above horizon at jd\n     *   elongation, // Elongation of moon in degrees mag, // Eclipse magnitude\n     *   (same as solar_diameter if partial and lunar_diameter if annular or\n     *   total) saros_number, // Saros series number (if available, otherwise\n     *   -99999999) saros_member, // Saros series member number (if available,\n     *   otherwise -99999999) ]\n     *\n     * >\n     */\n    swe_sol_eclipse_how(\n        tjd_ut: number,\n        ifl: number,\n        geopos: [longitude: number, latitude: number, elevation: number]\n    ): EclipseAttributes {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_sol_eclipse_how(\n            tjd_ut,\n            ifl,\n            geoposPtr.ptr,\n            attr.ptr,\n            serr.ptr\n        );\n        geoposPtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return toFixedLengthArray(attr.readAndFree(), 11, 0);\n    }\n\n    /**\n     * Search for solar eclipses globally\n     *\n     * @param {number} tjd_start Julian day in universal time to start searching\n     *   from\n     * @param {number} ifl Ephemeris flag\n     * @param {number} ifltype Eclipse type (SE_ECL_TOTAL, SE_ECL_ANNULAR,\n     *   SE_ECL_PARTIAL, SE_ECL_ANNULAR_TOTAL, SE_ECL_CENTRAL, SE_ECL_NONCENTRAL\n     *   or 0 for any)\n     * @param backwards: Boolean // Search backwards in time instead\n     * @returns Object { flag: number, // ERR, eclipse type (SE_ECL_TOTAL,\n     *   SE_ECL_ANNULAR, SE_ECL_PARTIAL, SE_ECL_ANNULAR_TOTAL, SE_ECL_CENTRAL,\n     *   SE_ECL_NONCENTRAL) or 0 if no eclipse found error: string, // Error\n     *   message in case of error data: Array<number> [ eclipse_max, // Time of\n     *   maximum eclipse in jd local_noon, // Time when eclipse takes place at\n     *   local apparent noon eclipse_start, // Time of eclipse start\n     *   eclipse_end, // Time of eclipse end total_start, // Time of totality\n     *   start total_end, // Time of totality end center_start, // Time of\n     *   center line start center_end, // Time of center line end annular_total,\n     *   // Time when annular-total eclipse becomes total total_annular // Time\n     *   when annular-total eclipse becomes annular again ] } type:\n     *   ${result.flag} eclipse_max: ${result.data[0]} `)\n     */\n    swe_sol_eclipse_when_glob(\n        tjd_start: number,\n        ifl: number,\n        iftype: number,\n        backwards: boolean\n    ): EclipsePhaseTimesAdvance {\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_sol_eclipse_when_glob(\n            tjd_start,\n            ifl,\n            iftype,\n            ret.ptr,\n            TypeConverter.boolToC(backwards),\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return ret.readAndFree();\n    }\n\n    /**\n     * Calculates the local circumstances of the next (or previous) solar\n     * eclipse from a given location.\n     *\n     * @param {number} tjd_start - Julian Day (UT) to start the search from.\n     * @param {number} ifl - Ephemeris computation flag (e.g., SEFLG_SWIEPH).\n     * @param {[number, number, number]} geopos - Geographic coordinates:\n     *   [longitude (°), latitude (°), elevation (m)].\n     * @param {boolean} backwards - If true, search backwards in time.\n     * @returns {{\n     *     eclipseContactTimes: number[]; // Eclipse contact times:\n     *     // [0] = maximum eclipse\n     *     // [1] = first contact\n     *     // [2] = second contact\n     *     // [3] = third contact\n     *     // [4] = fourth contact\n     *     // [5] = sunrise between contacts (if any)\n     *     // [6] = sunset between contacts (if any)\n     *     eclipseAttributes: number[]; // Eclipse attributes:\n     *     // [0] = magnitude (fraction of Sun's diameter obscured)\n     *     // [1] = diameter ratio (Moon/Sun)\n     *     // [2] = obscuration (fraction of solar disc area)\n     *     // [3] = core shadow diameter (km)\n     *     // [4] = Sun's azimuth (°)\n     *     // [5] = true altitude (°)\n     *     // [6] = apparent altitude (°)\n     *     // [7] = Moon elongation (°)\n     *     // [8] = NASA magnitude\n     *     // [9] = Saros series number (or -99999999)\n     *     // [10] = Saros member number (or -99999999)\n     * }}\n     * @throws {SWEerror} - If the eclipse search fails or no eclipse is found.\n     */\n    swe_sol_eclipse_when_loc(\n        tjd_start: number,\n        ifl: number,\n        geopos: [longitude: number, latitude: number, elevation: number],\n        backwards: boolean\n    ): {\n        eclipseContactTimes: EclipseContactTimes;\n        eclipseAttributes: EclipseAttributes;\n    } {\n        const geoposPtr = ArrayPointer.from(this.wasm, \"double\", 3, geopos);\n        const tret = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_sol_eclipse_when_loc(\n            tjd_start,\n            ifl,\n            geoposPtr.ptr,\n            tret.ptr,\n            attr.ptr,\n            TypeConverter.boolToC(backwards),\n            serr.ptr\n        );\n        geoposPtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) {\n            throw new SWEerror(error, flag);\n        }\n        return {\n            eclipseContactTimes: toFixedLengthArray(tret.readAndFree(), 7, 0),\n            eclipseAttributes: toFixedLengthArray(attr.readAndFree(), 11, 0),\n        };\n    }\n\n    /**\n     * Get geographical coordinates for an eclipse\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number} ifl Ephemeris flag\n     * @returns Object { flag: number, // ERR, eclipse type or 0 if none found\n     *   error: string, // Error message in case of error data: Array<number> [\n     *   central_long: number, // Geographic longitude of central line\n     *   central_lat: number, // Geographic latitude of central line\n     *   north_umbra_long: number, // Geographic longitude of northern limit of\n     *   umbra north_umbra_lat: number, // Geographic latitude of northern limit\n     *   of umbra south_umbra_long: number, // Geographic longitude of southern\n     *   limit of umbra south_umbra_lat: number, // Geographic latitude of\n     *   southern limit of umbra north_penumbra_long: number, // Geographic\n     *   longitude of northern limit of penumbra north_penumbra_lat: number, //\n     *   Geographic latitude of northern limit of penumbra south_penumbra_long:\n     *   number, // Geographic longitude of southern limit of penumbra\n     *   south_penumbra_lat: number // Geographic latitude of southern limit of\n     *   penumbra ], Array: Array<number> [ diameter_fraction: number, //\n     *   Fraction of solar diameter covered by moon (magnitude) diameter_ratio:\n     *   number, // Ratio of lunar diameter to solar diameter disc_fraction:\n     *   number, // Fraction of solar disc covered by moon (obscuration)\n     *   core_shadow: number, // Diameter of core shadow in km azimuth: number,\n     *   // Azimuth of the sun at tjd true_altitude: number, // True altitude of\n     *   the sun above horizon at tjd apparent_altitude: number, // Apparent\n     *   altitude of the sun above horizon at tjd angular_distance: number, //\n     *   Angular distance of the moon from the sun in degrees mag, // Eclipse\n     *   magnitude (same as solar_diameteror lunar_diameter depending on the\n     *   eclipse type) saros_number, // Saros series number (if available,\n     *   otherwise -99999999) saros_member // Saros series member number (if\n     *   available, otherwise -99999999) ] } type: ${result.flag} longitude:\n     *   ${result.data[0]} `)\n     */\n    swe_sol_eclipse_where(\n        tjd_ut: number,\n        ifl: number\n    ): {\n        /** Array of eclipse coordinates */\n        data: EclipseGeographicCoords;\n        /** Array of additional data about the solar eclipse */\n        Array: EclipseAttributes;\n    } {\n        const geopos = ArrayPointer.alloc(this.wasm, \"double\", 10);\n        const attr = ArrayPointer.alloc(this.wasm, \"double\", 20);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_sol_eclipse_where(\n            tjd_ut,\n            ifl,\n            geopos.ptr,\n            attr.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return {\n            data: geopos.readAndFree(),\n            Array: toFixedLengthArray(attr.readAndFree(), 11, 0),\n        };\n    }\n\n    /**\n     * Compute Sun's crossing over some longitude\n     *\n     * @param {number} x2cross Ecliptic latitude position to search for\n     * @param {number} jd_ut Start date in julian days in universal time\n     * @param {number} flag Calculation flag\n     * @returns Object { date: number, // Date of the crossing in julian days in\n     *   universal time error: string, // Error message if resulting date is\n     *   smaller than starting date }\n     */\n    swe_solcross_ut(x2cross: number, jd_ut: number, flag: number): number {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const jd = this.wasm._swe_solcross_ut(x2cross, jd_ut, flag, serr.ptr);\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return jd;\n    }\n\n    /**\n     * Compute Sun's crossing over some longitude\n     *\n     * @param {number} x2cross Ecliptic latitude position to search for\n     * @param {number} jd_et Start date in julian days in ephemeris/terrestrial\n     *   time\n     * @param {number} flag Calculation flag\n     * @returns Object { date: number, // Date of the crossing in julian days in\n     *   ephemeris/terrestrial time error: string, // Error message if resulting\n     *   date is smaller than starting date }\n     */\n    swe_solcross(x2cross: number, jd_et: number, flag: number): number {\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const jd = this.wasm._swe_solcross(x2cross, jd_et, flag, serr.ptr);\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return jd;\n    }\n\n    /**\n     * Convert decimal degrees value to degree, minute, second, sign and/or\n     * nakshatras\n     *\n     * @param {number} ddeg Input degrees value\n     * @param {number} roundflag Split and rounding methods\n     * @returns Object { degree: number, // degrees value minute: number, //\n     *   minutes value second: number, // seconds value fraction: number, //\n     *   fraction of a second sign: number // sign or nakshatra number }\n     */\n    swe_split_deg(\n        ddeg: number,\n        roundflag: number\n    ): {\n        /** Degrees value */\n        degree: number;\n        /** Minutes value */\n        minute: number;\n        /** Seconds value */\n        second: number;\n        /** Seconds fraction value */\n        fraction: number;\n        /** Zodiac sign or nakshatra number */\n        sign: number;\n    } {\n        const deg = NumberPointer.alloc(this.wasm, \"i32\");\n        const min = NumberPointer.alloc(this.wasm, \"i32\");\n        const sec = NumberPointer.alloc(this.wasm, \"i32\");\n        const fraction = NumberPointer.alloc(this.wasm, \"double\");\n        const sign = NumberPointer.alloc(this.wasm, \"i32\");\n        this.wasm._swe_split_deg(\n            ddeg,\n            roundflag,\n            deg.ptr,\n            min.ptr,\n            sec.ptr,\n            fraction.ptr,\n            sign.ptr\n        );\n        return {\n            degree: deg.readAndFree(),\n            minute: min.readAndFree(),\n            second: sec.readAndFree(),\n            fraction: fraction.readAndFree(),\n            sign: sign.readAndFree(),\n        };\n    }\n\n    /**\n     * Calculate the equation of time (difference between LMT and LAT)\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @returns Object { error: string, // Error message if any data: number //\n     *   Value of the equation of time }\n     */\n    swe_time_equ(tjd_ut: number): number {\n        const e = NumberPointer.alloc(this.wasm, \"double\");\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_time_equ(tjd_ut, e.ptr, serr.ptr);\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return e.readAndFree();\n    }\n\n    /**\n     * Convert between local time and UTC using a timezone offset. For time\n     * zones east of Greenwich, d_timezone should be positive. For time zones\n     * west of Greenwich, d_timezone should be negative. To convert from UTC\n     * back to local time, invert d_timezone's sign.\n     *\n     * @param {number} iyear Full year\n     * @param {number} imonth Month (1-12)\n     * @param {number} iday Day (1-31)\n     * @param {number} ihour Hour (0-23)\n     * @param {number} imin Minute (0-59)\n     * @param {number} dsec Seconds including fraction (0-59.99999)\n     * @param {number} d_timezone Timezone offset in decimal hours (0-23.99999),\n     *   positive or negative\n     * @returns Object { year: number; // Full year month: number; // Month\n     *   (1-12) day: number; // Day (1-31) hour: number; // Hour (0-23) minute:\n     *   number; // Minute (0-59) second: number; // Second including fraction\n     *   (0-59.99999) }\n     */\n    swe_utc_time_zone(\n        iyear: number,\n        imonth: number,\n        iday: number,\n        ihour: number,\n        imin: number,\n        dsec: number,\n        d_timezone: number\n    ): DateTimeObject {\n        const year = NumberPointer.alloc(this.wasm, \"i32\");\n        const month = NumberPointer.alloc(this.wasm, \"i32\");\n        const day = NumberPointer.alloc(this.wasm, \"i32\");\n        const hour = NumberPointer.alloc(this.wasm, \"i32\");\n        const minute = NumberPointer.alloc(this.wasm, \"i32\");\n        const seconds = NumberPointer.alloc(this.wasm, \"double\");\n        this.wasm._swe_utc_time_zone(\n            iyear,\n            imonth,\n            iday,\n            ihour,\n            imin,\n            dsec,\n            d_timezone,\n            year.ptr,\n            month.ptr,\n            day.ptr,\n            hour.ptr,\n            minute.ptr,\n            seconds.ptr\n        );\n        return {\n            year: year.readAndFree(),\n            month: month.readAndFree(),\n            day: day.readAndFree(),\n            hour: hour.readAndFree(),\n            minute: minute.readAndFree(),\n            second: seconds.readAndFree(),\n        };\n    }\n\n    /**\n     * Convert UTC date and time to julian day in ephemeris time and julian day\n     * in universal time\n     *\n     * @param {number} iyear Full year\n     * @param {number} imonth Month (1-12)\n     * @param {number} iday Day (1-31)\n     * @param {number} ihour Hour (0-23)\n     * @param {number} imin Minute (0-59)\n     * @param {number} dsec Seconds including fraction (0-59.99999)\n     * @param {number} gregflag Calendar system, SE_GREG_CAL for gregorian\n     *   calendar, SE_JUL_CAL for julian calendar\n     * @returns Object {\n     *\n     *   Data: Array<number> [ et: number, // Julian day in ephemeris/terrestrial\n     *   time ut: number // Julian day in universal time ] }\n     */\n    swe_utc_to_jd(\n        iyear: number,\n        imonth: number,\n        iday: number,\n        ihour: number,\n        imin: number,\n        dsec: number,\n        gregflag: number\n    ): [et: number, ut: number] {\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 2);\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_utc_to_jd(\n            iyear,\n            imonth,\n            iday,\n            ihour,\n            imin,\n            dsec,\n            gregflag,\n            ret.ptr,\n            serr.ptr\n        );\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return ret.readAndFree();\n    }\n\n    /** Get current swisseph version Swisseph version */\n    swe_version(): string {\n        const version = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        this.wasm._swe_version(version.ptr);\n        return version.readAndFree();\n    }\n\n    /**\n     * Determine an object's visibility\n     *\n     * @param {number} tjd_ut Julian day in universal time\n     * @param {number[]} dgeo Geographic coordinates [longitude, latitude,\n     *   elevation]\n     * @param {number[]} datm Atmospheric conditions [pressure, temperature,\n     *   humidity, meteorological_range]\n     * @param {number[]} dobs Observer description [age, sellen ratio, optical\n     *   type, optical magnification, optical aperture, optical transmission]\n     * @param objectname: Name of fixed star or planet\n     * @param {number} helflag Calculation flags\n     * @returns Object { flag: number, // OK, ERR, -2 if object is below\n     *   horizon, 1 if scotopic vision or 2 if near limit photopic/scotopic\n     *   vision\n     *\n     *   Data: Array<number> [ visual_mag: number, // Limiting visual magnitude\n     *   (object is visible if this value is bigger than the object's magnitude\n     *   value) obj_altitude: number, // Altitude of the object obj_azimuth:\n     *   number, // Azimuth of the object sun_altitude: number, // Altitude of\n     *   the sun sun_azimuth: number, // Azimuth of the sun moon_altitude:\n     *   number, // Altitude of the moon moon_azimuth: number, // Azimuth of the\n     *   moon magnitude: number // The object's magnitude ] }\n     */\n    swe_vis_limit_mag(\n        tjd_ut: number,\n        dgeo: [longitude: number, latitude: number, elevation: number],\n        datm: [\n            pressure: number,\n            temperature: number,\n            humidity: number,\n            meteorological_range: number,\n        ],\n        dobs: [\n            age: number,\n            sellen_ratio: number,\n            optical_type: number,\n            optical_magnification: number,\n            optical_aperture: number,\n            optical_transmission: number,\n        ],\n        objectname: string,\n        helflag: number\n    ): [\n        /**\n         * Limiting visual magnitude (object is visible if this value is bigger\n         * than the object's magnitude value)\n         */\n        visual_mag: number,\n        /** Altitude of the object */\n        obj_altitude: number,\n        /** Azimuth of the object */\n        obj_azimuth: number,\n        /** Altitude of the sun */\n        sun_altitude: number,\n        /** Azimuth of the sun */\n        sun_azimuth: number,\n        /** Altitude of the moon */\n        moon_altitude: number,\n        /** Azimuth of the moon */\n        moon_azimuth: number,\n        /** The object's magnitude */\n        magnitude: number,\n    ] {\n        const dgeoPtr = ArrayPointer.from(this.wasm, \"double\", 3, dgeo);\n        const datmPtr = ArrayPointer.from(this.wasm, \"double\", 4, datm);\n        const dobsPtr = ArrayPointer.from(this.wasm, \"double\", 6, dobs);\n        const ret = ArrayPointer.alloc(this.wasm, \"double\", 8);\n        const objectnamePtr = StringPointer.from(\n            this.wasm,\n            objectname.length,\n            objectname\n        );\n        const serr = StringPointer.alloc(this.wasm, this.AS_MAXCH);\n        const flag = this.wasm._swe_vis_limit_mag(\n            tjd_ut,\n            dgeoPtr.ptr,\n            datmPtr.ptr,\n            dobsPtr.ptr,\n            objectnamePtr.ptr,\n            helflag,\n            ret.ptr,\n            serr.ptr\n        );\n        dgeoPtr.free();\n        datmPtr.free();\n        dobsPtr.free();\n        objectnamePtr.free();\n        const error = serr.readAndFree();\n        if (flag < this.OK) throw new SWEerror(error, flag);\n        return ret.readAndFree();\n    }\n}\n\n/**\n * Returns a type based on a string `INPUT`, using a conditional type mapping.\n * If `INPUT` exists as a key in the `CONDITIONS` map, returns the mapped type.\n * Otherwise, returns the `DEFAULT` type.\n *\n * @example\n *     type MyReturn = ConditionalReturnType<\"G\", { G: number }, string>; // => number\n *     type Fallback = ConditionalReturnType<\"Z\", { G: number }, string>; // => string\n *\n * @template INPUT - Input string literal to check.\n * @template CONDITIONS - A record mapping string keys to specific return types.\n * @template DEFAULT - The fallback type if `INPUT` is not found in\n *   `CONDITIONS`.\n */\nexport type ConditionalReturnType<\n    INPUT extends string,\n    CONDITIONS extends Record<string, unknown>,\n    DEFAULT,\n> = INPUT extends keyof CONDITIONS ? CONDITIONS[INPUT] : DEFAULT;\n\nexport type HouseSystems =\n    | \"A\"\n    | \"B\"\n    | \"C\"\n    | \"D\"\n    | \"E\"\n    | \"F\"\n    | \"G\"\n    | \"H\"\n    | \"I\"\n    | \"i\"\n    | \"K\"\n    | \"L\"\n    | \"M\"\n    | \"N\"\n    | \"O\"\n    | \"P\"\n    | \"Q\"\n    | \"R\"\n    | \"S\"\n    | \"T\"\n    | \"U\"\n    | \"V\"\n    | \"W\"\n    | \"X\"\n    | \"Y\";\n\n/** Represents a complete date and time value. */\nexport interface DateTimeObject {\n    /** Full year (e.g., 2025) */\n    year: number;\n    /** Month of the year (1–12) */\n    month: number;\n    /** Day of the month (1–31) */\n    day: number;\n    /** Hour of the day (0–23) */\n    hour: number;\n    /** Minute of the hour (0–59) */\n    minute: number;\n    /** Second of the minute including fractional part (0–59.99999) */\n    second: number;\n}\n\n/**\n * Represents horizontal coordinates of a celestial object:\n *\n * Array format:\n *\n * - `[0]` → Azimuth in degrees (measured from the south point, increasing\n *   westwards)\n * - `[1]` → True altitude above the horizon in degrees\n * - `[2]` → Apparent altitude in degrees (corrected for atmospheric refraction)\n */\nexport type HorizontalCoordinates = [az: number, alt: number, ap: number];\n\n/**\n * Full celestial position values returned from a position calculation.\n *\n * By default, values are in ecliptic coordinates (longitude, latitude,\n * distance). If `SEFLG_SPEED` or `SEFLG_SPEED3` flags are set, daily speeds for\n * each value are included; otherwise speeds are zero. If `SEFLG_EQUATORIAL`\n * flag is set, values are in equatorial coordinates (right ascension,\n * declination, distance). If `SEFLG_XYZ` flag is set, values are in cartesian\n * coordinates (X, Y, Z). If the target object ID is `SE_ECL_NUT`, values\n * contain obliquity and nutation data instead.\n *\n * Array format:\n *\n * - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True Obliquity\n *   (ε) depending on flags\n * - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n *   depending on flags\n */\nexport type CelestialCoordinates2D = [\n    /**\n     * - `λ`: Ecliptic longitude\n     * - `α`: Equatorial right ascension if `SEFLG_EQUATORIAL`\n     * - `x`: Cartesian X if `SEFLG_XYZ`\n     * - `ε`: True obliquity of the ecliptic if object ID is `SE_ECL_NUT`\n     */\n    lon: number,\n    /**\n     * - `β`: Ecliptic latitude\n     * - `δ`: Equatorial declination if `SEFLG_EQUATORIAL`\n     * - `y`: Cartesian Y if `SEFLG_XYZ`\n     * - `ε`: Mean obliquity of the ecliptic if object ID is `SE_ECL_NUT`\n     */\n    lat: number,\n];\n\n/**\n * Full celestial position values returned from a position calculation.\n *\n * - By default, values are in ecliptic coordinates (longitude, latitude,\n *   distance).\n * - If `SEFLG_SPEED` or `SEFLG_SPEED3` flags are set, daily speeds for each value\n *   are included; otherwise speeds are zero.\n * - If `SEFLG_EQUATORIAL` flag is set, values are in equatorial coordinates\n *   (right ascension, declination, distance).\n * - If `SEFLG_XYZ` flag is set, values are in cartesian coordinates (X, Y, Z).\n * - If the target object ID is `SE_ECL_NUT`, values contain obliquity and\n *   nutation data instead.\n *\n * Array format:\n *\n * - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True Obliquity\n *   (ε) depending on flags\n * - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n *   depending on flags\n * - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ) depending\n *   on flags\n */\nexport type CelestialCoordinates3D = [\n    ...CelestialCoordinates2D,\n    /**\n     * - `au`: Distance in astronomical units (AU)\n     * - `z`: Cartesian Z if `SEFLG_XYZ`\n     * - `Δψ`: Nutation in longitude if object ID is `SE_ECL_NUT`\n     */\n    dist: number,\n];\n\n/**\n * Full celestial position values returned from a position calculation.\n *\n * - By default, values are in ecliptic coordinates (longitude, latitude,\n *   distance).\n * - If `SEFLG_SPEED` or `SEFLG_SPEED3` flags are set, daily speeds for each value\n *   are included; otherwise speeds are zero.\n * - If `SEFLG_EQUATORIAL` flag is set, values are in equatorial coordinates\n *   (right ascension, declination, distance).\n * - If `SEFLG_XYZ` flag is set, values are in cartesian coordinates (X, Y, Z).\n * - If the target object ID is `SE_ECL_NUT`, values contain obliquity and\n *   nutation data instead.\n *\n * Array format:\n *\n * - `[0]` → Longitude (λ), Right Ascension (α), Cartesian X, or True Obliquity\n *   (ε) depending on flags\n * - `[1]` → Latitude (β), Declination (δ), Cartesian Y, or Mean Obliquity (ε)\n *   depending on flags\n * - `[2]` → Distance (AU), Cartesian Z, or Nutation in longitude (Δψ) depending\n *   on flags\n * - `[3]` → Longitude daily speed (λs), Right Ascension daily speed (αs),\n *   Cartesian X speed (xs), or Nutation in obliquity (Δε)\n * - `[4]` → Latitude daily speed (βs), Declination daily speed (δs), Cartesian Y\n *   speed (ys)\n * - `[5]` → Distance daily speed (aus), Cartesian Z speed (zs)\n */\nexport type CelestialCoordinatesAdvance = [\n    ...CelestialCoordinates3D,\n    /**\n     * - `λs`: Ecliptic longitude daily speed\n     * - `αs`: Equatorial right ascension daily speed if `SEFLG_EQUATORIAL`\n     * - `xs`: Cartesian X daily speed if `SEFLG_XYZ`\n     * - `Δε`: Nutation in obliquity if object ID is `SE_ECL_NUT`\n     */\n    lonSpd: number,\n    /**\n     * - `βs`: Ecliptic latitude daily speed\n     * - `δs`: Equatorial declination daily speed if `SEFLG_EQUATORIAL`\n     * - `ys`: Cartesian Y daily speed if `SEFLG_XYZ`\n     */\n    latSpd: number,\n    /**\n     * - `aus`: Distance daily speed in AU\n     * - `zs`: Cartesian Z daily speed if `SEFLG_XYZ`\n     */\n    distSpd: number,\n];\n\n/** Result returned by the `swe_fixstar` function. */\nexport interface FixstarResult {\n    /** Full star name as defined in `sefstars.txt`. */\n    star_name: string;\n    /** Celestial position and motion data of the star. */\n    data: CelestialCoordinatesAdvance;\n}\n\n/** Metadata for a fixed star entry. */\nexport interface FixstarMagnitude {\n    /** The full star name as it appears in the `sefstars.txt` catalog. */\n    star_name: string;\n    /** Visual magnitude of the star (brightness). */\n    magnitude: number;\n}\n\n/**\n * Array of key angular points related to the Ascendant and other significant\n * positions.\n *\n * Array format:\n *\n * - `[0]` → Ascendant longitude\n * - `[1]` → Midheaven (MC) longitude\n * - `[2]` → Right Ascension of the Midheaven (ARMC)\n * - `[3]` → Vertex longitude\n * - `[4]` → Equatorial Ascendant longitude\n * - `[5]` → Walter Koch's Co-Ascendant longitude\n * - `[6]` → Michael Munkasey's Co-Ascendant longitude\n * - `[7]` → Michael Munkasey's Polar Ascendant longitude\n */\nexport type AscendantValues = [\n    /** Longitude of the Ascendant */\n    asc: number,\n    /** Longitude of the Midheaven (MC) */\n    mc: number,\n    /** Right Ascension of the Midheaven (ARMC) */\n    armc: number,\n    /** Longitude of the Vertex */\n    vertex: number,\n    /** Longitude of the Equatorial Ascendant */\n    equasc: number,\n    /** Longitude of Walter Koch's Co-Ascendant */\n    coasc1: number,\n    /** Longitude of Michael Munkasey's Co-Ascendant */\n    coasc2: number,\n    /** Longitude of Michael Munkasey's Polar Ascendant */\n    polasc: number,\n];\n\n/**\n * Array of momentary motion speeds for the Ascendant, Midheaven, and related\n * points.\n *\n * Values represent angular speeds in degrees per day.\n *\n * Array format:\n *\n * - `[0]` → Ascendant speed\n * - `[1]` → Midheaven speed\n * - `[2]` → Right Ascension of the Midheaven speed\n * - `[3]` → Vertex speed\n * - `[4]` → Equatorial Ascendant speed\n * - `[5]` → Walter Koch's Co-Ascendant speed\n * - `[6]` → Michael Munkasey's Co-Ascendant speed\n * - `[7]` → Michael Munkasey's Polar Ascendant speed\n */\nexport type AscendantPointsSpeeds = [\n    /** Momentary speed of the Ascendant */\n    asc_speed: number,\n    /** Momentary speed of the Midheaven (MC) */\n    mc_speed: number,\n    /** Momentary speed of the Right Ascension of the Midheaven (ARMC) */\n    armc_speed: number,\n    /** Momentary speed of the Vertex */\n    vertex_speed: number,\n    /** Momentary speed of the Equatorial Ascendant */\n    equasc_speed: number,\n    /** Momentary speed of Walter Koch's Co-Ascendant */\n    coasc1_speed: number,\n    /** Momentary speed of Michael Munkasey's Co-Ascendant */\n    coasc2_speed: number,\n    /** Momentary speed of Michael Munkasey's Polar Ascendant */\n    polasc_speed: number,\n];\n\n/**\n * Times of various eclipse phases (Julian Dates).\n *\n * Unused slot retained for compatibility.\n *\n * Array format:\n *\n * - `[0]` → Time of maximum eclipse (JD)\n * - `[1]` → Unused (reserved)\n * - `[2]` → Partial phase start time (JD)\n * - `[3]` → Partial phase end time (JD)\n * - `[4]` → Totality start time (JD)\n * - `[5]` → Totality end time (JD)\n * - `[6]` → Penumbral phase start time (JD)\n * - `[7]` → Penumbral phase end time (JD)\n */\nexport type EclipsePhaseTimes = [\n    /** Time of maximum eclipse (JD) */\n    max: number,\n    /** Unused slot (reserved) */\n    unused: number,\n    /** Start time of partial phase (JD) */\n    partialStart: number,\n    /** End time of partial phase (JD) */\n    partialEnd: number,\n    /** Start time of totality (JD) */\n    totalStart: number,\n    /** End time of totality (JD) */\n    totalEnd: number,\n    /** Start time of penumbral phase (JD) */\n    penumbralStart: number,\n    /** End time of penumbral phase (JD) */\n    penumbralEnd: number,\n];\n\n/**\n * Eclipse times including moonrise and moonset during eclipse (if applicable).\n *\n * Array format:\n *\n * - `[0]` → Time of maximum eclipse (JD)\n * - `[1]` → Unused (reserved)\n * - `[2]` → Partial phase start time (JD)\n * - `[3]` → Partial phase end time (JD)\n * - `[4]` → Totality start time (JD)\n * - `[5]` → Totality end time (JD)\n * - `[6]` → Penumbral phase start time (JD)\n * - `[7]` → Penumbral phase end time (JD)\n * - `[8]` → Moonrise time during eclipse (JD), if it occurs\n * - `[9]` → Moonset time during eclipse (JD), if it occurs\n */\nexport type EclipsePhaseTimesWithMoonriseSet = [\n    ...phases: EclipsePhaseTimes,\n    /** Moonrise time during eclipse (JD), if it occurs */\n    moonrise: number,\n    /** Moonset time during eclipse (JD), if it occurs */\n    moonset: number,\n];\n\n/**\n * Detailed eclipse timings for local observation, including phases, centerline,\n * and annular-total transitions.\n *\n * All times are expressed in Julian Day (JD).\n *\n * Array format:\n *\n * - `[0]` → Time of maximum eclipse\n * - `[1]` → Time of local apparent noon\n * - `[2]` → Eclipse start time\n * - `[3]` → Eclipse end time\n * - `[4]` → Totality start time\n * - `[5]` → Totality end time\n * - `[6]` → Center line start time\n * - `[7]` → Center line end time\n * - `[8]` → Time when annular-total eclipse becomes total\n * - `[9]` → Time when annular-total eclipse becomes annular again\n */\nexport type EclipsePhaseTimesAdvance = [\n    /** Time of maximum eclipse (JD) */\n    max: number,\n    /** Time of local apparent noon during eclipse (JD) */\n    localNoon: number,\n    /** Eclipse start time (JD) */\n    start: number,\n    /** Eclipse end time (JD) */\n    end: number,\n    /** Start time of totality (JD) */\n    totalStart: number,\n    /** End time of totality (JD) */\n    totalEnd: number,\n    /** Start time of center line (JD) */\n    centerStart: number,\n    /** End time of center line (JD) */\n    centerEnd: number,\n    /** Time annular-total eclipse becomes total (JD) */\n    annularToTotal: number,\n    /** Time annular-total eclipse becomes annular again (JD) */\n    totalToAnnular: number,\n];\n\n/**\n * Contact times of an eclipse and sunrise/sunset during the event (JD).\n *\n * Array format:\n *\n * - `[0]` → Time of maximum eclipse (JD)\n * - `[1]` → Time of first contact (JD)\n * - `[2]` → Time of second contact (JD)\n * - `[3]` → Time of third contact (JD)\n * - `[4]` → Time of fourth contact (JD)\n * - `[5]` → Sunrise time during eclipse (JD)\n * - `[6]` → Sunset time during eclipse (JD)\n */\nexport type EclipseContactTimes = [\n    /** Time of maximum eclipse (JD) */\n    max: number,\n    /** Time of first contact (JD) */\n    first: number,\n    /** Time of second contact (JD) */\n    second: number,\n    /** Time of third contact (JD) */\n    third: number,\n    /** Time of fourth contact (JD) */\n    fourth: number,\n    /** Sunrise time during eclipse (JD) */\n    sunrise: number,\n    /** Sunset time during eclipse (JD) */\n    sunset: number,\n];\n\n/**\n * Geographic coordinates defining the central path and limits of an eclipse on\n * Earth.\n *\n * Array format:\n *\n * - `[0]` → Central line longitude (degrees)\n * - `[1]` → Central line latitude (degrees)\n * - `[2]` → Northern umbral limit longitude (degrees)\n * - `[3]` → Northern umbral limit latitude (degrees)\n * - `[4]` → Southern umbral limit longitude (degrees)\n * - `[5]` → Southern umbral limit latitude (degrees)\n * - `[6]` → Northern penumbral limit longitude (degrees)\n * - `[7]` → Northern penumbral limit latitude (degrees)\n * - `[8]` → Southern penumbral limit longitude (degrees)\n * - `[9]` → Southern penumbral limit latitude (degrees)\n */\nexport type EclipseGeographicCoords = [\n    /** Central line longitude (degrees) */\n    centralLongitude: number,\n    /** Central line latitude (degrees) */\n    centralLatitude: number,\n    /** Northern umbral limit longitude (degrees) */\n    northUmbraLongitude: number,\n    /** Northern umbral limit latitude (degrees) */\n    northUmbraLatitude: number,\n    /** Southern umbral limit longitude (degrees) */\n    southUmbraLongitude: number,\n    /** Southern umbral limit latitude (degrees) */\n    southUmbraLatitude: number,\n    /** Northern penumbral limit longitude (degrees) */\n    northPenumbraLongitude: number,\n    /** Northern penumbral limit latitude (degrees) */\n    northPenumbraLatitude: number,\n    /** Southern penumbral limit longitude (degrees) */\n    southPenumbraLongitude: number,\n    /** Southern penumbral limit latitude (degrees) */\n    southPenumbraLatitude: number,\n];\n\n/**\n * Basic characteristics of an eclipse at a given moment.\n *\n * Array format:\n *\n * - `[0]` → Fraction of solar diameter covered by the moon (magnitude)\n * - `[1]` → Ratio of lunar diameter to solar diameter\n * - `[2]` → Fraction of solar disc obscured by the moon (obscuration)\n * - `[3]` → Diameter of the core shadow in kilometers\n * - `[4]` → Azimuth of the sun (degrees)\n * - `[5]` → True altitude of the sun above the horizon (degrees)\n * - `[6]` → Apparent altitude of the sun above the horizon (degrees)\n * - `[7]` → Elongation of the moon from the sun (degrees)\n */\nexport type EclipseCharacteristics = [\n    /** Fraction of solar diameter covered by the moon (magnitude) */\n    solarDiameterFraction: number,\n    /** Ratio of lunar diameter to solar diameter */\n    lunarDiameterRatio: number,\n    /** Fraction of solar disc covered by moon (obscuration) */\n    solarDiscObscuration: number,\n    /** Diameter of the core shadow in kilometers */\n    coreShadowDiameterKm: number,\n    /** Azimuth of the sun (degrees) */\n    sunAzimuth: number,\n    /** True altitude of the sun above the horizon (degrees) */\n    trueSunAltitude: number,\n    /** Apparent altitude of the sun above the horizon (degrees) */\n    apparentSunAltitude: number,\n    /** Moon elongation in degrees */\n    moonElongation: number,\n];\n\n/**\n * Extended eclipse attributes including basic characteristics, magnitude, and\n * Saros series information.\n *\n * Array format:\n *\n * - `[0]` → Fraction of solar diameter covered by the moon (magnitude)\n * - `[1]` → Ratio of lunar diameter to solar diameter\n * - `[2]` → Fraction of solar disc obscured by the moon (obscuration)\n * - `[3]` → Diameter of the core shadow in kilometers\n * - `[4]` → Azimuth of the sun (degrees)\n * - `[5]` → True altitude of the sun above the horizon (degrees)\n * - `[6]` → Apparent altitude of the sun above the horizon (degrees)\n * - `[7]` → Elongation of the moon from the sun (degrees)\n * - `[8]` → Eclipse magnitude (same as solar diameter fraction or lunar diameter\n *   ratio depending on eclipse type)\n * - `[9]` → Saros series number (or `-99999999` if unknown)\n * - `[10]` → Saros series member number (or `-99999999` if unknown)\n */\nexport type EclipseAttributes = [\n    ...base: EclipseCharacteristics,\n    /**\n     * Eclipse magnitude (usually matches solarDiameterFraction or\n     * lunarDiameterRatio depending on eclipse type)\n     */\n    magnitude: number,\n    /** Saros series number, or -99999999 if unknown */\n    sarosSeries: number,\n    /** Saros series member number, or -99999999 if unknown */\n    sarosMember: number,\n];\n\n/**\n * Characteristics of a lunar eclipse at a given moment, including magnitude,\n * positions, and Saros series data.\n *\n * Array format:\n *\n * - `[0]` → Umbral magnitude at the time of observation\n * - `[1]` → Penumbral magnitude\n * - `[2]` → Unused (reserved)\n * - `[3]` → Unused (reserved)\n * - `[4]` → Azimuth of the moon (degrees)\n * - `[5]` → True altitude of the moon above the horizon (degrees)\n * - `[6]` → Apparent altitude of the moon above the horizon (degrees)\n * - `[7]` → Distance of the moon from opposition (degrees)\n * - `[8]` → Eclipse magnitude (typically same as umbral magnitude)\n * - `[9]` → Saros series number (or `-99999999` if unknown)\n * - `[10]` → Saros series member number (or `-99999999` if unknown)\n */\nexport type LunarEclipseCharacteristics = [\n    /** Umbral magnitude at time (JD) */\n    umbralMagnitude: number,\n    /** Penumbral magnitude */\n    penumbralMagnitude: number,\n    /** Unused slot */\n    unused1: number,\n    /** Unused slot */\n    unused2: number,\n    /** Moon azimuth (degrees) */\n    moonAzimuth: number,\n    /** True altitude of the moon (degrees) */\n    trueMoonAltitude: number,\n    /** Apparent altitude of the moon (degrees) */\n    apparentMoonAltitude: number,\n    /** Distance of moon from opposition (degrees) */\n    distanceFromOpposition: number,\n    /** Eclipse magnitude (usually umbral magnitude) */\n    magnitude: number,\n    /** Saros series number, or -99999999 if unknown */\n    sarosSeries: number,\n    /** Saros series member number, or -99999999 if unknown */\n    sarosMember: number,\n];\n\n/**\n * Represents calculated positions for houses and related points on the great\n * circles.\n */\nexport interface Houses<N extends number> {\n    /**\n     * Longitude positions of the houses:\n     *\n     * - `36` positions for Gauquelin sectors\n     * - `12` positions for all other house systems\n     *\n     * Array format:\n     *\n     * - `cusp[0]` → 1st house cusp longitude\n     * - ...\n     * - `cusp[N-1]` → Nth house cusp longitude\n     */\n    cusps: FixedLengthArray<N, number>;\n    /**\n     * Longitude positions of other key points of interest on the great circles\n     * (e.g., MC, IC, Ascendant, Descendant, etc.)\n     */\n    ascmc: AscendantValues;\n}\n\n/**\n * Extended house calculation result:\n *\n * Includes positions for the houses, other points, and their momentary motion\n * Speeds.\n */\nexport interface HousesEx<N extends number> extends Houses<N> {\n    /**\n     * Momentary motion speeds of the houses.\n     *\n     * Array format:\n     *\n     * - `cusp_speed[0]` → Speed of 1st house cusp in degrees/day\n     * - `cusp_speed[N-1]` → Speed of Nth house cusp\n     */\n    cusp_speed: FixedLengthArray<N, number>;\n    /**\n     * Momentary motion speeds of other key points of interest on the great\n     * circles (e.g., MC, IC, Ascendant, Descendant, etc.).\n     *\n     * Units: degrees per day.\n     */\n    ascmc_speed: AscendantPointsSpeeds;\n}\n\n/**\n * Object containing ascending node, descending node, aphelion and perihelion\n * values Depending on the specific object and the method flag used, the values\n * can be either \"mean\" or \"osculating\"\n */\nexport interface NodAps {\n    /** Array of ascending node values returned by the calculation */\n    ascending: CelestialCoordinatesAdvance;\n    /** Array of descending node values returned by the calculation */\n    descending: CelestialCoordinatesAdvance;\n    /** Array of perihelion node values returned by the calculation */\n    perihelion: CelestialCoordinatesAdvance;\n    /** Array of aphelion values returned by the calculation */\n    aphelion: CelestialCoordinatesAdvance;\n}\n\n/**\n * Data array representing heliacal phenomena computations for a celestial\n * object.\n *\n * The array contains observational, geometric, and photometric values relevant\n * to heliacal visibility (e.g. arcus visionis, azimuths, crescent width).\n *\n * Array format:\n *\n * - `[0]` → `AltO` – Topocentric (unrefracted) altitude of object (°)\n * - `[1]` → `AppAltO` – Apparent (refracted) altitude of object (°)\n * - `[2]` → `GeoAltO` – Geocentric altitude of object (°)\n * - `[3]` → `AziO` – Azimuth of object (°)\n * - `[4]` → `AltS` – Topocentric altitude of Sun (°)\n * - `[5]` → `AziS` – Azimuth of Sun (°)\n * - `[6]` → `TAVact` – Actual topocentric arcus visionis (°)\n * - `[7]` → `ARCVact` – Actual geocentric arcus visionis (°)\n * - `[8]` → `DAZact` – Actual difference in azimuth between object and Sun (°)\n * - `[9]` → `ARCLact` – Actual ecliptic longitude difference between object and\n *   Sun (°)\n * - `[10]` → `kact` – Extinction coefficient\n * - `[11]` → `minTAV` – Minimum topocentric arcus visionis (°)\n * - `[12]` → `TfistVR` – First visibility time (JD, VR method)\n * - `[13]` → `TbVR` – Best/optimum visibility time (JD, VR method)\n * - `[14]` → `TlastVR` – Last visibility time (JD, VR method)\n * - `[15]` → `TbYallop` – Best visibility time (JD, Yallop method)\n * - `[16]` → `WMoon` – Crescent width of Moon (°)\n * - `[17]` → `qYal` – Yallop Q-test value\n * - `[18]` → `qCrit` – Yallop Q-test threshold\n * - `[19]` → `ParO` – Parallax of object (°)\n * - `[20]` → `Magn` – Apparent magnitude of object\n * - `[21]` → `RiseO` – Rise/set time of object (JD)\n * - `[22]` → `RiseS` – Rise/set time of Sun (JD)\n * - `[23]` → `Lag` – Rise/set time difference (object - Sun) (JD)\n * - `[24]` → `TvisVR` – Visibility duration (JD)\n * - `[25]` → `LMoon` – Crescent length of Moon (°)\n * - `[26]` → `CVAact` – Actual crescent visibility angle (°)\n * - `[27]` → `Illum` – Moon illumination (%)\n * - `[28]` → `MSk` – MSk factor (model-specific visibility metric)\n */\nexport type HeliacalPhenomena = [\n    /** Topocentric altitude of object in degrees (unrefracted) */\n    AltO: number,\n    /** Apparent altitude of object in degrees (refracted) */\n    AppAltO: number,\n    /** Geocentric altitude of object in degrees */\n    GeoAltO: number,\n    /** Azimuth of object in degrees */\n    AziO: number,\n    /** Topocentric altitude of Sun in degrees */\n    AltS: number,\n    /** Azimuth of Sun in degrees */\n    AziS: number,\n    /** Actual topocentric arcus visionis in degrees */\n    TAVact: number,\n    /** Actual (geocentric) arcus visionis in degrees */\n    ARCVact: number,\n    /** Actual difference between object's and sun's azimuth in degrees */\n    DAZact: number,\n    /** Actual longitude difference between object and sun in degrees */\n    ARCLact: number,\n    /** Extinction coefficient */\n    kact: number,\n    /** Smallest topocentric arcus visionis in degrees */\n    minTAV: number,\n    /** First time object is visible:number, according to VR in JD */\n    TfistVR: number,\n    /** Optimum time the object is visible:number, according to VR in JD */\n    TbVR: number,\n    /** Last time object is visible:number, according to VR in JD */\n    TlastVR: number,\n    /** Best time the object is visible:number, according to Yallop in JD */\n    TbYallop: number,\n    /** Crescent width of Moon in degrees */\n    WMoon: number,\n    /** Q-test value of Yallop */\n    qYal: number,\n    /** Q-test criterion of Yallop */\n    qCrit: number,\n    /** Parallax of object in degrees */\n    ParO: number,\n    /** Magnitude of object */\n    Magn: number,\n    /** Rise/set time of object in JD */\n    RiseO: number,\n    /** Rise/set time of Sun in JD */\n    RiseS: number,\n    /** Rise/set time of object minus rise/set time of Sun in JD */\n    Lag: number,\n    /** Visibility duration in JD */\n    TvisVR: number,\n    /** Crescent length of Moon in degrees */\n    LMoon: number,\n    /** CVAact in degrees */\n    CVAact: number,\n    /** Illum in percentage */\n    Illum: number,\n    /** CVAact in degrees */\n    CVAact: number,\n    /** MSk */\n    MSk: number,\n];\n\n/**\n * Orbital elements returned for a celestial object at a given time.\n *\n * These values represent the shape, orientation, and position of the orbit in\n * space, including angular and distance-related parameters.\n *\n * Array format:\n *\n * - `[0]` → `a` – Semimajor axis (AU)\n * - `[1]` → `e` – Eccentricity\n * - `[2]` → `i` – Inclination (°)\n * - `[3]` → `Ω` – Longitude of ascending node (°)\n * - `[4]` → `ω` – Argument of periapsis (°)\n * - `[5]` → `ϖ` – Longitude of periapsis (°)\n * - `[6]` → `M0` – Mean anomaly at epoch (°)\n * - `[7]` → `v0` – True anomaly at epoch (°)\n * - `[8]` → `E0` – Eccentric anomaly at epoch (°)\n * - `[9]` → `L0` – Mean longitude at epoch (°)\n * - `[10]` → `sidereal_period` – Sidereal orbital period (tropical years)\n * - `[11]` → `daily_motion` – Mean daily motion (°/day)\n * - `[12]` → `tropical_period` – Tropical orbital period (years)\n * - `[13]` → `synodic_period` – Synodic period (days). May be negative for inner\n *   planets or Moon.\n * - `[14]` → `perihelion_passage` – Julian day of perihelion passage\n * - `[15]` → `perihelion_distance` – Distance at perihelion (AU)\n * - `[16]` → `aphelion_distance` – Distance at aphelion (AU)\n */\nexport type OrbitalElements = [\n    /** Semimajor axis */\n    a: number,\n    /** Eccentricity */\n    e: number,\n    /** Inclination */\n    i: number,\n    /** Longitude of ascending node */\n    Ω: number,\n    /** Argument of periapsis */\n    ω: number,\n    /** Longitude of periapsis */\n    ϖ: number,\n    /** Mean anomaly at epoch */\n    M0: number,\n    /** True anomaly at epoch */\n    v0: number,\n    /** Eccentric anomaly at epoch */\n    E0: number,\n    /** Mean longitude at epoch */\n    L0: number,\n    /** Sidereal orbital period in tropical years */\n    sidereal_period: number,\n    /** Mean daily motion */\n    daily_motion: number,\n    /** Tropical period in years */\n    tropical_period: number,\n    /**\n     * Synodic period in days Negative, if inner planet (Venus, Mercury, Aten\n     * asteroids) or Moon\n     */\n    synodic_period: number,\n    /** Time of perihelion passage */\n    perihelion_passage: number,\n    /** Perihelion distance */\n    perihelion_distance: number,\n    /** Aphelion distance */\n    aphelion_distance: number,\n];\n\n/**\n * Julian Day results for the next heliacal visibility event.\n *\n * This tuple provides key Julian Dates related to the visibility of a celestial\n * object, depending on the selected heliacal algorithm (`hel_flag`).\n *\n * Array format:\n *\n * - `[0]` → Start of visibility (`vis_start`)\n * - `[1]` → Optimum visibility (`vis_opt`) — May be `0` if `hel_flag >=\n *   SE_HELFLAG_AV`\n * - `[2]` → End of visibility (`vis_end`) — May be `0` if `hel_flag >=\n *   SE_HELFLAG_AV`\n */\nexport type HeliacalVisibilityWindow = [\n    /** Julian Day of first possible visibility */\n    vis_start: number,\n    /**\n     * Julian Day of best/optimum visibility; `0` if not calculated with AV\n     * methods\n     */\n    vis_opt: number,\n    /**\n     * Julian Day of last possible visibility; `0` if not calculated with AV\n     * methods\n     */\n    vis_end: number,\n];\n","/**\n * Normalizes a base URL by:\n *\n * - Removing trailing slashes\n * - Stripping any filename at the end (e.g., index.html, file.js)\n * - Ensuring the result ends with a single `/`\n *\n * @param url - The input URL or path to normalize\n * @returns A normalized URL ending with a single slash\n */\nexport function getBaseURLPath(url: string): string {\n    // Remove trailing slashes\n    let base_url = url.replace(/\\/+$/, \"\");\n\n    // Check if the last segment looks like a filename (e.g., has a file extension)\n    const lastSegment = base_url.split(\"/\").pop();\n    if (lastSegment && /\\.[a-z0-9]+$/i.test(lastSegment)) {\n        // Remove the filename segment\n        base_url = base_url.substring(0, base_url.lastIndexOf(\"/\"));\n    }\n\n    // Ensure the result ends with a single slash\n    return base_url;\n}\n"],"names":["r","n","e","o","t","slice","length","push","s","i8","i16","i32","i64","float","double","a","constructor","this","_ptr","wasm","ptr","isValid","validatePointer","Error","free","_free","readAndFree","read","toString","name","h","i","super","_malloc","type","from","w","alloc","write","add","setValue","p","Array","getValue","forEach","boolToC","boolFromC","charToC","charCodeAt","charFromC","Number","isInteger","String","fromCharCode","validateNumberType","getTypeSize","u","d","stringToUTF8","UTF8ToString","formatYearEra","year","Math","abs","EpheFileMetadata","epheFiles","startYear","categories","prefix","category","endYear","blockNumber","floor","padStart","suffix","c","desc","sort","b","catCompare","localeCompare","se1EpheFiles","concat","SWEerror","flag","error","message","Object","setPrototypeOf","prototype","async","Module","moduleArg","moduleRtn","ENVIRONMENT_IS_WEB","window","ENVIRONMENT_IS_WORKER","WorkerGlobalScope","ENVIRONMENT_IS_NODE","process","versions","node","ENVIRONMENT_IS_SHELL","createRequire","import","require","document","pathToFileURL","__filename","href","_documentCurrentScript","tagName","toUpperCase","src","URL","baseURI","readAsync","readBinary","thisProgram","_scriptName","scriptDirectory","nodeVersion","numericVersion","split","fs","startsWith","dirname","fileURLToPath","filename","isFileURI","ret","readFileSync","assert","Buffer","isBuffer","binary","undefined","argv","replace","url","xhr","XMLHttpRequest","open","responseType","send","Uint8Array","response","fetch","credentials","ok","arrayBuffer","status","wasmBinary","out","console","log","bind","err","WebAssembly","ABORT","condition","text","abort","readyPromiseResolve","readyPromiseReject","wasmMemory","HEAP8","HEAPU8","HEAP16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","checkStackCookie","max","_emscripten_stack_get_end","cookie1","SAFE_HEAP_LOAD","cookie2","ptrToString","consumedModuleProp","prop","getOwnPropertyDescriptor","defineProperty","configurable","set","makeInvalidEarlyAccess","isExportedByForceFilesystem","hookGlobalSymbolAccess","sym","func","globalThis","get","missingGlobal","msg","warnOnce","unexportedRuntimeSymbol","SAFE_HEAP_INDEX","arr","idx","action","bytes","BYTES_PER_ELEMENT","dest","runtimeInitialized","brk","_sbrk","_emscripten_stack_get_base","buffer","byteLength","SAFE_HEAP_STORE","value","h16","Int16Array","h8","Int8Array","updateMemoryViews","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","subarray","wasmBinaryFile","runDependencies","dependenciesFulfilled","runDependencyTracking","runDependencyWatcher","addRunDependency","id","setInterval","clearInterval","shown","dep","unref","removeRunDependency","callback","what","RuntimeError","createExportWrapper","nargs","args","f","wasmExports","findWasmBinary","path","getWasmBinary","binaryFile","file","getBinarySync","instantiateAsync","imports","instantiateStreaming","reason","instantiate","instantiateArrayBuffer","callRuntimeCallbacks","callbacks","shift","onPostRuns","addOnPostRun","cb","onPreRuns","addOnPreRun","syscallGetVarargI","SYSCALLS","varargs","syscallGetVarargP","PATH","isAbs","charAt","splitPath","exec","normalizeArray","parts","allowAboveRoot","up","last","splice","unshift","normalize","isAbsolute","trailingSlash","filter","join","result","root","dir","basename","match","paths","join2","l","randomFill","view","nodeCrypto","randomFillSync","crypto","getRandomValues","initRandomFill","PATH_FS","resolve","resolvedPath","resolvedAbsolute","FS","cwd","TypeError","relative","to","trim","start","end","fromParts","toParts","min","samePartsLength","outputParts","UTF8Decoder","TextDecoder","UTF8ArrayToString","heapOrArray","maxBytesToRead","ignoreNul","endPtr","maxIdx","findStringEnd","decode","str","u0","u1","u2","ch","FS_stdin_getChar_buffer","lengthBytesUTF8","len","stringToUTF8Array","heap","outIdx","maxBytesToWrite","startIdx","endIdx","codePointAt","intArrayFromString","stringy","dontAddNull","u8array","numBytesWritten","TTY","ttys","init","shutdown","register","dev","ops","input","output","registerDevice","stream_ops","stream","tty","rdev","ErrnoError","seekable","close","fsync","offset","pos","get_char","bytesRead","atime","Date","now","put_char","mtime","ctime","default_tty_ops","buf","fd","stdin","readSync","includes","prompt","FS_stdin_getChar","val","ioctl_tcgets","c_iflag","c_oflag","c_cflag","c_lflag","c_cc","ioctl_tcsets","optional_actions","data","ioctl_tiocgwinsz","default_tty1_ops","mmapAlloc","size","MEMFS","ops_table","mount","createNode","parent","mode","isBlkdev","isFIFO","getattr","node_ops","setattr","lookup","mknod","rename","unlink","rmdir","readdir","symlink","llseek","mmap","msync","link","readlink","chrdev","chrdev_stream_ops","isDir","contents","isFile","usedBytes","isLink","isChrdev","getFileDataAsTypedArray","expandFileStorage","newCapacity","prevCapacity","oldContents","resizeFileStorage","newSize","attr","ino","nlink","uid","gid","blksize","blocks","ceil","key","old_node","new_dir","new_name","new_node","lookupNode","hashRemoveNode","keys","newname","oldpath","position","canOwn","ArrayBuffer","whence","prot","flags","allocated","call","byteOffset","mmapFlags","FS_getMode","canRead","canWrite","ERRNO_CODES","EPERM","ENOENT","ESRCH","EINTR","EIO","ENXIO","E2BIG","ENOEXEC","EBADF","ECHILD","EAGAIN","EWOULDBLOCK","ENOMEM","EACCES","EFAULT","ENOTBLK","EBUSY","EEXIST","EXDEV","ENODEV","ENOTDIR","EISDIR","EINVAL","ENFILE","EMFILE","ENOTTY","ETXTBSY","EFBIG","ENOSPC","ESPIPE","EROFS","EMLINK","EPIPE","EDOM","ERANGE","ENOMSG","EIDRM","ECHRNG","EL2NSYNC","EL3HLT","EL3RST","ELNRNG","EUNATCH","ENOCSI","EL2HLT","EDEADLK","ENOLCK","EBADE","EBADR","EXFULL","ENOANO","EBADRQC","EBADSLT","EDEADLOCK","EBFONT","ENOSTR","ENODATA","ETIME","ENOSR","ENONET","ENOPKG","EREMOTE","ENOLINK","EADV","ESRMNT","ECOMM","EPROTO","EMULTIHOP","EDOTDOT","EBADMSG","ENOTUNIQ","EBADFD","EREMCHG","ELIBACC","ELIBBAD","ELIBSCN","ELIBMAX","ELIBEXEC","ENOSYS","ENOTEMPTY","ENAMETOOLONG","ELOOP","EOPNOTSUPP","EPFNOSUPPORT","ECONNRESET","ENOBUFS","EAFNOSUPPORT","EPROTOTYPE","ENOTSOCK","ENOPROTOOPT","ESHUTDOWN","ECONNREFUSED","EADDRINUSE","ECONNABORTED","ENETUNREACH","ENETDOWN","ETIMEDOUT","EHOSTDOWN","EHOSTUNREACH","EINPROGRESS","EALREADY","EDESTADDRREQ","EMSGSIZE","EPROTONOSUPPORT","ESOCKTNOSUPPORT","EADDRNOTAVAIL","ENETRESET","EISCONN","ENOTCONN","ETOOMANYREFS","EUSERS","EDQUOT","ESTALE","ENOTSUP","ENOMEDIUM","EILSEQ","EOVERFLOW","ECANCELED","ENOTRECOVERABLE","EOWNERDEAD","ESTRPIPE","preloadPlugins","FS_preloadFile","dontCreateFile","preFinish","fullname","orig","random","getUniqueRunDependency","byteArray","asyncLoad","plugin","Browser","FS_handledByPreloadPlugin","createDataFile","FS_createDataFile","mounts","devices","streams","nextInode","nameTable","currentPath","initialized","ignorePermissions","filesystems","syncFSRequests","readFiles","errno","_strerror","strError","code","FSStream","shared","object","isRead","isWrite","isAppend","FSNode","readMode","writeMode","mounted","isFolder","isDevice","lookupPath","opts","follow_mount","linkloop","nlinks","current","current_path","islast","noent_okay","isMountpoint","follow","isRoot","getPath","mountpoint","hashName","parentid","hash","hashAddNode","name_next","errCode","mayLookup","nodeName","destroyNode","isSocket","flagsToPermissionString","perms","nodePermissions","mayCreate","mayDelete","isdir","mayOpen","checkOpExists","op","MAX_OPEN_FDS","nextfd","getStreamChecked","getStream","createStream","assign","closeStream","dupStream","origStream","dup","doSetAttr","arg","device","getDevice","major","minor","makedev","ma","mi","getMounts","check","m","pop","syncfs","populate","completed","doCallback","done","errored","pseudo","mountRoot","unmount","next","indexOf","statfs","statfsNode","statfsStream","rtn","bsize","frsize","bfree","bavail","files","ffree","fsid","namelen","create","mkdir","mkdirTree","dirs","mkdev","newpath","old_path","new_path","old_dir","old_dirname","new_dirname","old_name","stat","dontFollow","fstat","lstat","doChmod","chmod","lchmod","fchmod","doChown","timestamp","chown","lchown","fchown","doTruncate","truncate","ftruncate","utime","isDirPath","FS_modeStringToFlags","endsWith","created","ungotten","isClosed","getdents","seeking","bytesWritten","ioctl","cmd","readFile","encoding","writeFile","isView","chdir","createDefaultDirectories","createDefaultDevices","randomBuffer","randomLeft","randomByte","createDevice","createSpecialDirectories","proc_self","entries","k","v","map","createStandardStreams","stdout","stderr","staticInit","quit","_fflush","findObject","dontResolveLastLink","analyzePath","exists","parentExists","parentPath","parentObject","createPath","reverse","part","createFile","properties","forceLoadFile","obj","createLazyFile","LazyUint8Array","lengthKnown","chunks","chunkOffset","chunkSize","chunkNum","getter","setDataGetter","cacheLength","header","datalength","getResponseHeader","hasByteServing","usesGzip","lazyArray","setRequestHeader","overrideMimeType","responseText","doXHR","_length","_chunkSize","defineProperties","writeChunks","fn","absolutePath","createFolder","createLink","joinPath","standardizePath","DEFAULT_POLLMASK","calculateAt","dirfd","allowEmpty","getStreamFromFD","writeStat","BigInt","getTime","writeStatFs","stats","doMsync","addr","getStr","outPtr","alignMemory","alignment","growMemory","oldHeapSize","pages","grow","ENV","getEnvStrings","strings","env","USER","LOGNAME","PWD","HOME","LANG","navigator","language","_","x","createPreloadedFile","onload","onerror","then","catch","preloadFile","librarySymbol","_emscripten_stack_init","calledRun","wasmImports","__syscall_fcntl64","__syscall_ioctl","termios","argp","winsize","__syscall_openat","__syscall_readlinkat","bufsize","endChar","_abort_js","alignfault","emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","environ_get","__environ","environ_buf","bufSize","envp","string","Infinity","environ_sizes_get","penviron_count","penviron_buf_size","fd_close","fd_read","iov","iovcnt","pnum","num","curr","doReadv","fd_seek","newOffset","NaN","isNaN","fd_write","doWritev","segfault","receiveInstance","instance","module","exports","assignWasmExports","trueModule","info","wasi_snapshot_preview1","Promise","reject","mod","inst","receiveInstantiationResult","createWasm","stackCheckInit","preInit","run","doRun","postRun","preRun","setTimeout","SwissEPH","TRUE","FALSE","OK","ERR","NOT_AVAILABLE","BEYOND_EPH_LIMITS","ODEGREE_STRING","HUGE","M_PI","PI","AS_MAXCH","RADTODEG","DEGTORAD","DEG","DEG7_30","DEG15","DEG24","DEG30","DEG60","DEG90","DEG120","DEG150","DEG180","DEG270","DEG360","CSTORAD","RADTOCS","CS2DEG","BFILE_R_ACCESS","BFILE_RW_ACCESS","BFILE_W_CREATE","BFILE_A_ACCESS","PATH_SEPARATOR","OPEN_MODE","FILE_R_ACCESS","FILE_RW_ACCESS","FILE_W_CREATE","FILE_A_ACCESS","DIR_GLUE","SE_AUNIT_TO_KM","SE_AUNIT_TO_LIGHTYEAR","SE_AUNIT_TO_PARSEC","SE_JUL_CAL","SE_GREG_CAL","SE_ECL_NUT","SE_SUN","SE_MOON","SE_MERCURY","SE_VENUS","SE_MARS","SE_JUPITER","SE_SATURN","SE_URANUS","SE_NEPTUNE","SE_PLUTO","SE_MEAN_NODE","SE_TRUE_NODE","SE_MEAN_APOG","SE_OSCU_APOG","SE_EARTH","SE_CHIRON","SE_PHOLUS","SE_CERES","SE_PALLAS","SE_JUNO","SE_VESTA","SE_INTP_APOG","SE_INTP_PERG","SE_NPLANETS","SE_PLMOON_OFFSET","SE_AST_OFFSET","SE_VARUNA","SE_FICT_OFFSET","SE_FICT_OFFSET_1","SE_FICT_MAX","SE_NFICT_ELEM","SE_COMET_OFFSET","SE_NALL_NAT_POINTS","SE_CUPIDO","SE_HADES","SE_ZEUS","SE_KRONOS","SE_APOLLON","SE_ADMETOS","SE_VULKANUS","SE_POSEIDON","SE_ISIS","SE_NIBIRU","SE_HARRINGTON","SE_NEPTUNE_LEVERRIER","SE_NEPTUNE_ADAMS","SE_PLUTO_LOWELL","SE_PLUTO_PICKERING","SE_VULCAN","SE_WHITE_MOON","SE_PROSERPINA","SE_WALDEMATH","SE_FIXSTAR","SE_ASC","SE_MC","SE_ARMC","SE_VERTEX","SE_EQUASC","SE_COASC1","SE_COASC2","SE_POLASC","SE_NASCMC","SEFLG_JPLEPH","SEFLG_SWIEPH","SEFLG_MOSEPH","SEFLG_HELCTR","SEFLG_TRUEPOS","SEFLG_J2000","SEFLG_NONUT","SEFLG_SPEED3","SEFLG_SPEED","SEFLG_NOGDEFL","SEFLG_NOABERR","SEFLG_ASTROMETRIC","SEFLG_EQUATORIAL","SEFLG_XYZ","SEFLG_RADIANS","SEFLG_BARYCTR","SEFLG_TOPOCTR","SEFLG_ORBEL_AA","SEFLG_TROPICAL","SEFLG_SIDEREAL","SEFLG_ICRS","SEFLG_DPSIDEPS_1980","SEFLG_JPLHOR","SEFLG_JPLHOR_APPROX","SEFLG_CENTER_BODY","SEFLG_TEST_PLMOON","SE_SIDBITS","SE_SIDBIT_ECL_T0","SE_SIDBIT_SSY_PLANE","SE_SIDBIT_USER_UT","SE_SIDBIT_ECL_DATE","SE_SIDBIT_NO_PREC_OFFSET","SE_SIDBIT_PREC_ORIG","SE_SIDM_FAGAN_BRADLEY","SE_SIDM_LAHIRI","SE_SIDM_DELUCE","SE_SIDM_RAMAN","SE_SIDM_USHASHASHI","SE_SIDM_KRISHNAMURTI","SE_SIDM_DJWHAL_KHUL","SE_SIDM_YUKTESHWAR","SE_SIDM_JN_BHASIN","SE_SIDM_BABYL_KUGLER1","SE_SIDM_BABYL_KUGLER2","SE_SIDM_BABYL_KUGLER3","SE_SIDM_BABYL_HUBER","SE_SIDM_BABYL_ETPSC","SE_SIDM_ALDEBARAN_15TAU","SE_SIDM_HIPPARCHOS","SE_SIDM_SASSANIAN","SE_SIDM_GALCENT_0SAG","SE_SIDM_J2000","SE_SIDM_J1900","SE_SIDM_B1950","SE_SIDM_SURYASIDDHANTA","SE_SIDM_SURYASIDDHANTA_MSUN","SE_SIDM_ARYABHATA","SE_SIDM_ARYABHATA_MSUN","SE_SIDM_SS_REVATI","SE_SIDM_SS_CITRA","SE_SIDM_TRUE_CITRA","SE_SIDM_TRUE_REVATI","SE_SIDM_TRUE_PUSHYA","SE_SIDM_GALCENT_RGILBRAND","SE_SIDM_GALEQU_IAU1958","SE_SIDM_GALEQU_TRUE","SE_SIDM_GALEQU_MULA","SE_SIDM_GALALIGN_MARDYKS","SE_SIDM_TRUE_MULA","SE_SIDM_GALCENT_MULA_WILHELM","SE_SIDM_ARYABHATA_522","SE_SIDM_BABYL_BRITTON","SE_SIDM_TRUE_SHEORAN","SE_SIDM_GALCENT_COCHRANE","SE_SIDM_GALEQU_FIORENZA","SE_SIDM_VALENS_MOON","SE_SIDM_LAHIRI_1940","SE_SIDM_LAHIRI_VP285","SE_SIDM_KRISHNAMURTI_VP291","SE_SIDM_LAHIRI_ICRC","SE_SIDM_USER","SE_NSIDM_PREDEF","SE_NODBIT_MEAN","SE_NODBIT_OSCU","SE_NODBIT_OSCU_BAR","SE_NODBIT_FOPOINT","SEFLG_DEFAULTEPH","SE_MAX_STNAME","SE_ECL_CENTRAL","SE_ECL_NONCENTRAL","SE_ECL_TOTAL","SE_ECL_ANNULAR","SE_ECL_PARTIAL","SE_ECL_ANNULAR_TOTAL","SE_ECL_HYBRID","SE_ECL_PENUMBRAL","SE_ECL_ALLTYPES_SOLAR","SE_ECL_ALLTYPES_LUNAR","SE_ECL_VISIBLE","SE_ECL_MAX_VISIBLE","SE_ECL_1ST_VISIBLE","SE_ECL_PARTBEG_VISIBLE","SE_ECL_2ND_VISIBLE","SE_ECL_TOTBEG_VISIBLE","SE_ECL_3RD_VISIBLE","SE_ECL_TOTEND_VISIBLE","SE_ECL_4TH_VISIBLE","SE_ECL_PARTEND_VISIBLE","SE_ECL_PENUMBBEG_VISIBLE","SE_ECL_PENUMBEND_VISIBLE","SE_ECL_OCC_BEG_DAYLIGHT","SE_ECL_OCC_END_DAYLIGHT","SE_ECL_ONE_TRY","SE_CALC_RISE","SE_CALC_SET","SE_CALC_MTRANSIT","SE_CALC_ITRANSIT","SE_BIT_DISC_CENTER","SE_BIT_DISC_BOTTOM","SE_BIT_GEOCTR_NO_ECL_LAT","SE_BIT_NO_REFRACTION","SE_BIT_CIVIL_TWILIGHT","SE_BIT_NAUTIC_TWILIGHT","SE_BIT_ASTRO_TWILIGHT","SE_BIT_FIXED_DISC_SIZE","SE_BIT_FORCE_SLOW_METHOD","SE_BIT_HINDU_RISING","SE_ECL2HOR","SE_EQU2HOR","SE_HOR2ECL","SE_HOR2EQU","SE_TRUE_TO_APP","SE_APP_TO_TRUE","SE_DE_NUMBER","SE_FNAME_DE200","SE_FNAME_DE403","SE_FNAME_DE404","SE_FNAME_DE405","SE_FNAME_DE406","SE_FNAME_DE431","SE_FNAME_DFT","SE_FNAME_DFT2","SE_STARFILE_OLD","SE_STARFILE","SE_ASTNAMFILE","SE_FICTFILE","SE_SPLIT_DEG_ROUND_SEC","SE_SPLIT_DEG_ROUND_MIN","SE_SPLIT_DEG_ROUND_DEG","SE_SPLIT_DEG_ZODIACAL","SE_SPLIT_DEG_NAKSHATRA","SE_SPLIT_DEG_KEEP_SIGN","SE_SPLIT_DEG_KEEP_DEG","SE_HELIACAL_RISING","SE_HELIACAL_SETTING","SE_MORNING_FIRST","SE_EVENING_LAST","SE_EVENING_FIRST","SE_MORNING_LAST","SE_ACRONYCHAL_RISING","SE_ACRONYCHAL_SETTING","SE_COSMICAL_SETTING","SE_HELFLAG_LONG_SEARCH","SE_HELFLAG_HIGH_PRECISION","SE_HELFLAG_OPTICAL_PARAMS","SE_HELFLAG_NO_DETAILS","SE_HELFLAG_SEARCH_1_PERIOD","SE_HELFLAG_VISLIM_DARK","SE_HELFLAG_VISLIM_NOMOON","SE_HELFLAG_VISLIM_PHOTOPIC","SE_HELFLAG_VISLIM_SCOTOPIC","SE_HELFLAG_AV","SE_HELFLAG_AVKIND_VR","SE_HELFLAG_AVKIND_PTO","SE_HELFLAG_AVKIND_MIN7","SE_HELFLAG_AVKIND_MIN9","SE_HELFLAG_AVKIND","TJD_INVALID","SIMULATE_VICTORVB","SE_HELIACAL_LONG_SEARCH","SE_HELIACAL_HIGH_PRECISION","SE_HELIACAL_OPTICAL_PARAMS","SE_HELIACAL_NO_DETAILS","SE_HELIACAL_SEARCH_1_PERIOD","SE_HELIACAL_VISLIM_DARK","SE_HELIACAL_VISLIM_NOMOON","SE_HELIACAL_VISLIM_PHOTOPIC","SE_HELIACAL_AVKIND_VR","SE_HELIACAL_AVKIND_PTO","SE_HELIACAL_AVKIND_MIN7","SE_HELIACAL_AVKIND_MIN9","SE_HELIACAL_AVKIND","SE_PHOTOPIC_FLAG","SE_SCOTOPIC_FLAG","SE_MIXEDOPIC_FLAG","SE_TIDAL_DE200","SE_TIDAL_DE403","SE_TIDAL_DE404","SE_TIDAL_DE405","SE_TIDAL_DE406","SE_TIDAL_DE421","SE_TIDAL_DE422","SE_TIDAL_DE430","SE_TIDAL_DE431","SE_TIDAL_DE441","SE_TIDAL_26","SE_TIDAL_STEPHENSON_2016","SE_TIDAL_DEFAULT","SE_TIDAL_AUTOMATIC","SE_TIDAL_MOSEPH","SE_TIDAL_SWIEPH","SE_TIDAL_JPLEPH","SE_DELTAT_AUTOMATIC","SE_MODEL_DELTAT","SE_MODEL_PREC_LONGTERM","SE_MODEL_PREC_SHORTTERM","SE_MODEL_NUT","SE_MODEL_BIAS","SE_MODEL_JPLHOR_MODE","SE_MODEL_JPLHORA_MODE","SE_MODEL_SIDT","NSE_MODELS","SEMOD_NPREC","SEMOD_PREC_IAU_1976","SEMOD_PREC_LASKAR_1986","SEMOD_PREC_WILL_EPS_LASK","SEMOD_PREC_WILLIAMS_1994","SEMOD_PREC_SIMON_1994","SEMOD_PREC_IAU_2000","SEMOD_PREC_BRETAGNON_2003","SEMOD_PREC_IAU_2006","SEMOD_PREC_VONDRAK_2011","SEMOD_PREC_OWEN_1990","SEMOD_PREC_NEWCOMB","SEMOD_PREC_DEFAULT","SEMOD_PREC_DEFAULT_SHORT","SEMOD_NNUT","SEMOD_NUT_IAU_1980","SEMOD_NUT_IAU_CORR_1987","SEMOD_NUT_IAU_2000A","SEMOD_NUT_IAU_2000B","SEMOD_NUT_WOOLARD","SEMOD_NUT_DEFAULT","SEMOD_NSIDT","SEMOD_SIDT_IAU_1976","SEMOD_SIDT_IAU_2006","SEMOD_SIDT_IERS_CONV_2010","SEMOD_SIDT_LONGTERM","SEMOD_SIDT_DEFAULT","SEMOD_NBIAS","SEMOD_BIAS_NONE","SEMOD_BIAS_IAU2000","SEMOD_BIAS_IAU2006","SEMOD_BIAS_DEFAULT","SEMOD_NJPLHOR","SEMOD_JPLHOR_LONG_AGREEMENT","SEMOD_JPLHOR_DEFAULT","SEMOD_NJPLHORA","SEMOD_JPLHORA_1","SEMOD_JPLHORA_2","SEMOD_JPLHORA_3","SEMOD_JPLHORA_DEFAULT","SEMOD_NDELTAT","SEMOD_DELTAT_STEPHENSON_MORRISON_1984","SEMOD_DELTAT_STEPHENSON_1997","SEMOD_DELTAT_STEPHENSON_MORRISON_2004","SEMOD_DELTAT_ESPENAK_MEEUS_2006","SEMOD_DELTAT_STEPHENSON_ETC_2016","SEMOD_DELTAT_DEFAULT","swe_azalt_rev","tjd_ut","calc_flag","geopos","xin","geoposPtr","ArrayPointer","xinPtr","_swe_azalt_rev","swe_azalt","atpress","attemp","_swe_azalt","swe_calc_pctr","tjd_et","ipl","iplctr","iflag","xxPtr","serrPtr","StringPointer","_swe_calc_pctr","errorMsg","swe_calc_ut","_swe_calc_ut","swe_calc","_swe_calc","swe_close","_swe_close","swe_cotrans_sp","xpo","eps","xpoPtr","xpnPtr","_swe_cotrans_sp","swe_cotrans","_swe_cotrans","swe_cs2degstr","csec","_swe_cs2degstr","swe_cs2lonlatstr","pchar","mchar","_swe_cs2lonlatstr","swe_cs2timestr","sep","suppresszero","TypeConverter","swe_csnorm","_swe_csnorm","swe_csroundsec","_swe_csroundsec","swe_d2l","_swe_d2l","swe_date_conversion","month","day","uttime","calendar","tjd","NumberPointer","_swe_date_conversion","swe_day_of_week","jd","_swe_day_of_week","swe_degnorm","deg","_swe_degnorm","swe_deltat_ex","serr","_swe_deltat_ex","swe_deltat","_swe_deltat","swe_difcs2n","csecP1","csecP2","_swe_difcs2n","swe_difcsn","_swe_difcsn","swe_difdeg2n","deg1","deg2","_swe_difdeg2n","swe_difdegn","_swe_difdegn","swe_fixstar_mag","star","mag","starPtr","_swe_fixstar_mag","star_name","swe_fixstar_ut","xx","_swe_fixstar_ut","swe_fixstar","_swe_fixstar","swe_fixstar2_mag","_swe_fixstar2_mag","magnitude","swe_fixstar2_ut","_swe_fixstar2_ut","swe_fixstar2","_swe_fixstar2","swe_gauquelin_sector","starname","imeth","starnamePtr","dgsect","_swe_gauquelin_sector","swe_get_ayanamsa_ex_ut","iflags","ayan","_swe_get_ayanamsa_ex_ut","swe_get_ayanamsa_ex","swe_get_ayanamsa_name","isidmode","_swe_get_ayanamsa_name","swe_get_ayanamsa_ut","_swe_get_ayanamsa_ut","swe_get_ayanamsa","_swe_get_ayanamsa","swe_get_current_file_data","ifno","tfstart","tfend","denum","_swe_get_current_file_data","swe_get_library_path","_swe_get_library_path","swe_get_orbital_elements","dataPtr","_swe_get_orbital_elements","toFixedLengthArray","swe_get_planet_name","planet","_swe_get_planet_name","swe_get_tid_acc","_swe_get_tid_acc","swe_heliacal_pheno_ut","dgeo","datm","dobs","object_name","event_type","hel_flag","dgeoPtr","datmPtr","dobsPtr","object_namePtr","retPtr","_swe_heliacal_pheno_ut","swe_heliacal_ut","_swe_heliacal_ut","swe_helio_cross_ut","x2cross","jd_ut","jd_cross","_swe_helio_cross_ut","swe_helio_cross","jd_et","_swe_helio_cross","swe_house_name","hsys","_swe_house_name","swe_house_pos","armc","geolat","xpin","xpinPtr","house","_swe_house_pos","swe_houses_armc_ex2","decl","cuspLen","cusps","cusp_speed","ascmc","ascmc_speed","_swe_houses_armc_ex2","swe_houses_armc","_swe_houses_armc","swe_houses_ex","geolon","_swe_houses_ex","swe_houses_ex2","_swe_houses_ex2","swe_houses","_swe_houses","swe_jdet_to_utc","gregflag","hour","minute","second","_swe_jdet_to_utc","swe_jdut1_to_utc","_swe_jdut1_to_utc","swe_julday","_swe_julday","swe_lat_to_lmt","tjd_lat","tjd_lmt","_swe_lat_to_lmt","swe_lmt_to_lat","_swe_lmt_to_lat","swe_lun_eclipse_how","ifl","_swe_lun_eclipse_how","swe_lun_eclipse_when_loc","tjd_start","backwards","_swe_lun_eclipse_when_loc","swe_lun_eclipse_when","ifltype","_swe_lun_eclipse_when","swe_lun_occult_when_glob","_swe_lun_occult_when_glob","swe_lun_occult_when_loc","_swe_lun_occult_when_loc","swe_lun_occult_where","_swe_lun_occult_where","swe_mooncross_node_ut","xlon","xlat","_swe_mooncross_node_ut","longitude","latitude","swe_mooncross_node","_swe_mooncross_node","swe_mooncross_ut","_swe_mooncross_ut","swe_mooncross","_swe_mooncross","swe_nod_aps_ut","method","asc","dsc","per","aph","_swe_nod_aps_ut","ascending","descending","perihelion","aphelion","swe_nod_aps","_swe_nod_aps","swe_orbit_max_min_true_distance","dmax","dmin","dtrue","_swe_orbit_max_min_true_distance","true","swe_pheno_ut","_swe_pheno_ut","swe_pheno","_swe_pheno","swe_radnorm","drad","_swe_radnorm","swe_refrac_extended","inalt","geoalt","lapse_rate","altitude","_swe_refrac_extended","extended","swe_refrac","_swe_refrac","swe_revjul","_swe_revjul","swe_rise_trans_true_hor","epheflag","rsmi","horhgt","_swe_rise_trans_true_hor","swe_rise_trans","_swe_rise_trans","swe_set_delta_t_userdef","t_acc","_swe_set_delta_t_userdef","swe_set_ephe_path","epheUrl","fileNames","epheDir","baseUrl","base_url","lastSegment","test","substring","lastIndexOf","getBaseURLPath","loaded","filePath","padEnd","ephePathPtr","_swe_set_ephe_path","swe_set_jpl_file","filePathPtr","_swe_set_jpl_file","swe_set_sid_mode","sid_mode","t0","ayan_t0","_swe_set_sid_mode","swe_set_tid_acc","_swe_set_tid_acc","swe_set_topo","elevation","_swe_set_topo","swe_sidtime","_swe_sidtime","swe_sidtime0","nut","_swe_sidtime0","swe_sol_eclipse_how","_swe_sol_eclipse_how","swe_sol_eclipse_when_glob","iftype","_swe_sol_eclipse_when_glob","swe_sol_eclipse_when_loc","tret","_swe_sol_eclipse_when_loc","eclipseContactTimes","eclipseAttributes","swe_sol_eclipse_where","_swe_sol_eclipse_where","swe_solcross_ut","_swe_solcross_ut","swe_solcross","_swe_solcross","swe_split_deg","ddeg","roundflag","sec","fraction","sign","_swe_split_deg","degree","swe_time_equ","_swe_time_equ","swe_utc_time_zone","iyear","imonth","iday","ihour","imin","dsec","d_timezone","seconds","_swe_utc_time_zone","swe_utc_to_jd","_swe_utc_to_jd","swe_version","version","_swe_version","swe_vis_limit_mag","objectname","helflag","objectnamePtr","_swe_vis_limit_mag"],"mappings":"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,SAAkBvE,EAAKc,EAAO,MAE9B,OADIA,EAAKosB,SAAS,OAAMpsB,EAAO,KACvBA,GACJ,IAAK,KAGL,IAAK,KACD,OAAOgJ,EAAeZ,EAAOlJ,GAEjC,IAAK,MACD,OAAO8J,EAAeV,EAAQpJ,GAAO,GAEzC,IAAK,MACD,OAAO8J,EAAeT,EAAQrJ,GAAO,GAEzC,IAAK,MACD,OAAO8J,EAAeL,EAAQzJ,GAAO,GAEzC,IAAK,QACD,OAAO8J,EAAeP,EAASvJ,GAAO,GAE1C,IAAK,SACD,OAAO8J,EAAeN,EAASxJ,GAAO,GAE1C,IAAK,IACD,OAAO8J,EAAeR,EAAStJ,GAAO,GAE1C,QACI8I,EAAM,8BAA8BhI,KAEhD,EA6nHAyD,EAAqB,aAAIhC,GAEzBgC,EAAqB,aAAIjC,GAEzBiC,EAAwB,gBAAIoP,GAE5BpP,EAAW,GAAIuN,GAEa,CACxB,gBACA,uBACA,yBACA,uBACA,yBACA,iBACA,iBACA,sBACA,6BACA,sBACA,aACA,cACA,cACA,aACA,SACA,gBACA,YACA,YACA,YACA,YACA,eACA,gBACA,gBACA,UACA,yBACA,eACA,UACA,kBACA,mBACA,uBACA,sBACA,mBACA,YACA,cACA,kBACA,oBACA,YACA,gBACA,eACA,YACA,aACA,cACA,eACA,aACA,QACA,QACA,0BACA,oBACA,iBACA,qBACA,cACA,iBACA,mBACA,gBACA,gBACA,gBACA,gBACA,mBACA,gBACA,gBACA,mBACA,kBACA,sBACA,qBACA,2BACA,yBACA,kBACA,wBACA,qBACA,6BACA,6BACA,0BACA,6BACA,iCACA,yCACA,4BACA,oCACA,oBACA,iCACA,yCACA,gCACA,wCACA,6BACA,qCACA,0BACA,mCACA,wBACA,eACA,wCACA,sBACA,iCACA,yCACA,wCACA,qBACA,gCACA,wCACA,6BACA,uBACA,+BACA,oCACA,uBACA,+BACA,uBACA,uBACA,eACA,eACA,4BACA,iBACA,yBACA,yBACA,iBACA,sBACA,4BACA,wBACA,uBACA,sBACA,aACA,cACA,gBACA,sBACA,gBACA,oBACA,kCACA,aACA,eACA,WACA,UACA,kBACA,mBACA,eACA,sBACA,yBACA,oBACA,sCACA,uCACA,kCACA,gCACA,wCACA,gCACA,kCACA,qBACA,gCACA,iCACA,iCACA,4BACA,0BACA,6CACA,uBACA,iCACA,+BACA,eACA,6BACA,qBACA,eACA,cACA,WACA,sBACA,qBACA,WACA,cAGkBtQ,QA/wItB,SAA8BkJ,GAC1BD,EAAuBC,EAAK,KAGxB,IAAIK,EAAM,KAAKL,mJAIX2pB,EAAgB3pB,EACf2pB,EAAc5tB,WAAW,OAC1B4tB,EAAgB,IAAM3pB,GAE1BK,GAAO,8CAA8CspB,MACjD7pB,EAA4BE,KAC5BK,GACI,4FAERC,GAASD,KAIbE,EAAwBP,EAC5B,GA2vIwB,CACpB,MACA,mBACA,sBACA,MACA,MACA,WACA,QACA,aACA,cACA,UACA,UACA,QACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,mBACA,mBACA,YACA,YACA,qBACA,YACA,eACA,cACA,aACA,aACA,MACA,cACA,WACA,MACA,YACA,UACA,SACA,WACA,qBACA,oBACA,YACA,cACA,YACA,YACA,yBACA,gBACA,cACA,eACA,mBACA,sBACA,OACA,UACA,cACA,oBACA,oBACA,qBACA,eACA,WACA,qBACA,wBACA,4BACA,0BACA,eACA,aACA,gBACA,UACA,WACA,iBACA,aACA,iBACA,wBACA,mBACA,aACA,yBACA,gBACA,kBACA,UACA,oBACA,oBACA,gBACA,eACA,gBACA,8BACA,OACA,qBACA,kBACA,gCACA,6BACA,WACA,iBACA,yBACA,iBACA,uBACA,aACA,0BACA,mBACA,YACA,gBACA,kBACA,cACA,UACA,YACA,aACA,aACA,eACA,eACA,iBACA,iBACA,uBACA,iBACA,oBACA,eACA,gBACA,aACA,cACA,iBACA,oBACA,gBACA,gBACA,iBACA,YACA,kBACA,YACA,WACA,YACA,cACA,cACA,YACA,cACA,6BACA,qBACA,eACA,eACA,eACA,aACA,mBACA,YACA,sBACA,eACA,kBACA,iBACA,eACA,eACA,uBACA,WACA,WACA,aACA,oBACA,eACA,eACA,YACA,WACA,aACA,YACA,WACA,YACA,kBACA,gBACA,YACA,WACA,WACA,aACA,YACA,WACA,aACA,cACA,UACA,WACA,WACA,aACA,WACA,YACA,YACA,aACA,WACA,YACA,YACA,gBACA,cACA,eACA,WACA,UACA,WACA,cACA,YACA,UACA,WACA,UACA,WACA,WACA,eACA,SACA,WACA,8BACA,0BACA,8BACA,2BACA,gBACA,UACA,UACA,gBACA,iBACA,gBACA,oBACA,mBACA,oBACA,kBACA,kBACA,gBACA,cACA,eACA,qBACA,QACA,MACA,SACA,SACA,uBACA,4BACA,0BACA,KACA,KACA,OACA,MACA,OACA,WACA,MACA,UACA,eACA,sBACA,QACA,WACA,WAGclJ,QAAQyJ,GAWN1G,EAAqB,aACrCgG,EAAuB,gBAEDhG,EAA2B,mBACjDgG,EAAuB,sBAENhG,EAAsB,cACvCgG,EAAuB,iBAERhG,EAAoB,YACnCgG,EAAuB,eAELhG,EAAuB,eACzCgG,EAAuB,kBAEVhG,EAAkB,UAAIgG,EAAuB,aAE5ChG,EAAmB,WACjCgG,EAAuB,cAENhG,EAAsB,cACvCgG,EAAuB,iBAEKhG,EAAiC,yBAC7DgG,EAAuB,4BAEAhG,EAA4B,oBACnDgG,EAAuB,uBAEGhG,EAA+B,uBACzDgG,EAAuB,0BAEHhG,EAAyB,iBAC7CgG,EAAuB,oBAEChG,EAA6B,qBACrDgG,EAAuB,wBAEPhG,EAAqB,aACrCgG,EAAuB,gBAEHhG,EAAyB,iBAC7CgG,EAAuB,oBAEPhG,EAAqB,aACrCgG,EAAuB,gBAEJhG,EAAwB,gBAC3CgG,EAAuB,mBAERhG,EAAoB,YACnCgG,EAAuB,eAENhG,EAAsB,cACvCgG,EAAuB,iBAEChG,EAA6B,qBACrDgG,EAAuB,wBAENhG,EAAsB,cACvCgG,EAAuB,iBAELhG,EAAuB,eACzCgG,EAAuB,kBAEJhG,EAAwB,gBAC3CgG,EAAuB,mBAEFhG,EAA0B,kBAC/CgG,EAAuB,qBAEChG,EAA6B,qBACrDgG,EAAuB,wBAEHhG,EAAyB,iBAC7Cg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","x_google_ignoreList":[0,1]}