import sys import struct from argparse import ArgumentParser from os.path import splitext from json import dump TJS_NS0_MAGIC = b'TJS/ns0\x00TJS\x00\x00\x00\x00\x00' sys.setrecursionlimit(200000) class TJS_NS0: def __init__(self, data): self.data = data self.obj = None self.pos = 0 def check_magic(self): if self.data[:16] != TJS_NS0_MAGIC: raise ValueError("Invalid TJS/ns0 magic header") self.pos += 16 def parse(self): self.check_magic() self.obj = self.parse_obj() def read_bytes(self, length): if self.pos + length > len(self.data): raise ValueError("Unexpected end of data") result = self.data[self.pos:self.pos + length] self.pos += length return result def read_u16(self): return struct.unpack('