{"type": "func", "start": 338392, "end": 339084, "name": "sub_529D8", "pseudocode": "// \n// sub_529D8 from 0x529d8 to 0x52c8c (692 bytes)\n// \n// 1 xrefs:\n// > <???> @ 0x10c230\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_529D8(__int64 a1)\n{\n  __int64 v2; // x20\n  __int64 result; // x0\n  char v4; // w8\n  unsigned int *v5; // x8\n  unsigned int v6; // w9\n  __int64 v7; // x0\n  __int64 v8; // x0\n  __int64 v9; // x1\n  __int64 v10; // x1\n  __int64 v11; // x8\n  __int64 v12; // x0\n  __int64 v13; // x0\n  __int64 v14; // x1\n  __int64 v15; // x1\n  __int64 v16; // x1\n  unsigned int v17; // w20\n  __int64 v18; // [xsp+8h] [xbp-28h] BYREF\n  __int64 v19; // [xsp+18h] [xbp-18h] BYREF\n\n  v2 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 104LL);\n  result = ((__int64 (*)(void))loc_524E4)();\n  if ( (_DWORD)result )\n    return result;\n  if ( (*(_BYTE *)(a1 + 57) & 2) != 0 )\n  {\n    if ( !*(_QWORD *)(a1 + 752) || (result = ((__int64 (*)(void))sub_53D58)(), !(_DWORD)result) )\n    {\n      if ( !*(_QWORD *)(a1 + 760) || (result = ((__int64 (*)(void))sub_53D58)(), !(_DWORD)result) )\n      {\n        if ( !*(_QWORD *)(a1 + 664) || (result = sub_53D58(a1 + 112), !(_DWORD)result) )\n        {\n          result = sub_77B68(\n                     *(_QWORD *)(a1 + 8),\n                     *(unsigned int *)(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 96LL) + 164LL),\n                     &v19);\n          if ( !(_DWORD)result )\n          {\n            result = sub_A7BD0(v19, &v18);\n            if ( !(_DWORD)result )\n            {\n              v13 = v18;\n              v14 = *(_QWORD *)(a1 + 40);\n              *(_QWORD *)(a1 + 744) = v18;\n              result = (*(__int64 (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)v13 + 32LL))(v13, v14, a1);\n              if ( !(_DWORD)result )\n              {\n                if ( *(float *)(a1 + 104) < 100.0 )\n                  *(_DWORD *)(a1 + 104) = 1120403456;\n                if ( *(_QWORD *)(a1 + 752) )\n                {\n                  result = sub_53D88(v2);\n                  if ( (_DWORD)result )\n                    return result;\n                  v15 = *(_QWORD *)(a1 + 760);\n                  if ( v15 )\n                  {\n                    *(_QWORD *)(v15 + 512) = *(_QWORD *)(a1 + 24);\n                    result = sub_CB148(*(_QWORD *)(a1 + 752), v15, 0, 0, 0, 0);\n                    if ( (_DWORD)result )\n                      return result;\n                    v16 = *(_QWORD *)(a1 + 744);\n                    *(_QWORD *)(v16 + 512) = *(_QWORD *)(a1 + 24);\n                    v12 = *(_QWORD *)(a1 + 760);\n                  }\n                  else\n                  {\n                    v16 = *(_QWORD *)(a1 + 744);\n                    *(_QWORD *)(v16 + 512) = *(_QWORD *)(a1 + 24);\n                    v12 = *(_QWORD *)(a1 + 752);\n                  }\n                }\n                else\n                {\n                  v16 = *(_QWORD *)(a1 + 744);\n                  v12 = v2;\n                  *(_QWORD *)(v16 + 512) = *(_QWORD *)(a1 + 24);\n                }\nLABEL_42:\n                result = sub_53DFC(v12, v16, 0, 0);\n                if ( (_DWORD)result )\n                  return result;\n                if ( (*(_BYTE *)(a1 + 62) & 1) == 0 )\n                {\n                  result = sub_53DAC();\n                  if ( (_DWORD)result )\n                    return result;\n                  v17 = 0;\n                  while ( v17 != 4 )\n                  {\n                    result = sub_52C8C(a1, *(_QWORD *)(a1 + 768), v17++);\n                    if ( (_DWORD)result )\n                      return result;\n                  }\n                }\n                return sub_53DDC();\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  else\n  {\n    v4 = *(_BYTE *)(a1 + 62);\n    *(_QWORD *)(a1 + 744) = 0;\n    if ( (v4 & 1) != 0 )\n    {\n      v5 = (unsigned int *)(a1 + 212);\n      do\n        v6 = __ldaxr(v5);\n      while ( __stlxr(v6 | 0x100, v5) );\n    }\n    v7 = *(_QWORD *)(a1 + 752);\n    if ( !v7 || (result = sub_53D58(v7), !(_DWORD)result) )\n    {\n      v8 = *(_QWORD *)(a1 + 760);\n      if ( !v8 || (result = sub_53D58(v8), !(_DWORD)result) )\n      {\n        result = sub_53D68(a1 + 112);\n        if ( !(_DWORD)result )\n        {\n          result = (*(__int64 (__fastcall **)(__int64, _QWORD, _QWORD))(*(_QWORD *)a1 + 144LL))(\n                     a1,\n                     *(unsigned int *)(*(_QWORD *)(a1 + 40) + 76LL),\n                     *(unsigned int *)(*(_QWORD *)(a1 + 40) + 80LL));\n          if ( !(_DWORD)result )\n          {\n            v9 = *(_QWORD *)(a1 + 40);\n            *(float *)(a1 + 104) = -*(float *)(a1 + 100);\n            sub_85D08(a1 + 112, v9, a1);\n            if ( *(_QWORD *)(a1 + 752) )\n              sub_53D7C();\n            if ( *(_QWORD *)(a1 + 760) )\n              sub_53D7C();\n            if ( *(_QWORD *)(a1 + 752) )\n            {\n              result = sub_53D88(v2);\n              if ( (_DWORD)result )\n                return result;\n              v10 = *(_QWORD *)(a1 + 760);\n              v11 = *(_QWORD *)(a1 + 24);\n              if ( v10 )\n              {\n                *(_QWORD *)(v10 + 512) = v11;\n                result = sub_53DFC(*(_QWORD *)(a1 + 752), v10, 0, 0);\n                if ( (_DWORD)result )\n                  return result;\n                v11 = *(_QWORD *)(a1 + 24);\n                v12 = *(_QWORD *)(a1 + 760);\n              }\n              else\n              {\n                v12 = *(_QWORD *)(a1 + 752);\n              }\n              *(_QWORD *)(a1 + 624) = v11;\n            }\n            else\n            {\n              *(_QWORD *)(a1 + 624) = *(_QWORD *)(a1 + 24);\n              v12 = v2;\n            }\n            v16 = a1 + 112;\n            goto LABEL_42;\n          }\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_529D8 from 0x529d8 to 0x52c8c (692 bytes)\n; \n; 1 xrefs:\n; > <???> @ 0x10c230\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, #0x40                                          ; +0x0, 0x529d8\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x4, 0x529dc\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0x8, 0x529e0\nLDR             X8, [X0,#0x18]                                         ; +0xc, 0x529e4\nSTR             X21, [SP,#0x30+var_20]                                 ; +0x10, 0x529e8\nADD             X29, SP, #0x30                                         ; +0x14, 0x529ec\nMOV             X19, X0                                                ; +0x18, 0x529f0\nLDR             X20, [X8,#0x68]                                        ; +0x1c, 0x529f4\nBL              loc_524E4                                              ; +0x20, 0x529f8\nCBZ             W0, loc_52A14                                          ; +0x24, 0x529fc\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x28, 0x52a00\nLDP             X20, X19, [SP,#0x30+var_10]                            ; +0x2c, 0x52a04\nLDR             X21, [SP,#0x30+var_20]                                 ; +0x30, 0x52a08\nADD             SP, SP, #0x40 ; '@'                                    ; +0x34, 0x52a0c\nRET                                                                    ; +0x38, 0x52a10\nLDRB            W8, [X19,#0x39]                                        ; +0x3c, 0x52a14\nTBNZ            W8, #1, loc_52B08                                      ; +0x40, 0x52a18\nLDRB            W8, [X19,#0x3E]                                        ; +0x44, 0x52a1c\nSTR             XZR, [X19,#0x2E8]                                      ; +0x48, 0x52a20\nTBZ             W8, #0, loc_52A3C                                      ; +0x4c, 0x52a24\nADD             X8, X19, #0xD4                                         ; +0x50, 0x52a28\nLDAXR           W9, [X8]                                               ; +0x54, 0x52a2c\nORR             W9, W9, #0x100                                         ; +0x58, 0x52a30\nSTLXR           W10, W9, [X8]                                          ; +0x5c, 0x52a34\nCBNZ            W10, loc_52A2C                                         ; +0x60, 0x52a38\nLDR             X0, [X19,#0x2F0]                                       ; +0x64, 0x52a3c\nCBZ             X0, loc_52A4C                                          ; +0x68, 0x52a40\nBL              sub_53D58                                              ; +0x6c, 0x52a44\nCBNZ            W0, loc_52A00                                          ; +0x70, 0x52a48\nLDR             X0, [X19,#0x2F8]                                       ; +0x74, 0x52a4c\nCBZ             X0, loc_52A5C                                          ; +0x78, 0x52a50\nBL              sub_53D58                                              ; +0x7c, 0x52a54\nCBNZ            W0, loc_52A00                                          ; +0x80, 0x52a58\nADD             X21, X19, #0x70 ; 'p'                                  ; +0x84, 0x52a5c\nMOV             W3, #4                                                 ; +0x88, 0x52a60\nMOV             X0, X21                                                ; +0x8c, 0x52a64\nBL              sub_53D68                                              ; +0x90, 0x52a68\nCBNZ            W0, loc_52A00                                          ; +0x94, 0x52a6c\nLDR             X8, [X19,#0x28]                                        ; +0x98, 0x52a70\nLDR             X9, [X19]                                              ; +0x9c, 0x52a74\nMOV             X0, X19                                                ; +0xa0, 0x52a78\nLDP             W1, W2, [X8,#0x4C]                                     ; +0xa4, 0x52a7c\nLDR             X8, [X9,#0x90]                                         ; +0xa8, 0x52a80\nBLR             X8                                                     ; +0xac, 0x52a84\nCBNZ            W0, loc_52A00                                          ; +0xb0, 0x52a88\nLDR             S0, [X19,#0x64]                                        ; +0xb4, 0x52a8c\nLDR             X1, [X19,#0x28]                                        ; +0xb8, 0x52a90\nMOV             X0, X21                                                ; +0xbc, 0x52a94\nMOV             X2, X19                                                ; +0xc0, 0x52a98\nFNEG            S0, S0                                                 ; +0xc4, 0x52a9c\nSTR             S0, [X19,#0x68]                                        ; +0xc8, 0x52aa0\nBL              sub_85D08                                              ; +0xcc, 0x52aa4\nLDR             X0, [X19,#0x2F0]                                       ; +0xd0, 0x52aa8\nCBZ             X0, loc_52AB4                                          ; +0xd4, 0x52aac\nBL              sub_53D7C                                              ; +0xd8, 0x52ab0\nLDR             X0, [X19,#0x2F8]                                       ; +0xdc, 0x52ab4\nCBZ             X0, loc_52AC0                                          ; +0xe0, 0x52ab8\nBL              sub_53D7C                                              ; +0xe4, 0x52abc\nLDR             X1, [X19,#0x2F0]                                       ; +0xe8, 0x52ac0\nLDR             X8, [X19,#0x18]                                        ; +0xec, 0x52ac4\nCBZ             X1, loc_52BFC                                          ; +0xf0, 0x52ac8\nMOV             X0, X20                                                ; +0xf4, 0x52acc\nBL              sub_53D88                                              ; +0xf8, 0x52ad0\nCBNZ            W0, loc_52A00                                          ; +0xfc, 0x52ad4\nLDR             X1, [X19,#0x2F8]                                       ; +0x100, 0x52ad8\nLDR             X8, [X19,#0x18]                                        ; +0x104, 0x52adc\nCBZ             X1, loc_52C08                                          ; +0x108, 0x52ae0\nSTR             X8, [X1,#0x200]                                        ; +0x10c, 0x52ae4\nLDR             X0, [X19,#0x2F0]                                       ; +0x110, 0x52ae8\nMOV             X2, XZR                                                ; +0x114, 0x52aec\nMOV             W3, WZR                                                ; +0x118, 0x52af0\nBL              sub_53DFC                                              ; +0x11c, 0x52af4\nCBNZ            W0, loc_52A00                                          ; +0x120, 0x52af8\nLDR             X8, [X19,#0x18]                                        ; +0x124, 0x52afc\nLDR             X0, [X19,#0x2F8]                                       ; +0x128, 0x52b00\nB               loc_52C0C                                              ; +0x12c, 0x52b04\nLDR             X0, [X19,#0x2F0]                                       ; +0x130, 0x52b08\nCBZ             X0, loc_52B18                                          ; +0x134, 0x52b0c\nBL              sub_53D58                                              ; +0x138, 0x52b10\nCBNZ            W0, loc_52A00                                          ; +0x13c, 0x52b14\nLDR             X0, [X19,#0x2F8]                                       ; +0x140, 0x52b18\nCBZ             X0, loc_52B28                                          ; +0x144, 0x52b1c\nBL              sub_53D58                                              ; +0x148, 0x52b20\nCBNZ            W0, loc_52A00                                          ; +0x14c, 0x52b24\nLDR             X8, [X19,#0x298]                                       ; +0x150, 0x52b28\nCBZ             X8, loc_52B3C                                          ; +0x154, 0x52b2c\nADD             X0, X19, #0x70 ; 'p'                                   ; +0x158, 0x52b30\nBL              sub_53D58                                              ; +0x15c, 0x52b34\nCBNZ            W0, loc_52A00                                          ; +0x160, 0x52b38\nLDR             X8, [X19,#0x28]                                        ; +0x164, 0x52b3c\nLDR             X0, [X19,#8]                                           ; +0x168, 0x52b40\nADD             X2, SP, #0x30+var_18                                   ; +0x16c, 0x52b44\nLDR             X8, [X8,#0x60]                                         ; +0x170, 0x52b48\nLDR             W1, [X8,#0xA4]                                         ; +0x174, 0x52b4c\nBL              sub_77B68                                              ; +0x178, 0x52b50\nCBNZ            W0, loc_52A00                                          ; +0x17c, 0x52b54\nLDR             X0, [SP,#0x30+var_18]                                  ; +0x180, 0x52b58\nADD             X1, SP, #0x30+var_28                                   ; +0x184, 0x52b5c\nBL              sub_A7BD0                                              ; +0x188, 0x52b60\nCBNZ            W0, loc_52A00                                          ; +0x18c, 0x52b64\nLDR             X0, [SP,#0x30+var_28]                                  ; +0x190, 0x52b68\nLDR             X1, [X19,#0x28]                                        ; +0x194, 0x52b6c\nMOV             X2, X19                                                ; +0x198, 0x52b70\nSTR             X0, [X19,#0x2E8]                                       ; +0x19c, 0x52b74\nLDR             X8, [X0]                                               ; +0x1a0, 0x52b78\nLDR             X8, [X8,#0x20]                                         ; +0x1a4, 0x52b7c\nBLR             X8                                                     ; +0x1a8, 0x52b80\nCBNZ            W0, loc_52A00                                          ; +0x1ac, 0x52b84\nADRP            X8, #off_10F7D0@PAGE                                   ; +0x1b0, 0x52b88\nLDR             S1, [X19,#0x68]                                        ; +0x1b4, 0x52b8c\nLDR             X8, [X8,#off_10F7D0@PAGEOFF]; dword_2EED8              ; +0x1b8, 0x52b90\nLDR             S0, [X8]                                               ; +0x1bc, 0x52b94\nFCMP            S1, S0                                                 ; +0x1c0, 0x52b98\nB.GE            loc_52BA4                                              ; +0x1c4, 0x52b9c\nSTR             S0, [X19,#0x68]                                        ; +0x1c8, 0x52ba0\nLDR             X1, [X19,#0x2F0]                                       ; +0x1cc, 0x52ba4\nCBZ             X1, loc_52C64                                          ; +0x1d0, 0x52ba8\nLDR             X8, [X19,#0x18]                                        ; +0x1d4, 0x52bac\nMOV             X0, X20                                                ; +0x1d8, 0x52bb0\nBL              sub_53D88                                              ; +0x1dc, 0x52bb4\nCBNZ            W0, loc_52A00                                          ; +0x1e0, 0x52bb8\nLDR             X1, [X19,#0x2F8]                                       ; +0x1e4, 0x52bbc\nCBZ             X1, loc_52C78                                          ; +0x1e8, 0x52bc0\nLDR             X8, [X19,#0x18]                                        ; +0x1ec, 0x52bc4\nMOV             X2, XZR                                                ; +0x1f0, 0x52bc8\nMOV             W3, WZR                                                ; +0x1f4, 0x52bcc\nMOV             W4, WZR                                                ; +0x1f8, 0x52bd0\nSTR             X8, [X1,#0x200]                                        ; +0x1fc, 0x52bd4\nLDR             X0, [X19,#0x2F0]                                       ; +0x200, 0x52bd8\nMOV             X5, XZR                                                ; +0x204, 0x52bdc\nBL              sub_CB148                                              ; +0x208, 0x52be0\nCBNZ            W0, loc_52A00                                          ; +0x20c, 0x52be4\nLDR             X1, [X19,#0x2E8]                                       ; +0x210, 0x52be8\nLDR             X8, [X19,#0x18]                                        ; +0x214, 0x52bec\nSTR             X8, [X1,#0x200]                                        ; +0x218, 0x52bf0\nLDR             X0, [X19,#0x2F8]                                       ; +0x21c, 0x52bf4\nB               loc_52C14                                              ; +0x220, 0x52bf8\nSTR             X8, [X19,#0x270]                                       ; +0x224, 0x52bfc\nMOV             X0, X20                                                ; +0x228, 0x52c00\nB               loc_52C10                                              ; +0x22c, 0x52c04\nLDR             X0, [X19,#0x2F0]                                       ; +0x230, 0x52c08\nSTR             X8, [X19,#0x270]                                       ; +0x234, 0x52c0c\nMOV             X1, X21                                                ; +0x238, 0x52c10\nMOV             X2, XZR                                                ; +0x23c, 0x52c14\nMOV             W3, WZR                                                ; +0x240, 0x52c18\nBL              sub_53DFC                                              ; +0x244, 0x52c1c\nCBNZ            W0, loc_52A00                                          ; +0x248, 0x52c20\nLDRB            W8, [X19,#0x3E]                                        ; +0x24c, 0x52c24\nTBNZ            W8, #0, loc_52C5C                                      ; +0x250, 0x52c28\nBL              sub_53DAC                                              ; +0x254, 0x52c2c\nCBNZ            W0, loc_52A00                                          ; +0x258, 0x52c30\nMOV             W20, WZR                                               ; +0x25c, 0x52c34\nCMP             W20, #4                                                ; +0x260, 0x52c38\nB.EQ            loc_52C5C                                              ; +0x264, 0x52c3c\nLDR             X1, [X19,#0x300]                                       ; +0x268, 0x52c40\nMOV             X0, X19                                                ; +0x26c, 0x52c44\nMOV             W2, W20                                                ; +0x270, 0x52c48\nBL              sub_52C8C                                              ; +0x274, 0x52c4c\nADD             W20, W20, #1                                           ; +0x278, 0x52c50\nCBZ             W0, loc_52C38                                          ; +0x27c, 0x52c54\nB               loc_52A00                                              ; +0x280, 0x52c58\nBL              sub_53DDC                                              ; +0x284, 0x52c5c\nB               loc_52A00                                              ; +0x288, 0x52c60\nLDR             X1, [X19,#0x2E8]                                       ; +0x28c, 0x52c64\nLDR             X8, [X19,#0x18]                                        ; +0x290, 0x52c68\nMOV             X0, X20                                                ; +0x294, 0x52c6c\nSTR             X8, [X1,#0x200]                                        ; +0x298, 0x52c70\nB               loc_52C14                                              ; +0x29c, 0x52c74\nLDR             X1, [X19,#0x2E8]                                       ; +0x2a0, 0x52c78\nLDR             X8, [X19,#0x18]                                        ; +0x2a4, 0x52c7c\nSTR             X8, [X1,#0x200]                                        ; +0x2a8, 0x52c80\nLDR             X0, [X19,#0x2F0]                                       ; +0x2ac, 0x52c84\nB               loc_52C14                                              ; +0x2b0, 0x52c88", "xrefs": ["<???> @ 0x10c230"], "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"}