UNPKG

libredwg-web-ts

Version:

A DWG/DXF JavaScript parser based on libredwg

1,361 lines 242 kB
var qI = Object.defineProperty; var OI = (g, Q, o) => Q in g ? qI(g, Q, { enumerable: !0, configurable: !0, writable: !0, value: o }) : g[Q] = o; var m = (g, Q, o) => OI(g, typeof Q != "symbol" ? Q + "" : Q, o); const vC = "*Model_Space", IB = "*Paper_Space"; var aI = /* @__PURE__ */ ((g) => (g[g.Rotated = 0] = "Rotated", g[g.Aligned = 1] = "Aligned", g[g.Angular = 2] = "Angular", g[g.Diameter = 3] = "Diameter", g[g.Radius = 4] = "Radius", g[g.Angular3Point = 5] = "Angular3Point", g[g.Ordinate = 6] = "Ordinate", g[g.ReferenceIsExclusive = 32] = "ReferenceIsExclusive", g[g.IsOrdinateXTypeFlag = 64] = "IsOrdinateXTypeFlag", g[g.IsCustomTextPositionFlag = 128] = "IsCustomTextPositionFlag", g))(aI || {}), tA = /* @__PURE__ */ ((g) => (g[g.TopLeft = 1] = "TopLeft", g[g.TopCenter = 2] = "TopCenter", g[g.TopRight = 3] = "TopRight", g[g.MiddleLeft = 4] = "MiddleLeft", g[g.MiddleCenter = 5] = "MiddleCenter", g[g.MiddleRight = 6] = "MiddleRight", g[g.BottomLeft = 7] = "BottomLeft", g[g.BottomCenter = 8] = "BottomCenter", g[g.BottomRight = 9] = "BottomRight", g))(tA || {}), vI = /* @__PURE__ */ ((g) => (g[g.AtLeast = 1] = "AtLeast", g[g.Exact = 2] = "Exact", g))(vI || {}), tI = /* @__PURE__ */ ((g) => (g[g.Center = 0] = "Center", g[g.Above = 1] = "Above", g[g.Outside = 2] = "Outside", g[g.JIS = 3] = "JIS", g[g.Below = 4] = "Below", g))(tI || {}), jI = /* @__PURE__ */ ((g) => (g[g.Feet = 0] = "Feet", g[g.None = 1] = "None", g[g.Inch = 2] = "Inch", g[g.FeetAndInch = 3] = "FeetAndInch", g[g.Leading = 4] = "Leading", g[g.Trailing = 8] = "Trailing", g[g.LeadingAndTrailing = 12] = "LeadingAndTrailing", g))(jI || {}), PI = /* @__PURE__ */ ((g) => (g[g.None = 0] = "None", g[g.Leading = 1] = "Leading", g[g.Trailing = 2] = "Trailing", g[g.LeadingAndTrailing = 3] = "LeadingAndTrailing", g))(PI || {}), pI = /* @__PURE__ */ ((g) => (g[g.Center = 0] = "Center", g[g.Left = 1] = "Left", g[g.Right = 2] = "Right", g[g.OverFirst = 3] = "OverFirst", g[g.OverSecond = 4] = "OverSecond", g))(pI || {}), VI = /* @__PURE__ */ ((g) => (g[g.Bottom = 0] = "Bottom", g[g.Center = 1] = "Center", g[g.Top = 2] = "Top", g))(VI || {}), QC = /* @__PURE__ */ ((g) => (g[g.PatternFill = 0] = "PatternFill", g[g.SolidFill = 1] = "SolidFill", g))(QC || {}), IC = /* @__PURE__ */ ((g) => (g[g.NonAssociative = 0] = "NonAssociative", g[g.Associative = 1] = "Associative", g))(IC || {}), dI = /* @__PURE__ */ ((g) => (g[g.Normal = 0] = "Normal", g[g.Outer = 1] = "Outer", g[g.Ignore = 2] = "Ignore", g))(dI || {}), ZI = /* @__PURE__ */ ((g) => (g[g.UserDefined = 0] = "UserDefined", g[g.Predefined = 1] = "Predefined", g[g.Custom = 2] = "Custom", g))(ZI || {}), TI = /* @__PURE__ */ ((g) => (g[g.NotAnnotated = 0] = "NotAnnotated", g[g.Annotated = 1] = "Annotated", g))(TI || {}), lI = /* @__PURE__ */ ((g) => (g[g.Solid = 0] = "Solid", g[g.Gradient = 1] = "Gradient", g))(lI || {}), WI = /* @__PURE__ */ ((g) => (g[g.TwoColor = 0] = "TwoColor", g[g.OneColor = 1] = "OneColor", g))(WI || {}), fI = /* @__PURE__ */ ((g) => (g[g.Default = 0] = "Default", g[g.External = 1] = "External", g[g.Polyline = 2] = "Polyline", g[g.Derived = 4] = "Derived", g[g.Textbox = 8] = "Textbox", g[g.Outermost = 16] = "Outermost", g))(fI || {}), mA = /* @__PURE__ */ ((g) => (g[g.Line = 1] = "Line", g[g.Circular = 2] = "Circular", g[g.Elliptic = 3] = "Elliptic", g[g.Spline = 4] = "Spline", g))(mA || {}), zI = /* @__PURE__ */ ((g) => (g[g.CLOSED_POLYLINE = 1] = "CLOSED_POLYLINE", g[g.CURVE_FIT = 2] = "CURVE_FIT", g[g.SPLINE_FIT = 4] = "SPLINE_FIT", g[g.POLYLINE_3D = 8] = "POLYLINE_3D", g[g.POLYGON_3D = 16] = "POLYGON_3D", g[g.CLOSED_POLYGON = 32] = "CLOSED_POLYGON", g[g.POLYFACE = 64] = "POLYFACE", g[g.CONTINUOUS = 128] = "CONTINUOUS", g))(zI || {}), tC = /* @__PURE__ */ ((g) => (g[g.NONE = 0] = "NONE", g[g.QUADRATIC = 5] = "QUADRATIC", g[g.CUBIC = 6] = "CUBIC", g[g.BEZIER = 8] = "BEZIER", g))(tC || {}), bI = /* @__PURE__ */ ((g) => (g[g.NONE = 0] = "NONE", g[g.MIRRORED_X = 2] = "MIRRORED_X", g[g.MIRRORED_Y = 4] = "MIRRORED_Y", g))(bI || {}), BC = /* @__PURE__ */ ((g) => (g[g.LEFT = 0] = "LEFT", g[g.CENTER = 1] = "CENTER", g[g.RIGHT = 2] = "RIGHT", g[g.ALIGNED = 3] = "ALIGNED", g[g.MIDDLE = 4] = "MIDDLE", g[g.FIT = 5] = "FIT", g))(BC || {}), xI = /* @__PURE__ */ ((g) => (g[g.BASELINE = 0] = "BASELINE", g[g.BOTTOM = 1] = "BOTTOM", g[g.MIDDLE = 2] = "MIDDLE", g[g.TOP = 3] = "TOP", g))(xI || {}); const rI = Object.freeze([ "ACADMAINTVER", "ACADVER", "ANGBASE", "ANGDIR", "ATTMODE", "AUNITS", "AUPREC", "CECOLOR", "CELTSCALE", "CELTYPE", "CELWEIGHT", "CEPSNID", "CEPSNTYPE", "CHAMFERA", "CHAMFERB", "CHAMFERC", "CHAMFERD", "CLAYER", "CMLJUST", "CMLSCALE", "CMLSTYLE", "CSHADOW", "DIMADEC", "DIMALT", "DIMALTD", "DIMALTF", "DIMALTRND", "DIMALTTD", "DIMALTTZ", "DIMALTU", "DIMALTZ", "DIMAPOST", "DIMASO", "DIMASSOC", "DIMASZ", "DIMATFIT", "DIMAUNIT", "DIMAZIN", "DIMBLK", "DIMBLK1", "DIMBLK2", "DIMCEN", "DIMCLRD", "DIMCLRE", "DIMCLRT", "DIMDEC", "DIMDLE", "DIMDLI", "DIMDSEP", "DIMEXE", "DIMEXO", "DIMFAC", "DIMGAP", "DIMJUST", "DIMLDRBLK", "DIMLFAC", "DIMLIM", "DIMLUNIT", "DIMLWD", "DIMLWE", "DIMPOST", "DIMRND", "DIMSAH", "DIMSCALE", "DIMSD1", "DIMSD2", "DIMSE1", "DIMSE2", "DIMSHO", "DIMSOXD", "DIMSTYLE", "DIMTAD", "DIMTDEC", "DIMTFAC", "DIMTIH", "DIMTIX", "DIMTM", "DIMTMOVE", "DIMTOFL", "DIMTOH", "DIMTOL", "DIMTOLJ", "DIMTP", "DIMTSZ", "DIMTVP", "DIMTXSTY", "DIMTXT", "DIMTZIN", "DIMUPT", "DIMZIN", "DISPSILH", "DRAGVS", "DWGCODEPAGE", "ELEVATION", "ENDCAPS", "EXTMAX", "EXTMIN", "EXTNAMES", "FILLETRAD", "FILLMODE", "FINGERPRINTGUID", "HALOGAP", "HANDSEED", "HIDETEXT", "HYPERLINKBASE", "INDEXCTL", "INSBASE", "INSUNITS", "INTERFERECOLOR", "INTERFEREOBJVS", "INTERFEREVPVS", "INTERSECTIONCOLOR", "INTERSECTIONDISPLAY", "JOINSTYLE", "LIMCHECK", "LIMMAX", "LIMMIN", "LTSCALE", "LUNITS", "LUPREC", "LWDISPLAY", "MAXACTVP", "MEASUREMENT", "MENU", "MIRRTEXT", "OBSCOLOR", "OBSLTYPE", "ORTHOMODE", "PDMODE", "PDSIZE", "PELEVATION", "PEXTMAX", "PEXTMIN", "PINSBASE", "PLIMCHECK", "PLIMMAX", "PLIMMIN", "PLINEGEN", "PLINEWID", "PROJECTNAME", "PROXYGRAPHICS", "PSLTSCALE", "PSTYLEMODE", "PSVPSCALE", "PUCSBASE", "PUCSNAME", "PUCSORG", "PUCSORGBACK", "PUCSORGBOTTOM", "PUCSORGFRONT", "PUCSORGLEFT", "PUCSORGRIGHT", "PUCSORGTOP", "PUCSORTHOREF", "PUCSORTHOVIEW", "PUCSXDIR", "PUCSYDIR", "QTEXTMODE", "REGENMODE", "SHADEDGE", "SHADEDIF", "SHADOWPLANELOCATION", "SKETCHINC", "SKPOLY", "SORTENTS", "SPLINESEGS", "SPLINETYPE", "SURFTAB1", "SURFTAB2", "SURFTYPE", "SURFU", "SURFV", "TDCREATE", "TDINDWG", "TDUCREATE", "TDUPDATE", "TDUSRTIMER", "TDUUPDATE", "TEXTSIZE", "TEXTSTYLE", "THICKNESS", "TILEMODE", "TRACEWID", "TREEDEPTH", "UCSBASE", "UCSNAME", "UCSORG", "UCSORGBACK", "UCSORGBOTTOM", "UCSORGFRONT", "UCSORGLEFT", "UCSORGRIGHT", "UCSORGTOP", "UCSORTHOREF", "UCSORTHOVIEW", "UCSXDIR", "UCSYDIR", "UNITMODE", "USERI1", "USERI2", "USERI3", "USERI4", "USERI5", "USERR1", "USERR2", "USERR3", "USERR4", "USERR5", "USRTIMER", "VERSIONGUID", "VISRETAIN", "WORLDVIEW", "XCLIPFRAME", "XEDIT" ]); var eI = (() => { var g = import.meta.url; return async function(Q = {}) { var o, I = Q, G, N, U = new Promise((A, C) => { G = A, N = C; }), F = typeof window == "object", h = typeof WorkerGlobalScope < "u", i = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string" && process.type != "renderer"; if (i) { const { createRequire: A } = await Promise.resolve().then(() => CB); var c = A(import.meta.url); } var M = Object.assign({}, I), y = "./this.program", S = ""; function t(A) { return I.locateFile ? I.locateFile(A, S) : S + A; } var s, J; if (i) { var P = c("fs"), T = c("path"); import.meta.url.startsWith("data:") || (S = T.dirname(c("url").fileURLToPath(import.meta.url)) + "/"), J = (A) => { A = YA(A) ? new URL(A) : A; var C = P.readFileSync(A); return C; }, s = async (A, C = !0) => { A = YA(A) ? new URL(A) : A; var B = P.readFileSync(A, C ? void 0 : "utf8"); return B; }, !I.thisProgram && process.argv.length > 1 && (y = process.argv[1].replace(/\\/g, "/")), process.argv.slice(2); } else (F || h) && (h ? S = self.location.href : typeof document < "u" && document.currentScript && (S = document.currentScript.src), g && (S = g), S.startsWith("blob:") ? S = "" : S = S.slice(0, S.replace(/[?#].*/, "").lastIndexOf("/") + 1), h && (J = (A) => { var C = new XMLHttpRequest(); return C.open("GET", A, !1), C.responseType = "arraybuffer", C.send(null), new Uint8Array(C.response); }), s = async (A) => { if (YA(A)) return new Promise((B, E) => { var w = new XMLHttpRequest(); w.open("GET", A, !0), w.responseType = "arraybuffer", w.onload = () => { if (w.status == 200 || w.status == 0 && w.response) { B(w.response); return; } E(w.status); }, w.onerror = E, w.send(null); }); var C = await fetch(A, { credentials: "same-origin" }); if (C.ok) return C.arrayBuffer(); throw new Error(C.status + " : " + C.url); }); var d = I.print || console.log.bind(console), Z = I.printErr || console.error.bind(console); Object.assign(I, M), M = null, I.arguments && I.arguments, I.thisProgram && (y = I.thisProgram); var f = I.wasmBinary, r, QA = !1, b, X, gA, DA, a, l, LA, IA, jA, yA, YA = (A) => A.startsWith("file://"); function PA() { var A = r.buffer; I.HEAP8 = b = new Int8Array(A), I.HEAP16 = gA = new Int16Array(A), I.HEAPU8 = X = new Uint8Array(A), I.HEAPU16 = DA = new Uint16Array(A), I.HEAP32 = a = new Int32Array(A), I.HEAPU32 = l = new Uint32Array(A), I.HEAPF32 = LA = new Float32Array(A), I.HEAPF64 = yA = new Float64Array(A), I.HEAP64 = IA = new BigInt64Array(A), I.HEAPU64 = jA = new BigUint64Array(A); } function pA() { if (I.preRun) for (typeof I.preRun == "function" && (I.preRun = [I.preRun]); I.preRun.length; ) Og(I.preRun.shift()); XA($A); } function TA() { !I.noFSInit && !D.initialized && D.init(), wA.__wasm_call_ctors(), D.ignorePermissions = !1; } function Hg() { if (I.postRun) for (typeof I.postRun == "function" && (I.postRun = [I.postRun]); I.postRun.length; ) qg(I.postRun.shift()); XA(_A); } var NA = 0, JA = null; function nA(A) { var C; NA++, (C = I.monitorRunDependencies) == null || C.call(I, NA); } function lA(A) { var B; if (NA--, (B = I.monitorRunDependencies) == null || B.call(I, NA), NA == 0 && JA) { var C = JA; JA = null, C(); } } function sA(A) { var B; (B = I.onAbort) == null || B.call(I, A), A = "Aborted(" + A + ")", Z(A), QA = !0, A += ". Build with -sASSERTIONS for more info."; var C = new WebAssembly.RuntimeError(A); throw N(C), C; } var WA; function cg() { return I.locateFile ? t("libredwg-web.wasm") : "/wasm/libredwg-web.wasm"; } function Sg(A) { if (A == WA && f) return new Uint8Array(f); if (J) return J(A); throw "both async and sync fetching of the wasm failed"; } async function Lg(A) { if (!f) try { var C = await s(A); return new Uint8Array(C); } catch { } return Sg(A); } async function yg(A, C) { try { var B = await Lg(A), E = await WebAssembly.instantiate(B, C); return E; } catch (w) { Z(`failed to asynchronously prepare wasm: ${w}`), sA(w); } } async function Jg(A, C, B) { if (!A && typeof WebAssembly.instantiateStreaming == "function" && !YA(C) && !i) try { var E = fetch(C, { credentials: "same-origin" }), w = await WebAssembly.instantiateStreaming(E, B); return w; } catch (K) { Z(`wasm streaming compile failed: ${K}`), Z("falling back to ArrayBuffer instantiation"); } return yg(C, B); } function sg() { return { env: MC, wasi_snapshot_preview1: MC }; } async function Mg() { function A(K, Y) { return wA = K.exports, r = wA.memory, PA(), kC = wA.__indirect_function_table, lA(), wA; } nA(); function C(K) { return A(K.instance); } var B = sg(); if (I.instantiateWasm) return new Promise((K, Y) => { I.instantiateWasm(B, (k, R) => { A(k), K(k.exports); }); }); WA ?? (WA = cg()); try { var E = await Jg(f, WA, B), w = C(E); return w; } catch (K) { return N(K), Promise.reject(K); } } var XA = (A) => { for (; A.length > 0; ) A.shift()(I); }, _A = [], qg = (A) => _A.unshift(A), $A = [], Og = (A) => $A.unshift(A); I.noExitRuntime; function ag(A, C, B = "i8") { switch (B.endsWith("*") && (B = "*"), B) { case "i1": b[A] = C; break; case "i8": b[A] = C; break; case "i16": gA[A >> 1] = C; break; case "i32": a[A >> 2] = C; break; case "i64": IA[A >> 3] = BigInt(C); break; case "float": LA[A >> 2] = C; break; case "double": yA[A >> 3] = C; break; case "*": l[A >> 2] = C; break; default: sA(`invalid type for setValue: ${B}`); } } var vg = (A) => JI(A), tg = () => MI(), Ag = typeof TextDecoder < "u" ? new TextDecoder() : void 0, iA = (A, C = 0, B = NaN) => { for (var E = C + B, w = C; A[w] && !(w >= E); ) ++w; if (w - C > 16 && A.buffer && Ag) return Ag.decode(A.subarray(C, w)); for (var K = ""; C < w; ) { var Y = A[C++]; if (!(Y & 128)) { K += String.fromCharCode(Y); continue; } var k = A[C++] & 63; if ((Y & 224) == 192) { K += String.fromCharCode((Y & 31) << 6 | k); continue; } var R = A[C++] & 63; if ((Y & 240) == 224 ? Y = (Y & 15) << 12 | k << 6 | R : Y = (Y & 7) << 18 | k << 12 | R << 6 | A[C++] & 63, Y < 65536) K += String.fromCharCode(Y); else { var H = Y - 65536; K += String.fromCharCode(55296 | H >> 10, 56320 | H & 1023); } } return K; }, kA = (A, C) => A ? iA(X, A, C) : "", jg = (A, C, B, E) => sA(`Assertion failed: ${kA(A)}, at: ` + [C ? kA(C) : "unknown filename", B, E ? kA(E) : "unknown function"]); class Pg { constructor(C) { this.excPtr = C, this.ptr = C - 24; } set_type(C) { l[this.ptr + 4 >> 2] = C; } get_type() { return l[this.ptr + 4 >> 2]; } set_destructor(C) { l[this.ptr + 8 >> 2] = C; } get_destructor() { return l[this.ptr + 8 >> 2]; } set_caught(C) { C = C ? 1 : 0, b[this.ptr + 12] = C; } get_caught() { return b[this.ptr + 12] != 0; } set_rethrown(C) { C = C ? 1 : 0, b[this.ptr + 13] = C; } get_rethrown() { return b[this.ptr + 13] != 0; } init(C, B) { this.set_adjusted_ptr(0), this.set_type(C), this.set_destructor(B); } set_adjusted_ptr(C) { l[this.ptr + 16 >> 2] = C; } get_adjusted_ptr() { return l[this.ptr + 16 >> 2]; } } var gg = 0, pg = (A, C, B) => { var E = new Pg(A); throw E.init(C, B), gg = A, gg; }, VA = () => { var A = a[+u.varargs >> 2]; return u.varargs += 4, A; }, HA = VA, x = { isAbs: (A) => A.charAt(0) === "/", splitPath: (A) => { var C = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; return C.exec(A).slice(1); }, normalizeArray: (A, C) => { for (var B = 0, E = A.length - 1; E >= 0; E--) { var w = A[E]; w === "." ? A.splice(E, 1) : w === ".." ? (A.splice(E, 1), B++) : B && (A.splice(E, 1), B--); } if (C) for (; B; B--) A.unshift(".."); return A; }, normalize: (A) => { var C = x.isAbs(A), B = A.slice(-1) === "/"; return A = x.normalizeArray(A.split("/").filter((E) => !!E), !C).join("/"), !A && !C && (A = "."), A && B && (A += "/"), (C ? "/" : "") + A; }, dirname: (A) => { var C = x.splitPath(A), B = C[0], E = C[1]; return !B && !E ? "." : (E && (E = E.slice(0, -1)), B + E); }, basename: (A) => A && A.match(/([^\/]+|\/)\/*$/)[1], join: (...A) => x.normalize(A.join("/")), join2: (A, C) => x.normalize(A + "/" + C) }, Vg = () => { if (i) { var A = c("crypto"); return (C) => A.randomFillSync(C); } return (C) => crypto.getRandomValues(C); }, Cg = (A) => { (Cg = Vg())(A); }, cA = { resolve: (...A) => { for (var C = "", B = !1, E = A.length - 1; E >= -1 && !B; E--) { var w = E >= 0 ? A[E] : D.cwd(); if (typeof w != "string") throw new TypeError("Arguments to path.resolve must be strings"); if (!w) return ""; C = w + "/" + C, B = x.isAbs(w); } return C = x.normalizeArray(C.split("/").filter((K) => !!K), !B).join("/"), (B ? "/" : "") + C || "."; }, relative: (A, C) => { A = cA.resolve(A).slice(1), C = cA.resolve(C).slice(1); function B(H) { for (var L = 0; L < H.length && H[L] === ""; L++) ; for (var q = H.length - 1; q >= 0 && H[q] === ""; q--) ; return L > q ? [] : H.slice(L, q - L + 1); } for (var E = B(A.split("/")), w = B(C.split("/")), K = Math.min(E.length, w.length), Y = K, k = 0; k < K; k++) if (E[k] !== w[k]) { Y = k; break; } for (var R = [], k = Y; k < E.length; k++) R.push(".."); return R = R.concat(w.slice(Y)), R.join("/"); } }, fA = [], MA = (A) => { for (var C = 0, B = 0; B < A.length; ++B) { var E = A.charCodeAt(B); E <= 127 ? C++ : E <= 2047 ? C += 2 : E >= 55296 && E <= 57343 ? (C += 4, ++B) : C += 3; } return C; }, zA = (A, C, B, E) => { if (!(E > 0)) return 0; for (var w = B, K = B + E - 1, Y = 0; Y < A.length; ++Y) { var k = A.charCodeAt(Y); if (k >= 55296 && k <= 57343) { var R = A.charCodeAt(++Y); k = 65536 + ((k & 1023) << 10) | R & 1023; } if (k <= 127) { if (B >= K) break; C[B++] = k; } else if (k <= 2047) { if (B + 1 >= K) break; C[B++] = 192 | k >> 6, C[B++] = 128 | k & 63; } else if (k <= 65535) { if (B + 2 >= K) break; C[B++] = 224 | k >> 12, C[B++] = 128 | k >> 6 & 63, C[B++] = 128 | k & 63; } else { if (B + 3 >= K) break; C[B++] = 240 | k >> 18, C[B++] = 128 | k >> 12 & 63, C[B++] = 128 | k >> 6 & 63, C[B++] = 128 | k & 63; } } return C[B] = 0, B - w; }, Qg = (A, C, B) => { var E = MA(A) + 1, w = new Array(E), K = zA(A, w, 0, w.length); return w.length = K, w; }, dg = () => { if (!fA.length) { var A = null; if (i) { var C = 256, B = Buffer.alloc(C), E = 0, w = process.stdin.fd; try { E = P.readSync(w, B, 0, C); } catch (K) { if (K.toString().includes("EOF")) E = 0; else throw K; } E > 0 && (A = B.slice(0, E).toString("utf-8")); } else typeof window < "u" && typeof window.prompt == "function" && (A = window.prompt("Input: "), A !== null && (A += ` `)); if (!A) return null; fA = Qg(A); } return fA.shift(); }, RA = { ttys: [], init() { }, shutdown() { }, register(A, C) { RA.ttys[A] = { input: [], output: [], ops: C }, D.registerDevice(A, RA.stream_ops); }, stream_ops: { open(A) { var C = RA.ttys[A.node.rdev]; if (!C) throw new D.ErrnoError(43); A.tty = C, A.seekable = !1; }, close(A) { A.tty.ops.fsync(A.tty); }, fsync(A) { A.tty.ops.fsync(A.tty); }, read(A, C, B, E, w) { if (!A.tty || !A.tty.ops.get_char) throw new D.ErrnoError(60); for (var K = 0, Y = 0; Y < E; Y++) { var k; try { k = A.tty.ops.get_char(A.tty); } catch { throw new D.ErrnoError(29); } if (k === void 0 && K === 0) throw new D.ErrnoError(6); if (k == null) break; K++, C[B + Y] = k; } return K && (A.node.atime = Date.now()), K; }, write(A, C, B, E, w) { if (!A.tty || !A.tty.ops.put_char) throw new D.ErrnoError(60); try { for (var K = 0; K < E; K++) A.tty.ops.put_char(A.tty, C[B + K]); } catch { throw new D.ErrnoError(29); } return E && (A.node.mtime = A.node.ctime = Date.now()), K; } }, default_tty_ops: { get_char(A) { return dg(); }, put_char(A, C) { C === null || C === 10 ? (d(iA(A.output)), A.output = []) : C != 0 && A.output.push(C); }, fsync(A) { var C; ((C = A.output) == null ? void 0 : C.length) > 0 && (d(iA(A.output)), A.output = []); }, ioctl_tcgets(A) { return { c_iflag: 25856, c_oflag: 5, c_cflag: 191, c_lflag: 35387, c_cc: [3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }; }, ioctl_tcsets(A, C, B) { return 0; }, ioctl_tiocgwinsz(A) { return [24, 80]; } }, default_tty1_ops: { put_char(A, C) { C === null || C === 10 ? (Z(iA(A.output)), A.output = []) : C != 0 && A.output.push(C); }, fsync(A) { var C; ((C = A.output) == null ? void 0 : C.length) > 0 && (Z(iA(A.output)), A.output = []); } } }, Zg = (A, C) => Math.ceil(A / C) * C, Ig = (A) => { sA(); }, V = { ops_table: null, mount(A) { return V.createNode(null, "/", 16895, 0); }, createNode(A, C, B, E) { if (D.isBlkdev(B) || D.isFIFO(B)) throw new D.ErrnoError(63); V.ops_table || (V.ops_table = { dir: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr, lookup: V.node_ops.lookup, mknod: V.node_ops.mknod, rename: V.node_ops.rename, unlink: V.node_ops.unlink, rmdir: V.node_ops.rmdir, readdir: V.node_ops.readdir, symlink: V.node_ops.symlink }, stream: { llseek: V.stream_ops.llseek } }, file: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr }, stream: { llseek: V.stream_ops.llseek, read: V.stream_ops.read, write: V.stream_ops.write, allocate: V.stream_ops.allocate, mmap: V.stream_ops.mmap, msync: V.stream_ops.msync } }, link: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr, readlink: V.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: V.node_ops.getattr, setattr: V.node_ops.setattr }, stream: D.chrdev_stream_ops } }); var w = D.createNode(A, C, B, E); return D.isDir(w.mode) ? (w.node_ops = V.ops_table.dir.node, w.stream_ops = V.ops_table.dir.stream, w.contents = {}) : D.isFile(w.mode) ? (w.node_ops = V.ops_table.file.node, w.stream_ops = V.ops_table.file.stream, w.usedBytes = 0, w.contents = null) : D.isLink(w.mode) ? (w.node_ops = V.ops_table.link.node, w.stream_ops = V.ops_table.link.stream) : D.isChrdev(w.mode) && (w.node_ops = V.ops_table.chrdev.node, w.stream_ops = V.ops_table.chrdev.stream), w.atime = w.mtime = w.ctime = Date.now(), A && (A.contents[C] = w, A.atime = A.mtime = A.ctime = w.atime), w; }, getFileDataAsTypedArray(A) { return A.contents ? A.contents.subarray ? A.contents.subarray(0, A.usedBytes) : new Uint8Array(A.contents) : new Uint8Array(0); }, expandFileStorage(A, C) { var B = A.contents ? A.contents.length : 0; if (!(B >= C)) { var E = 1024 * 1024; C = Math.max(C, B * (B < E ? 2 : 1.125) >>> 0), B != 0 && (C = Math.max(C, 256)); var w = A.contents; A.contents = new Uint8Array(C), A.usedBytes > 0 && A.contents.set(w.subarray(0, A.usedBytes), 0); } }, resizeFileStorage(A, C) { if (A.usedBytes != C) if (C == 0) A.contents = null, A.usedBytes = 0; else { var B = A.contents; A.contents = new Uint8Array(C), B && A.contents.set(B.subarray(0, Math.min(C, A.usedBytes))), A.usedBytes = C; } }, node_ops: { getattr(A) { var C = {}; return C.dev = D.isChrdev(A.mode) ? A.id : 1, C.ino = A.id, C.mode = A.mode, C.nlink = 1, C.uid = 0, C.gid = 0, C.rdev = A.rdev, D.isDir(A.mode) ? C.size = 4096 : D.isFile(A.mode) ? C.size = A.usedBytes : D.isLink(A.mode) ? C.size = A.link.length : C.size = 0, C.atime = new Date(A.atime), C.mtime = new Date(A.mtime), C.ctime = new Date(A.ctime), C.blksize = 4096, C.blocks = Math.ceil(C.size / C.blksize), C; }, setattr(A, C) { for (const B of ["mode", "atime", "mtime", "ctime"]) C[B] != null && (A[B] = C[B]); C.size !== void 0 && V.resizeFileStorage(A, C.size); }, lookup(A, C) { throw V.doesNotExistError; }, mknod(A, C, B, E) { return V.createNode(A, C, B, E); }, rename(A, C, B) { var E; try { E = D.lookupNode(C, B); } catch { } if (E) { if (D.isDir(A.mode)) for (var w in E.contents) throw new D.ErrnoError(55); D.hashRemoveNode(E); } delete A.parent.contents[A.name], C.contents[B] = A, A.name = B, C.ctime = C.mtime = A.parent.ctime = A.parent.mtime = Date.now(); }, unlink(A, C) { delete A.contents[C], A.ctime = A.mtime = Date.now(); }, rmdir(A, C) { var B = D.lookupNode(A, C); for (var E in B.contents) throw new D.ErrnoError(55); delete A.contents[C], A.ctime = A.mtime = Date.now(); }, readdir(A) { return [".", "..", ...Object.keys(A.contents)]; }, symlink(A, C, B) { var E = V.createNode(A, C, 41471, 0); return E.link = B, E; }, readlink(A) { if (!D.isLink(A.mode)) throw new D.ErrnoError(28); return A.link; } }, stream_ops: { read(A, C, B, E, w) { var K = A.node.contents; if (w >= A.node.usedBytes) return 0; var Y = Math.min(A.node.usedBytes - w, E); if (Y > 8 && K.subarray) C.set(K.subarray(w, w + Y), B); else for (var k = 0; k < Y; k++) C[B + k] = K[w + k]; return Y; }, write(A, C, B, E, w, K) { if (C.buffer === b.buffer && (K = !1), !E) return 0; var Y = A.node; if (Y.mtime = Y.ctime = Date.now(), C.subarray && (!Y.contents || Y.contents.subarray)) { if (K) return Y.contents = C.subarray(B, B + E), Y.usedBytes = E, E; if (Y.usedBytes === 0 && w === 0) return Y.contents = C.slice(B, B + E), Y.usedBytes = E, E; if (w + E <= Y.usedBytes) return Y.contents.set(C.subarray(B, B + E), w), E; } if (V.expandFileStorage(Y, w + E), Y.contents.subarray && C.subarray) Y.contents.set(C.subarray(B, B + E), w); else for (var k = 0; k < E; k++) Y.contents[w + k] = C[B + k]; return Y.usedBytes = Math.max(Y.usedBytes, w + E), E; }, llseek(A, C, B) { var E = C; if (B === 1 ? E += A.position : B === 2 && D.isFile(A.node.mode) && (E += A.node.usedBytes), E < 0) throw new D.ErrnoError(28); return E; }, allocate(A, C, B) { V.expandFileStorage(A.node, C + B), A.node.usedBytes = Math.max(A.node.usedBytes, C + B); }, mmap(A, C, B, E, w) { if (!D.isFile(A.node.mode)) throw new D.ErrnoError(43); var K, Y, k = A.node.contents; if (!(w & 2) && k && k.buffer === b.buffer) Y = !1, K = k.byteOffset; else { if (Y = !0, K = Ig(), !K) throw new D.ErrnoError(48); k && ((B > 0 || B + C < k.length) && (k.subarray ? k = k.subarray(B, B + C) : k = Array.prototype.slice.call(k, B, B + C)), b.set(k, K)); } return { ptr: K, allocated: Y }; }, msync(A, C, B, E, w) { return V.stream_ops.write(A, C, 0, E, B, !1), 0; } } }, Tg = async (A) => { var C = await s(A); return new Uint8Array(C); }, lg = (A, C, B, E, w, K) => { D.createDataFile(A, C, B, E, w, K); }, Wg = I.preloadPlugins || [], fg = (A, C, B, E) => { typeof Browser < "u" && Browser.init(); var w = !1; return Wg.forEach((K) => { w || K.canHandle(C) && (K.handle(A, C, B, E), w = !0); }), w; }, zg = (A, C, B, E, w, K, Y, k, R, H) => { var L = C ? cA.resolve(x.join2(A, C)) : A; function q(p) { function O(v) { H == null || H(), k || lg(A, C, v, E, w, R), K == null || K(), lA(); } fg(p, L, O, () => { Y == null || Y(), lA(); }) || O(p); } nA(), typeof B == "string" ? Tg(B).then(q, Y) : q(B); }, PC = (A) => { var C = { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 }, B = C[A]; if (typeof B > "u") throw new Error(`Unknown file open mode: ${A}`); return B; }, bg = (A, C) => { var B = 0; return A && (B |= 365), C && (B |= 146), B; }, D = { root: null, mounts: [], devices: {}, streams: [], nextInode: 1, nameTable: null, currentPath: "/", initialized: !1, ignorePermissions: !0, ErrnoError: class { constructor(A) { m(this, "name", "ErrnoError"); this.errno = A; } }, filesystems: null, syncFSRequests: 0, readFiles: {}, FSStream: class { constructor() { m(this, "shared", {}); } get object() { return this.node; } set object(A) { this.node = A; } get isRead() { return (this.flags & 2097155) !== 1; } get isWrite() { return (this.flags & 2097155) !== 0; } get isAppend() { return this.flags & 1024; } get flags() { return this.shared.flags; } set flags(A) { this.shared.flags = A; } get position() { return this.shared.position; } set position(A) { this.shared.position = A; } }, FSNode: class { constructor(A, C, B, E) { m(this, "node_ops", {}); m(this, "stream_ops", {}); m(this, "readMode", 365); m(this, "writeMode", 146); m(this, "mounted", null); A || (A = this), this.parent = A, this.mount = A.mount, this.id = D.nextInode++, this.name = C, this.mode = B, this.rdev = E, this.atime = this.mtime = this.ctime = Date.now(); } get read() { return (this.mode & this.readMode) === this.readMode; } set read(A) { A ? this.mode |= this.readMode : this.mode &= ~this.readMode; } get write() { return (this.mode & this.writeMode) === this.writeMode; } set write(A) { A ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; } get isFolder() { return D.isDir(this.mode); } get isDevice() { return D.isChrdev(this.mode); } }, lookupPath(A, C = {}) { if (!A) throw new D.ErrnoError(44); C.follow_mount ?? (C.follow_mount = !0), x.isAbs(A) || (A = D.cwd() + "/" + A); A: for (var B = 0; B < 40; B++) { for (var E = A.split("/").filter((H) => !!H), w = D.root, K = "/", Y = 0; Y < E.length; Y++) { var k = Y === E.length - 1; if (k && C.parent) break; if (E[Y] !== ".") { if (E[Y] === "..") { K = x.dirname(K), w = w.parent; continue; } K = x.join2(K, E[Y]); try { w = D.lookupNode(w, E[Y]); } catch (H) { if ((H == null ? void 0 : H.errno) === 44 && k && C.noent_okay) return { path: K }; throw H; } if (D.isMountpoint(w) && (!k || C.follow_mount) && (w = w.mounted.root), D.isLink(w.mode) && (!k || C.follow)) { if (!w.node_ops.readlink) throw new D.ErrnoError(52); var R = w.node_ops.readlink(w); x.isAbs(R) || (R = x.dirname(K) + "/" + R), A = R + "/" + E.slice(Y + 1).join("/"); continue A; } } } return { path: K, node: w }; } throw new D.ErrnoError(32); }, getPath(A) { for (var C; ; ) { if (D.isRoot(A)) { var B = A.mount.mountpoint; return C ? B[B.length - 1] !== "/" ? `${B}/${C}` : B + C : B; } C = C ? `${A.name}/${C}` : A.name, A = A.parent; } }, hashName(A, C) { for (var B = 0, E = 0; E < C.length; E++) B = (B << 5) - B + C.charCodeAt(E) | 0; return (A + B >>> 0) % D.nameTable.length; }, hashAddNode(A) { var C = D.hashName(A.parent.id, A.name); A.name_next = D.nameTable[C], D.nameTable[C] = A; }, hashRemoveNode(A) { var C = D.hashName(A.parent.id, A.name); if (D.nameTable[C] === A) D.nameTable[C] = A.name_next; else for (var B = D.nameTable[C]; B; ) { if (B.name_next === A) { B.name_next = A.name_next; break; } B = B.name_next; } }, lookupNode(A, C) { var B = D.mayLookup(A); if (B) throw new D.ErrnoError(B); for (var E = D.hashName(A.id, C), w = D.nameTable[E]; w; w = w.name_next) { var K = w.name; if (w.parent.id === A.id && K === C) return w; } return D.lookup(A, C); }, createNode(A, C, B, E) { var w = new D.FSNode(A, C, B, E); return D.hashAddNode(w), w; }, destroyNode(A) { D.hashRemoveNode(A); }, isRoot(A) { return A === A.parent; }, isMountpoint(A) { return !!A.mounted; }, isFile(A) { return (A & 61440) === 32768; }, isDir(A) { return (A & 61440) === 16384; }, isLink(A) { return (A & 61440) === 40960; }, isChrdev(A) { return (A & 61440) === 8192; }, isBlkdev(A) { return (A & 61440) === 24576; }, isFIFO(A) { return (A & 61440) === 4096; }, isSocket(A) { return (A & 49152) === 49152; }, flagsToPermissionString(A) { var C = ["r", "w", "rw"][A & 3]; return A & 512 && (C += "w"), C; }, nodePermissions(A, C) { return D.ignorePermissions ? 0 : C.includes("r") && !(A.mode & 292) || C.includes("w") && !(A.mode & 146) || C.includes("x") && !(A.mode & 73) ? 2 : 0; }, mayLookup(A) { if (!D.isDir(A.mode)) return 54; var C = D.nodePermissions(A, "x"); return C || (A.node_ops.lookup ? 0 : 2); }, mayCreate(A, C) { if (!D.isDir(A.mode)) return 54; try { var B = D.lookupNode(A, C); return 20; } catch { } return D.nodePermissions(A, "wx"); }, mayDelete(A, C, B) { var E; try { E = D.lookupNode(A, C); } catch (K) { return K.errno; } var w = D.nodePermissions(A, "wx"); if (w) return w; if (B) { if (!D.isDir(E.mode)) return 54; if (D.isRoot(E) || D.getPath(E) === D.cwd()) return 10; } else if (D.isDir(E.mode)) return 31; return 0; }, mayOpen(A, C) { return A ? D.isLink(A.mode) ? 32 : D.isDir(A.mode) && (D.flagsToPermissionString(C) !== "r" || C & 576) ? 31 : D.nodePermissions(A, D.flagsToPermissionString(C)) : 44; }, checkOpExists(A, C) { if (!A) throw new D.ErrnoError(C); return A; }, MAX_OPEN_FDS: 4096, nextfd() { for (var A = 0; A <= D.MAX_OPEN_FDS; A++) if (!D.streams[A]) return A; throw new D.ErrnoError(33); }, getStreamChecked(A) { var C = D.getStream(A); if (!C) throw new D.ErrnoError(8); return C; }, getStream: (A) => D.streams[A], createStream(A, C = -1) { return A = Object.assign(new D.FSStream(), A), C == -1 && (C = D.nextfd()), A.fd = C, D.streams[C] = A, A; }, closeStream(A) { D.streams[A] = null; }, dupStream(A, C = -1) { var E, w; var B = D.createStream(A, C); return (w = (E = B.stream_ops) == null ? void 0 : E.dup) == null || w.call(E, B), B; }, doSetAttr(A, C, B) { var E = A == null ? void 0 : A.stream_ops.setattr, w = E ? A : C; E ?? (E = C.node_ops.setattr), D.checkOpExists(E, 63), E(w, B); }, chrdev_stream_ops: { open(A) { var B, E; var C = D.getDevice(A.node.rdev); A.stream_ops = C.stream_ops, (E = (B = A.stream_ops).open) == null || E.call(B, A); }, llseek() { throw new D.ErrnoError(70); } }, major: (A) => A >> 8, minor: (A) => A & 255, makedev: (A, C) => A << 8 | C, registerDevice(A, C) { D.devices[A] = { stream_ops: C }; }, getDevice: (A) => D.devices[A], getMounts(A) { for (var C = [], B = [A]; B.length; ) { var E = B.pop(); C.push(E), B.push(...E.mounts); } return C; }, syncfs(A, C) { typeof A == "function" && (C = A, A = !1), D.syncFSRequests++, D.syncFSRequests > 1 && Z(`warning: ${D.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); var B = D.getMounts(D.root.mount), E = 0; function w(Y) { return D.syncFSRequests--, C(Y); } function K(Y) { if (Y) return K.errored ? void 0 : (K.errored = !0, w(Y)); ++E >= B.length && w(null); } B.forEach((Y) => { if (!Y.type.syncfs) return K(null); Y.type.syncfs(Y, A, K); }); }, mount(A, C, B) { var E = B === "/", w = !B, K; if (E && D.root) throw new D.ErrnoError(10); if (!E && !w) { var Y = D.lookupPath(B, { follow_mount: !1 }); if (B = Y.path, K = Y.node, D.isMountpoint(K)) throw new D.ErrnoError(10); if (!D.isDir(K.mode)) throw new D.ErrnoError(54); } var k = { type: A, opts: C, mountpoint: B, mounts: [] }, R = A.mount(k); return R.mount = k, k.root = R, E ? D.root = R : K && (K.mounted = k, K.mount && K.mount.mounts.push(k)), R; }, unmount(A) { var C = D.lookupPath(A, { follow_mount: !1 }); if (!D.isMountpoint(C.node)) throw new D.ErrnoError(28); var B = C.node, E = B.mounted, w = D.getMounts(E); Object.keys(D.nameTable).forEach((Y) => { for (var k = D.nameTable[Y]; k; ) { var R = k.name_next; w.includes(k.mount) && D.destroyNode(k), k = R; } }), B.mounted = null; var K = B.mount.mounts.indexOf(E); B.mount.mounts.splice(K, 1); }, lookup(A, C) { return A.node_ops.lookup(A, C); }, mknod(A, C, B) { var E = D.lookupPath(A, { parent: !0 }), w = E.node, K = x.basename(A); if (!K) throw new D.ErrnoError(28); if (K === "." || K === "..") throw new D.ErrnoError(20); var Y = D.mayCreate(w, K); if (Y) throw new D.ErrnoError(Y); if (!w.node_ops.mknod) throw new D.ErrnoError(63); return w.node_ops.mknod(w, K, C, B); }, statfs(A) { return D.statfsNode(D.lookupPath(A, { follow: !0 }).node); }, statfsStream(A) { return D.statfsNode(A.node); }, statfsNode(A) { var C = { bsize: 4096, frsize: 4096, blocks: 1e6, bfree: 5e5, bavail: 5e5, files: D.nextInode, ffree: D.nextInode - 1, fsid: 42, flags: 2, namelen: 255 }; return A.node_ops.statfs && Object.assign(C, A.node_ops.statfs(A.mount.opts.root)), C; }, create(A, C = 438) { return C &= 4095, C |= 32768, D.mknod(A, C, 0); }, mkdir(A, C = 511) { return C &= 1023, C |= 16384, D.mknod(A, C, 0); }, mkdirTree(A, C) { for (var B = A.split("/"), E = "", w = 0; w < B.length; ++w) if (B[w]) { E += "/" + B[w]; try { D.mkdir(E, C); } catch (K) { if (K.errno != 20) throw K; } } }, mkdev(A, C, B) { return typeof B > "u" && (B = C, C = 438), C |= 8192, D.mknod(A, C, B); }, symlink(A, C) { if (!cA.resolve(A)) throw new D.ErrnoError(44); var B = D.lookupPath(C, { parent: !0 }), E = B.node; if (!E) throw new D.ErrnoError(44); var w = x.basename(C), K = D.mayCreate(E, w); if (K) throw new D.ErrnoError(K); if (!E.node_ops.symlink) throw new D.ErrnoError(63); return E.node_ops.symlink(E, w, A); }, rename(A, C) { var B = x.dirname(A), E = x.dirname(C), w = x.basename(A), K = x.basename(C), Y, k, R; if (Y = D.lookupPath(A, { parent: !0 }), k = Y.node, Y = D.lookupPath(C, { parent: !0 }), R = Y.node, !k || !R) throw new D.ErrnoError(44); if (k.mount !== R.mount) throw new D.ErrnoError(75); var H = D.lookupNode(k, w), L = cA.relative(A, E); if (L.charAt(0) !== ".") throw new D.ErrnoError(28); if (L = cA.relative(C, B), L.charAt(0) !== ".") throw new D.ErrnoError(55); var q; try { q = D.lookupNode(R, K); } catch { } if (H !== q) { var p = D.isDir(H.mode), O = D.mayDelete(k, w, p); if (O) throw new D.ErrnoError(O); if (O = q ? D.mayDelete(R, K, p) : D.mayCreate(R, K), O) throw new D.ErrnoError(O); if (!k.node_ops.rename) throw new D.ErrnoError(63); if (D.isMountpoint(H) || q && D.isMountpoint(q)) throw new D.ErrnoError(10); if (R !== k && (O = D.nodePermissions(k, "w"), O)) throw new D.ErrnoError(O); D.hashRemoveNode(H); try { k.node_ops.rename(H, R, K), H.parent = R; } catch (v) { throw v; } finally { D.hashAddNode(H); } } }, rmdir(A) { var C = D.lookupPath(A, { parent: !0 }), B = C.node, E = x.basename(A), w = D.lookupNode(B, E), K = D.mayDelete(B, E, !0); if (K) throw new D.ErrnoError(K); if (!B.node_ops.rmdir) throw new D.ErrnoError(63); if (D.isMountpoint(w)) throw new D.ErrnoError(10); B.node_ops.rmdir(B, E), D.destroyNode(w); }, readdir(A) { var C = D.lookupPath(A, { follow: !0 }), B = C.node, E = D.checkOpExists(B.node_ops.readdir, 54); return E(B); }, unlink(A) { var C = D.lookupPath(A, { parent: !0 }), B = C.node; if (!B) throw new D.ErrnoError(44); var E = x.basename(A), w = D.lookupNode(B, E), K = D.mayDelete(B, E, !1); if (K) throw new D.ErrnoError(K); if (!B.node_ops.unlink) throw new D.ErrnoError(63); if (D.isMountpoint(w)) throw new D.ErrnoError(10); B.node_ops.unlink(B, E), D.destroyNode(w); }, readlink(A) { var C = D.lookupPath(A), B = C.node; if (!B) throw new D.ErrnoError(44); if (!B.node_ops.readlink) throw new D.ErrnoError(28); return B.node_ops.readlink(B); }, stat(A, C) { var B = D.lookupPath(A, { follow: !C }), E = B.node, w = D.checkOpExists(E.node_ops.getattr, 63); return w(E); }, fstat(A) { var C = D.getStreamChecked(A), B = C.node, E = C.stream_ops.getattr, w = E ? C : B; return E ?? (E = B.node_ops.getattr), D.checkOpExists(E, 63), E(w); }, lstat(A) { return D.stat(A, !0); }, doChmod(A, C, B, E) { D.doSetAttr(A, C, { mode: B & 4095 | C.mode & -4096, ctime: Date.now(), dontFollow: E }); }, chmod(A, C, B) { var E; if (typeof A == "string") { var w = D.lookupPath(A, { follow: !B }); E = w.node; } else E = A; D.doChmod(null, E, C, B); }, lchmod(A, C) { D.chmod(A, C, !0); }, fchmod(A, C) { var B = D.getStreamChecked(A); D.doChmod(B, B.node, C, !1); }, doChown(A, C, B) { D.doSetAttr(A, C, { timestamp: Date.now(), dontFollow: B }); }, chown(A, C, B, E) { var w; if (typeof A == "string") { var K = D.lookupPath(A, { follow: !E }); w = K.node; } else w = A; D.doChown(null, w, E); }, lchown(A, C, B) { D.chown(A, C, B, !0); }, fchown(A, C, B) { var E = D.getStreamChecked(A); D.doChown(E, E.node, !1); }, doTruncate(A, C, B) { if (D.isDir(C.mode)) throw new D.ErrnoError(31); if (!D.isFile(C.mode)) throw new D.ErrnoError(28); var E = D.nodePermissions(C, "w"); if (E) throw new D.ErrnoError(E); D.doSetAttr(A, C, { size: B, timestamp: Date.now() }); }, truncate(A, C) { if (C < 0) throw new D.ErrnoError(28); var B; if (typeof A == "string") { var E = D.lookupPath(A, { follow: !0 }); B = E.node; } else B = A; D.doTruncate(null, B, C); }, ftruncate(A, C) { var B = D.getStreamChecked(A); if (C < 0 || !(B.flags & 2097155)) throw new D.ErrnoError(28); D.doTruncate(B, B.node, C); }, utime(A, C, B) { var E = D.lookupPath(A, { follow: !0 }), w = E.node, K = D.checkOpExists(w.node_ops.setattr, 63); K(w, { atime: C, mtime: B }); }, open(A, C, B = 438) { if (A === "") throw new D.ErrnoError(44); C = typeof C == "string" ? PC(C) : C, C & 64 ? B = B & 4095 | 32768 : B = 0; var E, w; if (typeof A == "object") E = A; else { w = A.endsWith("/"); var K = D.lookupPath(A, { follow: !(C & 131072), noent_okay: !0 }); E = K.node, A = K.path; } var Y = !1; if (C & 64) if (E) { if (C & 128) throw new D.ErrnoError(20); } else { if (w) throw new D.ErrnoError(31); E = D.mknod(A, B | 511, 0), Y = !0; } if (!E) throw new D.ErrnoError(44); if (D.isChrdev(E.mode) && (C &= -513), C & 65536 && !D.isDir(E.mode)) throw new D.ErrnoError(54); if (!Y) { var k = D.mayOpen(E, C); if (k) throw new D.ErrnoError(k); } C & 512 && !Y && D.truncate(E, 0), C &= -131713; var R = D.createStream({ node: E, path: D.getPath(E), flags: C, seekable: !0, position: 0, stream_ops: E.stream_ops, ungotten: [], error: !1 }); return R.stream_ops.open && R.stream_ops.open(R), Y && D.chmod(E, B & 511), I.logReadFiles && !(C & 1) && (A in D.readFiles || (D.readFiles[A] = 1)), R; }, close(A) { if (D.isClosed(A)) throw new D.ErrnoError(8); A.getdents && (A.getdents = null); try { A.stream_ops.close && A.stream_ops.close(A); } catch (C) { throw C; } finally { D.closeStream(A.fd); } A.fd = null; }, isClosed(A) { return A.fd === null; }, llseek(A, C, B) { if (D.isClosed(A)) throw new D.ErrnoError(8); if (!A.seekable || !A.stream_ops.llseek) throw new D.ErrnoError(70); if (B != 0 && B != 1 && B != 2) throw new D.ErrnoError(28); return A.position = A.stream_ops.llseek(A, C, B), A.ungotten = [], A.position; }, read(A, C, B, E, w) { if (E < 0 || w < 0) throw new D.ErrnoError(28); if (D.isClosed(A)) throw new D.ErrnoError(8); if ((A.flags & 2097155) === 1) throw new D.ErrnoError(8); if (D.isDir(A.node.mode)) throw new D.ErrnoError(31); if (!A.stream_ops.read) throw new D.ErrnoError(28); var K = typeof w < "u"; if (!K) w = A.position; else if (!A.seekable) throw new D.ErrnoError(70); var Y = A.stream_ops.read(A, C, B, E, w); return K || (A.position += Y), Y; }, write(A, C, B, E, w, K) { if (E < 0 || w < 0) throw new D.ErrnoError(28); if (D.isClosed(A)) throw new D.ErrnoError(8); if (!(A.flags & 2097155)) throw new D.ErrnoError(8); if (D.isDir(A.node.mode)) throw new D.ErrnoError(31); if (!A.stream_ops.write) throw new D.ErrnoError(28); A.seekable && A.flags & 1024 && D.llseek(A, 0, 2); var Y = typeof w < "u"; if (!Y) w = A.position; else if (!A.seekable) throw new D.ErrnoError(70); var k = A.stream_ops.write(A, C, B, E, w, K); return Y || (A.position += k), k; }, allocate(A, C, B) { if (D.isClosed(A)) throw new D.ErrnoError(8); if (C < 0 || B <= 0) throw new D.ErrnoError(28); if (!(A.flags & 2097155)) throw new D.ErrnoError(8); if (!D.isFile(A.node.mode) && !D.isDir(A.node.mode)) throw new D.ErrnoError(43); if (!A.stream_ops.allocate) throw new D.ErrnoError(138); A.stream_ops.allocate(A, C, B); }, mmap(A, C, B, E, w) { if (E & 2 && !(w & 2) && (A.flags & 2097155) !== 2) throw new D.ErrnoError(2); if ((A.flags & 2097155) === 1) throw new D.ErrnoError(2); if (!A.stream_ops.mmap) throw new D.ErrnoError(43); if (!C) throw new D.ErrnoError(28); return A.stream_ops.mmap(A, C, B, E, w); }, msync(A, C, B, E, w) { return A.stream_ops.msync ? A.stream_ops.msync(A, C, B, E, w) : 0; }, ioctl(A, C, B) { if (!A.stream_ops.ioctl) throw new D.ErrnoError(59); return A.stream_ops.ioctl(A, C, B); }, readFile(A, C = {}) { if (C.flags = C.flags || 0,