{"version":3,"file":"mac.mjs","names":["open","unsign","launcher","hex4","align","concat","getCstrN","slider","VM_PROT_READ","FAT_MAGIC","MH_MAGIC","MH_CIGAM","MH_MAGIC_64","MH_CIGAM_64","LC_SEGMENT","LC_SYMTAB","LC_DYSYMTAB","LC_SEGMENT_64","LC_CODE_SIGNATURE","LC_SEGMENT_SPLIT_INFO","LC_DYLD_INFO","LC_DYLD_INFO_ONLY","LC_FUNCTION_STARTS","LC_DATA_IN_CODE","LC_DYLIB_CODE_SIGN_DRS","LC_LINKER_OPTIMIZATION_HINT","LC_DYLD_EXPORTS_TRIE","LC_DYLD_CHAINED_FIXUPS","SEG_TEXT","SECT_TEXT","SEG_LINKEDIT","CPU_TYPE_POWERPC","CPU_TYPE_POWERPC64","CPU_TYPE_I386","CPU_TYPE_X86_64","CPU_TYPE_ARM64","macProjectorTitlePatchesByCpuType","alignVmsize","size","Math","max","machoTypesData","data","le","dv","DataView","buffer","byteOffset","byteLength","type","offset","cpuType","getUint32","cpuSubtype","magic","r","count","i","push","Error","machoTypesFile","path","f","m","h","Uint8Array","bytesRead","read","subarray","v","n","d","set","close","machoFat","machos","alignSize","headD","headV","setUint32","pieces","total","length","add","pad","over","thins","body","Array","isArray","piece","machoThins","start","end","macProjectorMachoPatchEach","title","dataV","lp","SEGMENT","headerSize","header","headerV","numLoadCommands","sizeOfLoadCommands","commands","lcd","c","commandSize","linkeditI","command","commandV","linkedit","linkeditV","vmaddr","getBigUint64","getInt32","fileoff","filesize","aligned","segname","secname","toLowerCase","te","TextEncoder","secdata","ArrayBuffer","secview","setUint16","charCodeAt","seg","segV","sec","secV","encode","setBigUint64","BigInt","Number","segSize","slide","u32","splice","macho","reduce","textSegment","textSegmentV","textSectionCount","textSection","o","textSectionV","textSectionAddress","textSectionSize","textSectionOffset","textSectionData","found","patchers","Patcher","patcher","check","patch","macProjectorMachoPatch","options","removeCodeSignature","patchWindowTitle","unsigned","map","thin","machoAppLauncherThin","machoAppLauncherFat","types","Promise","all","machoAppLauncher"],"sources":["../../src/util/mac.ts"],"sourcesContent":["import {open} from 'node:fs/promises';\n\nimport {unsign} from 'macho-unsign';\n\nimport {launcher} from '../util.ts';\n\nimport {hex4, align, concat, getCstrN} from './internal/data.ts';\nimport {slider} from './internal/patch.ts';\nimport {\n\tVM_PROT_READ,\n\tFAT_MAGIC,\n\tMH_MAGIC,\n\tMH_CIGAM,\n\tMH_MAGIC_64,\n\tMH_CIGAM_64,\n\tLC_SEGMENT,\n\tLC_SYMTAB,\n\tLC_DYSYMTAB,\n\tLC_SEGMENT_64,\n\tLC_CODE_SIGNATURE,\n\tLC_SEGMENT_SPLIT_INFO,\n\tLC_DYLD_INFO,\n\tLC_DYLD_INFO_ONLY,\n\tLC_FUNCTION_STARTS,\n\tLC_DATA_IN_CODE,\n\tLC_DYLIB_CODE_SIGN_DRS,\n\tLC_LINKER_OPTIMIZATION_HINT,\n\tLC_DYLD_EXPORTS_TRIE,\n\tLC_DYLD_CHAINED_FIXUPS,\n\tSEG_TEXT,\n\tSECT_TEXT,\n\tSEG_LINKEDIT,\n\tCPU_TYPE_POWERPC,\n\tCPU_TYPE_POWERPC64,\n\tCPU_TYPE_I386,\n\tCPU_TYPE_X86_64,\n\tCPU_TYPE_ARM64\n} from './internal/mac/constants.ts';\nimport {\n\tMacProjectTitlePatch,\n\tmacProjectorTitlePatchesByCpuType\n} from './internal/mac/title.ts';\n\n/**\n * Mach-O Type.\n */\nexport interface IMachoType {\n\t/**\n\t * CPU type.\n\t */\n\tcpuType: number;\n\n\t/**\n\t * CPU subtype.\n\t */\n\tcpuSubtype: number;\n}\n\n/**\n * Align size for vmsize.\n *\n * @param size Raw size.\n * @returns Aligned vmsize.\n */\nfunction alignVmsize(size: number) {\n\treturn align(Math.max(size, 0x4000), 0x1000);\n}\n\n/**\n * Get types of Mach-O data, array if FAT binary, else a single object.\n *\n * @param data Mach-O data.\n * @returns Mach-O types.\n */\nexport function machoTypesData(data: Readonly<Uint8Array>) {\n\tlet le = false;\n\tconst dv = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n\t/**\n\t * Read type at offset.\n\t *\n\t * @param offset File offset.\n\t * @returns Type object.\n\t */\n\tconst type = (offset: number): IMachoType => ({\n\t\tcpuType: dv.getUint32(offset, le),\n\t\tcpuSubtype: dv.getUint32(offset + 4, le)\n\t});\n\n\tconst magic = dv.getUint32(0, le);\n\tswitch (magic) {\n\t\tcase FAT_MAGIC: {\n\t\t\tconst r = [];\n\t\t\tconst count = dv.getUint32(4, le);\n\t\t\tlet offset = 8;\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tr.push(type(offset));\n\t\t\t\toffset += 20;\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t\tcase MH_MAGIC:\n\t\tcase MH_MAGIC_64: {\n\t\t\treturn type(4);\n\t\t}\n\t\tcase MH_CIGAM:\n\t\tcase MH_CIGAM_64: {\n\t\t\tle = true;\n\t\t\treturn type(4);\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown header magic: 0x${hex4(magic)}`);\n\t\t}\n\t}\n}\n\n/**\n * Get types of Mach-O file, array if FAT binary, else a single object.\n *\n * @param path Mach-O file.\n * @returns Mach-O types.\n */\nexport async function machoTypesFile(path: string) {\n\tlet data;\n\tconst f = await open(path, 'r');\n\ttry {\n\t\tconst m = 8;\n\t\tconst h = new Uint8Array(m);\n\t\tconst {bytesRead} = await f.read(h, 0, m, 0);\n\t\tif (bytesRead < m) {\n\t\t\tdata = h.subarray(0, bytesRead);\n\t\t} else {\n\t\t\tconst v = new DataView(h.buffer, h.byteOffset, h.byteLength);\n\t\t\tconst n =\n\t\t\t\tv.getUint32(0, false) === FAT_MAGIC\n\t\t\t\t\t? v.getUint32(4, false) * 20\n\t\t\t\t\t: 4;\n\t\t\tconst d = new Uint8Array(m + n);\n\t\t\td.set(h);\n\t\t\tconst {bytesRead} = await f.read(d, m, n, m);\n\t\t\tdata = d.subarray(0, m + bytesRead);\n\t\t}\n\t} finally {\n\t\tawait f.close();\n\t}\n\treturn machoTypesData(data);\n}\n\n/**\n * Create FAT Mach-O data from thin Mach-O binaries.\n *\n * @param machos Mach-O binary datas.\n * @returns FAT binary.\n */\nexport function machoFat(machos: readonly Readonly<Uint8Array>[]) {\n\t// The lipo utility always uses 12/4096 for ppc, ppc64, i386, and x86_64.\n\tconst align = 12;\n\t// eslint-disable-next-line no-bitwise\n\tconst alignSize = (1 << align) >>> 0;\n\n\t// Create the FAT header.\n\tconst headD = new Uint8Array(8);\n\tconst headV = new DataView(\n\t\theadD.buffer,\n\t\theadD.byteOffset,\n\t\theadD.byteLength\n\t);\n\theadV.setUint32(0, FAT_MAGIC, false);\n\n\t// The pieces and their total length.\n\tconst pieces: Uint8Array[] = [headD];\n\tlet total = headD.length;\n\n\t/**\n\t * Helper to add pieces and update total length.\n\t *\n\t * @param data Data.\n\t */\n\tconst add = (data: Uint8Array) => {\n\t\tpieces.push(data);\n\t\ttotal += data.length;\n\t};\n\n\t/**\n\t * Helper to pad pieces.\n\t */\n\tconst pad = () => {\n\t\tconst over = total % alignSize;\n\t\tif (over) {\n\t\t\tadd(new Uint8Array(alignSize - over));\n\t\t}\n\t};\n\n\t// List all the binaries.\n\tconst thins = [];\n\tfor (const body of machos) {\n\t\tconst type = machoTypesData(body);\n\t\tif (Array.isArray(type)) {\n\t\t\t// eslint-disable-next-line unicorn/prefer-type-error\n\t\t\tthrow new Error('Cannot nest FAT binary');\n\t\t}\n\t\tconst headD = new Uint8Array(20);\n\t\tconst headV = new DataView(\n\t\t\theadD.buffer,\n\t\t\theadD.byteOffset,\n\t\t\theadD.byteLength\n\t\t);\n\t\theadV.setUint32(0, type.cpuType, false);\n\t\theadV.setUint32(4, type.cpuSubtype, false);\n\t\theadV.setUint32(16, align, false);\n\t\tthins.push({\n\t\t\theadV,\n\t\t\tbody\n\t\t});\n\t\tadd(headD);\n\t}\n\n\t// Set count in header.\n\theadV.setUint32(4, thins.length, false);\n\n\t// Add binaries aligned, updating their headers.\n\tfor (const {headV, body} of thins) {\n\t\tpad();\n\t\theadV.setUint32(8, total, false);\n\t\theadV.setUint32(12, body.length, false);\n\t\tadd(body);\n\t}\n\n\t// Merge all the pieces.\n\tconst r = new Uint8Array(total);\n\tlet i = 0;\n\tfor (const piece of pieces) {\n\t\tr.set(piece, i);\n\t\ti += piece.length;\n\t}\n\treturn r;\n}\n\n/**\n * Read THIN binaries in a Mach-O binary which might be FAT.\n * Returns slices of the original buffer if a FAT binary.\n * Else it just returns the single THIN binary.\n *\n * @param data Mach-O binary data.\n * @returns Mach-O binary data or datas.\n */\nexport function machoThins<T extends Readonly<Uint8Array>>(data: T) {\n\tconst v = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\tif (v.getUint32(0, false) !== FAT_MAGIC) {\n\t\treturn data;\n\t}\n\tconst r = [];\n\tconst count = v.getUint32(4, false);\n\tlet offset = 8;\n\tfor (let i = 0; i < count; i++) {\n\t\tconst start = v.getUint32(offset + 8, false);\n\t\tconst end = start + v.getUint32(offset + 12, false);\n\t\tr.push(data.subarray(start, end) as T);\n\t\toffset += 20;\n\t}\n\treturn r;\n}\n\n/**\n * Mac projector patch.\n */\nexport interface IMacProjectorMachoPatch {\n\t/**\n\t * Remove signature if present and true.\n\t *\n\t * @default false\n\t */\n\tremoveCodeSignature?: boolean;\n\n\t/**\n\t * Attempt to replace the window title if not null.\n\t *\n\t * @default null\n\t */\n\tpatchWindowTitle?: string | null;\n}\n\n/**\n * Patcher for each binary.\n *\n * @param data Mach-O data.\n * @param title Window title.\n * @returns Patched binary.\n */\nfunction macProjectorMachoPatchEach(data: Uint8Array, title: string) {\n\tconst dataV = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\tlet le = false;\n\tlet lp = false;\n\tconst magic = dataV.getUint32(0, le);\n\tswitch (magic) {\n\t\tcase MH_MAGIC: {\n\t\t\tle = false;\n\t\t\tlp = false;\n\t\t\tbreak;\n\t\t}\n\t\tcase MH_MAGIC_64: {\n\t\t\tle = false;\n\t\t\tlp = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase MH_CIGAM: {\n\t\t\tle = true;\n\t\t\tlp = false;\n\t\t\tbreak;\n\t\t}\n\t\tcase MH_CIGAM_64: {\n\t\t\tle = true;\n\t\t\tlp = true;\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown header magic: 0x${hex4(magic)}`);\n\t\t}\n\t}\n\tconst SEGMENT = lp ? LC_SEGMENT_64 : LC_SEGMENT;\n\n\t// Read header and commands.\n\tconst headerSize = lp ? 32 : 28;\n\tconst header = data.subarray(0, headerSize);\n\tconst headerV = new DataView(\n\t\theader.buffer,\n\t\theader.byteOffset,\n\t\theader.byteLength\n\t);\n\tconst numLoadCommands = headerV.getUint32(16, le);\n\tconst sizeOfLoadCommands = headerV.getUint32(20, le);\n\tconst commands = [];\n\tlet lcd = data.subarray(headerSize, headerSize + sizeOfLoadCommands);\n\tfor (let c = 0; c < numLoadCommands; c++) {\n\t\tconst commandSize = new DataView(\n\t\t\tlcd.buffer,\n\t\t\tlcd.byteOffset,\n\t\t\tlcd.byteLength\n\t\t).getUint32(4, le);\n\t\tcommands.push(lcd.subarray(0, commandSize));\n\t\tlcd = lcd.subarray(commandSize);\n\t}\n\n\t// Find the closing segment.\n\tlet linkeditI = -1;\n\tconst {length} = commands;\n\tfor (let i = 0; i < length; i++) {\n\t\tconst command = commands[i];\n\t\tconst commandV = new DataView(\n\t\t\tcommand.buffer,\n\t\t\tcommand.byteOffset,\n\t\t\tcommand.byteLength\n\t\t);\n\t\tif (\n\t\t\tcommandV.getUint32(0, le) === SEGMENT &&\n\t\t\tgetCstrN(command, 8, 16) === SEG_LINKEDIT\n\t\t) {\n\t\t\tif (linkeditI > 0) {\n\t\t\t\tthrow new Error(`Multiple ${SEG_LINKEDIT}`);\n\t\t\t}\n\t\t\tlinkeditI = i;\n\t\t}\n\t}\n\tif (linkeditI < 0) {\n\t\tthrow new Error(`Missing ${SEG_LINKEDIT}`);\n\t}\n\tconst linkedit = commands[linkeditI];\n\tconst linkeditV = new DataView(\n\t\tlinkedit.buffer,\n\t\tlinkedit.byteOffset,\n\t\tlinkedit.byteLength\n\t);\n\n\t// Remember closing segment position to put one there before it.\n\tconst vmaddr = lp\n\t\t? linkeditV.getBigUint64(24, le)\n\t\t: linkeditV.getInt32(24, le);\n\tconst fileoff = lp\n\t\t? linkeditV.getBigUint64(40, le)\n\t\t: linkeditV.getInt32(32, le);\n\tconst filesize = lp\n\t\t? linkeditV.getBigUint64(48, le)\n\t\t: linkeditV.getInt32(36, le);\n\n\t// Create the new section and segment.\n\tconst aligned = 16;\n\tconst segname = '__SHOCKPKG_DATA';\n\tconst secname = segname.toLowerCase();\n\tconst te = new TextEncoder();\n\tconst secdata = new ArrayBuffer(align(6 + title.length * 2, aligned));\n\tconst secview = new DataView(secdata);\n\tsecview.setUint32(0, title.length, le);\n\tfor (let i = 0; i < title.length; i++) {\n\t\t// eslint-disable-next-line unicorn/prefer-code-point\n\t\tsecview.setUint16(4 + i * 2, title.charCodeAt(i), le);\n\t}\n\tconst seg = new Uint8Array(lp ? 152 : 124);\n\tconst segV = new DataView(seg.buffer, seg.byteOffset, seg.byteLength);\n\tconst sec = seg.subarray(lp ? 72 : 56);\n\tconst secV = new DataView(sec.buffer, sec.byteOffset, sec.byteLength);\n\tsec.subarray(0, 16).set(te.encode(secname));\n\tsec.subarray(16, 32).set(te.encode(segname));\n\tif (lp) {\n\t\tsecV.setBigUint64(32, BigInt(vmaddr), le);\n\t\tsecV.setBigUint64(40, BigInt(secdata.byteLength), le);\n\t\tsecV.setUint32(48, Number(fileoff), le);\n\t\tsecV.setUint32(52, secdata.byteLength < aligned ? 0 : 4, le);\n\t} else {\n\t\tsecV.setUint32(32, Number(vmaddr), le);\n\t\tsecV.setUint32(36, secdata.byteLength, le);\n\t\tsecV.setUint32(40, Number(fileoff), le);\n\t\tsecV.setUint32(44, secdata.byteLength < aligned ? 0 : 4, le);\n\t}\n\tsegV.setUint32(0, SEGMENT, le);\n\tsegV.setUint32(4, seg.length, le);\n\tseg.subarray(8, 24).set(te.encode(segname));\n\tconst segSize = alignVmsize(secdata.byteLength);\n\tif (lp) {\n\t\tsegV.setBigUint64(24, BigInt(vmaddr), le);\n\t\tsegV.setBigUint64(32, BigInt(segSize), le);\n\t\tsegV.setBigUint64(40, BigInt(fileoff), le);\n\t\tsegV.setBigUint64(48, BigInt(segSize), le);\n\t\tsegV.setUint32(56, VM_PROT_READ, le);\n\t\tsegV.setUint32(60, VM_PROT_READ, le);\n\t\tsegV.setUint32(64, 1, le);\n\t} else {\n\t\tsegV.setUint32(24, Number(vmaddr), le);\n\t\tsegV.setUint32(28, segSize, le);\n\t\tsegV.setUint32(32, Number(fileoff), le);\n\t\tsegV.setUint32(36, segSize, le);\n\t\tsegV.setUint32(40, VM_PROT_READ, le);\n\t\tsegV.setUint32(44, VM_PROT_READ, le);\n\t\tsegV.setUint32(48, 1, le);\n\t}\n\n\t// Shift closing segment down.\n\tif (lp) {\n\t\tlinkeditV.setBigUint64(24, BigInt(vmaddr) + BigInt(segSize), le);\n\t\tlinkeditV.setBigUint64(40, BigInt(fileoff) + BigInt(segSize), le);\n\t} else {\n\t\tlinkeditV.setUint32(24, Number(vmaddr) + Number(segSize), le);\n\t\tlinkeditV.setUint32(32, Number(fileoff) + Number(segSize), le);\n\t}\n\n\t// Shift any offsets that could reference closing segment.\n\tconst slide = slider(segSize, Number(fileoff), Number(filesize));\n\tfor (const command of commands) {\n\t\tconst commandV = new DataView(\n\t\t\tcommand.buffer,\n\t\t\tcommand.byteOffset,\n\t\t\tcommand.byteLength\n\t\t);\n\t\tswitch (commandV.getUint32(0, le)) {\n\t\t\tcase LC_DYLD_INFO:\n\t\t\tcase LC_DYLD_INFO_ONLY: {\n\t\t\t\tslide.u32(commandV, 8, le);\n\t\t\t\tslide.u32(commandV, 16, le);\n\t\t\t\tslide.u32(commandV, 24, le);\n\t\t\t\tslide.u32(commandV, 32, le);\n\t\t\t\tslide.u32(commandV, 40, le);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase LC_SYMTAB: {\n\t\t\t\tslide.u32(commandV, 8, le);\n\t\t\t\tslide.u32(commandV, 16, le);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase LC_DYSYMTAB: {\n\t\t\t\tslide.u32(commandV, 32, le);\n\t\t\t\tslide.u32(commandV, 40, le);\n\t\t\t\tslide.u32(commandV, 48, le);\n\t\t\t\tslide.u32(commandV, 56, le);\n\t\t\t\tslide.u32(commandV, 64, le);\n\t\t\t\tslide.u32(commandV, 72, le);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase LC_CODE_SIGNATURE:\n\t\t\tcase LC_SEGMENT_SPLIT_INFO:\n\t\t\tcase LC_FUNCTION_STARTS:\n\t\t\tcase LC_DATA_IN_CODE:\n\t\t\tcase LC_DYLIB_CODE_SIGN_DRS:\n\t\t\tcase LC_LINKER_OPTIMIZATION_HINT:\n\t\t\tcase LC_DYLD_EXPORTS_TRIE:\n\t\t\tcase LC_DYLD_CHAINED_FIXUPS: {\n\t\t\t\tslide.u32(commandV, 8, le);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// Do nothing.\n\t\t\t}\n\t\t}\n\t}\n\n\t// Update header and insert the segment.\n\theaderV.setUint32(16, numLoadCommands + 1, le);\n\theaderV.setUint32(20, sizeOfLoadCommands + seg.length, le);\n\tcommands.splice(linkeditI, 0, seg);\n\n\t// Construct the new binary, inserting new section data.\n\tconst macho = concat([\n\t\theader,\n\t\t...commands,\n\t\tdata.subarray(\n\t\t\tcommands.reduce((v, c) => v + c.length, header.length),\n\t\t\tNumber(fileoff)\n\t\t),\n\t\tnew Uint8Array(secdata),\n\t\tnew Uint8Array(segSize - secdata.byteLength),\n\t\tdata.subarray(Number(fileoff))\n\t]);\n\n\t// Find the text section.\n\tlet textSegment: Uint8Array | null = null;\n\tfor (const command of commands) {\n\t\tconst commandV = new DataView(\n\t\t\tcommand.buffer,\n\t\t\tcommand.byteOffset,\n\t\t\tcommand.byteLength\n\t\t);\n\t\tif (\n\t\t\tcommandV.getUint32(0, le) === SEGMENT &&\n\t\t\tgetCstrN(command, 8, 16) === SEG_TEXT\n\t\t) {\n\t\t\tif (textSegment) {\n\t\t\t\tthrow new Error(`Multiple ${SEG_TEXT}`);\n\t\t\t}\n\t\t\ttextSegment = command;\n\t\t}\n\t}\n\tif (!textSegment) {\n\t\tthrow new Error(`Missing ${SEG_TEXT}`);\n\t}\n\tconst textSegmentV = new DataView(\n\t\ttextSegment.buffer,\n\t\ttextSegment.byteOffset,\n\t\ttextSegment.byteLength\n\t);\n\tconst textSectionCount = textSegmentV.getUint32(lp ? 64 : 48, le);\n\tlet textSection: Uint8Array | null = null;\n\tfor (let i = 0; i < textSectionCount; i++) {\n\t\tconst o = lp ? 72 + 80 * i : 56 + 68 * i;\n\t\tif (getCstrN(textSegment, o, 16) === SECT_TEXT) {\n\t\t\tif (textSection) {\n\t\t\t\tthrow new Error(`Multiple ${SECT_TEXT}`);\n\t\t\t}\n\t\t\ttextSection = textSegment.subarray(o, o + (lp ? 80 : 68));\n\t\t}\n\t}\n\tif (!textSection) {\n\t\tthrow new Error(`Missing ${SECT_TEXT}`);\n\t}\n\tconst textSectionV = new DataView(\n\t\ttextSection.buffer,\n\t\ttextSection.byteOffset,\n\t\ttextSection.byteLength\n\t);\n\tconst textSectionAddress = lp\n\t\t? textSectionV.getBigUint64(32, le)\n\t\t: textSectionV.getUint32(32, le);\n\tconst textSectionSize = lp\n\t\t? textSectionV.getBigUint64(40, le)\n\t\t: textSectionV.getUint32(36, le);\n\tconst textSectionOffset = lp\n\t\t? textSectionV.getUint32(48, le)\n\t\t: textSectionV.getUint32(40, le);\n\tconst textSectionData = macho.subarray(\n\t\ttextSectionOffset,\n\t\ttextSectionOffset + Number(textSectionSize)\n\t);\n\n\t// Patch the text section to reference the title.\n\tconst cpuType = headerV.getUint32(4, le);\n\tlet found: MacProjectTitlePatch | null = null;\n\tconst patchers = macProjectorTitlePatchesByCpuType(cpuType);\n\tfor (const Patcher of patchers) {\n\t\tconst patcher = new Patcher(\n\t\t\ttextSectionData,\n\t\t\tNumber(textSectionAddress),\n\t\t\tNumber(vmaddr)\n\t\t);\n\t\tif (patcher.check()) {\n\t\t\tif (found) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Duplicate patcher for CPU type: 0x${hex4(cpuType)}`\n\t\t\t\t);\n\t\t\t}\n\t\t\tfound = patcher;\n\t\t}\n\t}\n\tif (!found) {\n\t\tthrow new Error(`No patcher for CPU type: 0x${hex4(cpuType)}`);\n\t}\n\tfound.patch();\n\treturn macho;\n}\n\n/**\n * Apply patches to projector Mach-O binary.\n *\n * @param macho Mach-O data.\n * @param options Patch options.\n * @returns Patched Mach-O.\n */\nexport function macProjectorMachoPatch(\n\tmacho: Readonly<Uint8Array>,\n\toptions: Readonly<IMacProjectorMachoPatch>\n) {\n\tconst {removeCodeSignature, patchWindowTitle} = options;\n\n\t// Remove signature, make copy.\n\tlet data;\n\tconst unsigned = removeCodeSignature ? unsign(macho) : null;\n\tif (unsigned) {\n\t\tdata = new Uint8Array(unsigned);\n\t} else {\n\t\tdata = new Uint8Array(macho.length);\n\t\tdata.set(macho);\n\t}\n\n\tif (typeof patchWindowTitle !== 'string') {\n\t\treturn data;\n\t}\n\n\tconst thins = machoThins(data);\n\tif (!Array.isArray(thins)) {\n\t\treturn macProjectorMachoPatchEach(thins, patchWindowTitle);\n\t}\n\treturn machoFat(\n\t\tthins.map(thin => macProjectorMachoPatchEach(thin, patchWindowTitle))\n\t);\n}\n\n/**\n * Get Mach-O app launcher for a single type.\n *\n * @param type Mach-O type.\n * @returns Launcher data.\n */\nexport async function machoAppLauncherThin(type: Readonly<IMachoType>) {\n\tconst {cpuType} = type;\n\tswitch (cpuType) {\n\t\tcase CPU_TYPE_POWERPC: {\n\t\t\treturn launcher('mac-app-ppc');\n\t\t}\n\t\tcase CPU_TYPE_POWERPC64: {\n\t\t\treturn launcher('mac-app-ppc64');\n\t\t}\n\t\tcase CPU_TYPE_I386: {\n\t\t\treturn launcher('mac-app-i386');\n\t\t}\n\t\tcase CPU_TYPE_X86_64: {\n\t\t\treturn launcher('mac-app-x86_64');\n\t\t}\n\t\tcase CPU_TYPE_ARM64: {\n\t\t\treturn launcher('mac-app-arm64');\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown CPU type: 0x${hex4(cpuType)}`);\n\t\t}\n\t}\n}\n\n/**\n * Get Mach-O app launcher for a type list.\n *\n * @param types Mach-O types.\n * @returns Launcher data.\n */\nexport async function machoAppLauncherFat(\n\ttypes: readonly Readonly<IMachoType>[]\n) {\n\treturn machoFat(await Promise.all(types.map(machoAppLauncherThin)));\n}\n\n/**\n * Get Mach-O app launcher for a single or multiple types.\n *\n * @param types Mach-O types.\n * @returns Launcher data.\n */\nexport async function machoAppLauncher(\n\ttypes: Readonly<IMachoType> | readonly Readonly<IMachoType>[]\n) {\n\treturn Array.isArray(types)\n\t\t? machoAppLauncherFat(types as IMachoType[])\n\t\t: machoAppLauncherThin(types as IMachoType);\n}\n"],"mappings":"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","ignoreList":[]}