@carbonenginejs/runtime-resource 0.18.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"CjsPickleProtocol0Reader.js","sources":["../../../../../src/formats/pickle/core/CjsPickleProtocol0Reader.js"],"sourcesContent":["const MARK = Symbol(\"pickle-mark\");\n\nexport const PICKLE_PROTOCOL_0_LIMITS = {\n maxContainerItems: 1000000,\n maxInputBytes: 32 * 1024 * 1024,\n maxMemoEntries: 500000,\n maxMemoID: 1000000,\n maxOperations: 2000000,\n maxStackDepth: 100000,\n maxStringBytes: 4 * 1024 * 1024\n};\n\nconst LIMIT_NAMES = Object.keys(PICKLE_PROTOCOL_0_LIMITS);\n\n/**\n * Construction-bound decoder for the inert data subset of Python pickle\n * protocol 0.\n *\n * The reader never imports modules, resolves globals, invokes reducers, or\n * constructs Python objects. Unsupported opcodes fail closed at their byte\n * offset.\n */\nexport class CjsPickleProtocol0Reader\n{\n #bytes;\n #limits;\n\n /**\n * Bind one byte source and its resource limits.\n *\n * @param {ArrayBuffer|ArrayBufferView} input Pickle protocol-0 bytes.\n * @param {object} [options] Reader options containing optional limits.\n */\n constructor(input, options = {})\n {\n this.#bytes = normalizeBytes(input);\n this.#limits = normalizeLimits(options.limits ?? options);\n\n if (this.#bytes.byteLength > this.#limits.maxInputBytes)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle input exceeds maxInputBytes (${this.#limits.maxInputBytes}).`,\n 0\n );\n }\n }\n\n /**\n * Decode an inert JavaScript value while preserving pickle memo identity.\n *\n * @returns {*} Decoded scalar, array, or plain object graph.\n */\n Read()\n {\n return decode(this.#bytes, this.#limits);\n }\n\n /**\n * Decode a value and reject cycles or values JSON cannot represent.\n *\n * @returns {*} JSON-compatible decoded graph.\n */\n ReadJSON()\n {\n const value = this.Read();\n assertJSONCompatible(value);\n return value;\n }\n\n /**\n * Verify that a decoded value can cross the JSON boundary unchanged.\n *\n * @param {*} value Candidate decoded graph.\n * @returns {*} The supplied value.\n */\n static ToJSON(value)\n {\n assertJSONCompatible(value);\n return value;\n }\n}\n\nfunction decode(bytes, limits)\n{\n const state = {\n bytes,\n containers: new WeakMap(),\n dictionaryKeys: new WeakMap(),\n limits,\n lists: new WeakSet(),\n marks: [],\n memo: new Map(),\n offset: 0,\n operations: 0,\n stack: []\n };\n\n while (state.offset < bytes.byteLength)\n {\n const opcodeOffset = state.offset;\n const opcode = bytes[state.offset++];\n\n state.operations += 1;\n if (state.operations > limits.maxOperations)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle operation count exceeds maxOperations (${limits.maxOperations}).`,\n opcodeOffset\n );\n }\n\n switch (opcode)\n {\n case 0x28: // MARK\n state.marks.push(state.stack.length);\n push(state, MARK, opcodeOffset);\n break;\n\n case 0x2e: // STOP\n return stop(state, opcodeOffset);\n\n case 0x46: // FLOAT\n push(state, readFloat(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x49: // INT\n push(state, readInteger(state, opcodeOffset, false), opcodeOffset);\n break;\n\n case 0x4c: // LONG\n push(state, readInteger(state, opcodeOffset, true), opcodeOffset);\n break;\n\n case 0x4e: // NONE\n push(state, null, opcodeOffset);\n break;\n\n case 0x53: // STRING\n push(state, readString(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x56: // UNICODE\n push(state, readUnicode(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x61: // APPEND\n append(state, opcodeOffset);\n break;\n\n case 0x64: // DICT\n push(state, readDictionary(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x67: // GET\n getMemo(state, opcodeOffset);\n break;\n\n case 0x6c: // LIST\n push(state, readSequence(state, opcodeOffset, true), opcodeOffset);\n break;\n\n case 0x74: // TUPLE\n push(state, readSequence(state, opcodeOffset, false), opcodeOffset);\n break;\n\n case 0x70: // PUT\n putMemo(state, opcodeOffset);\n break;\n\n case 0x73: // SETITEM\n setItem(state, opcodeOffset);\n break;\n\n default:\n throw pickleError(\n \"CJS_PICKLE_OPCODE_UNSUPPORTED\",\n `Data-only pickle protocol 0 rejects opcode ${displayOpcode(opcode)}.`,\n opcodeOffset\n );\n }\n }\n\n throw pickleError(\n \"CJS_PICKLE_STOP_MISSING\",\n \"Pickle input ended without a STOP opcode.\",\n state.offset\n );\n}\n\nfunction stop(state, offset)\n{\n if (state.marks.length || state.stack.length !== 1 || state.stack[0] === MARK)\n {\n throw pickleError(\n \"CJS_PICKLE_STACK_INVALID\",\n \"Pickle STOP requires one completed value and no open marks.\",\n offset\n );\n }\n if (state.offset !== state.bytes.byteLength)\n {\n throw pickleError(\n \"CJS_PICKLE_TRAILING_DATA\",\n \"Pickle input contains bytes after STOP.\",\n state.offset\n );\n }\n return state.stack[0];\n}\n\nfunction readFloat(state, offset)\n{\n const value = readAsciiLine(state, state.limits.maxStringBytes, offset);\n if (!/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/u.test(value))\n {\n throw pickleError(\n \"CJS_PICKLE_NUMBER_INVALID\",\n `Pickle FLOAT value is invalid: ${JSON.stringify(value)}.`,\n offset\n );\n }\n\n const result = Number(value);\n if (!Number.isFinite(result))\n {\n throw pickleError(\n \"CJS_PICKLE_NUMBER_INVALID\",\n \"Pickle FLOAT must be finite for JSON-compatible output.\",\n offset\n );\n }\n return result;\n}\n\nfunction readInteger(state, offset, isLong)\n{\n let value = readAsciiLine(state, 128, offset);\n\n if (!isLong && value === \"00\") return false;\n if (!isLong && value === \"01\") return true;\n if (isLong && value.endsWith(\"L\")) value = value.slice(0, -1);\n\n if (!/^[+-]?\\d+$/u.test(value))\n {\n throw pickleError(\n \"CJS_PICKLE_NUMBER_INVALID\",\n `Pickle integer value is invalid: ${JSON.stringify(value)}.`,\n offset\n );\n }\n\n const result = BigInt(value);\n if (result >= BigInt(Number.MIN_SAFE_INTEGER)\n && result <= BigInt(Number.MAX_SAFE_INTEGER))\n {\n return Number(result);\n }\n return result.toString();\n}\n\nfunction readString(state, offset)\n{\n const bytes = readLine(state, state.limits.maxStringBytes, offset);\n if (bytes.byteLength < 2)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n \"Pickle STRING must be a quoted Python string literal.\",\n offset\n );\n }\n\n const quote = bytes[0];\n if ((quote !== 0x27 && quote !== 0x22)\n || bytes[bytes.byteLength - 1] !== quote)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n \"Pickle STRING must use matching single or double quotes.\",\n offset\n );\n }\n\n const result = [];\n for (let index = 1; index < bytes.byteLength - 1; index += 1)\n {\n const byte = bytes[index];\n if (byte !== 0x5c)\n {\n result.push(String.fromCharCode(byte));\n continue;\n }\n\n index += 1;\n if (index >= bytes.byteLength - 1)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n \"Pickle STRING ends with an incomplete escape.\",\n offset\n );\n }\n\n const escaped = bytes[index];\n const simple = decodeSimpleEscape(escaped);\n if (simple !== null)\n {\n result.push(String.fromCharCode(simple));\n }\n else if (escaped === 0x78)\n {\n result.push(String.fromCharCode(readHex(bytes, index + 1, 2, offset)));\n index += 2;\n }\n else if (escaped >= 0x30 && escaped <= 0x37)\n {\n let digits = String.fromCharCode(escaped);\n while (digits.length < 3\n && index + 1 < bytes.byteLength - 1\n && bytes[index + 1] >= 0x30\n && bytes[index + 1] <= 0x37)\n {\n index += 1;\n digits += String.fromCharCode(bytes[index]);\n }\n result.push(String.fromCharCode(Number.parseInt(digits, 8)));\n }\n else\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n `Pickle STRING contains unsupported escape \\\\${String.fromCharCode(escaped)}.`,\n offset\n );\n }\n }\n return result.join(\"\");\n}\n\nfunction readUnicode(state, offset)\n{\n const bytes = readLine(state, state.limits.maxStringBytes, offset);\n const result = [];\n\n for (let index = 0; index < bytes.byteLength; index += 1)\n {\n const byte = bytes[index];\n if (byte !== 0x5c || index + 1 >= bytes.byteLength)\n {\n result.push(String.fromCharCode(byte));\n continue;\n }\n\n const escaped = bytes[index + 1];\n if (escaped === 0x75)\n {\n result.push(String.fromCharCode(readHex(bytes, index + 2, 4, offset)));\n index += 5;\n }\n else if (escaped === 0x55)\n {\n const codePoint = readHex(bytes, index + 2, 8, offset);\n if (codePoint > 0x10ffff)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n `Pickle UNICODE code point is out of range: ${codePoint}.`,\n offset\n );\n }\n result.push(String.fromCodePoint(codePoint));\n index += 9;\n }\n else\n {\n result.push(\"\\\\\");\n }\n }\n return result.join(\"\");\n}\n\nfunction readSequence(state, offset, isList)\n{\n const values = popMarkedValues(state, offset);\n requireContainerLimit(state, values.length, offset);\n state.containers.set(values, values.length);\n if (isList) state.lists.add(values);\n return values;\n}\n\nfunction readDictionary(state, offset)\n{\n const values = popMarkedValues(state, offset);\n if (values.length % 2 !== 0)\n {\n throw pickleError(\n \"CJS_PICKLE_CONTAINER_INVALID\",\n \"Pickle DICT requires key/value pairs.\",\n offset\n );\n }\n\n requireContainerLimit(state, values.length / 2, offset);\n const result = {};\n let count = 0;\n state.dictionaryKeys.set(result, new Map());\n\n for (let index = 0; index < values.length; index += 2)\n {\n count = defineDictionaryValue(\n state,\n result,\n values[index],\n values[index + 1],\n count,\n offset\n );\n }\n state.containers.set(result, count);\n return result;\n}\n\nfunction append(state, offset)\n{\n requireStack(state, 2, offset);\n const value = state.stack.pop();\n const target = state.stack[state.stack.length - 1];\n if (!Array.isArray(target) || !state.lists.has(target))\n {\n throw pickleError(\n \"CJS_PICKLE_CONTAINER_INVALID\",\n \"Pickle APPEND target must be a list.\",\n offset\n );\n }\n\n requireContainerLimit(state, target.length + 1, offset);\n target.push(value);\n state.containers.set(target, target.length);\n}\n\nfunction setItem(state, offset)\n{\n requireStack(state, 3, offset);\n const value = state.stack.pop();\n const key = state.stack.pop();\n const target = state.stack[state.stack.length - 1];\n if (!isDictionary(target))\n {\n throw pickleError(\n \"CJS_PICKLE_CONTAINER_INVALID\",\n \"Pickle SETITEM target must be a dictionary.\",\n offset\n );\n }\n\n const count = defineDictionaryValue(\n state,\n target,\n key,\n value,\n state.containers.get(target) ?? Object.keys(target).length,\n offset\n );\n requireContainerLimit(state, count, offset);\n state.containers.set(target, count);\n}\n\nfunction defineDictionaryValue(state, target, key, value, count, offset)\n{\n const normalized = normalizeDictionaryKey(key, offset);\n const keyTypes = state.dictionaryKeys.get(target) ?? new Map();\n const previousType = keyTypes.get(normalized.value);\n if (previousType && previousType !== normalized.type)\n {\n throw pickleError(\n \"CJS_PICKLE_CONTAINER_INVALID\",\n `Pickle dictionary keys collide after JSON normalization: ${JSON.stringify(normalized.value)}.`,\n offset\n );\n }\n\n const exists = Object.hasOwn(target, normalized.value);\n Object.defineProperty(target, normalized.value, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n keyTypes.set(normalized.value, normalized.type);\n state.dictionaryKeys.set(target, keyTypes);\n return exists ? count : count + 1;\n}\n\nfunction normalizeDictionaryKey(key, offset)\n{\n if (typeof key === \"string\") return { type: \"string\", value: key };\n if (typeof key === \"number\" && Number.isSafeInteger(key))\n {\n return { type: \"integer\", value: String(key) };\n }\n throw pickleError(\n \"CJS_PICKLE_CONTAINER_INVALID\",\n \"Data-only pickle dictionaries require string or safe-integer keys.\",\n offset\n );\n}\n\nfunction putMemo(state, offset)\n{\n requireStack(state, 1, offset);\n if (state.stack[state.stack.length - 1] === MARK)\n {\n throw pickleError(\n \"CJS_PICKLE_MARK_INVALID\",\n \"Pickle MARK cannot be stored in the memo.\",\n offset\n );\n }\n const id = readMemoID(state, offset);\n if (!state.memo.has(id) && state.memo.size >= state.limits.maxMemoEntries)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle memo exceeds maxMemoEntries (${state.limits.maxMemoEntries}).`,\n offset\n );\n }\n state.memo.set(id, state.stack[state.stack.length - 1]);\n}\n\nfunction getMemo(state, offset)\n{\n const id = readMemoID(state, offset);\n if (!state.memo.has(id))\n {\n throw pickleError(\n \"CJS_PICKLE_MEMO_INVALID\",\n `Pickle memo entry ${id} does not exist.`,\n offset\n );\n }\n push(state, state.memo.get(id), offset);\n}\n\nfunction readMemoID(state, offset)\n{\n const value = readAsciiLine(state, 64, offset);\n if (!/^\\d+$/u.test(value))\n {\n throw pickleError(\n \"CJS_PICKLE_MEMO_INVALID\",\n `Pickle memo ID is invalid: ${JSON.stringify(value)}.`,\n offset\n );\n }\n\n const result = Number(value);\n if (!Number.isSafeInteger(result) || result > state.limits.maxMemoID)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle memo ID exceeds maxMemoID (${state.limits.maxMemoID}).`,\n offset\n );\n }\n return result;\n}\n\nfunction popMarkedValues(state, offset)\n{\n if (!state.marks.length)\n {\n throw pickleError(\n \"CJS_PICKLE_MARK_INVALID\",\n \"Pickle container has no matching MARK.\",\n offset\n );\n }\n\n const mark = state.marks.pop();\n if (state.stack[mark] !== MARK)\n {\n throw pickleError(\n \"CJS_PICKLE_MARK_INVALID\",\n \"Pickle MARK stack is inconsistent.\",\n offset\n );\n }\n\n const values = state.stack.slice(mark + 1);\n state.stack.length = mark;\n return values;\n}\n\nfunction push(state, value, offset)\n{\n if (state.stack.length >= state.limits.maxStackDepth)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle stack exceeds maxStackDepth (${state.limits.maxStackDepth}).`,\n offset\n );\n }\n state.stack.push(value);\n}\n\nfunction requireStack(state, count, offset)\n{\n if (state.stack.length < count)\n {\n throw pickleError(\n \"CJS_PICKLE_STACK_INVALID\",\n `Pickle opcode requires ${count} stack values.`,\n offset\n );\n }\n}\n\nfunction requireContainerLimit(state, count, offset)\n{\n if (count > state.limits.maxContainerItems)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle container exceeds maxContainerItems (${state.limits.maxContainerItems}).`,\n offset\n );\n }\n}\n\nfunction readAsciiLine(state, limit, offset)\n{\n const bytes = readLine(state, limit, offset);\n let result = \"\";\n for (const byte of bytes)\n {\n if (byte > 0x7f)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n \"Pickle control line must contain ASCII bytes.\",\n offset\n );\n }\n result += String.fromCharCode(byte);\n }\n return result;\n}\n\nfunction readLine(state, limit, offset)\n{\n const start = state.offset;\n while (state.offset < state.bytes.byteLength && state.bytes[state.offset] !== 0x0a)\n {\n state.offset += 1;\n if (state.offset - start > limit)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_EXCEEDED\",\n `Pickle line exceeds its ${limit}-byte limit.`,\n offset\n );\n }\n }\n\n if (state.offset >= state.bytes.byteLength)\n {\n throw pickleError(\n \"CJS_PICKLE_EOF\",\n \"Pickle line is missing its newline terminator.\",\n offset\n );\n }\n\n const result = state.bytes.subarray(start, state.offset);\n state.offset += 1;\n return result;\n}\n\nfunction readHex(bytes, start, length, offset)\n{\n if (start + length > bytes.byteLength)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n \"Pickle escape sequence is truncated.\",\n offset\n );\n }\n\n let result = 0;\n for (let index = 0; index < length; index += 1)\n {\n const value = hexValue(bytes[start + index]);\n if (value === -1)\n {\n throw pickleError(\n \"CJS_PICKLE_STRING_INVALID\",\n \"Pickle escape sequence contains a non-hexadecimal digit.\",\n offset\n );\n }\n result = result * 16 + value;\n }\n return result;\n}\n\nfunction hexValue(byte)\n{\n if (byte >= 0x30 && byte <= 0x39) return byte - 0x30;\n if (byte >= 0x41 && byte <= 0x46) return byte - 0x41 + 10;\n if (byte >= 0x61 && byte <= 0x66) return byte - 0x61 + 10;\n return -1;\n}\n\nfunction decodeSimpleEscape(byte)\n{\n const values = {\n 0x22: 0x22,\n 0x27: 0x27,\n 0x5c: 0x5c,\n 0x61: 0x07,\n 0x62: 0x08,\n 0x66: 0x0c,\n 0x6e: 0x0a,\n 0x72: 0x0d,\n 0x74: 0x09,\n 0x76: 0x0b\n };\n return Object.hasOwn(values, byte) ? values[byte] : null;\n}\n\nfunction assertJSONCompatible(value)\n{\n const active = new WeakSet();\n const verified = new WeakSet();\n const pending = [ { exit: false, value } ];\n\n while (pending.length)\n {\n const item = pending.pop();\n const current = item.value;\n if (current === null\n || typeof current === \"string\"\n || typeof current === \"boolean\")\n {\n continue;\n }\n if (typeof current === \"number\")\n {\n if (!Number.isFinite(current))\n {\n throw pickleError(\n \"CJS_PICKLE_JSON_INVALID\",\n \"Pickle output contains a non-finite number.\",\n null\n );\n }\n continue;\n }\n if (!current || typeof current !== \"object\")\n {\n throw pickleError(\n \"CJS_PICKLE_JSON_INVALID\",\n `Pickle output contains unsupported ${typeof current} data.`,\n null\n );\n }\n if (item.exit)\n {\n active.delete(current);\n verified.add(current);\n continue;\n }\n if (verified.has(current)) continue;\n if (active.has(current))\n {\n throw pickleError(\n \"CJS_PICKLE_JSON_INVALID\",\n \"Pickle output contains a cyclic reference.\",\n null\n );\n }\n\n active.add(current);\n pending.push({ exit: true, value: current });\n\n if (Array.isArray(current))\n {\n for (let index = current.length - 1; index >= 0; index -= 1)\n {\n pending.push({ exit: false, value: current[index] });\n }\n }\n else if (Object.getPrototypeOf(current) === Object.prototype)\n {\n const keys = Object.keys(current);\n for (let index = keys.length - 1; index >= 0; index -= 1)\n {\n pending.push({ exit: false, value: current[keys[index]] });\n }\n }\n else\n {\n throw pickleError(\n \"CJS_PICKLE_JSON_INVALID\",\n \"Pickle output contains a non-plain object.\",\n null\n );\n }\n }\n}\n\nfunction normalizeBytes(input)\n{\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n throw pickleError(\n \"CJS_PICKLE_INPUT_INVALID\",\n \"Pickle input must be an ArrayBuffer or an ArrayBuffer view.\",\n 0\n );\n}\n\nfunction normalizeLimits(options)\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_INVALID\",\n \"Pickle limits must be an object.\",\n 0\n );\n }\n\n for (const name of Object.keys(options))\n {\n if (!LIMIT_NAMES.includes(name))\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_INVALID\",\n `Pickle limits contain unknown value ${JSON.stringify(name)}.`,\n 0\n );\n }\n }\n\n const result = {};\n for (const name of LIMIT_NAMES)\n {\n const value = options[name] ?? PICKLE_PROTOCOL_0_LIMITS[name];\n if (!Number.isSafeInteger(value) || value <= 0)\n {\n throw pickleError(\n \"CJS_PICKLE_LIMIT_INVALID\",\n `Pickle ${name} must be a positive safe integer.`,\n 0\n );\n }\n result[name] = value;\n }\n return result;\n}\n\nfunction isDictionary(value)\n{\n return Boolean(value\n && typeof value === \"object\"\n && !Array.isArray(value)\n && Object.getPrototypeOf(value) === Object.prototype);\n}\n\nfunction displayOpcode(value)\n{\n if (value >= 0x20 && value <= 0x7e)\n {\n return JSON.stringify(String.fromCharCode(value));\n }\n return `0x${value.toString(16).padStart(2, \"0\")}`;\n}\n\nfunction pickleError(code, message, offset)\n{\n const error = new Error(message);\n error.code = code;\n error.protocol = 0;\n if (offset !== null) error.offset = offset;\n return error;\n}\n\nexport default CjsPickleProtocol0Reader;\n"],"names":["MARK","Symbol","PICKLE_PROTOCOL_0_LIMITS","maxContainerItems","maxInputBytes","maxMemoEntries","maxMemoID","maxOperations","maxStackDepth","maxStringBytes","LIMIT_NAMES","Object","keys","CjsPickleProtocol0Reader","constructor","input","options","normalizeBytes","normalizeLimits","limits","byteLength","pickleError","Read","decode","ReadJSON","value","assertJSONCompatible","ToJSON","bytes","state","containers","WeakMap","dictionaryKeys","lists","WeakSet","marks","memo","Map","offset","operations","stack","opcodeOffset","opcode","push","length","stop","readFloat","readInteger","readString","readUnicode","append","readDictionary","getMemo","readSequence","putMemo","setItem","displayOpcode","readAsciiLine","test","JSON","stringify","result","Number","isFinite","isLong","endsWith","slice","BigInt","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","toString","readLine","quote","index","byte","String","fromCharCode","escaped","simple","decodeSimpleEscape","readHex","digits","parseInt","join","codePoint","fromCodePoint","isList","values","popMarkedValues","requireContainerLimit","set","add","count","defineDictionaryValue","requireStack","pop","target","Array","isArray","has","key","isDictionary","get","normalized","normalizeDictionaryKey","keyTypes","previousType","type","exists","hasOwn","defineProperty","configurable","enumerable","writable","isSafeInteger","id","readMemoID","size","mark","limit","start","subarray","hexValue","active","verified","pending","exit","item","current","delete","getPrototypeOf","prototype","ArrayBuffer","Uint8Array","isView","buffer","byteOffset","name","includes","Boolean","padStart","code","message","error","Error","protocol"],"mappings":"AAAA,MAAMA,IAAI,GAAGC,MAAM,CAAC,aAAa,CAAC;AAE3B,MAAMC,wBAAwB,GAAG;AACtCC,EAAAA,iBAAiB,EAAE,OAAO;AAC1BC,EAAAA,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;AAC/BC,EAAAA,cAAc,EAAE,MAAM;AACtBC,EAAAA,SAAS,EAAE,OAAO;AAClBC,EAAAA,aAAa,EAAE,OAAO;AACtBC,EAAAA,aAAa,EAAE,MAAM;AACrBC,EAAAA,cAAc,EAAE,CAAC,GAAG,IAAI,GAAG;AAC7B;AAEA,MAAMC,WAAW,GAAGC,MAAM,CAACC,IAAI,CAACV,wBAAwB,CAAC;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMW,wBAAwB,CACrC;AACE,EAAA,MAAM;AACN,EAAA,OAAO;;AAEP;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,WAAWA,CAACC,KAAK,EAAEC,OAAO,GAAG,EAAE,EAC/B;AACE,IAAA,IAAI,CAAC,MAAM,GAAGC,cAAc,CAACF,KAAK,CAAC;IACnC,IAAI,CAAC,OAAO,GAAGG,eAAe,CAACF,OAAO,CAACG,MAAM,IAAIH,OAAO,CAAC;AAEzD,IAAA,IAAI,IAAI,CAAC,MAAM,CAACI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAChB,aAAa,EACvD;AACE,MAAA,MAAMiB,WAAW,CACf,2BAA2B,EAC3B,uCAAuC,IAAI,CAAC,OAAO,CAACjB,aAAa,CAAA,EAAA,CAAI,EACrE,CACF,CAAC;AACH,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEkB,EAAAA,IAAIA,GACJ;IACE,OAAOC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEC,EAAAA,QAAQA,GACR;AACE,IAAA,MAAMC,KAAK,GAAG,IAAI,CAACH,IAAI,EAAE;IACzBI,oBAAoB,CAACD,KAAK,CAAC;AAC3B,IAAA,OAAOA,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOE,MAAMA,CAACF,KAAK,EACnB;IACEC,oBAAoB,CAACD,KAAK,CAAC;AAC3B,IAAA,OAAOA,KAAK;AACd,EAAA;AACF;AAEA,SAASF,MAAMA,CAACK,KAAK,EAAET,MAAM,EAC7B;AACE,EAAA,MAAMU,KAAK,GAAG;IACZD,KAAK;AACLE,IAAAA,UAAU,EAAE,IAAIC,OAAO,EAAE;AACzBC,IAAAA,cAAc,EAAE,IAAID,OAAO,EAAE;IAC7BZ,MAAM;AACNc,IAAAA,KAAK,EAAE,IAAIC,OAAO,EAAE;AACpBC,IAAAA,KAAK,EAAE,EAAE;AACTC,IAAAA,IAAI,EAAE,IAAIC,GAAG,EAAE;AACfC,IAAAA,MAAM,EAAE,CAAC;AACTC,IAAAA,UAAU,EAAE,CAAC;AACbC,IAAAA,KAAK,EAAE;GACR;AAED,EAAA,OAAOX,KAAK,CAACS,MAAM,GAAGV,KAAK,CAACR,UAAU,EACtC;AACE,IAAA,MAAMqB,YAAY,GAAGZ,KAAK,CAACS,MAAM;IACjC,MAAMI,MAAM,GAAGd,KAAK,CAACC,KAAK,CAACS,MAAM,EAAE,CAAC;IAEpCT,KAAK,CAACU,UAAU,IAAI,CAAC;AACrB,IAAA,IAAIV,KAAK,CAACU,UAAU,GAAGpB,MAAM,CAACZ,aAAa,EAC3C;MACE,MAAMc,WAAW,CACf,2BAA2B,EAC3B,CAAA,8CAAA,EAAiDF,MAAM,CAACZ,aAAa,CAAA,EAAA,CAAI,EACzEkC,YACF,CAAC;AACH,IAAA;AAEA,IAAA,QAAQC,MAAM;AAEZ,MAAA,KAAK,IAAI;AAAE;QACTb,KAAK,CAACM,KAAK,CAACQ,IAAI,CAACd,KAAK,CAACW,KAAK,CAACI,MAAM,CAAC;AACpCD,QAAAA,IAAI,CAACd,KAAK,EAAE7B,IAAI,EAAEyC,YAAY,CAAC;AAC/B,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACT,QAAA,OAAOI,IAAI,CAAChB,KAAK,EAAEY,YAAY,CAAC;AAElC,MAAA,KAAK,IAAI;AAAE;QACTE,IAAI,CAACd,KAAK,EAAEiB,SAAS,CAACjB,KAAK,EAAEY,YAAY,CAAC,EAAEA,YAAY,CAAC;AACzD,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTE,QAAAA,IAAI,CAACd,KAAK,EAAEkB,WAAW,CAAClB,KAAK,EAAEY,YAAY,EAAE,KAAK,CAAC,EAAEA,YAAY,CAAC;AAClE,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTE,QAAAA,IAAI,CAACd,KAAK,EAAEkB,WAAW,CAAClB,KAAK,EAAEY,YAAY,EAAE,IAAI,CAAC,EAAEA,YAAY,CAAC;AACjE,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTE,QAAAA,IAAI,CAACd,KAAK,EAAE,IAAI,EAAEY,YAAY,CAAC;AAC/B,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;QACTE,IAAI,CAACd,KAAK,EAAEmB,UAAU,CAACnB,KAAK,EAAEY,YAAY,CAAC,EAAEA,YAAY,CAAC;AAC1D,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;QACTE,IAAI,CAACd,KAAK,EAAEoB,WAAW,CAACpB,KAAK,EAAEY,YAAY,CAAC,EAAEA,YAAY,CAAC;AAC3D,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTS,QAAAA,MAAM,CAACrB,KAAK,EAAEY,YAAY,CAAC;AAC3B,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;QACTE,IAAI,CAACd,KAAK,EAAEsB,cAAc,CAACtB,KAAK,EAAEY,YAAY,CAAC,EAAEA,YAAY,CAAC;AAC9D,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTW,QAAAA,OAAO,CAACvB,KAAK,EAAEY,YAAY,CAAC;AAC5B,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTE,QAAAA,IAAI,CAACd,KAAK,EAAEwB,YAAY,CAACxB,KAAK,EAAEY,YAAY,EAAE,IAAI,CAAC,EAAEA,YAAY,CAAC;AAClE,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTE,QAAAA,IAAI,CAACd,KAAK,EAAEwB,YAAY,CAACxB,KAAK,EAAEY,YAAY,EAAE,KAAK,CAAC,EAAEA,YAAY,CAAC;AACnE,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTa,QAAAA,OAAO,CAACzB,KAAK,EAAEY,YAAY,CAAC;AAC5B,QAAA;AAEF,MAAA,KAAK,IAAI;AAAE;AACTc,QAAAA,OAAO,CAAC1B,KAAK,EAAEY,YAAY,CAAC;AAC5B,QAAA;AAEF,MAAA;AACE,QAAA,MAAMpB,WAAW,CACf,+BAA+B,EAC/B,CAAA,2CAAA,EAA8CmC,aAAa,CAACd,MAAM,CAAC,CAAA,CAAA,CAAG,EACtED,YACF,CAAC;AACL;AACF,EAAA;EAEA,MAAMpB,WAAW,CACf,yBAAyB,EACzB,2CAA2C,EAC3CQ,KAAK,CAACS,MACR,CAAC;AACH;AAEA,SAASO,IAAIA,CAAChB,KAAK,EAAES,MAAM,EAC3B;EACE,IAAIT,KAAK,CAACM,KAAK,CAACS,MAAM,IAAIf,KAAK,CAACW,KAAK,CAACI,MAAM,KAAK,CAAC,IAAIf,KAAK,CAACW,KAAK,CAAC,CAAC,CAAC,KAAKxC,IAAI,EAC7E;AACE,IAAA,MAAMqB,WAAW,CACf,0BAA0B,EAC1B,6DAA6D,EAC7DiB,MACF,CAAC;AACH,EAAA;EACA,IAAIT,KAAK,CAACS,MAAM,KAAKT,KAAK,CAACD,KAAK,CAACR,UAAU,EAC3C;IACE,MAAMC,WAAW,CACf,0BAA0B,EAC1B,yCAAyC,EACzCQ,KAAK,CAACS,MACR,CAAC;AACH,EAAA;AACA,EAAA,OAAOT,KAAK,CAACW,KAAK,CAAC,CAAC,CAAC;AACvB;AAEA,SAASM,SAASA,CAACjB,KAAK,EAAES,MAAM,EAChC;AACE,EAAA,MAAMb,KAAK,GAAGgC,aAAa,CAAC5B,KAAK,EAAEA,KAAK,CAACV,MAAM,CAACV,cAAc,EAAE6B,MAAM,CAAC;AACvE,EAAA,IAAI,CAAC,kDAAkD,CAACoB,IAAI,CAACjC,KAAK,CAAC,EACnE;AACE,IAAA,MAAMJ,WAAW,CACf,2BAA2B,EAC3B,kCAAkCsC,IAAI,CAACC,SAAS,CAACnC,KAAK,CAAC,CAAA,CAAA,CAAG,EAC1Da,MACF,CAAC;AACH,EAAA;AAEA,EAAA,MAAMuB,MAAM,GAAGC,MAAM,CAACrC,KAAK,CAAC;AAC5B,EAAA,IAAI,CAACqC,MAAM,CAACC,QAAQ,CAACF,MAAM,CAAC,EAC5B;AACE,IAAA,MAAMxC,WAAW,CACf,2BAA2B,EAC3B,yDAAyD,EACzDiB,MACF,CAAC;AACH,EAAA;AACA,EAAA,OAAOuB,MAAM;AACf;AAEA,SAASd,WAAWA,CAAClB,KAAK,EAAES,MAAM,EAAE0B,MAAM,EAC1C;EACE,IAAIvC,KAAK,GAAGgC,aAAa,CAAC5B,KAAK,EAAE,GAAG,EAAES,MAAM,CAAC;EAE7C,IAAI,CAAC0B,MAAM,IAAIvC,KAAK,KAAK,IAAI,EAAE,OAAO,KAAK;EAC3C,IAAI,CAACuC,MAAM,IAAIvC,KAAK,KAAK,IAAI,EAAE,OAAO,IAAI;AAC1C,EAAA,IAAIuC,MAAM,IAAIvC,KAAK,CAACwC,QAAQ,CAAC,GAAG,CAAC,EAAExC,KAAK,GAAGA,KAAK,CAACyC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAE7D,EAAA,IAAI,CAAC,aAAa,CAACR,IAAI,CAACjC,KAAK,CAAC,EAC9B;AACE,IAAA,MAAMJ,WAAW,CACf,2BAA2B,EAC3B,oCAAoCsC,IAAI,CAACC,SAAS,CAACnC,KAAK,CAAC,CAAA,CAAA,CAAG,EAC5Da,MACF,CAAC;AACH,EAAA;AAEA,EAAA,MAAMuB,MAAM,GAAGM,MAAM,CAAC1C,KAAK,CAAC;AAC5B,EAAA,IAAIoC,MAAM,IAAIM,MAAM,CAACL,MAAM,CAACM,gBAAgB,CAAC,IACxCP,MAAM,IAAIM,MAAM,CAACL,MAAM,CAACO,gBAAgB,CAAC,EAC9C;IACE,OAAOP,MAAM,CAACD,MAAM,CAAC;AACvB,EAAA;AACA,EAAA,OAAOA,MAAM,CAACS,QAAQ,EAAE;AAC1B;AAEA,SAAStB,UAAUA,CAACnB,KAAK,EAAES,MAAM,EACjC;AACE,EAAA,MAAMV,KAAK,GAAG2C,QAAQ,CAAC1C,KAAK,EAAEA,KAAK,CAACV,MAAM,CAACV,cAAc,EAAE6B,MAAM,CAAC;AAClE,EAAA,IAAIV,KAAK,CAACR,UAAU,GAAG,CAAC,EACxB;AACE,IAAA,MAAMC,WAAW,CACf,2BAA2B,EAC3B,uDAAuD,EACvDiB,MACF,CAAC;AACH,EAAA;AAEA,EAAA,MAAMkC,KAAK,GAAG5C,KAAK,CAAC,CAAC,CAAC;AACtB,EAAA,IAAK4C,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,IAAI,IAChC5C,KAAK,CAACA,KAAK,CAACR,UAAU,GAAG,CAAC,CAAC,KAAKoD,KAAK,EAC1C;AACE,IAAA,MAAMnD,WAAW,CACf,2BAA2B,EAC3B,0DAA0D,EAC1DiB,MACF,CAAC;AACH,EAAA;EAEA,MAAMuB,MAAM,GAAG,EAAE;AACjB,EAAA,KAAK,IAAIY,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG7C,KAAK,CAACR,UAAU,GAAG,CAAC,EAAEqD,KAAK,IAAI,CAAC,EAC5D;AACE,IAAA,MAAMC,IAAI,GAAG9C,KAAK,CAAC6C,KAAK,CAAC;IACzB,IAAIC,IAAI,KAAK,IAAI,EACjB;MACEb,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACC,YAAY,CAACF,IAAI,CAAC,CAAC;AACtC,MAAA;AACF,IAAA;AAEAD,IAAAA,KAAK,IAAI,CAAC;AACV,IAAA,IAAIA,KAAK,IAAI7C,KAAK,CAACR,UAAU,GAAG,CAAC,EACjC;AACE,MAAA,MAAMC,WAAW,CACf,2BAA2B,EAC3B,+CAA+C,EAC/CiB,MACF,CAAC;AACH,IAAA;AAEA,IAAA,MAAMuC,OAAO,GAAGjD,KAAK,CAAC6C,KAAK,CAAC;AAC5B,IAAA,MAAMK,MAAM,GAAGC,kBAAkB,CAACF,OAAO,CAAC;IAC1C,IAAIC,MAAM,KAAK,IAAI,EACnB;MACEjB,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACC,YAAY,CAACE,MAAM,CAAC,CAAC;AAC1C,IAAA,CAAC,MACI,IAAID,OAAO,KAAK,IAAI,EACzB;MACEhB,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACC,YAAY,CAACI,OAAO,CAACpD,KAAK,EAAE6C,KAAK,GAAG,CAAC,EAAE,CAAC,EAAEnC,MAAM,CAAC,CAAC,CAAC;AACtEmC,MAAAA,KAAK,IAAI,CAAC;IACZ,CAAC,MACI,IAAII,OAAO,IAAI,IAAI,IAAIA,OAAO,IAAI,IAAI,EAC3C;AACE,MAAA,IAAII,MAAM,GAAGN,MAAM,CAACC,YAAY,CAACC,OAAO,CAAC;AACzC,MAAA,OAAOI,MAAM,CAACrC,MAAM,GAAG,CAAC,IACnB6B,KAAK,GAAG,CAAC,GAAG7C,KAAK,CAACR,UAAU,GAAG,CAAC,IAChCQ,KAAK,CAAC6C,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,IACxB7C,KAAK,CAAC6C,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,EAC7B;AACEA,QAAAA,KAAK,IAAI,CAAC;QACVQ,MAAM,IAAIN,MAAM,CAACC,YAAY,CAAChD,KAAK,CAAC6C,KAAK,CAAC,CAAC;AAC7C,MAAA;AACAZ,MAAAA,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACC,YAAY,CAACd,MAAM,CAACoB,QAAQ,CAACD,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAA,CAAC,MAED;AACE,MAAA,MAAM5D,WAAW,CACf,2BAA2B,EAC3B,+CAA+CsD,MAAM,CAACC,YAAY,CAACC,OAAO,CAAC,CAAA,CAAA,CAAG,EAC9EvC,MACF,CAAC;AACH,IAAA;AACF,EAAA;AACA,EAAA,OAAOuB,MAAM,CAACsB,IAAI,CAAC,EAAE,CAAC;AACxB;AAEA,SAASlC,WAAWA,CAACpB,KAAK,EAAES,MAAM,EAClC;AACE,EAAA,MAAMV,KAAK,GAAG2C,QAAQ,CAAC1C,KAAK,EAAEA,KAAK,CAACV,MAAM,CAACV,cAAc,EAAE6B,MAAM,CAAC;EAClE,MAAMuB,MAAM,GAAG,EAAE;AAEjB,EAAA,KAAK,IAAIY,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG7C,KAAK,CAACR,UAAU,EAAEqD,KAAK,IAAI,CAAC,EACxD;AACE,IAAA,MAAMC,IAAI,GAAG9C,KAAK,CAAC6C,KAAK,CAAC;IACzB,IAAIC,IAAI,KAAK,IAAI,IAAID,KAAK,GAAG,CAAC,IAAI7C,KAAK,CAACR,UAAU,EAClD;MACEyC,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACC,YAAY,CAACF,IAAI,CAAC,CAAC;AACtC,MAAA;AACF,IAAA;AAEA,IAAA,MAAMG,OAAO,GAAGjD,KAAK,CAAC6C,KAAK,GAAG,CAAC,CAAC;IAChC,IAAII,OAAO,KAAK,IAAI,EACpB;MACEhB,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACC,YAAY,CAACI,OAAO,CAACpD,KAAK,EAAE6C,KAAK,GAAG,CAAC,EAAE,CAAC,EAAEnC,MAAM,CAAC,CAAC,CAAC;AACtEmC,MAAAA,KAAK,IAAI,CAAC;AACZ,IAAA,CAAC,MACI,IAAII,OAAO,KAAK,IAAI,EACzB;AACE,MAAA,MAAMO,SAAS,GAAGJ,OAAO,CAACpD,KAAK,EAAE6C,KAAK,GAAG,CAAC,EAAE,CAAC,EAAEnC,MAAM,CAAC;MACtD,IAAI8C,SAAS,GAAG,QAAQ,EACxB;QACE,MAAM/D,WAAW,CACf,2BAA2B,EAC3B,8CAA8C+D,SAAS,CAAA,CAAA,CAAG,EAC1D9C,MACF,CAAC;AACH,MAAA;MACAuB,MAAM,CAAClB,IAAI,CAACgC,MAAM,CAACU,aAAa,CAACD,SAAS,CAAC,CAAC;AAC5CX,MAAAA,KAAK,IAAI,CAAC;AACZ,IAAA,CAAC,MAED;AACEZ,MAAAA,MAAM,CAAClB,IAAI,CAAC,IAAI,CAAC;AACnB,IAAA;AACF,EAAA;AACA,EAAA,OAAOkB,MAAM,CAACsB,IAAI,CAAC,EAAE,CAAC;AACxB;AAEA,SAAS9B,YAAYA,CAACxB,KAAK,EAAES,MAAM,EAAEgD,MAAM,EAC3C;AACE,EAAA,MAAMC,MAAM,GAAGC,eAAe,CAAC3D,KAAK,EAAES,MAAM,CAAC;EAC7CmD,qBAAqB,CAAC5D,KAAK,EAAE0D,MAAM,CAAC3C,MAAM,EAAEN,MAAM,CAAC;EACnDT,KAAK,CAACC,UAAU,CAAC4D,GAAG,CAACH,MAAM,EAAEA,MAAM,CAAC3C,MAAM,CAAC;EAC3C,IAAI0C,MAAM,EAAEzD,KAAK,CAACI,KAAK,CAAC0D,GAAG,CAACJ,MAAM,CAAC;AACnC,EAAA,OAAOA,MAAM;AACf;AAEA,SAASpC,cAAcA,CAACtB,KAAK,EAAES,MAAM,EACrC;AACE,EAAA,MAAMiD,MAAM,GAAGC,eAAe,CAAC3D,KAAK,EAAES,MAAM,CAAC;AAC7C,EAAA,IAAIiD,MAAM,CAAC3C,MAAM,GAAG,CAAC,KAAK,CAAC,EAC3B;AACE,IAAA,MAAMvB,WAAW,CACf,8BAA8B,EAC9B,uCAAuC,EACvCiB,MACF,CAAC;AACH,EAAA;EAEAmD,qBAAqB,CAAC5D,KAAK,EAAE0D,MAAM,CAAC3C,MAAM,GAAG,CAAC,EAAEN,MAAM,CAAC;EACvD,MAAMuB,MAAM,GAAG,EAAE;EACjB,IAAI+B,KAAK,GAAG,CAAC;EACb/D,KAAK,CAACG,cAAc,CAAC0D,GAAG,CAAC7B,MAAM,EAAE,IAAIxB,GAAG,EAAE,CAAC;AAE3C,EAAA,KAAK,IAAIoC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGc,MAAM,CAAC3C,MAAM,EAAE6B,KAAK,IAAI,CAAC,EACrD;IACEmB,KAAK,GAAGC,qBAAqB,CAC3BhE,KAAK,EACLgC,MAAM,EACN0B,MAAM,CAACd,KAAK,CAAC,EACbc,MAAM,CAACd,KAAK,GAAG,CAAC,CAAC,EACjBmB,KAAK,EACLtD,MACF,CAAC;AACH,EAAA;EACAT,KAAK,CAACC,UAAU,CAAC4D,GAAG,CAAC7B,MAAM,EAAE+B,KAAK,CAAC;AACnC,EAAA,OAAO/B,MAAM;AACf;AAEA,SAASX,MAAMA,CAACrB,KAAK,EAAES,MAAM,EAC7B;AACEwD,EAAAA,YAAY,CAACjE,KAAK,EAAE,CAAC,EAAES,MAAM,CAAC;EAC9B,MAAMb,KAAK,GAAGI,KAAK,CAACW,KAAK,CAACuD,GAAG,EAAE;AAC/B,EAAA,MAAMC,MAAM,GAAGnE,KAAK,CAACW,KAAK,CAACX,KAAK,CAACW,KAAK,CAACI,MAAM,GAAG,CAAC,CAAC;AAClD,EAAA,IAAI,CAACqD,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,IAAI,CAACnE,KAAK,CAACI,KAAK,CAACkE,GAAG,CAACH,MAAM,CAAC,EACtD;AACE,IAAA,MAAM3E,WAAW,CACf,8BAA8B,EAC9B,sCAAsC,EACtCiB,MACF,CAAC;AACH,EAAA;EAEAmD,qBAAqB,CAAC5D,KAAK,EAAEmE,MAAM,CAACpD,MAAM,GAAG,CAAC,EAAEN,MAAM,CAAC;AACvD0D,EAAAA,MAAM,CAACrD,IAAI,CAAClB,KAAK,CAAC;EAClBI,KAAK,CAACC,UAAU,CAAC4D,GAAG,CAACM,MAAM,EAAEA,MAAM,CAACpD,MAAM,CAAC;AAC7C;AAEA,SAASW,OAAOA,CAAC1B,KAAK,EAAES,MAAM,EAC9B;AACEwD,EAAAA,YAAY,CAACjE,KAAK,EAAE,CAAC,EAAES,MAAM,CAAC;EAC9B,MAAMb,KAAK,GAAGI,KAAK,CAACW,KAAK,CAACuD,GAAG,EAAE;EAC/B,MAAMK,GAAG,GAAGvE,KAAK,CAACW,KAAK,CAACuD,GAAG,EAAE;AAC7B,EAAA,MAAMC,MAAM,GAAGnE,KAAK,CAACW,KAAK,CAACX,KAAK,CAACW,KAAK,CAACI,MAAM,GAAG,CAAC,CAAC;AAClD,EAAA,IAAI,CAACyD,YAAY,CAACL,MAAM,CAAC,EACzB;AACE,IAAA,MAAM3E,WAAW,CACf,8BAA8B,EAC9B,6CAA6C,EAC7CiB,MACF,CAAC;AACH,EAAA;AAEA,EAAA,MAAMsD,KAAK,GAAGC,qBAAqB,CACjChE,KAAK,EACLmE,MAAM,EACNI,GAAG,EACH3E,KAAK,EACLI,KAAK,CAACC,UAAU,CAACwE,GAAG,CAACN,MAAM,CAAC,IAAIrF,MAAM,CAACC,IAAI,CAACoF,MAAM,CAAC,CAACpD,MAAM,EAC1DN,MACF,CAAC;AACDmD,EAAAA,qBAAqB,CAAC5D,KAAK,EAAE+D,KAAK,EAAEtD,MAAM,CAAC;EAC3CT,KAAK,CAACC,UAAU,CAAC4D,GAAG,CAACM,MAAM,EAAEJ,KAAK,CAAC;AACrC;AAEA,SAASC,qBAAqBA,CAAChE,KAAK,EAAEmE,MAAM,EAAEI,GAAG,EAAE3E,KAAK,EAAEmE,KAAK,EAAEtD,MAAM,EACvE;AACE,EAAA,MAAMiE,UAAU,GAAGC,sBAAsB,CAACJ,GAAG,EAAE9D,MAAM,CAAC;AACtD,EAAA,MAAMmE,QAAQ,GAAG5E,KAAK,CAACG,cAAc,CAACsE,GAAG,CAACN,MAAM,CAAC,IAAI,IAAI3D,GAAG,EAAE;EAC9D,MAAMqE,YAAY,GAAGD,QAAQ,CAACH,GAAG,CAACC,UAAU,CAAC9E,KAAK,CAAC;AACnD,EAAA,IAAIiF,YAAY,IAAIA,YAAY,KAAKH,UAAU,CAACI,IAAI,EACpD;AACE,IAAA,MAAMtF,WAAW,CACf,8BAA8B,EAC9B,CAAA,yDAAA,EAA4DsC,IAAI,CAACC,SAAS,CAAC2C,UAAU,CAAC9E,KAAK,CAAC,CAAA,CAAA,CAAG,EAC/Fa,MACF,CAAC;AACH,EAAA;EAEA,MAAMsE,MAAM,GAAGjG,MAAM,CAACkG,MAAM,CAACb,MAAM,EAAEO,UAAU,CAAC9E,KAAK,CAAC;EACtDd,MAAM,CAACmG,cAAc,CAACd,MAAM,EAAEO,UAAU,CAAC9E,KAAK,EAAE;AAC9CsF,IAAAA,YAAY,EAAE,IAAI;AAClBC,IAAAA,UAAU,EAAE,IAAI;IAChBvF,KAAK;AACLwF,IAAAA,QAAQ,EAAE;AACZ,GAAC,CAAC;EACFR,QAAQ,CAACf,GAAG,CAACa,UAAU,CAAC9E,KAAK,EAAE8E,UAAU,CAACI,IAAI,CAAC;EAC/C9E,KAAK,CAACG,cAAc,CAAC0D,GAAG,CAACM,MAAM,EAAES,QAAQ,CAAC;AAC1C,EAAA,OAAOG,MAAM,GAAGhB,KAAK,GAAGA,KAAK,GAAG,CAAC;AACnC;AAEA,SAASY,sBAAsBA,CAACJ,GAAG,EAAE9D,MAAM,EAC3C;AACE,EAAA,IAAI,OAAO8D,GAAG,KAAK,QAAQ,EAAE,OAAO;AAAEO,IAAAA,IAAI,EAAE,QAAQ;AAAElF,IAAAA,KAAK,EAAE2E;GAAK;EAClE,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAItC,MAAM,CAACoD,aAAa,CAACd,GAAG,CAAC,EACxD;IACE,OAAO;AAAEO,MAAAA,IAAI,EAAE,SAAS;MAAElF,KAAK,EAAEkD,MAAM,CAACyB,GAAG;KAAG;AAChD,EAAA;AACA,EAAA,MAAM/E,WAAW,CACf,8BAA8B,EAC9B,oEAAoE,EACpEiB,MACF,CAAC;AACH;AAEA,SAASgB,OAAOA,CAACzB,KAAK,EAAES,MAAM,EAC9B;AACEwD,EAAAA,YAAY,CAACjE,KAAK,EAAE,CAAC,EAAES,MAAM,CAAC;AAC9B,EAAA,IAAIT,KAAK,CAACW,KAAK,CAACX,KAAK,CAACW,KAAK,CAACI,MAAM,GAAG,CAAC,CAAC,KAAK5C,IAAI,EAChD;AACE,IAAA,MAAMqB,WAAW,CACf,yBAAyB,EACzB,2CAA2C,EAC3CiB,MACF,CAAC;AACH,EAAA;AACA,EAAA,MAAM6E,EAAE,GAAGC,UAAU,CAACvF,KAAK,EAAES,MAAM,CAAC;EACpC,IAAI,CAACT,KAAK,CAACO,IAAI,CAAC+D,GAAG,CAACgB,EAAE,CAAC,IAAItF,KAAK,CAACO,IAAI,CAACiF,IAAI,IAAIxF,KAAK,CAACV,MAAM,CAACd,cAAc,EACzE;AACE,IAAA,MAAMgB,WAAW,CACf,2BAA2B,EAC3B,CAAA,oCAAA,EAAuCQ,KAAK,CAACV,MAAM,CAACd,cAAc,CAAA,EAAA,CAAI,EACtEiC,MACF,CAAC;AACH,EAAA;AACAT,EAAAA,KAAK,CAACO,IAAI,CAACsD,GAAG,CAACyB,EAAE,EAAEtF,KAAK,CAACW,KAAK,CAACX,KAAK,CAACW,KAAK,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC;AACzD;AAEA,SAASQ,OAAOA,CAACvB,KAAK,EAAES,MAAM,EAC9B;AACE,EAAA,MAAM6E,EAAE,GAAGC,UAAU,CAACvF,KAAK,EAAES,MAAM,CAAC;EACpC,IAAI,CAACT,KAAK,CAACO,IAAI,CAAC+D,GAAG,CAACgB,EAAE,CAAC,EACvB;IACE,MAAM9F,WAAW,CACf,yBAAyB,EACzB,qBAAqB8F,EAAE,CAAA,gBAAA,CAAkB,EACzC7E,MACF,CAAC;AACH,EAAA;AACAK,EAAAA,IAAI,CAACd,KAAK,EAAEA,KAAK,CAACO,IAAI,CAACkE,GAAG,CAACa,EAAE,CAAC,EAAE7E,MAAM,CAAC;AACzC;AAEA,SAAS8E,UAAUA,CAACvF,KAAK,EAAES,MAAM,EACjC;EACE,MAAMb,KAAK,GAAGgC,aAAa,CAAC5B,KAAK,EAAE,EAAE,EAAES,MAAM,CAAC;AAC9C,EAAA,IAAI,CAAC,QAAQ,CAACoB,IAAI,CAACjC,KAAK,CAAC,EACzB;AACE,IAAA,MAAMJ,WAAW,CACf,yBAAyB,EACzB,8BAA8BsC,IAAI,CAACC,SAAS,CAACnC,KAAK,CAAC,CAAA,CAAA,CAAG,EACtDa,MACF,CAAC;AACH,EAAA;AAEA,EAAA,MAAMuB,MAAM,GAAGC,MAAM,CAACrC,KAAK,CAAC;AAC5B,EAAA,IAAI,CAACqC,MAAM,CAACoD,aAAa,CAACrD,MAAM,CAAC,IAAIA,MAAM,GAAGhC,KAAK,CAACV,MAAM,CAACb,SAAS,EACpE;AACE,IAAA,MAAMe,WAAW,CACf,2BAA2B,EAC3B,CAAA,kCAAA,EAAqCQ,KAAK,CAACV,MAAM,CAACb,SAAS,CAAA,EAAA,CAAI,EAC/DgC,MACF,CAAC;AACH,EAAA;AACA,EAAA,OAAOuB,MAAM;AACf;AAEA,SAAS2B,eAAeA,CAAC3D,KAAK,EAAES,MAAM,EACtC;AACE,EAAA,IAAI,CAACT,KAAK,CAACM,KAAK,CAACS,MAAM,EACvB;AACE,IAAA,MAAMvB,WAAW,CACf,yBAAyB,EACzB,wCAAwC,EACxCiB,MACF,CAAC;AACH,EAAA;EAEA,MAAMgF,IAAI,GAAGzF,KAAK,CAACM,KAAK,CAAC4D,GAAG,EAAE;EAC9B,IAAIlE,KAAK,CAACW,KAAK,CAAC8E,IAAI,CAAC,KAAKtH,IAAI,EAC9B;AACE,IAAA,MAAMqB,WAAW,CACf,yBAAyB,EACzB,oCAAoC,EACpCiB,MACF,CAAC;AACH,EAAA;EAEA,MAAMiD,MAAM,GAAG1D,KAAK,CAACW,KAAK,CAAC0B,KAAK,CAACoD,IAAI,GAAG,CAAC,CAAC;AAC1CzF,EAAAA,KAAK,CAACW,KAAK,CAACI,MAAM,GAAG0E,IAAI;AACzB,EAAA,OAAO/B,MAAM;AACf;AAEA,SAAS5C,IAAIA,CAACd,KAAK,EAAEJ,KAAK,EAAEa,MAAM,EAClC;EACE,IAAIT,KAAK,CAACW,KAAK,CAACI,MAAM,IAAIf,KAAK,CAACV,MAAM,CAACX,aAAa,EACpD;AACE,IAAA,MAAMa,WAAW,CACf,2BAA2B,EAC3B,CAAA,oCAAA,EAAuCQ,KAAK,CAACV,MAAM,CAACX,aAAa,CAAA,EAAA,CAAI,EACrE8B,MACF,CAAC;AACH,EAAA;AACAT,EAAAA,KAAK,CAACW,KAAK,CAACG,IAAI,CAAClB,KAAK,CAAC;AACzB;AAEA,SAASqE,YAAYA,CAACjE,KAAK,EAAE+D,KAAK,EAAEtD,MAAM,EAC1C;AACE,EAAA,IAAIT,KAAK,CAACW,KAAK,CAACI,MAAM,GAAGgD,KAAK,EAC9B;IACE,MAAMvE,WAAW,CACf,0BAA0B,EAC1B,0BAA0BuE,KAAK,CAAA,cAAA,CAAgB,EAC/CtD,MACF,CAAC;AACH,EAAA;AACF;AAEA,SAASmD,qBAAqBA,CAAC5D,KAAK,EAAE+D,KAAK,EAAEtD,MAAM,EACnD;AACE,EAAA,IAAIsD,KAAK,GAAG/D,KAAK,CAACV,MAAM,CAAChB,iBAAiB,EAC1C;AACE,IAAA,MAAMkB,WAAW,CACf,2BAA2B,EAC3B,CAAA,4CAAA,EAA+CQ,KAAK,CAACV,MAAM,CAAChB,iBAAiB,CAAA,EAAA,CAAI,EACjFmC,MACF,CAAC;AACH,EAAA;AACF;AAEA,SAASmB,aAAaA,CAAC5B,KAAK,EAAE0F,KAAK,EAAEjF,MAAM,EAC3C;EACE,MAAMV,KAAK,GAAG2C,QAAQ,CAAC1C,KAAK,EAAE0F,KAAK,EAAEjF,MAAM,CAAC;EAC5C,IAAIuB,MAAM,GAAG,EAAE;AACf,EAAA,KAAK,MAAMa,IAAI,IAAI9C,KAAK,EACxB;IACE,IAAI8C,IAAI,GAAG,IAAI,EACf;AACE,MAAA,MAAMrD,WAAW,CACf,2BAA2B,EAC3B,+CAA+C,EAC/CiB,MACF,CAAC;AACH,IAAA;AACAuB,IAAAA,MAAM,IAAIc,MAAM,CAACC,YAAY,CAACF,IAAI,CAAC;AACrC,EAAA;AACA,EAAA,OAAOb,MAAM;AACf;AAEA,SAASU,QAAQA,CAAC1C,KAAK,EAAE0F,KAAK,EAAEjF,MAAM,EACtC;AACE,EAAA,MAAMkF,KAAK,GAAG3F,KAAK,CAACS,MAAM;EAC1B,OAAOT,KAAK,CAACS,MAAM,GAAGT,KAAK,CAACD,KAAK,CAACR,UAAU,IAAIS,KAAK,CAACD,KAAK,CAACC,KAAK,CAACS,MAAM,CAAC,KAAK,IAAI,EAClF;IACET,KAAK,CAACS,MAAM,IAAI,CAAC;AACjB,IAAA,IAAIT,KAAK,CAACS,MAAM,GAAGkF,KAAK,GAAGD,KAAK,EAChC;MACE,MAAMlG,WAAW,CACf,2BAA2B,EAC3B,2BAA2BkG,KAAK,CAAA,YAAA,CAAc,EAC9CjF,MACF,CAAC;AACH,IAAA;AACF,EAAA;EAEA,IAAIT,KAAK,CAACS,MAAM,IAAIT,KAAK,CAACD,KAAK,CAACR,UAAU,EAC1C;AACE,IAAA,MAAMC,WAAW,CACf,gBAAgB,EAChB,gDAAgD,EAChDiB,MACF,CAAC;AACH,EAAA;AAEA,EAAA,MAAMuB,MAAM,GAAGhC,KAAK,CAACD,KAAK,CAAC6F,QAAQ,CAACD,KAAK,EAAE3F,KAAK,CAACS,MAAM,CAAC;EACxDT,KAAK,CAACS,MAAM,IAAI,CAAC;AACjB,EAAA,OAAOuB,MAAM;AACf;AAEA,SAASmB,OAAOA,CAACpD,KAAK,EAAE4F,KAAK,EAAE5E,MAAM,EAAEN,MAAM,EAC7C;AACE,EAAA,IAAIkF,KAAK,GAAG5E,MAAM,GAAGhB,KAAK,CAACR,UAAU,EACrC;AACE,IAAA,MAAMC,WAAW,CACf,2BAA2B,EAC3B,sCAAsC,EACtCiB,MACF,CAAC;AACH,EAAA;EAEA,IAAIuB,MAAM,GAAG,CAAC;AACd,EAAA,KAAK,IAAIY,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG7B,MAAM,EAAE6B,KAAK,IAAI,CAAC,EAC9C;IACE,MAAMhD,KAAK,GAAGiG,QAAQ,CAAC9F,KAAK,CAAC4F,KAAK,GAAG/C,KAAK,CAAC,CAAC;AAC5C,IAAA,IAAIhD,KAAK,KAAK,EAAE,EAChB;AACE,MAAA,MAAMJ,WAAW,CACf,2BAA2B,EAC3B,0DAA0D,EAC1DiB,MACF,CAAC;AACH,IAAA;AACAuB,IAAAA,MAAM,GAAGA,MAAM,GAAG,EAAE,GAAGpC,KAAK;AAC9B,EAAA;AACA,EAAA,OAAOoC,MAAM;AACf;AAEA,SAAS6D,QAAQA,CAAChD,IAAI,EACtB;EACE,IAAIA,IAAI,IAAI,IAAI,IAAIA,IAAI,IAAI,IAAI,EAAE,OAAOA,IAAI,GAAG,IAAI;AACpD,EAAA,IAAIA,IAAI,IAAI,IAAI,IAAIA,IAAI,IAAI,IAAI,EAAE,OAAOA,IAAI,GAAG,IAAI,GAAG,EAAE;AACzD,EAAA,IAAIA,IAAI,IAAI,IAAI,IAAIA,IAAI,IAAI,IAAI,EAAE,OAAOA,IAAI,GAAG,IAAI,GAAG,EAAE;AACzD,EAAA,OAAO,EAAE;AACX;AAEA,SAASK,kBAAkBA,CAACL,IAAI,EAChC;AACE,EAAA,MAAMa,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE;GACP;AACD,EAAA,OAAO5E,MAAM,CAACkG,MAAM,CAACtB,MAAM,EAAEb,IAAI,CAAC,GAAGa,MAAM,CAACb,IAAI,CAAC,GAAG,IAAI;AAC1D;AAEA,SAAShD,oBAAoBA,CAACD,KAAK,EACnC;AACE,EAAA,MAAMkG,MAAM,GAAG,IAAIzF,OAAO,EAAE;AAC5B,EAAA,MAAM0F,QAAQ,GAAG,IAAI1F,OAAO,EAAE;EAC9B,MAAM2F,OAAO,GAAG,CAAE;AAAEC,IAAAA,IAAI,EAAE,KAAK;AAAErG,IAAAA;AAAM,GAAC,CAAE;EAE1C,OAAOoG,OAAO,CAACjF,MAAM,EACrB;AACE,IAAA,MAAMmF,IAAI,GAAGF,OAAO,CAAC9B,GAAG,EAAE;AAC1B,IAAA,MAAMiC,OAAO,GAAGD,IAAI,CAACtG,KAAK;AAC1B,IAAA,IAAIuG,OAAO,KAAK,IAAI,IACf,OAAOA,OAAO,KAAK,QAAQ,IAC3B,OAAOA,OAAO,KAAK,SAAS,EACjC;AACE,MAAA;AACF,IAAA;AACA,IAAA,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAC/B;AACE,MAAA,IAAI,CAAClE,MAAM,CAACC,QAAQ,CAACiE,OAAO,CAAC,EAC7B;AACE,QAAA,MAAM3G,WAAW,CACf,yBAAyB,EACzB,6CAA6C,EAC7C,IACF,CAAC;AACH,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA,IAAI,CAAC2G,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAC3C;MACE,MAAM3G,WAAW,CACf,yBAAyB,EACzB,CAAA,mCAAA,EAAsC,OAAO2G,OAAO,CAAA,MAAA,CAAQ,EAC5D,IACF,CAAC;AACH,IAAA;IACA,IAAID,IAAI,CAACD,IAAI,EACb;AACEH,MAAAA,MAAM,CAACM,MAAM,CAACD,OAAO,CAAC;AACtBJ,MAAAA,QAAQ,CAACjC,GAAG,CAACqC,OAAO,CAAC;AACrB,MAAA;AACF,IAAA;AACA,IAAA,IAAIJ,QAAQ,CAACzB,GAAG,CAAC6B,OAAO,CAAC,EAAE;AAC3B,IAAA,IAAIL,MAAM,CAACxB,GAAG,CAAC6B,OAAO,CAAC,EACvB;AACE,MAAA,MAAM3G,WAAW,CACf,yBAAyB,EACzB,4CAA4C,EAC5C,IACF,CAAC;AACH,IAAA;AAEAsG,IAAAA,MAAM,CAAChC,GAAG,CAACqC,OAAO,CAAC;IACnBH,OAAO,CAAClF,IAAI,CAAC;AAAEmF,MAAAA,IAAI,EAAE,IAAI;AAAErG,MAAAA,KAAK,EAAEuG;AAAQ,KAAC,CAAC;AAE5C,IAAA,IAAI/B,KAAK,CAACC,OAAO,CAAC8B,OAAO,CAAC,EAC1B;AACE,MAAA,KAAK,IAAIvD,KAAK,GAAGuD,OAAO,CAACpF,MAAM,GAAG,CAAC,EAAE6B,KAAK,IAAI,CAAC,EAAEA,KAAK,IAAI,CAAC,EAC3D;QACEoD,OAAO,CAAClF,IAAI,CAAC;AAAEmF,UAAAA,IAAI,EAAE,KAAK;UAAErG,KAAK,EAAEuG,OAAO,CAACvD,KAAK;AAAE,SAAC,CAAC;AACtD,MAAA;AACF,IAAA,CAAC,MACI,IAAI9D,MAAM,CAACuH,cAAc,CAACF,OAAO,CAAC,KAAKrH,MAAM,CAACwH,SAAS,EAC5D;AACE,MAAA,MAAMvH,IAAI,GAAGD,MAAM,CAACC,IAAI,CAACoH,OAAO,CAAC;AACjC,MAAA,KAAK,IAAIvD,KAAK,GAAG7D,IAAI,CAACgC,MAAM,GAAG,CAAC,EAAE6B,KAAK,IAAI,CAAC,EAAEA,KAAK,IAAI,CAAC,EACxD;QACEoD,OAAO,CAAClF,IAAI,CAAC;AAAEmF,UAAAA,IAAI,EAAE,KAAK;AAAErG,UAAAA,KAAK,EAAEuG,OAAO,CAACpH,IAAI,CAAC6D,KAAK,CAAC;AAAE,SAAC,CAAC;AAC5D,MAAA;AACF,IAAA,CAAC,MAED;AACE,MAAA,MAAMpD,WAAW,CACf,yBAAyB,EACzB,4CAA4C,EAC5C,IACF,CAAC;AACH,IAAA;AACF,EAAA;AACF;AAEA,SAASJ,cAAcA,CAACF,KAAK,EAC7B;EACE,IAAIA,KAAK,YAAYqH,WAAW,EAAE,OAAO,IAAIC,UAAU,CAACtH,KAAK,CAAC;AAC9D,EAAA,IAAIqH,WAAW,CAACE,MAAM,CAACvH,KAAK,CAAC,EAC7B;AACE,IAAA,OAAO,IAAIsH,UAAU,CAACtH,KAAK,CAACwH,MAAM,EAAExH,KAAK,CAACyH,UAAU,EAAEzH,KAAK,CAACK,UAAU,CAAC;AACzE,EAAA;AACA,EAAA,MAAMC,WAAW,CACf,0BAA0B,EAC1B,6DAA6D,EAC7D,CACF,CAAC;AACH;AAEA,SAASH,eAAeA,CAACF,OAAO,EAChC;AACE,EAAA,IAAI,CAACA,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,IAAIiF,KAAK,CAACC,OAAO,CAAClF,OAAO,CAAC,EACrE;AACE,IAAA,MAAMK,WAAW,CACf,0BAA0B,EAC1B,kCAAkC,EAClC,CACF,CAAC;AACH,EAAA;EAEA,KAAK,MAAMoH,IAAI,IAAI9H,MAAM,CAACC,IAAI,CAACI,OAAO,CAAC,EACvC;AACE,IAAA,IAAI,CAACN,WAAW,CAACgI,QAAQ,CAACD,IAAI,CAAC,EAC/B;AACE,MAAA,MAAMpH,WAAW,CACf,0BAA0B,EAC1B,uCAAuCsC,IAAI,CAACC,SAAS,CAAC6E,IAAI,CAAC,CAAA,CAAA,CAAG,EAC9D,CACF,CAAC;AACH,IAAA;AACF,EAAA;EAEA,MAAM5E,MAAM,GAAG,EAAE;AACjB,EAAA,KAAK,MAAM4E,IAAI,IAAI/H,WAAW,EAC9B;IACE,MAAMe,KAAK,GAAGT,OAAO,CAACyH,IAAI,CAAC,IAAIvI,wBAAwB,CAACuI,IAAI,CAAC;IAC7D,IAAI,CAAC3E,MAAM,CAACoD,aAAa,CAACzF,KAAK,CAAC,IAAIA,KAAK,IAAI,CAAC,EAC9C;MACE,MAAMJ,WAAW,CACf,0BAA0B,EAC1B,UAAUoH,IAAI,CAAA,iCAAA,CAAmC,EACjD,CACF,CAAC;AACH,IAAA;AACA5E,IAAAA,MAAM,CAAC4E,IAAI,CAAC,GAAGhH,KAAK;AACtB,EAAA;AACA,EAAA,OAAOoC,MAAM;AACf;AAEA,SAASwC,YAAYA,CAAC5E,KAAK,EAC3B;EACE,OAAOkH,OAAO,CAAClH,KAAK,IACf,OAAOA,KAAK,KAAK,QAAQ,IACzB,CAACwE,KAAK,CAACC,OAAO,CAACzE,KAAK,CAAC,IACrBd,MAAM,CAACuH,cAAc,CAACzG,KAAK,CAAC,KAAKd,MAAM,CAACwH,SAAS,CAAC;AACzD;AAEA,SAAS3E,aAAaA,CAAC/B,KAAK,EAC5B;AACE,EAAA,IAAIA,KAAK,IAAI,IAAI,IAAIA,KAAK,IAAI,IAAI,EAClC;IACE,OAAOkC,IAAI,CAACC,SAAS,CAACe,MAAM,CAACC,YAAY,CAACnD,KAAK,CAAC,CAAC;AACnD,EAAA;AACA,EAAA,OAAO,CAAA,EAAA,EAAKA,KAAK,CAAC6C,QAAQ,CAAC,EAAE,CAAC,CAACsE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;AACnD;AAEA,SAASvH,WAAWA,CAACwH,IAAI,EAAEC,OAAO,EAAExG,MAAM,EAC1C;AACE,EAAA,MAAMyG,KAAK,GAAG,IAAIC,KAAK,CAACF,OAAO,CAAC;EAChCC,KAAK,CAACF,IAAI,GAAGA,IAAI;EACjBE,KAAK,CAACE,QAAQ,GAAG,CAAC;EAClB,IAAI3G,MAAM,KAAK,IAAI,EAAEyG,KAAK,CAACzG,MAAM,GAAGA,MAAM;AAC1C,EAAA,OAAOyG,KAAK;AACd;;;;"}
1
+ {"version":3,"file":"CjsPickleProtocol0Reader.js","sources":["../../../../../src/formats/pickle/core/CjsPickleProtocol0Reader.js"],"sourcesContent":["const MARK = Symbol(\"pickle-mark\");\n\nexport const PICKLE_PROTOCOL_0_LIMITS = {\n maxContainerItems: 1000000,\n maxInputBytes: 32 * 1024 * 1024,\n maxMemoEntries: 500000,\n maxMemoID: 1000000,\n maxOperations: 2000000,\n maxStackDepth: 100000,\n maxStringBytes: 4 * 1024 * 1024\n};\n\nconst LIMIT_NAMES = Object.keys(PICKLE_PROTOCOL_0_LIMITS);\n\n/**\n * Construction-bound decoder for the inert data subset of Python pickle\n * protocol 0.\n *\n * The reader never imports modules, resolves globals, invokes reducers, or\n * constructs Python objects. Unsupported opcodes fail closed at their byte\n * offset.\n */\nexport class CjsPickleProtocol0Reader\n{\n #bytes;\n #limits;\n\n /**\n * Bind one byte source and its resource limits.\n *\n * @param {ArrayBuffer|ArrayBufferView} input Pickle protocol-0 bytes.\n * @param {object} [options] Reader options containing optional limits.\n */\n constructor(input, options = {})\n {\n this.#bytes = normalizeBytes(input);\n this.#limits = normalizeLimits(options.limits ?? options);\n\n if (this.#bytes.byteLength > this.#limits.maxInputBytes)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle input exceeds maxInputBytes (${this.#limits.maxInputBytes}).`,\n 0\n );\n }\n }\n\n /**\n * Decode an inert JavaScript value while preserving pickle memo identity.\n *\n * @returns {*} Decoded scalar, array, or plain object graph.\n */\n Read()\n {\n return decode(this.#bytes, this.#limits);\n }\n\n /**\n * Decode a value and reject cycles or values JSON cannot represent.\n *\n * @returns {*} JSON-compatible decoded graph.\n */\n ReadJSON()\n {\n const value = this.Read();\n assertJSONCompatible(value);\n return value;\n }\n\n /**\n * Verify that a decoded value can cross the JSON boundary unchanged.\n *\n * @param {*} value Candidate decoded graph.\n * @returns {*} The supplied value.\n */\n static ToJSON(value)\n {\n assertJSONCompatible(value);\n return value;\n }\n}\n\nfunction decode(bytes, limits)\n{\n const state = {\n bytes,\n containers: new WeakMap(),\n dictionaryKeys: new WeakMap(),\n limits,\n lists: new WeakSet(),\n marks: [],\n memo: new Map(),\n offset: 0,\n operations: 0,\n // Every global marker created, and separately those no REDUCE has consumed.\n // A marker is a decoding artifact, never data: it may sit on the stack and\n // in the memo on its way to a REDUCE, and it may reach nothing else.\n globalMarkers: new WeakSet(),\n pendingGlobals: new Set(),\n // Properties built by REDUCE across the WHOLE decode, not per container.\n rebuiltItems: 0,\n stack: []\n };\n\n while (state.offset < bytes.byteLength)\n {\n const opcodeOffset = state.offset;\n const opcode = bytes[state.offset++];\n\n state.operations += 1;\n if (state.operations > limits.maxOperations)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle operation count exceeds maxOperations (${limits.maxOperations}).`,\n opcodeOffset\n );\n }\n\n switch (opcode)\n {\n case 0x28: // MARK\n state.marks.push(state.stack.length);\n push(state, MARK, opcodeOffset);\n break;\n\n case 0x2e: // STOP\n return stop(state, opcodeOffset);\n\n case 0x46: // FLOAT\n push(state, readFloat(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x49: // INT\n push(state, readInteger(state, opcodeOffset, false), opcodeOffset);\n break;\n\n case 0x4c: // LONG\n push(state, readInteger(state, opcodeOffset, true), opcodeOffset);\n break;\n\n case 0x4e: // NONE\n push(state, null, opcodeOffset);\n break;\n\n case 0x53: // STRING\n push(state, readString(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x56: // UNICODE\n push(state, readUnicode(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x61: // APPEND\n append(state, opcodeOffset);\n break;\n\n case 0x64: // DICT\n push(state, readDictionary(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x67: // GET\n getMemo(state, opcodeOffset);\n break;\n\n case 0x6c: // LIST\n push(state, readSequence(state, opcodeOffset, true), opcodeOffset);\n break;\n\n case 0x74: // TUPLE\n push(state, readSequence(state, opcodeOffset, false), opcodeOffset);\n break;\n\n case 0x70: // PUT\n putMemo(state, opcodeOffset);\n break;\n\n case 0x73: // SETITEM\n setItem(state, opcodeOffset);\n break;\n\n case 0x63: // GLOBAL\n push(state, readGlobal(state, opcodeOffset), opcodeOffset);\n break;\n\n case 0x52: // REDUCE\n reduce(state, opcodeOffset);\n break;\n\n default:\n throw pickleError(\n \"CJS_PICKLE_FORMAT_OPCODE_UNSUPPORTED\",\n `Data-only pickle protocol 0 rejects opcode ${displayOpcode(opcode)}.`,\n opcodeOffset\n );\n }\n }\n\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STOP_MISSING\",\n \"Pickle input ended without a STOP opcode.\",\n state.offset\n );\n}\n\nfunction stop(state, offset)\n{\n // A GLOBAL that no REDUCE consumed would otherwise reach the caller as an\n // empty object, indistinguishable from an empty dictionary.\n if (state.pendingGlobals.size)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_GLOBAL_UNSUPPORTED\",\n \"Pickle names a global that no REDUCE consumes.\",\n offset\n );\n }\n rejectGlobalMarker(state, state.stack[0], offset);\n if (state.marks.length || state.stack.length !== 1 || state.stack[0] === MARK)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STACK_INVALID\",\n \"Pickle STOP requires one completed value and no open marks.\",\n offset\n );\n }\n if (state.offset !== state.bytes.byteLength)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_TRAILING_DATA\",\n \"Pickle input contains bytes after STOP.\",\n state.offset\n );\n }\n return state.stack[0];\n}\n\nfunction readFloat(state, offset)\n{\n const value = readAsciiLine(state, state.limits.maxStringBytes, offset);\n if (!/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/u.test(value))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_NUMBER_INVALID\",\n `Pickle FLOAT value is invalid: ${JSON.stringify(value)}.`,\n offset\n );\n }\n\n const result = Number(value);\n if (!Number.isFinite(result))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_NUMBER_INVALID\",\n \"Pickle FLOAT must be finite for JSON-compatible output.\",\n offset\n );\n }\n return result;\n}\n\nfunction readInteger(state, offset, isLong)\n{\n let value = readAsciiLine(state, 128, offset);\n\n if (!isLong && value === \"00\") return false;\n if (!isLong && value === \"01\") return true;\n if (isLong && value.endsWith(\"L\")) value = value.slice(0, -1);\n\n if (!/^[+-]?\\d+$/u.test(value))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_NUMBER_INVALID\",\n `Pickle integer value is invalid: ${JSON.stringify(value)}.`,\n offset\n );\n }\n\n const result = BigInt(value);\n if (result >= BigInt(Number.MIN_SAFE_INTEGER)\n && result <= BigInt(Number.MAX_SAFE_INTEGER))\n {\n return Number(result);\n }\n return result.toString();\n}\n\nfunction readString(state, offset)\n{\n const bytes = readLine(state, state.limits.maxStringBytes, offset);\n if (bytes.byteLength < 2)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n \"Pickle STRING must be a quoted Python string literal.\",\n offset\n );\n }\n\n const quote = bytes[0];\n if ((quote !== 0x27 && quote !== 0x22)\n || bytes[bytes.byteLength - 1] !== quote)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n \"Pickle STRING must use matching single or double quotes.\",\n offset\n );\n }\n\n const result = [];\n for (let index = 1; index < bytes.byteLength - 1; index += 1)\n {\n const byte = bytes[index];\n if (byte !== 0x5c)\n {\n result.push(String.fromCharCode(byte));\n continue;\n }\n\n index += 1;\n if (index >= bytes.byteLength - 1)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n \"Pickle STRING ends with an incomplete escape.\",\n offset\n );\n }\n\n const escaped = bytes[index];\n const simple = decodeSimpleEscape(escaped);\n if (simple !== null)\n {\n result.push(String.fromCharCode(simple));\n }\n else if (escaped === 0x78)\n {\n result.push(String.fromCharCode(readHex(bytes, index + 1, 2, offset)));\n index += 2;\n }\n else if (escaped >= 0x30 && escaped <= 0x37)\n {\n let digits = String.fromCharCode(escaped);\n while (digits.length < 3\n && index + 1 < bytes.byteLength - 1\n && bytes[index + 1] >= 0x30\n && bytes[index + 1] <= 0x37)\n {\n index += 1;\n digits += String.fromCharCode(bytes[index]);\n }\n result.push(String.fromCharCode(Number.parseInt(digits, 8)));\n }\n else\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n `Pickle STRING contains unsupported escape \\\\${String.fromCharCode(escaped)}.`,\n offset\n );\n }\n }\n return result.join(\"\");\n}\n\nfunction readUnicode(state, offset)\n{\n const bytes = readLine(state, state.limits.maxStringBytes, offset);\n const result = [];\n\n for (let index = 0; index < bytes.byteLength; index += 1)\n {\n const byte = bytes[index];\n if (byte !== 0x5c || index + 1 >= bytes.byteLength)\n {\n result.push(String.fromCharCode(byte));\n continue;\n }\n\n const escaped = bytes[index + 1];\n if (escaped === 0x75)\n {\n result.push(String.fromCharCode(readHex(bytes, index + 2, 4, offset)));\n index += 5;\n }\n else if (escaped === 0x55)\n {\n const codePoint = readHex(bytes, index + 2, 8, offset);\n if (codePoint > 0x10ffff)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n `Pickle UNICODE code point is out of range: ${codePoint}.`,\n offset\n );\n }\n result.push(String.fromCodePoint(codePoint));\n index += 9;\n }\n else\n {\n result.push(\"\\\\\");\n }\n }\n return result.join(\"\");\n}\n\nfunction readSequence(state, offset, isList)\n{\n const values = popMarkedValues(state, offset);\n requireContainerLimit(state, values.length, offset);\n state.containers.set(values, values.length);\n if (isList) state.lists.add(values);\n return values;\n}\n\nfunction readDictionary(state, offset)\n{\n const values = popMarkedValues(state, offset);\n if (values.length % 2 !== 0)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_CONTAINER_INVALID\",\n \"Pickle DICT requires key/value pairs.\",\n offset\n );\n }\n\n requireContainerLimit(state, values.length / 2, offset);\n const result = {};\n let count = 0;\n state.dictionaryKeys.set(result, new Map());\n\n for (let index = 0; index < values.length; index += 2)\n {\n count = defineDictionaryValue(\n state,\n result,\n values[index],\n values[index + 1],\n count,\n offset\n );\n }\n state.containers.set(result, count);\n return result;\n}\n\nfunction append(state, offset)\n{\n requireStack(state, 2, offset);\n const value = rejectGlobalMarker(state, state.stack.pop(), offset);\n const target = state.stack[state.stack.length - 1];\n if (!Array.isArray(target) || !state.lists.has(target))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_CONTAINER_INVALID\",\n \"Pickle APPEND target must be a list.\",\n offset\n );\n }\n\n requireContainerLimit(state, target.length + 1, offset);\n target.push(value);\n state.containers.set(target, target.length);\n}\n\nfunction setItem(state, offset)\n{\n requireStack(state, 3, offset);\n const value = rejectGlobalMarker(state, state.stack.pop(), offset);\n const key = state.stack.pop();\n const target = state.stack[state.stack.length - 1];\n if (!isDictionary(target))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_CONTAINER_INVALID\",\n \"Pickle SETITEM target must be a dictionary.\",\n offset\n );\n }\n\n const count = defineDictionaryValue(\n state,\n target,\n key,\n value,\n state.containers.get(target) ?? Object.keys(target).length,\n offset\n );\n requireContainerLimit(state, count, offset);\n state.containers.set(target, count);\n}\n\nfunction defineDictionaryValue(state, target, key, value, count, offset)\n{\n const normalized = normalizeDictionaryKey(key, offset);\n const keyTypes = state.dictionaryKeys.get(target) ?? new Map();\n const previousType = keyTypes.get(normalized.value);\n if (previousType && previousType !== normalized.type)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_CONTAINER_INVALID\",\n `Pickle dictionary keys collide after JSON normalization: ${JSON.stringify(normalized.value)}.`,\n offset\n );\n }\n\n const exists = Object.hasOwn(target, normalized.value);\n Object.defineProperty(target, normalized.value, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n keyTypes.set(normalized.value, normalized.type);\n state.dictionaryKeys.set(target, keyTypes);\n return exists ? count : count + 1;\n}\n\nfunction normalizeDictionaryKey(key, offset)\n{\n if (typeof key === \"string\") return { type: \"string\", value: key };\n if (typeof key === \"number\" && Number.isSafeInteger(key))\n {\n return { type: \"integer\", value: String(key) };\n }\n throw pickleError(\n \"CJS_PICKLE_FORMAT_CONTAINER_INVALID\",\n \"Data-only pickle dictionaries require string or safe-integer keys.\",\n offset\n );\n}\n\nfunction putMemo(state, offset)\n{\n requireStack(state, 1, offset);\n if (state.stack[state.stack.length - 1] === MARK)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_MARK_INVALID\",\n \"Pickle MARK cannot be stored in the memo.\",\n offset\n );\n }\n const id = readMemoID(state, offset);\n if (!state.memo.has(id) && state.memo.size >= state.limits.maxMemoEntries)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle memo exceeds maxMemoEntries (${state.limits.maxMemoEntries}).`,\n offset\n );\n }\n state.memo.set(id, state.stack[state.stack.length - 1]);\n}\n\nfunction getMemo(state, offset)\n{\n const id = readMemoID(state, offset);\n if (!state.memo.has(id))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_MEMO_INVALID\",\n `Pickle memo entry ${id} does not exist.`,\n offset\n );\n }\n push(state, state.memo.get(id), offset);\n}\n\nfunction readMemoID(state, offset)\n{\n const value = readAsciiLine(state, 64, offset);\n if (!/^\\d+$/u.test(value))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_MEMO_INVALID\",\n `Pickle memo ID is invalid: ${JSON.stringify(value)}.`,\n offset\n );\n }\n\n const result = Number(value);\n if (!Number.isSafeInteger(result) || result > state.limits.maxMemoID)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle memo ID exceeds maxMemoID (${state.limits.maxMemoID}).`,\n offset\n );\n }\n return result;\n}\n\n/**\n * The one closed set of globals this reader will name, and how each rebuilds.\n *\n * `GLOBAL` is the opcode that makes a pickle dangerous: it names a module and an\n * attribute for the unpickler to import, and `REDUCE` then calls it. The general\n * form stays refused, and nothing here imports, resolves or invokes anything.\n * What this table does instead is recognize a fixed name and build the plain\n * data it stands for.\n *\n * `collections.OrderedDict` earns its place because it is not a behaviour, it is\n * a dictionary that remembers insertion order — and a JavaScript object already\n * does. It is also, measured across every self-describing container CCP ships,\n * **the only global any of them uses**: 25 files, one name, once each. They use\n * it because a schema's attribute order is its field order, which is exactly the\n * property an ordinary dict would lose.\n *\n * **Adding to this table is not a small change.** A name belongs here only if\n * reconstructing it is pure data with no behaviour of its own, and the entry has\n * to build that data directly rather than defer to anything callable.\n */\nconst REBUILDABLE_GLOBALS = new Map([\n [ \"collections.OrderedDict\", RebuildOrderedDict ]\n]);\n\nconst GLOBAL_NAME = Symbol(\"pickle-global\");\n\n/** Reads a GLOBAL, and refuses every name outside the closed set above. */\nfunction readGlobal(state, offset)\n{\n const module = decodeAscii(readLine(state, state.limits.maxStringBytes, offset));\n const attribute = decodeAscii(readLine(state, state.limits.maxStringBytes, offset));\n const name = `${module}.${attribute}`;\n\n if (!REBUILDABLE_GLOBALS.has(name))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_GLOBAL_UNSUPPORTED\",\n `Data-only pickle protocol 0 rejects the global ${JSON.stringify(name)}. `\n + \"Only a closed set of pure-data containers can be rebuilt, and this is not one.\",\n offset\n );\n }\n\n const marker = { [GLOBAL_NAME]: name };\n\n state.globalMarkers.add(marker);\n state.pendingGlobals.add(marker);\n\n return marker;\n}\n\n/** Rebuilds one allowed global from its arguments. Calls nothing. */\nfunction reduce(state, offset)\n{\n const args = state.stack.pop();\n const callable = state.stack.pop();\n const name = callable && typeof callable === \"object\" ? callable[GLOBAL_NAME] : undefined;\n\n if (!name || !REBUILDABLE_GLOBALS.has(name))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_REDUCE_INVALID\",\n \"Pickle REDUCE applies only to a global this reader can rebuild.\",\n offset\n );\n }\n\n if (!Array.isArray(args))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_REDUCE_INVALID\",\n \"Pickle REDUCE requires an argument tuple.\",\n offset\n );\n }\n\n state.pendingGlobals.delete(callable);\n push(state, REBUILDABLE_GLOBALS.get(name)(args, state, offset), offset);\n}\n\n/**\n * Rebuilds `OrderedDict(pairs)` as a plain object.\n *\n * JavaScript preserves the insertion order of string keys, but NOT of keys that\n * look like array indices — those sort ahead of everything else, in ascending\n * numeric order. Refusing every numeric key was too blunt: real containers use\n * them, and where they already ascend the object's order is the source's order\n * and nothing is lost.\n *\n * So the order is checked rather than the keys. The result is compared against\n * the order it was built in, and only a dictionary JavaScript would actually\n * reorder is refused.\n */\nfunction RebuildOrderedDict(args, state, offset)\n{\n const pairs = args.length ? args[0] : [];\n\n if (!Array.isArray(pairs))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_REDUCE_INVALID\",\n \"An ordered dictionary is rebuilt from a list of key/value pairs.\",\n offset\n );\n }\n\n requireContainerLimit(state, pairs.length, offset);\n\n const order = [];\n\n // A per-container check is not enough here. REDUCE is the only path that\n // builds N properties for a constant number of opcodes, so a memoized pair\n // list rebuilt in a loop multiplies `maxOperations` by `maxContainerItems`\n // instead of being bounded by either. A decode-wide budget is what bounds it.\n state.rebuiltItems += pairs.length;\n\n if (state.rebuiltItems > state.limits.maxContainerItems)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Rebuilt items exceed maxContainerItems (${state.limits.maxContainerItems}) across the decode.`,\n offset\n );\n }\n\n const result = {};\n\n for (const pair of pairs)\n {\n if (!Array.isArray(pair) || pair.length !== 2)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_REDUCE_INVALID\",\n \"An ordered dictionary entry must be a key/value pair.\",\n offset\n );\n }\n\n const key = pair[0];\n\n if (typeof key !== \"string\")\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_REDUCE_INVALID\",\n \"An ordered dictionary key must be a string.\",\n offset\n );\n }\n\n order.push(key);\n\n // Defined rather than assigned, as the dictionary path already does. A\n // plain assignment to `__proto__` sets the object's prototype instead of\n // storing a property: the field silently disappears from the decoded record\n // and, if its value is an object, becomes a phantom the JSON never shows.\n Object.defineProperty(result, key, {\n configurable: true,\n enumerable: true,\n value: pair[1],\n writable: true\n });\n }\n\n // Order is the one thing this type exists to carry, so it is checked rather\n // than assumed. A repeated key keeps its first position, which is what both\n // Python and JavaScript do.\n const expected = [ ...new Set(order) ];\n const kept = Object.keys(result);\n\n if (kept.length !== expected.length || kept.some((key, index) => key !== expected[index])) {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_REDUCE_INVALID\",\n \"An ordered dictionary's key order would not survive as a JavaScript object.\",\n offset\n );\n }\n\n return result;\n}\n\n/** Decodes a GLOBAL's module or attribute line, which is always ASCII. */\nfunction decodeAscii(bytes)\n{\n let result = \"\";\n\n for (const byte of bytes) result += String.fromCharCode(byte);\n\n return result.trim();\n}\n\n/**\n * Refuses a global marker anywhere a decoded value is stored or returned.\n *\n * Consuming a marker with REDUCE is the only thing it is for. Appended to a\n * list, set as a dictionary value or left as the result, it would reach the\n * caller as `{}` - indistinguishable from an empty dictionary, and buryable\n * anywhere in the graph through the memo.\n */\nfunction rejectGlobalMarker(state, value, offset)\n{\n if (value && typeof value === \"object\" && state.globalMarkers.has(value))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_GLOBAL_UNSUPPORTED\",\n \"A pickle global is only usable as the target of a REDUCE.\",\n offset\n );\n }\n\n return value;\n}\n\nfunction popMarkedValues(state, offset)\n{\n if (!state.marks.length)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_MARK_INVALID\",\n \"Pickle container has no matching MARK.\",\n offset\n );\n }\n\n const mark = state.marks.pop();\n if (state.stack[mark] !== MARK)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_MARK_INVALID\",\n \"Pickle MARK stack is inconsistent.\",\n offset\n );\n }\n\n const values = state.stack.slice(mark + 1);\n state.stack.length = mark;\n for (const value of values) rejectGlobalMarker(state, value, offset);\n return values;\n}\n\nfunction push(state, value, offset)\n{\n if (state.stack.length >= state.limits.maxStackDepth)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle stack exceeds maxStackDepth (${state.limits.maxStackDepth}).`,\n offset\n );\n }\n state.stack.push(value);\n}\n\nfunction requireStack(state, count, offset)\n{\n if (state.stack.length < count)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STACK_INVALID\",\n `Pickle opcode requires ${count} stack values.`,\n offset\n );\n }\n}\n\nfunction requireContainerLimit(state, count, offset)\n{\n if (count > state.limits.maxContainerItems)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle container exceeds maxContainerItems (${state.limits.maxContainerItems}).`,\n offset\n );\n }\n}\n\nfunction readAsciiLine(state, limit, offset)\n{\n const bytes = readLine(state, limit, offset);\n let result = \"\";\n for (const byte of bytes)\n {\n if (byte > 0x7f)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n \"Pickle control line must contain ASCII bytes.\",\n offset\n );\n }\n result += String.fromCharCode(byte);\n }\n return result;\n}\n\nfunction readLine(state, limit, offset)\n{\n const start = state.offset;\n while (state.offset < state.bytes.byteLength && state.bytes[state.offset] !== 0x0a)\n {\n state.offset += 1;\n if (state.offset - start > limit)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_EXCEEDED\",\n `Pickle line exceeds its ${limit}-byte limit.`,\n offset\n );\n }\n }\n\n if (state.offset >= state.bytes.byteLength)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_EOF\",\n \"Pickle line is missing its newline terminator.\",\n offset\n );\n }\n\n const result = state.bytes.subarray(start, state.offset);\n state.offset += 1;\n return result;\n}\n\nfunction readHex(bytes, start, length, offset)\n{\n if (start + length > bytes.byteLength)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n \"Pickle escape sequence is truncated.\",\n offset\n );\n }\n\n let result = 0;\n for (let index = 0; index < length; index += 1)\n {\n const value = hexValue(bytes[start + index]);\n if (value === -1)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_STRING_INVALID\",\n \"Pickle escape sequence contains a non-hexadecimal digit.\",\n offset\n );\n }\n result = result * 16 + value;\n }\n return result;\n}\n\nfunction hexValue(byte)\n{\n if (byte >= 0x30 && byte <= 0x39) return byte - 0x30;\n if (byte >= 0x41 && byte <= 0x46) return byte - 0x41 + 10;\n if (byte >= 0x61 && byte <= 0x66) return byte - 0x61 + 10;\n return -1;\n}\n\nfunction decodeSimpleEscape(byte)\n{\n const values = {\n 0x22: 0x22,\n 0x27: 0x27,\n 0x5c: 0x5c,\n 0x61: 0x07,\n 0x62: 0x08,\n 0x66: 0x0c,\n 0x6e: 0x0a,\n 0x72: 0x0d,\n 0x74: 0x09,\n 0x76: 0x0b\n };\n return Object.hasOwn(values, byte) ? values[byte] : null;\n}\n\nfunction assertJSONCompatible(value)\n{\n const active = new WeakSet();\n const verified = new WeakSet();\n const pending = [ { exit: false, value } ];\n\n while (pending.length)\n {\n const item = pending.pop();\n const current = item.value;\n if (current === null\n || typeof current === \"string\"\n || typeof current === \"boolean\")\n {\n continue;\n }\n if (typeof current === \"number\")\n {\n if (!Number.isFinite(current))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_JSON_INVALID\",\n \"Pickle output contains a non-finite number.\",\n null\n );\n }\n continue;\n }\n if (!current || typeof current !== \"object\")\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_JSON_INVALID\",\n `Pickle output contains unsupported ${typeof current} data.`,\n null\n );\n }\n if (item.exit)\n {\n active.delete(current);\n verified.add(current);\n continue;\n }\n if (verified.has(current)) continue;\n if (active.has(current))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_JSON_INVALID\",\n \"Pickle output contains a cyclic reference.\",\n null\n );\n }\n\n active.add(current);\n pending.push({ exit: true, value: current });\n\n if (Array.isArray(current))\n {\n for (let index = current.length - 1; index >= 0; index -= 1)\n {\n pending.push({ exit: false, value: current[index] });\n }\n }\n else if (Object.getPrototypeOf(current) === Object.prototype)\n {\n const keys = Object.keys(current);\n for (let index = keys.length - 1; index >= 0; index -= 1)\n {\n pending.push({ exit: false, value: current[keys[index]] });\n }\n }\n else\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_JSON_INVALID\",\n \"Pickle output contains a non-plain object.\",\n null\n );\n }\n }\n}\n\nfunction normalizeBytes(input)\n{\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n throw pickleError(\n \"CJS_PICKLE_FORMAT_INPUT_INVALID\",\n \"Pickle input must be an ArrayBuffer or an ArrayBuffer view.\",\n 0\n );\n}\n\nfunction normalizeLimits(options)\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_INVALID\",\n \"Pickle limits must be an object.\",\n 0\n );\n }\n\n for (const name of Object.keys(options))\n {\n if (!LIMIT_NAMES.includes(name))\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_INVALID\",\n `Pickle limits contain unknown value ${JSON.stringify(name)}.`,\n 0\n );\n }\n }\n\n const result = {};\n for (const name of LIMIT_NAMES)\n {\n const value = options[name] ?? PICKLE_PROTOCOL_0_LIMITS[name];\n if (!Number.isSafeInteger(value) || value <= 0)\n {\n throw pickleError(\n \"CJS_PICKLE_FORMAT_LIMIT_INVALID\",\n `Pickle ${name} must be a positive safe integer.`,\n 0\n );\n }\n result[name] = value;\n }\n return result;\n}\n\nfunction isDictionary(value)\n{\n return Boolean(value\n && typeof value === \"object\"\n && !Array.isArray(value)\n && Object.getPrototypeOf(value) === Object.prototype);\n}\n\nfunction displayOpcode(value)\n{\n if (value >= 0x20 && value <= 0x7e)\n {\n return JSON.stringify(String.fromCharCode(value));\n }\n return `0x${value.toString(16).padStart(2, \"0\")}`;\n}\n\nfunction pickleError(code, message, offset)\n{\n const error = new Error(message);\n error.code = code;\n error.protocol = 0;\n if (offset !== null) error.offset = offset;\n return error;\n}\n\nexport default CjsPickleProtocol0Reader;\n"],"names":["MARK","Symbol","PICKLE_PROTOCOL_0_LIMITS","maxContainerItems","maxInputBytes","maxMemoEntries","maxMemoID","maxOperations","maxStackDepth","maxStringBytes","LIMIT_NAMES","Object","keys","CjsPickleProtocol0Reader","constructor","input","options","normalizeBytes","normalizeLimits","limits","byteLength","pickleError","Read","decode","ReadJSON","value","assertJSONCompatible","ToJSON","bytes","state","containers","WeakMap","dictionaryKeys","lists","WeakSet","marks","memo","Map","offset","operations","globalMarkers","pendingGlobals","Set","rebuiltItems","stack","opcodeOffset","opcode","push","length","stop","readFloat","readInteger","readString","readUnicode","append","readDictionary","getMemo","readSequence","putMemo","setItem","readGlobal","reduce","displayOpcode","size","rejectGlobalMarker","readAsciiLine","test","JSON","stringify","result","Number","isFinite","isLong","endsWith","slice","BigInt","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","toString","readLine","quote","index","byte","String","fromCharCode","escaped","simple","decodeSimpleEscape","readHex","digits","parseInt","join","codePoint","fromCodePoint","isList","values","popMarkedValues","requireContainerLimit","set","add","count","defineDictionaryValue","requireStack","pop","target","Array","isArray","has","key","isDictionary","get","normalized","normalizeDictionaryKey","keyTypes","previousType","type","exists","hasOwn","defineProperty","configurable","enumerable","writable","isSafeInteger","id","readMemoID","REBUILDABLE_GLOBALS","RebuildOrderedDict","GLOBAL_NAME","module","decodeAscii","attribute","name","marker","args","callable","undefined","delete","pairs","order","pair","expected","kept","some","trim","mark","limit","start","subarray","hexValue","active","verified","pending","exit","item","current","getPrototypeOf","prototype","ArrayBuffer","Uint8Array","isView","buffer","byteOffset","includes","Boolean","padStart","code","message","error","Error","protocol"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /** Builds the error every part of this format throws, with one code. */
2
2
  function SchemaBoundError(message, extra = null) {
3
3
  const error = new TypeError(message);
4
- error.code = "CJS_SCHEMA_BOUND_INVALID";
4
+ error.code = "CJS_SCHEMA_BOUND_FORMAT_INVALID";
5
5
  return Object.assign(error, extra || {});
6
6
  }
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"schemaBoundErrors.js","sources":["../../../../../src/formats/schemabound/core/schemaBoundErrors.js"],"sourcesContent":["/** Builds the error every part of this format throws, with one code. */\nexport function SchemaBoundError(message, extra = null) {\n const error = new TypeError(message);\n\n error.code = \"CJS_SCHEMA_BOUND_INVALID\";\n\n return Object.assign(error, extra || {});\n}\n\nexport default SchemaBoundError;\n"],"names":["SchemaBoundError","message","extra","error","TypeError","code","Object","assign"],"mappings":"AAAA;AACO,SAASA,gBAAgBA,CAACC,OAAO,EAAEC,KAAK,GAAG,IAAI,EAAE;AACtD,EAAA,MAAMC,KAAK,GAAG,IAAIC,SAAS,CAACH,OAAO,CAAC;EAEpCE,KAAK,CAACE,IAAI,GAAG,0BAA0B;EAEvC,OAAOC,MAAM,CAACC,MAAM,CAACJ,KAAK,EAAED,KAAK,IAAI,EAAE,CAAC;AAC1C;;;;"}
1
+ {"version":3,"file":"schemaBoundErrors.js","sources":["../../../../../src/formats/schemabound/core/schemaBoundErrors.js"],"sourcesContent":["/** Builds the error every part of this format throws, with one code. */\nexport function SchemaBoundError(message, extra = null) {\n const error = new TypeError(message);\n\n error.code = \"CJS_SCHEMA_BOUND_FORMAT_INVALID\";\n\n return Object.assign(error, extra || {});\n}\n\nexport default SchemaBoundError;\n"],"names":["SchemaBoundError","message","extra","error","TypeError","code","Object","assign"],"mappings":"AAAA;AACO,SAASA,gBAAgBA,CAACC,OAAO,EAAEC,KAAK,GAAG,IAAI,EAAE;AACtD,EAAA,MAAMC,KAAK,GAAG,IAAIC,SAAS,CAACH,OAAO,CAAC;EAEpCE,KAAK,CAACE,IAAI,GAAG,iCAAiC;EAE9C,OAAOC,MAAM,CAACC,MAAM,CAACJ,KAAK,EAAED,KAAK,IAAI,EAAE,CAAC;AAC1C;;;;"}
@@ -19,6 +19,23 @@ function ReadValue(context, offset, node) {
19
19
  switch (node.type) {
20
20
  case "int":
21
21
  return ReadInt(context, offset, node);
22
+ // Identifier types. Each is a four-byte unsigned integer that names a row in
23
+ // another table, and the schema states the meaning rather than the width -
24
+ // `factionID` and one or two others declare no size at all. Keeping them
25
+ // named here rather than folding them into `int` is what lets a consumer see
26
+ // that a number is a key.
27
+ case "localizationID":
28
+ case "typeID":
29
+ case "factionID":
30
+ case "groupID":
31
+ case "categoryID":
32
+ case "graphicID":
33
+ case "iconID":
34
+ case "fsdReference":
35
+ return ReadInt(context, offset, {
36
+ size: node.size ?? 4,
37
+ min: 0
38
+ });
22
39
  case "float":
23
40
  return ReadFloat(context, offset, node);
24
41
  case "bool":
@@ -28,10 +45,15 @@ function ReadValue(context, offset, node) {
28
45
  };
29
46
  case "enum":
30
47
  return ReadEnum(context, offset, node);
48
+ case "vector2":
49
+ return ReadVector(context, offset, node, 2);
31
50
  case "vector3":
32
- return ReadVector3(context, offset, node);
51
+ return ReadVector(context, offset, node, 3);
52
+ // `unicode` is the same framing as `string`; the distinction is Python's,
53
+ // and both arrive as a byte length followed by UTF-8.
33
54
  case "string":
34
55
  case "resPath":
56
+ case "unicode":
35
57
  return ReadString(context, offset);
36
58
  case "list":
37
59
  return ReadList(context, offset, node);
@@ -129,23 +151,30 @@ function ReadEnum(context, offset, node) {
129
151
  };
130
152
  }
131
153
 
132
- /** Reads three doubles into the component names the schema aliases them to. */
133
- function ReadVector3(context, offset, node) {
154
+ /** Reads a fixed-length vector into the component names the schema aliases. */
155
+ function ReadVector(context, offset, node, components) {
134
156
  const wide = (node.precision ?? "double") === "double";
135
157
  const width = wide ? 8 : 4;
136
158
  const read = index => wide ? context.view.getFloat64(offset + index * width, true) : context.view.getFloat32(offset + index * width, true);
137
- const aliases = node.aliases ?? {
138
- x: 0,
139
- y: 1,
140
- z: 2
141
- };
159
+ const aliases = node.aliases ?? DEFAULT_COMPONENTS[components];
142
160
  const value = {};
143
161
  for (const [name, index] of Object.entries(aliases)) value[name] = read(index);
144
162
  return {
145
163
  value,
146
- size: node.size ?? width * 3
164
+ size: node.size ?? width * components
147
165
  };
148
166
  }
167
+ const DEFAULT_COMPONENTS = {
168
+ 2: {
169
+ x: 0,
170
+ y: 1
171
+ },
172
+ 3: {
173
+ x: 0,
174
+ y: 1,
175
+ z: 2
176
+ }
177
+ };
149
178
 
150
179
  /** Reads a length-prefixed UTF-8 string; `resPath` is the same shape. */
151
180
  function ReadString(context, offset) {
@@ -1 +1 @@
1
- {"version":3,"file":"schemaBoundValues.js","sources":["../../../../../src/formats/schemabound/core/schemaBoundValues.js"],"sourcesContent":["import { SchemaBoundError } from \"./schemaBoundErrors.js\";\n\nconst TEXT = new TextDecoder(\"utf-8\");\n\n/**\n * Decodes one value of any schema type, and reports how many bytes it spanned.\n *\n * Every type answers both questions through this one function because the\n * container mixes them: a list's items may be fixed, in which case the schema\n * states the stride, or variable, in which case the only way to find item `n+1`\n * is to have finished reading item `n`.\n *\n * @param {object} context Reader context: `view`, `bytes` and `options`.\n * @param {number} offset Absolute byte offset of the value.\n * @param {object} node The schema node describing the value.\n * @returns {{value: *, size: number}} Decoded value and the bytes it occupied.\n */\nexport function ReadValue(context, offset, node) {\n switch (node.type) {\n case \"int\": return ReadInt(context, offset, node);\n case \"float\": return ReadFloat(context, offset, node);\n case \"bool\": return { value: context.view.getUint8(offset) !== 0, size: node.size ?? 1 };\n case \"enum\": return ReadEnum(context, offset, node);\n case \"vector3\": return ReadVector3(context, offset, node);\n case \"string\": case \"resPath\": return ReadString(context, offset);\n case \"list\": return ReadList(context, offset, node);\n case \"dict\": return ReadDict(context, offset, node);\n case \"object\": return ReadObject(context, offset, node);\n default:\n throw SchemaBoundError(`The schema declares a type this reader does not know: ${node.type}.`, {\n schemaType: node.type\n });\n }\n}\n\n/** Reads a 1, 2, 4 or 8 byte integer, signed only when the schema allows it. */\nfunction ReadInt(context, offset, node) {\n const size = node.size ?? 4;\n // `min: 0` is the schema's own statement that the field cannot go negative,\n // and it is the only signedness information there is.\n const unsigned = typeof node.min === \"number\" && node.min >= 0;\n const view = context.view;\n\n switch (size) {\n case 1: return { value: unsigned ? view.getUint8(offset) : view.getInt8(offset), size };\n case 2: return { value: unsigned ? view.getUint16(offset, true) : view.getInt16(offset, true), size };\n case 4: return { value: unsigned ? view.getUint32(offset, true) : view.getInt32(offset, true), size };\n case 8: return { value: Narrow(unsigned ? view.getBigUint64(offset, true) : view.getBigInt64(offset, true)), size };\n default:\n throw SchemaBoundError(`An integer of ${size} bytes is not a width this container uses.`);\n }\n}\n\n/** Returns a wide integer as a Number when that is lossless, else a BigInt. */\nfunction Narrow(value) {\n return value >= -9007199254740991n && value <= 9007199254740991n ? Number(value) : value;\n}\n\n/** Reads a single or double precision float. */\nfunction ReadFloat(context, offset, node) {\n const size = node.size ?? 4;\n\n if (size === 8) return { value: context.view.getFloat64(offset, true), size };\n if (size === 4) return { value: context.view.getFloat32(offset, true), size };\n\n throw SchemaBoundError(`A float of ${size} bytes is not a width this container uses.`);\n}\n\n/**\n * Reads an enumeration, as its number or its name.\n *\n * `readEnumValue` is the schema saying the stored number is the meaning; without\n * it the name is. A number with no name is returned as the number rather than\n * dropped, because an unnamed member is data the client still stored.\n */\nfunction ReadEnum(context, offset, node) {\n const { value, size } = ReadInt(context, offset, { size: node.size ?? 1, min: 0 });\n\n if (node.readEnumValue === true || !node.values) return { value, size };\n\n for (const [ name, member ] of Object.entries(node.values)) {\n if (member === value) return { value: name, size };\n }\n\n return { value, size };\n}\n\n/** Reads three doubles into the component names the schema aliases them to. */\nfunction ReadVector3(context, offset, node) {\n const wide = (node.precision ?? \"double\") === \"double\";\n const width = wide ? 8 : 4;\n const read = index => wide\n ? context.view.getFloat64(offset + index * width, true)\n : context.view.getFloat32(offset + index * width, true);\n const aliases = node.aliases ?? { x: 0, y: 1, z: 2 };\n const value = {};\n\n for (const [ name, index ] of Object.entries(aliases)) value[name] = read(index);\n\n return { value, size: node.size ?? width * 3 };\n}\n\n/** Reads a length-prefixed UTF-8 string; `resPath` is the same shape. */\nfunction ReadString(context, offset) {\n const length = context.view.getUint32(offset, true);\n const start = offset + 4;\n\n return {\n value: TEXT.decode(context.bytes.subarray(start, start + length)),\n size: 4 + length\n };\n}\n\n/**\n * Reads a count-prefixed list.\n *\n * A list has two framings and the schema says which: `fixedItemSize` means the\n * items are packed one after another at that stride, and its absence means they\n * are variable, so the count is followed by one `uint32` per item. Those offsets\n * are relative to the start of the list.\n */\nfunction ReadList(context, offset, node) {\n const view = context.view;\n const count = view.getUint32(offset, true);\n const items = [];\n\n if (node.fixedItemSize === undefined) {\n let end = offset + 4 + count * 4;\n\n for (let index = 0; index < count; index += 1) {\n const at = offset + view.getUint32(offset + 4 + index * 4, true);\n const item = ReadValue(context, at, node.itemTypes);\n\n items.push(item.value);\n end = Math.max(end, at + item.size);\n }\n\n return { value: items, size: end - offset };\n }\n\n let cursor = offset + 4;\n\n for (let index = 0; index < count; index += 1) {\n items.push(ReadValue(context, cursor, node.itemTypes).value);\n cursor += node.fixedItemSize;\n }\n\n return { value: items, size: cursor - offset };\n}\n\n/**\n * Reads a keyed map.\n *\n * The framing is the same at the root of a container and nested inside one\n * record: a `uint32` of everything that follows, the values, then the key\n * footer, then a `uint32` of the footer's own size. **The footer is found from\n * the end, never from the front** — nothing at the front points at it.\n *\n * Each footer entry carries a key and an offset, and that offset is relative to\n * the end of the leading `uint32`, not to the file and not to the value region.\n */\nfunction ReadDict(context, offset, node) {\n const view = context.view;\n const total = view.getUint32(offset, true);\n const base = offset + 4;\n const end = base + total;\n const footerSize = view.getUint32(end - 4, true);\n const footerStart = end - 4 - footerSize;\n\n if (footerStart < base) {\n throw SchemaBoundError(\"The key footer does not fit inside the container.\", { footerStart, base });\n }\n\n const value = {};\n\n // The footer is an ordinary list, and it uses both of the list framings: a\n // list of integer keys is fixed-stride, a list of string keys is not.\n for (const entry of ReadList(context, footerStart, node.keyFooter).value) {\n value[entry.key] = ReadValue(context, base + entry.offset, node.valueTypes).value;\n }\n\n return { value, size: 4 + total };\n}\n\n/**\n * Reads a record.\n *\n * Fixed attributes sit at the offsets the schema names. Everything in\n * `attributesWithVariableOffsets` is reached through a table that follows the\n * fixed part, and **that table's length changes from record to record**: an\n * optional attribute whose presence bit is clear takes no slot in it. A reader\n * that assumes a constant stride decodes the first record correctly and then\n * drifts, which is the single most misleading property of this format.\n */\nfunction ReadObject(context, offset, node) {\n const attributes = node.attributes ?? {};\n const variable = node.attributesWithVariableOffsets ?? [];\n const decoded = new Map();\n let size = node.size ?? node.endOfFixedSizeData ?? 0;\n\n for (const [ name, at ] of Object.entries(node.constantAttributeOffsets ?? {})) {\n decoded.set(name, ReadValue(context, offset + at, Attribute(attributes, name)).value);\n }\n\n if (variable.length) {\n const lookups = node.optionalValueLookups ?? {};\n const view = context.view;\n // The presence bitfield is written whenever a record has a variable section\n // at all, including where nothing in it is optional and the field is\n // therefore always zero. It is the offset table that shrinks, never this.\n const bits = view.getBigUint64(offset + node.endOfFixedSizeData, true);\n const table = offset + node.endOfFixedSizeData + 8;\n const present = variable.filter(name => {\n const attribute = Attribute(attributes, name);\n\n return !attribute.isOptional || (bits & BigInt(lookups[name] ?? 0)) !== 0n;\n });\n const data = table + present.length * 4;\n let end = data;\n\n present.forEach((name, index) => {\n const at = data + view.getUint32(table + index * 4, true);\n const read = ReadValue(context, at, Attribute(attributes, name));\n\n decoded.set(name, read.value);\n end = Math.max(end, at + read.size);\n });\n\n for (const name of variable) {\n const attribute = Attribute(attributes, name);\n\n // An absent optional takes the value the schema declares for it. Where no\n // default is declared the attribute is simply not part of this record -\n // which is what the published exports show for these same rows.\n if (!decoded.has(name) && Object.hasOwn(attribute, \"default\")) {\n decoded.set(name, attribute.default);\n }\n }\n\n size = end - offset;\n }\n\n // Declaration order, not the order the two passes above happened to fill.\n const value = {};\n\n for (const name of Object.keys(attributes)) {\n if (decoded.has(name)) value[name] = decoded.get(name);\n }\n\n return { value, size };\n}\n\n/** Looks up an attribute, naming the schema rather than failing on undefined. */\nfunction Attribute(attributes, name) {\n const attribute = attributes[name];\n\n if (!attribute) {\n throw SchemaBoundError(`The schema offsets an attribute it never declares: ${name}.`, {\n attribute: name\n });\n }\n\n return attribute;\n}\n\nexport default ReadValue;\n"],"names":["TEXT","TextDecoder","ReadValue","context","offset","node","type","ReadInt","ReadFloat","value","view","getUint8","size","ReadEnum","ReadVector3","ReadString","ReadList","ReadDict","ReadObject","SchemaBoundError","schemaType","unsigned","min","getInt8","getUint16","getInt16","getUint32","getInt32","Narrow","getBigUint64","getBigInt64","Number","getFloat64","getFloat32","readEnumValue","values","name","member","Object","entries","wide","precision","width","read","index","aliases","x","y","z","length","start","decode","bytes","subarray","count","items","fixedItemSize","undefined","end","at","item","itemTypes","push","Math","max","cursor","total","base","footerSize","footerStart","entry","keyFooter","key","valueTypes","attributes","variable","attributesWithVariableOffsets","decoded","Map","endOfFixedSizeData","constantAttributeOffsets","set","Attribute","lookups","optionalValueLookups","bits","table","present","filter","attribute","isOptional","BigInt","data","forEach","has","hasOwn","default","keys","get"],"mappings":"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"}
1
+ {"version":3,"file":"schemaBoundValues.js","sources":["../../../../../src/formats/schemabound/core/schemaBoundValues.js"],"sourcesContent":["import { SchemaBoundError } from \"./schemaBoundErrors.js\";\n\nconst TEXT = new TextDecoder(\"utf-8\");\n\n/**\n * Decodes one value of any schema type, and reports how many bytes it spanned.\n *\n * Every type answers both questions through this one function because the\n * container mixes them: a list's items may be fixed, in which case the schema\n * states the stride, or variable, in which case the only way to find item `n+1`\n * is to have finished reading item `n`.\n *\n * @param {object} context Reader context: `view`, `bytes` and `options`.\n * @param {number} offset Absolute byte offset of the value.\n * @param {object} node The schema node describing the value.\n * @returns {{value: *, size: number}} Decoded value and the bytes it occupied.\n */\nexport function ReadValue(context, offset, node) {\n switch (node.type) {\n case \"int\": return ReadInt(context, offset, node);\n // Identifier types. Each is a four-byte unsigned integer that names a row in\n // another table, and the schema states the meaning rather than the width -\n // `factionID` and one or two others declare no size at all. Keeping them\n // named here rather than folding them into `int` is what lets a consumer see\n // that a number is a key.\n case \"localizationID\": case \"typeID\": case \"factionID\": case \"groupID\":\n case \"categoryID\": case \"graphicID\": case \"iconID\": case \"fsdReference\":\n return ReadInt(context, offset, { size: node.size ?? 4, min: 0 });\n case \"float\": return ReadFloat(context, offset, node);\n case \"bool\": return { value: context.view.getUint8(offset) !== 0, size: node.size ?? 1 };\n case \"enum\": return ReadEnum(context, offset, node);\n case \"vector2\": return ReadVector(context, offset, node, 2);\n case \"vector3\": return ReadVector(context, offset, node, 3);\n // `unicode` is the same framing as `string`; the distinction is Python's,\n // and both arrive as a byte length followed by UTF-8.\n case \"string\": case \"resPath\": case \"unicode\": return ReadString(context, offset);\n case \"list\": return ReadList(context, offset, node);\n case \"dict\": return ReadDict(context, offset, node);\n case \"object\": return ReadObject(context, offset, node);\n default:\n throw SchemaBoundError(`The schema declares a type this reader does not know: ${node.type}.`, {\n schemaType: node.type\n });\n }\n}\n\n/** Reads a 1, 2, 4 or 8 byte integer, signed only when the schema allows it. */\nfunction ReadInt(context, offset, node) {\n const size = node.size ?? 4;\n // `min: 0` is the schema's own statement that the field cannot go negative,\n // and it is the only signedness information there is.\n const unsigned = typeof node.min === \"number\" && node.min >= 0;\n const view = context.view;\n\n switch (size) {\n case 1: return { value: unsigned ? view.getUint8(offset) : view.getInt8(offset), size };\n case 2: return { value: unsigned ? view.getUint16(offset, true) : view.getInt16(offset, true), size };\n case 4: return { value: unsigned ? view.getUint32(offset, true) : view.getInt32(offset, true), size };\n case 8: return { value: Narrow(unsigned ? view.getBigUint64(offset, true) : view.getBigInt64(offset, true)), size };\n default:\n throw SchemaBoundError(`An integer of ${size} bytes is not a width this container uses.`);\n }\n}\n\n/** Returns a wide integer as a Number when that is lossless, else a BigInt. */\nfunction Narrow(value) {\n return value >= -9007199254740991n && value <= 9007199254740991n ? Number(value) : value;\n}\n\n/** Reads a single or double precision float. */\nfunction ReadFloat(context, offset, node) {\n const size = node.size ?? 4;\n\n if (size === 8) return { value: context.view.getFloat64(offset, true), size };\n if (size === 4) return { value: context.view.getFloat32(offset, true), size };\n\n throw SchemaBoundError(`A float of ${size} bytes is not a width this container uses.`);\n}\n\n/**\n * Reads an enumeration, as its number or its name.\n *\n * `readEnumValue` is the schema saying the stored number is the meaning; without\n * it the name is. A number with no name is returned as the number rather than\n * dropped, because an unnamed member is data the client still stored.\n */\nfunction ReadEnum(context, offset, node) {\n const { value, size } = ReadInt(context, offset, { size: node.size ?? 1, min: 0 });\n\n if (node.readEnumValue === true || !node.values) return { value, size };\n\n for (const [ name, member ] of Object.entries(node.values)) {\n if (member === value) return { value: name, size };\n }\n\n return { value, size };\n}\n\n/** Reads a fixed-length vector into the component names the schema aliases. */\nfunction ReadVector(context, offset, node, components) {\n const wide = (node.precision ?? \"double\") === \"double\";\n const width = wide ? 8 : 4;\n const read = index => wide\n ? context.view.getFloat64(offset + index * width, true)\n : context.view.getFloat32(offset + index * width, true);\n const aliases = node.aliases ?? DEFAULT_COMPONENTS[components];\n const value = {};\n\n for (const [ name, index ] of Object.entries(aliases)) value[name] = read(index);\n\n return { value, size: node.size ?? width * components };\n}\n\nconst DEFAULT_COMPONENTS = { 2: { x: 0, y: 1 }, 3: { x: 0, y: 1, z: 2 } };\n\n/** Reads a length-prefixed UTF-8 string; `resPath` is the same shape. */\nfunction ReadString(context, offset) {\n const length = context.view.getUint32(offset, true);\n const start = offset + 4;\n\n return {\n value: TEXT.decode(context.bytes.subarray(start, start + length)),\n size: 4 + length\n };\n}\n\n/**\n * Reads a count-prefixed list.\n *\n * A list has two framings and the schema says which: `fixedItemSize` means the\n * items are packed one after another at that stride, and its absence means they\n * are variable, so the count is followed by one `uint32` per item. Those offsets\n * are relative to the start of the list.\n */\nfunction ReadList(context, offset, node) {\n const view = context.view;\n const count = view.getUint32(offset, true);\n const items = [];\n\n if (node.fixedItemSize === undefined) {\n let end = offset + 4 + count * 4;\n\n for (let index = 0; index < count; index += 1) {\n const at = offset + view.getUint32(offset + 4 + index * 4, true);\n const item = ReadValue(context, at, node.itemTypes);\n\n items.push(item.value);\n end = Math.max(end, at + item.size);\n }\n\n return { value: items, size: end - offset };\n }\n\n let cursor = offset + 4;\n\n for (let index = 0; index < count; index += 1) {\n items.push(ReadValue(context, cursor, node.itemTypes).value);\n cursor += node.fixedItemSize;\n }\n\n return { value: items, size: cursor - offset };\n}\n\n/**\n * Reads a keyed map.\n *\n * The framing is the same at the root of a container and nested inside one\n * record: a `uint32` of everything that follows, the values, then the key\n * footer, then a `uint32` of the footer's own size. **The footer is found from\n * the end, never from the front** — nothing at the front points at it.\n *\n * Each footer entry carries a key and an offset, and that offset is relative to\n * the end of the leading `uint32`, not to the file and not to the value region.\n */\nfunction ReadDict(context, offset, node) {\n const view = context.view;\n const total = view.getUint32(offset, true);\n const base = offset + 4;\n const end = base + total;\n const footerSize = view.getUint32(end - 4, true);\n const footerStart = end - 4 - footerSize;\n\n if (footerStart < base) {\n throw SchemaBoundError(\"The key footer does not fit inside the container.\", { footerStart, base });\n }\n\n const value = {};\n\n // The footer is an ordinary list, and it uses both of the list framings: a\n // list of integer keys is fixed-stride, a list of string keys is not.\n for (const entry of ReadList(context, footerStart, node.keyFooter).value) {\n value[entry.key] = ReadValue(context, base + entry.offset, node.valueTypes).value;\n }\n\n return { value, size: 4 + total };\n}\n\n/**\n * Reads a record.\n *\n * Fixed attributes sit at the offsets the schema names. Everything in\n * `attributesWithVariableOffsets` is reached through a table that follows the\n * fixed part, and **that table's length changes from record to record**: an\n * optional attribute whose presence bit is clear takes no slot in it. A reader\n * that assumes a constant stride decodes the first record correctly and then\n * drifts, which is the single most misleading property of this format.\n */\nfunction ReadObject(context, offset, node) {\n const attributes = node.attributes ?? {};\n const variable = node.attributesWithVariableOffsets ?? [];\n const decoded = new Map();\n let size = node.size ?? node.endOfFixedSizeData ?? 0;\n\n for (const [ name, at ] of Object.entries(node.constantAttributeOffsets ?? {})) {\n decoded.set(name, ReadValue(context, offset + at, Attribute(attributes, name)).value);\n }\n\n if (variable.length) {\n const lookups = node.optionalValueLookups ?? {};\n const view = context.view;\n // The presence bitfield is written whenever a record has a variable section\n // at all, including where nothing in it is optional and the field is\n // therefore always zero. It is the offset table that shrinks, never this.\n const bits = view.getBigUint64(offset + node.endOfFixedSizeData, true);\n const table = offset + node.endOfFixedSizeData + 8;\n const present = variable.filter(name => {\n const attribute = Attribute(attributes, name);\n\n return !attribute.isOptional || (bits & BigInt(lookups[name] ?? 0)) !== 0n;\n });\n const data = table + present.length * 4;\n let end = data;\n\n present.forEach((name, index) => {\n const at = data + view.getUint32(table + index * 4, true);\n const read = ReadValue(context, at, Attribute(attributes, name));\n\n decoded.set(name, read.value);\n end = Math.max(end, at + read.size);\n });\n\n for (const name of variable) {\n const attribute = Attribute(attributes, name);\n\n // An absent optional takes the value the schema declares for it. Where no\n // default is declared the attribute is simply not part of this record -\n // which is what the published exports show for these same rows.\n if (!decoded.has(name) && Object.hasOwn(attribute, \"default\")) {\n decoded.set(name, attribute.default);\n }\n }\n\n size = end - offset;\n }\n\n // Declaration order, not the order the two passes above happened to fill.\n const value = {};\n\n for (const name of Object.keys(attributes)) {\n if (decoded.has(name)) value[name] = decoded.get(name);\n }\n\n return { value, size };\n}\n\n/** Looks up an attribute, naming the schema rather than failing on undefined. */\nfunction Attribute(attributes, name) {\n const attribute = attributes[name];\n\n if (!attribute) {\n throw SchemaBoundError(`The schema offsets an attribute it never declares: ${name}.`, {\n attribute: name\n });\n }\n\n return attribute;\n}\n\nexport default ReadValue;\n"],"names":["TEXT","TextDecoder","ReadValue","context","offset","node","type","ReadInt","size","min","ReadFloat","value","view","getUint8","ReadEnum","ReadVector","ReadString","ReadList","ReadDict","ReadObject","SchemaBoundError","schemaType","unsigned","getInt8","getUint16","getInt16","getUint32","getInt32","Narrow","getBigUint64","getBigInt64","Number","getFloat64","getFloat32","readEnumValue","values","name","member","Object","entries","components","wide","precision","width","read","index","aliases","DEFAULT_COMPONENTS","x","y","z","length","start","decode","bytes","subarray","count","items","fixedItemSize","undefined","end","at","item","itemTypes","push","Math","max","cursor","total","base","footerSize","footerStart","entry","keyFooter","key","valueTypes","attributes","variable","attributesWithVariableOffsets","decoded","Map","endOfFixedSizeData","constantAttributeOffsets","set","Attribute","lookups","optionalValueLookups","bits","table","present","filter","attribute","isOptional","BigInt","data","forEach","has","hasOwn","default","keys","get"],"mappings":"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"}
@@ -166,7 +166,7 @@ function ReadRecord(payload, encoding) {
166
166
  /** Creates a tagged error, so a caller can tell a malformed container apart. */
167
167
  function SqliteError(message) {
168
168
  const error = new Error(message);
169
- error.code = "CJS_SQLITE_INVALID";
169
+ error.code = "CJS_SQLITE_FORMAT_INVALID";
170
170
  return error;
171
171
  }
172
172
 
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteRecords.js","sources":["../../../../../src/formats/sqlite/core/sqliteRecords.js"],"sourcesContent":["/**\n * SQLite record and varint decoding.\n *\n * The file format is documented by SQLite itself; this decodes the read-only\n * subset a full table scan needs and nothing else.\n */\n\nconst TEXT_DECODERS = Object.freeze({\n 1: \"utf-8\",\n 2: \"utf-16le\",\n 3: \"utf-16be\"\n});\n\n/**\n * Reads a big-endian base-128 varint, of one to nine bytes.\n *\n * A ninth byte exists only when all eight before it set their continuation bit,\n * and it contributes all eight of its own bits rather than seven. Treating the\n * eighth byte as that terminator instead - which this did until it was\n * checked - returns size 9 for an eight-byte varint, so the caller skips a byte\n * it never read. No container in the corpus holds a varint long enough to\n * expose it, which is why decoding 80,765 rows correctly proved nothing here.\n *\n * @param {Uint8Array} bytes Buffer to read from.\n * @param {number} offset Byte offset.\n * @returns {{ value: number, size: number }} Value and bytes consumed.\n */\nexport function ReadVarint(bytes, offset) {\n let value = 0n;\n\n // The first eight bytes carry seven bits each, high bit continuing.\n for (let index = 0; index < 8; index += 1) {\n const byte = bytes[offset + index];\n\n if (byte === undefined) {\n throw SqliteError(\"A varint runs past the end of the container.\");\n }\n\n value = (value << 7n) | BigInt(byte & 0x7f);\n\n if ((byte & 0x80) === 0) {\n return { value: Narrow(value), size: index + 1 };\n }\n }\n\n // Only when all eight continued does a ninth byte exist, and it contributes\n // all eight of its bits rather than seven - the one irregularity in the\n // encoding, and 8x7 + 8 is where the full 64 bits come from.\n const ninth = bytes[offset + 8];\n\n if (ninth === undefined) {\n throw SqliteError(\"A nine-byte varint runs past the end of the container.\");\n }\n\n value = (value << 8n) | BigInt(ninth);\n\n return { value: Narrow(BigInt.asIntN(64, value)), size: 9 };\n}\n\n/**\n * Returns a Number when one holds the value exactly, and the BigInt otherwise.\n *\n * A varint reaches 64 bits, so it can carry a rowid past 2^53 that a Number\n * would silently round. Rounding a key is worse than handing back a type the\n * caller has to notice, and it matches how a record's own wide integers are\n * already returned.\n *\n * Sizes and header lengths never come close, so callers doing arithmetic on\n * those keep seeing Numbers.\n *\n * @param {bigint} value Decoded value.\n * @returns {number|bigint} Narrowed value.\n */\nfunction Narrow(value) {\n const narrowed = Number(value);\n\n return Number.isSafeInteger(narrowed) ? narrowed : value;\n}\n\n/**\n * Returns the byte length a serial type occupies in a record body.\n *\n * @param {number} serial Serial type code.\n * @returns {number} Byte length.\n */\nexport function SerialSize(serial) {\n if (serial >= 12) {\n return Math.floor((serial - (serial % 2 === 0 ? 12 : 13)) / 2);\n }\n\n // 0 and 8/9 are constants stored entirely in the type; 7 is a double.\n return [ 0, 1, 2, 3, 4, 6, 8, 8, 0, 0 ][serial] ?? 0;\n}\n\n/**\n * Decodes one serial-typed value from a record body.\n *\n * @param {Uint8Array} body Record body bytes.\n * @param {number} offset Offset within the body.\n * @param {number} serial Serial type code.\n * @param {number} encoding Database text encoding (1, 2 or 3).\n * @returns {*} Decoded value.\n */\nexport function ReadSerial(body, offset, serial, encoding) {\n if (serial === 0) {\n return null;\n }\n\n if (serial === 8) {\n return 0;\n }\n\n if (serial === 9) {\n return 1;\n }\n\n if (serial >= 1 && serial <= 6) {\n const size = SerialSize(serial);\n let value = 0n;\n\n for (let index = 0; index < size; index += 1) {\n value = (value << 8n) | BigInt(body[offset + index]);\n }\n\n // These are all signed, so a leading high bit means a negative number.\n const signed = BigInt.asIntN(size * 8, value);\n\n return Number.isSafeInteger(Number(signed)) ? Number(signed) : signed;\n }\n\n if (serial === 7) {\n return new DataView(body.buffer, body.byteOffset + offset, 8).getFloat64(0, false);\n }\n\n const size = SerialSize(serial);\n const slice = body.subarray(offset, offset + size);\n\n // Even codes from 12 are blobs; odd codes from 13 are text.\n if (serial % 2 === 0) {\n return slice.slice();\n }\n\n const label = TEXT_DECODERS[encoding];\n\n if (!label) {\n throw SqliteError(`Unsupported text encoding ${encoding}.`);\n }\n\n return new TextDecoder(label).decode(slice);\n}\n\n/**\n * Decodes a complete record into its column values.\n *\n * @param {Uint8Array} payload Record bytes, overflow already joined.\n * @param {number} encoding Database text encoding.\n * @returns {Array<*>} Column values in order.\n */\nexport function ReadRecord(payload, encoding) {\n const header = ReadVarint(payload, 0);\n const serials = [];\n let cursor = header.size;\n\n while (cursor < header.value) {\n const serial = ReadVarint(payload, cursor);\n\n serials.push(serial.value);\n cursor += serial.size;\n }\n\n const values = [];\n let body = header.value;\n\n for (const serial of serials) {\n values.push(ReadSerial(payload, body, serial, encoding));\n body += SerialSize(serial);\n }\n\n return values;\n}\n\n/** Creates a tagged error, so a caller can tell a malformed container apart. */\nexport function SqliteError(message) {\n const error = new Error(message);\n\n error.code = \"CJS_SQLITE_INVALID\";\n\n return error;\n}\n"],"names":["TEXT_DECODERS","Object","freeze","ReadVarint","bytes","offset","value","index","byte","undefined","SqliteError","BigInt","Narrow","size","ninth","asIntN","narrowed","Number","isSafeInteger","SerialSize","serial","Math","floor","ReadSerial","body","encoding","signed","DataView","buffer","byteOffset","getFloat64","slice","subarray","label","TextDecoder","decode","ReadRecord","payload","header","serials","cursor","push","values","message","error","Error","code"],"mappings":"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"}
1
+ {"version":3,"file":"sqliteRecords.js","sources":["../../../../../src/formats/sqlite/core/sqliteRecords.js"],"sourcesContent":["/**\n * SQLite record and varint decoding.\n *\n * The file format is documented by SQLite itself; this decodes the read-only\n * subset a full table scan needs and nothing else.\n */\n\nconst TEXT_DECODERS = Object.freeze({\n 1: \"utf-8\",\n 2: \"utf-16le\",\n 3: \"utf-16be\"\n});\n\n/**\n * Reads a big-endian base-128 varint, of one to nine bytes.\n *\n * A ninth byte exists only when all eight before it set their continuation bit,\n * and it contributes all eight of its own bits rather than seven. Treating the\n * eighth byte as that terminator instead - which this did until it was\n * checked - returns size 9 for an eight-byte varint, so the caller skips a byte\n * it never read. No container in the corpus holds a varint long enough to\n * expose it, which is why decoding 80,765 rows correctly proved nothing here.\n *\n * @param {Uint8Array} bytes Buffer to read from.\n * @param {number} offset Byte offset.\n * @returns {{ value: number, size: number }} Value and bytes consumed.\n */\nexport function ReadVarint(bytes, offset) {\n let value = 0n;\n\n // The first eight bytes carry seven bits each, high bit continuing.\n for (let index = 0; index < 8; index += 1) {\n const byte = bytes[offset + index];\n\n if (byte === undefined) {\n throw SqliteError(\"A varint runs past the end of the container.\");\n }\n\n value = (value << 7n) | BigInt(byte & 0x7f);\n\n if ((byte & 0x80) === 0) {\n return { value: Narrow(value), size: index + 1 };\n }\n }\n\n // Only when all eight continued does a ninth byte exist, and it contributes\n // all eight of its bits rather than seven - the one irregularity in the\n // encoding, and 8x7 + 8 is where the full 64 bits come from.\n const ninth = bytes[offset + 8];\n\n if (ninth === undefined) {\n throw SqliteError(\"A nine-byte varint runs past the end of the container.\");\n }\n\n value = (value << 8n) | BigInt(ninth);\n\n return { value: Narrow(BigInt.asIntN(64, value)), size: 9 };\n}\n\n/**\n * Returns a Number when one holds the value exactly, and the BigInt otherwise.\n *\n * A varint reaches 64 bits, so it can carry a rowid past 2^53 that a Number\n * would silently round. Rounding a key is worse than handing back a type the\n * caller has to notice, and it matches how a record's own wide integers are\n * already returned.\n *\n * Sizes and header lengths never come close, so callers doing arithmetic on\n * those keep seeing Numbers.\n *\n * @param {bigint} value Decoded value.\n * @returns {number|bigint} Narrowed value.\n */\nfunction Narrow(value) {\n const narrowed = Number(value);\n\n return Number.isSafeInteger(narrowed) ? narrowed : value;\n}\n\n/**\n * Returns the byte length a serial type occupies in a record body.\n *\n * @param {number} serial Serial type code.\n * @returns {number} Byte length.\n */\nexport function SerialSize(serial) {\n if (serial >= 12) {\n return Math.floor((serial - (serial % 2 === 0 ? 12 : 13)) / 2);\n }\n\n // 0 and 8/9 are constants stored entirely in the type; 7 is a double.\n return [ 0, 1, 2, 3, 4, 6, 8, 8, 0, 0 ][serial] ?? 0;\n}\n\n/**\n * Decodes one serial-typed value from a record body.\n *\n * @param {Uint8Array} body Record body bytes.\n * @param {number} offset Offset within the body.\n * @param {number} serial Serial type code.\n * @param {number} encoding Database text encoding (1, 2 or 3).\n * @returns {*} Decoded value.\n */\nexport function ReadSerial(body, offset, serial, encoding) {\n if (serial === 0) {\n return null;\n }\n\n if (serial === 8) {\n return 0;\n }\n\n if (serial === 9) {\n return 1;\n }\n\n if (serial >= 1 && serial <= 6) {\n const size = SerialSize(serial);\n let value = 0n;\n\n for (let index = 0; index < size; index += 1) {\n value = (value << 8n) | BigInt(body[offset + index]);\n }\n\n // These are all signed, so a leading high bit means a negative number.\n const signed = BigInt.asIntN(size * 8, value);\n\n return Number.isSafeInteger(Number(signed)) ? Number(signed) : signed;\n }\n\n if (serial === 7) {\n return new DataView(body.buffer, body.byteOffset + offset, 8).getFloat64(0, false);\n }\n\n const size = SerialSize(serial);\n const slice = body.subarray(offset, offset + size);\n\n // Even codes from 12 are blobs; odd codes from 13 are text.\n if (serial % 2 === 0) {\n return slice.slice();\n }\n\n const label = TEXT_DECODERS[encoding];\n\n if (!label) {\n throw SqliteError(`Unsupported text encoding ${encoding}.`);\n }\n\n return new TextDecoder(label).decode(slice);\n}\n\n/**\n * Decodes a complete record into its column values.\n *\n * @param {Uint8Array} payload Record bytes, overflow already joined.\n * @param {number} encoding Database text encoding.\n * @returns {Array<*>} Column values in order.\n */\nexport function ReadRecord(payload, encoding) {\n const header = ReadVarint(payload, 0);\n const serials = [];\n let cursor = header.size;\n\n while (cursor < header.value) {\n const serial = ReadVarint(payload, cursor);\n\n serials.push(serial.value);\n cursor += serial.size;\n }\n\n const values = [];\n let body = header.value;\n\n for (const serial of serials) {\n values.push(ReadSerial(payload, body, serial, encoding));\n body += SerialSize(serial);\n }\n\n return values;\n}\n\n/** Creates a tagged error, so a caller can tell a malformed container apart. */\nexport function SqliteError(message) {\n const error = new Error(message);\n\n error.code = \"CJS_SQLITE_FORMAT_INVALID\";\n\n return error;\n}\n"],"names":["TEXT_DECODERS","Object","freeze","ReadVarint","bytes","offset","value","index","byte","undefined","SqliteError","BigInt","Narrow","size","ninth","asIntN","narrowed","Number","isSafeInteger","SerialSize","serial","Math","floor","ReadSerial","body","encoding","signed","DataView","buffer","byteOffset","getFloat64","slice","subarray","label","TextDecoder","decode","ReadRecord","payload","header","serials","cursor","push","values","message","error","Error","code"],"mappings":"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"}
@@ -16,16 +16,18 @@ const CJS_STATIC_FAMILIES = Object.freeze({
16
16
  *
17
17
  * - **SQLite 3** — a `cache(key, value, time)` plus `indexes(key, value)`
18
18
  * database whose values are JSON documents. `CjsSqliteFormat` reads it.
19
- * - **Prefixed pickle** — a four-byte little-endian prefix followed by a
20
- * protocol-0 pickle. Many of these carry class-construction opcodes, which
21
- * the data-only pickle reader refuses by design; that refusal is correct and
22
- * is surfaced rather than worked around.
19
+ * - **Embedded schema** — a four-byte little-endian SCHEMA LENGTH followed by
20
+ * that schema as a protocol-0 pickle, and then a payload. The prefix is not a
21
+ * wrapper to skip: slice `[4, 4 + length)` for the schema and give the rest
22
+ * to `CjsSchemaBoundFormat`. All 25 of these name one global,
23
+ * `collections.OrderedDict`, which the pickle reader rebuilds as plain data.
23
24
  * - **Schema-bound** — a binary record container whose `.schema` companion is
24
25
  * YAML describing its own layout: attribute sizes and types, optional flags,
25
26
  * lists with a fixed item size, vectors with a precision, and a key footer of
26
27
  * key-to-offset pairs. Nothing needs deriving, because the build ships the
27
- * layout. Six datasets are stored this way, the celestial tables among them.
28
- * `CjsSchemaBoundFormat` reads it, given that companion.
28
+ * layout. Six datasets are stored this way - the map skeleton of regions,
29
+ * constellations and systems. `CjsSchemaBoundFormat` reads it, given that
30
+ * companion, and reads the embedded-schema family above from the same code.
29
31
  *
30
32
  * Detection is signature-based and never executes or trusts file names.
31
33
  *
@@ -212,7 +214,7 @@ function Normalize(input) {
212
214
  return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
213
215
  }
214
216
  const error = new TypeError("A .static container must be an ArrayBuffer or a view over one.");
215
- error.code = "CJS_STATIC_INPUT_INVALID";
217
+ error.code = "CJS_STATIC_FORMAT_INPUT_INVALID";
216
218
  throw error;
217
219
  }
218
220