{"type": "func", "start": 367336, "end": 367760, "name": "sub_59AE8", "pseudocode": "// \n// sub_59AE8 from 0x59ae8 to 0x59c90 (424 bytes)\n// \n// 1 xrefs:\n// > sub_597E0 @ 0x598b8\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_59AE8(__int64 *a1, char a2)\n{\n  __int64 result; // x0\n  int v4; // w8\n  int v5; // w10\n  int v6; // w9\n  int v8; // w23\n  __int64 v9; // x8\n  __int64 v10; // x20\n  __int64 v11; // x21\n  __int64 v12; // x22\n  int v13; // w8\n  int v14; // w8\n  __int64 v15; // x9\n  __int64 v16; // [xsp+8h] [xbp-58h] BYREF\n  _BYTE v17[32]; // [xsp+10h] [xbp-50h] BYREF\n  _BYTE v18[8]; // [xsp+38h] [xbp-28h] BYREF\n\n  if ( (a2 & 1) != 0 )\n  {\n    if ( (*((_BYTE *)a1 + 74) & 0x20) != 0 )\n      return 0;\n    result = (*(__int64 (__fastcall **)(__int64 *, _BYTE *))(*a1 + 168))(a1, v18);\n    if ( (_DWORD)result )\n      return result;\n    v4 = *((_DWORD *)a1 + 18);\n    if ( (v4 & 0x20000) != 0 || !v18[0] )\n      return 0;\n    v5 = *((_DWORD *)a1 + 138);\n    v6 = *(_DWORD *)(a1[1] + 1760);\n    if ( v5 )\n    {\n      if ( v5 != v6 && v5 + 1 != v6 )\n      {\n        result = sub_5C6C4();\n        if ( (_DWORD)result )\n          return result;\n        v8 = *((_DWORD *)a1 + 18);\n        *((_DWORD *)a1 + 138) = 0;\n        *((_DWORD *)a1 + 18) = v8 | 0x20000;\n        if ( v18[4] )\n          return 0;\n        v9 = a1[59];\n        if ( !v9 )\n          return 0;\n        v11 = *(_QWORD *)(v9 + 40);\n        v10 = *(_QWORD *)(v9 + 48);\n        result = sub_D7340(*(_QWORD *)(a1[1] + 1712), &v16, 0);\n        if ( (_DWORD)result )\n          return result;\n        v12 = a1[4];\n        sub_59CF0(a1, v17);\n        sub_59D94(a1, 4);\n        a1[59] = v16;\n        if ( v11 )\n        {\n          sub_59FEC(a1, v11, v12, 1, 0, 0);\n        }\n        else\n        {\n          if ( !v10 )\n          {\nLABEL_27:\n            if ( (v8 & 0x40000) == 0 )\n              return 0;\n            v14 = *((_DWORD *)a1 + 18) | 0x10000;\nLABEL_21:\n            *((_DWORD *)a1 + 18) = v14;\n            return 0;\n          }\n          sub_5A364(a1, v10, v12, 1, 0, 0);\n        }\n        sub_5A244(a1, v17);\n        v15 = *a1;\n        *((_DWORD *)a1 + 18) &= ~0x40000u;\n        (*(void (__fastcall **)(__int64 *, _QWORD))(v15 + 16))(a1, v17[28]);\n        goto LABEL_27;\n      }\n    }\n    else\n    {\n      *((_DWORD *)a1 + 138) = v6;\n    }\n    v14 = v4 | 0x1000000;\n    goto LABEL_21;\n  }\n  v13 = *((_DWORD *)a1 + 18);\n  result = 0;\n  *((_DWORD *)a1 + 138) = 0;\n  if ( (v13 & 0x20000) != 0 )\n  {\n    *((_DWORD *)a1 + 18) = v13 & 0xFFFDFFFF;\n    return 0;\n  }\n  return result;\n}", "assembly": "; \n; sub_59AE8 from 0x59ae8 to 0x59c90 (424 bytes)\n; \n; 1 xrefs:\n; > sub_597E0 @ 0x598b8\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nSUB             SP, SP, #0x70                                          ; +0x0, 0x59ae8\nSTP             X20, X19, [SP,#0x60+var_10]                            ; +0x4, 0x59aec\nMOV             X19, X0                                                ; +0x8, 0x59af0\nSTR             X23, [SP,#0x60+var_30]                                 ; +0xc, 0x59af4\nSTP             X22, X21, [SP,#0x60+var_20]                            ; +0x10, 0x59af8\nSTP             X29, X30, [SP,#0x60+var_s0]                            ; +0x14, 0x59afc\nADD             X29, SP, #0x60                                         ; +0x18, 0x59b00\nTBZ             W1, #0, loc_59BEC                                      ; +0x1c, 0x59b04\nLDRB            W8, [X19,#0x4A]                                        ; +0x20, 0x59b08\nTBNZ            W8, #5, loc_59C18                                      ; +0x24, 0x59b0c\nLDR             X8, [X19]                                              ; +0x28, 0x59b10\nSUB             X1, X29, #-var_28                                      ; +0x2c, 0x59b14\nMOV             X0, X19                                                ; +0x30, 0x59b18\nLDR             X8, [X8,#0xA8]                                         ; +0x34, 0x59b1c\nBLR             X8                                                     ; +0x38, 0x59b20\nCBNZ            W0, loc_59C1C                                          ; +0x3c, 0x59b24\nLDR             W8, [X19,#0x48]                                        ; +0x40, 0x59b28\nTBNZ            W8, #0x11, loc_59C18                                   ; +0x44, 0x59b2c\nLDURB           W9, [X29,#var_28]                                      ; +0x48, 0x59b30\nCBZ             W9, loc_59C18                                          ; +0x4c, 0x59b34\nLDR             X9, [X19,#8]                                           ; +0x50, 0x59b38\nLDR             W10, [X19,#0x228]                                      ; +0x54, 0x59b3c\nLDR             W9, [X9,#0x6E0]                                        ; +0x58, 0x59b40\nCBZ             W10, loc_59C0C                                         ; +0x5c, 0x59b44\nADD             W11, W10, #1                                           ; +0x60, 0x59b48\nCMP             W10, W9                                                ; +0x64, 0x59b4c\nCCMP            W11, W9, #4, NE                                        ; +0x68, 0x59b50\nB.EQ            loc_59C10                                              ; +0x6c, 0x59b54\nLDR             X8, [X19]                                              ; +0x70, 0x59b58\nSUB             X1, X29, #-var_24                                      ; +0x74, 0x59b5c\nBL              sub_5C6C4                                              ; +0x78, 0x59b60\nCBNZ            W0, loc_59C1C                                          ; +0x7c, 0x59b64\nLDR             W23, [X19,#0x48]                                       ; +0x80, 0x59b68\nSTR             WZR, [X19,#0x228]                                      ; +0x84, 0x59b6c\nORR             W8, W23, #0x20000                                      ; +0x88, 0x59b70\nSTR             W8, [X19,#0x48]                                        ; +0x8c, 0x59b74\nLDURB           W8, [X29,#var_24]                                      ; +0x90, 0x59b78\nCBNZ            W8, loc_59C18                                          ; +0x94, 0x59b7c\nLDR             X8, [X19,#0x1D8]                                       ; +0x98, 0x59b80\nCBZ             X8, loc_59C18                                          ; +0x9c, 0x59b84\nLDR             X9, [X19,#8]                                           ; +0xa0, 0x59b88\nLDP             X21, X20, [X8,#0x28]                                   ; +0xa4, 0x59b8c\nADD             X1, SP, #0x60+var_58                                   ; +0xa8, 0x59b90\nMOV             W2, WZR                                                ; +0xac, 0x59b94\nLDR             X0, [X9,#0x6B0]                                        ; +0xb0, 0x59b98\nBL              sub_D7340                                              ; +0xb4, 0x59b9c\nCBNZ            W0, loc_59C1C                                          ; +0xb8, 0x59ba0\nLDR             X22, [X19,#0x20]                                       ; +0xbc, 0x59ba4\nADD             X1, SP, #0x60+var_50                                   ; +0xc0, 0x59ba8\nMOV             X0, X19                                                ; +0xc4, 0x59bac\nBL              sub_59CF0                                              ; +0xc8, 0x59bb0\nMOV             W1, #4                                                 ; +0xcc, 0x59bb4\nMOV             X0, X19                                                ; +0xd0, 0x59bb8\nBL              sub_59D94                                              ; +0xd4, 0x59bbc\nLDR             X8, [SP,#0x60+var_58]                                  ; +0xd8, 0x59bc0\nSTR             X8, [X19,#0x1D8]                                       ; +0xdc, 0x59bc4\nCBZ             X21, loc_59C34                                         ; +0xe0, 0x59bc8\nMOV             W3, #1                                                 ; +0xe4, 0x59bcc\nMOV             X0, X19                                                ; +0xe8, 0x59bd0\nMOV             X1, X21                                                ; +0xec, 0x59bd4\nMOV             X2, X22                                                ; +0xf0, 0x59bd8\nMOV             W4, WZR                                                ; +0xf4, 0x59bdc\nMOV             W5, WZR                                                ; +0xf8, 0x59be0\nBL              sub_59FEC                                              ; +0xfc, 0x59be4\nB               loc_59C54                                              ; +0x100, 0x59be8\nLDR             W8, [X19,#0x48]                                        ; +0x104, 0x59bec\nMOV             W0, WZR                                                ; +0x108, 0x59bf0\nSTR             WZR, [X19,#0x228]                                      ; +0x10c, 0x59bf4\nTBZ             W8, #0x11, loc_59C1C                                   ; +0x110, 0x59bf8\nMOV             W0, WZR                                                ; +0x114, 0x59bfc\nAND             W8, W8, #0xFFFDFFFF                                    ; +0x118, 0x59c00\nSTR             W8, [X19,#0x48]                                        ; +0x11c, 0x59c04\nB               loc_59C1C                                              ; +0x120, 0x59c08\nSTR             W9, [X19,#0x228]                                       ; +0x124, 0x59c0c\nORR             W8, W8, #0x1000000                                     ; +0x128, 0x59c10\nSTR             W8, [X19,#0x48]                                        ; +0x12c, 0x59c14\nMOV             W0, WZR                                                ; +0x130, 0x59c18\nLDP             X29, X30, [SP,#0x60+var_s0]                            ; +0x134, 0x59c1c\nLDP             X20, X19, [SP,#0x60+var_10]                            ; +0x138, 0x59c20\nLDP             X22, X21, [SP,#0x60+var_20]                            ; +0x13c, 0x59c24\nLDR             X23, [SP,#0x60+var_30]                                 ; +0x140, 0x59c28\nADD             SP, SP, #0x70 ; 'p'                                    ; +0x144, 0x59c2c\nRET                                                                    ; +0x148, 0x59c30\nCBZ             X20, loc_59C80                                         ; +0x14c, 0x59c34\nMOV             W3, #1                                                 ; +0x150, 0x59c38\nMOV             X0, X19                                                ; +0x154, 0x59c3c\nMOV             X1, X20                                                ; +0x158, 0x59c40\nMOV             X2, X22                                                ; +0x15c, 0x59c44\nMOV             W4, WZR                                                ; +0x160, 0x59c48\nMOV             W5, WZR                                                ; +0x164, 0x59c4c\nBL              sub_5A364                                              ; +0x168, 0x59c50\nADD             X1, SP, #0x60+var_50                                   ; +0x16c, 0x59c54\nMOV             X0, X19                                                ; +0x170, 0x59c58\nBL              sub_5A244                                              ; +0x174, 0x59c5c\nLDR             W8, [X19,#0x48]                                        ; +0x178, 0x59c60\nLDR             X9, [X19]                                              ; +0x17c, 0x59c64\nMOV             X0, X19                                                ; +0x180, 0x59c68\nAND             W8, W8, #0xFFFBFFFF                                    ; +0x184, 0x59c6c\nSTR             W8, [X19,#0x48]                                        ; +0x188, 0x59c70\nLDRB            W1, [SP,#0x60+var_34]                                  ; +0x18c, 0x59c74\nLDR             X8, [X9,#0x10]                                         ; +0x190, 0x59c78\nBLR             X8                                                     ; +0x194, 0x59c7c\nTBZ             W23, #0x12, loc_59C18                                  ; +0x198, 0x59c80\nLDR             W8, [X19,#0x48]                                        ; +0x19c, 0x59c84\nORR             W8, W8, #0x10000                                       ; +0x1a0, 0x59c88\nB               loc_59C14                                              ; +0x1a4, 0x59c8c", "xrefs": ["sub_597E0 @ 0x598b8"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}