{"type": "func", "start": 371992, "end": 372524, "name": "sub_5AD18", "pseudocode": "// \n// sub_5AD18 from 0x5ad18 to 0x5af2c (532 bytes)\n// \n// 1 xrefs:\n// > sub_59FEC @ 0x5a0a4\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_5AD18(__int64 a1, __int64 a2, char a3)\n{\n  __int64 v6; // x10\n  __int64 v7; // x9\n  unsigned int v13; // w11\n  __int64 v14; // x11\n  __int64 v15; // x9\n  __int64 v16; // x8\n  unsigned int *v17; // x22\n  int v18; // w9\n  unsigned int v19; // w8\n  __int64 result; // x0\n  unsigned int *v21; // x8\n  unsigned int v22; // w9\n  unsigned int v23; // w8\n  __int64 v24; // x8\n  unsigned int *v25; // x8\n  unsigned int v26; // w9\n  __int64 v27; // [xsp+8h] [xbp-28h] BYREF\n\n  if ( (a3 & 1) != 0 )\n  {\n    v6 = *(_QWORD *)(a1 + 472);\n    *(_QWORD *)(a1 + 496) = 0;\n    *(_DWORD *)(a1 + 24) = 1;\n    *(_QWORD *)(a1 + 16) = 0;\n    *(_QWORD *)(a1 + 40) = 0;\n    v7 = *(_QWORD *)(a1 + 8);\n    if ( (*(_BYTE *)(v6 + 62) & 1) == 0 )\n      *(_DWORD *)(a1 + 548) = *(_DWORD *)(v7 + 70460);\n    __asm { FMOV            V0.2S, #1.0 }\n    v13 = *(_DWORD *)(a1 + 72) & 0xFEEDFFD8;\n    *(_DWORD *)(a1 + 552) = 0;\n    *(_DWORD *)(a1 + 192) = 0;\n    *(_DWORD *)(a1 + 544) = 1065353216;\n    *(_DWORD *)(a1 + 52) = 1065353216;\n    *(_DWORD *)(a1 + 164) = 1065353216;\n    *(_QWORD *)(a1 + 120) = _D0;\n    *(_DWORD *)(a1 + 72) = v13;\n    v14 = *(_QWORD *)(a2 + 120);\n    *(_DWORD *)(a1 + 152) = 0;\n    *(_QWORD *)(a1 + 156) = v14;\n    *(_QWORD *)(a1 + 168) = *(_QWORD *)(a2 + 128);\n    LODWORD(v14) = *(_DWORD *)(a2 + 136);\n    *(_DWORD *)(a1 + 184) = 0;\n    *(_DWORD *)(a1 + 188) = 1065353216;\n    *(_DWORD *)(a1 + 176) = v14;\n    *(_DWORD *)(a1 + 180) = 0;\n    *(_QWORD *)(a1 + 224) = *(_QWORD *)(a2 + 144);\n    LODWORD(v14) = *(_DWORD *)(a2 + 152);\n    *(_QWORD *)(a1 + 240) = _D0;\n    *(_DWORD *)(a1 + 256) = 0;\n    *(_DWORD *)(a1 + 248) = 0;\n    *(_DWORD *)(a1 + 232) = v14;\n    *(_DWORD *)(a1 + 252) = *(_DWORD *)(v7 + 69712);\n    *(_QWORD *)(a1 + 88) = 1065353216;\n    if ( v7 )\n    {\n      v15 = 0;\n      while ( v15 != 4 )\n        sub_5C6F0();\n    }\n    *(_QWORD *)(a1 + 296) = 0;\n    *(_QWORD *)(a1 + 304) = 0;\n    *(_BYTE *)(a1 + 312) = 0;\n  }\n  v16 = *(_QWORD *)(a1 + 472);\n  if ( !v16 )\n    return 30;\n  *(_QWORD *)(v16 + 40) = a2;\n  *(_QWORD *)(v16 + 48) = 0;\n  v17 = (unsigned int *)(a2 + 88);\n  *(_DWORD *)(v16 + 56) = *(_DWORD *)(a2 + 44);\n  *(_QWORD *)(v16 + 88) = *(_QWORD *)(a2 + 76);\n  *(_DWORD *)(v16 + 84) = *(_DWORD *)(a2 + 84);\n  v18 = *(_DWORD *)(a2 + 68);\n  *(_QWORD *)(v16 + 24) = a1;\n  *(_DWORD *)(v16 + 96) = v18;\n  do\n    v19 = __ldaxr(v17);\n  while ( __stlxr(v19 & 0xFFFFF7FF, v17) );\n  result = sub_5C500(*(_QWORD *)(a1 + 96));\n  if ( !(_DWORD)result )\n  {\n    if ( (a3 & 1) == 0 )\n      goto LABEL_21;\n    if ( (*(_BYTE *)(*(_QWORD *)(a1 + 472) + 62LL) & 1) != 0 )\n    {\n      v21 = (unsigned int *)(*(_QWORD *)(a1 + 96) + 100LL);\n      do\n        v22 = __ldaxr(v21);\n      while ( __stlxr(v22 | 0x100, v21) );\n    }\n    result = sub_5C638();\n    if ( !(_DWORD)result )\n    {\n      result = sub_AFE50(*(_QWORD *)(a1 + 112));\n      if ( !(_DWORD)result )\n      {\n        result = sub_5C50C(*(_QWORD *)(a1 + 32), 4294967293LL, &v27);\n        if ( !(_DWORD)result )\n        {\n          result = sub_5C538(v27, *(_QWORD *)(a1 + 96));\n          if ( !(_DWORD)result )\n          {\nLABEL_21:\n            result = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(a1 + 472) + 40LL))(*(_QWORD *)(a1 + 472));\n            if ( !(_DWORD)result )\n            {\n              do\n                v23 = __ldaxr(v17);\n              while ( __stlxr(v23 | 4, v17) );\n              v24 = *(_QWORD *)(a2 + 184);\n              if ( v24 )\n              {\n                v25 = (unsigned int *)(v24 + 88);\n                result = 0;\n                do\n                  v26 = __ldaxr(v25);\n                while ( __stlxr(v26 | 4, v25) );\n              }\n              else\n              {\n                return 0;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_5AD18 from 0x5ad18 to 0x5af2c (532 bytes)\n; \n; 1 xrefs:\n; > sub_59FEC @ 0x5a0a4\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, 0x5ad18\nSTP             X22, X21, [SP,#0x30+var_20]                            ; +0x4, 0x5ad1c\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x8, 0x5ad20\nMOV             W21, W2                                                ; +0xc, 0x5ad24\nMOV             X19, X1                                                ; +0x10, 0x5ad28\nMOV             X20, X0                                                ; +0x14, 0x5ad2c\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0x18, 0x5ad30\nADD             X29, SP, #0x30                                         ; +0x1c, 0x5ad34\nTBZ             W2, #0, loc_5AE1C                                      ; +0x20, 0x5ad38\nLDR             X10, [X20,#0x1D8]                                      ; +0x24, 0x5ad3c\nMOV             W8, #1                                                 ; +0x28, 0x5ad40\nSTR             XZR, [X20,#0x1F0]                                      ; +0x2c, 0x5ad44\nSTR             W8, [X20,#0x18]                                        ; +0x30, 0x5ad48\nSTR             XZR, [X20,#0x10]                                       ; +0x34, 0x5ad4c\nSTR             XZR, [X20,#0x28]                                       ; +0x38, 0x5ad50\nLDR             X9, [X20,#8]                                           ; +0x3c, 0x5ad54\nLDRB            W8, [X10,#0x3E]                                        ; +0x40, 0x5ad58\nMOV             W10, #0x11050                                          ; +0x44, 0x5ad5c\nADD             X10, X9, X10                                           ; +0x4c, 0x5ad64\nTBNZ            W8, #0, loc_5AD74                                      ; +0x50, 0x5ad68\nLDR             W8, [X10,#0x2EC]                                       ; +0x54, 0x5ad6c\nSTR             W8, [X20,#0x224]                                       ; +0x58, 0x5ad70\nLDR             W11, [X20,#0x48]                                       ; +0x5c, 0x5ad74\nMOV             W12, #0xFEEDFFD8                                       ; +0x60, 0x5ad78\nMOV             W8, #0x3F800000                                        ; +0x68, 0x5ad80\nFMOV            V0.2S, #1.0                                            ; +0x6c, 0x5ad84\nAND             W11, W11, W12                                          ; +0x70, 0x5ad88\nSTR             WZR, [X20,#0x228]                                      ; +0x74, 0x5ad8c\nSTR             WZR, [X20,#0xC0]                                       ; +0x78, 0x5ad90\nSTR             W8, [X20,#0x220]                                       ; +0x7c, 0x5ad94\nSTR             W8, [X20,#0x34]                                        ; +0x80, 0x5ad98\nSTR             W8, [X20,#0xA4]                                        ; +0x84, 0x5ad9c\nSTR             D0, [X20,#0x78]                                        ; +0x88, 0x5ada0\nSTR             W11, [X20,#0x48]                                       ; +0x8c, 0x5ada4\nLDR             X11, [X19,#0x78]                                       ; +0x90, 0x5ada8\nSTR             WZR, [X20,#0x98]                                       ; +0x94, 0x5adac\nADRP            X12, #qword_2EB58@PAGE                                 ; +0x98, 0x5adb0\nSTUR            X11, [X20,#0x9C]                                       ; +0x9c, 0x5adb4\nLDR             X11, [X19,#0x80]                                       ; +0xa0, 0x5adb8\nSTR             X11, [X20,#0xA8]                                       ; +0xa4, 0x5adbc\nLDR             W11, [X19,#0x88]                                       ; +0xa8, 0x5adc0\nSTP             WZR, W8, [X20,#0xB8]                                   ; +0xac, 0x5adc4\nSTP             W11, WZR, [X20,#0xB0]                                  ; +0xb0, 0x5adc8\nLDR             X11, [X19,#0x90]                                       ; +0xb4, 0x5adcc\nSTR             X11, [X20,#0xE0]                                       ; +0xb8, 0x5add0\nLDR             W11, [X19,#0x98]                                       ; +0xbc, 0x5add4\nSTR             D0, [X20,#0xF0]                                        ; +0xc0, 0x5add8\nSTR             WZR, [X20,#0x100]                                      ; +0xc4, 0x5addc\nSTR             WZR, [X20,#0xF8]                                       ; +0xc8, 0x5ade0\nSTR             W11, [X20,#0xE8]                                       ; +0xcc, 0x5ade4\nLDR             W10, [X10]                                             ; +0xd0, 0x5ade8\nLDR             D0, [X12,#qword_2EB58@PAGEOFF]                         ; +0xd4, 0x5adec\nSTR             W10, [X20,#0xFC]                                       ; +0xd8, 0x5adf0\nSTR             D0, [X20,#0x58]                                        ; +0xdc, 0x5adf4\nCBZ             X9, loc_5AE14                                          ; +0xe0, 0x5adf8\nMOV             X9, XZR                                                ; +0xe4, 0x5adfc\nADD             X10, X20, #0x13C                                       ; +0xe8, 0x5ae00\nCMP             X9, #4                                                 ; +0xec, 0x5ae04\nB.EQ            loc_5AE14                                              ; +0xf0, 0x5ae08\nBL              sub_5C6F0                                              ; +0xf4, 0x5ae0c\nB               loc_5AE04                                              ; +0xf8, 0x5ae10\nSTP             XZR, XZR, [X20,#0x128]                                 ; +0xfc, 0x5ae14\nSTRB            WZR, [X20,#0x138]                                      ; +0x100, 0x5ae18\nLDR             X8, [X20,#0x1D8]                                       ; +0x104, 0x5ae1c\nCBZ             X8, loc_5AF18                                          ; +0x108, 0x5ae20\nSTP             X19, XZR, [X8,#0x28]                                   ; +0x10c, 0x5ae24\nLDR             W9, [X19,#0x2C]                                        ; +0x110, 0x5ae28\nADD             X22, X19, #0x58 ; 'X'                                  ; +0x114, 0x5ae2c\nSTR             W9, [X8,#0x38]                                         ; +0x118, 0x5ae30\nLDUR            X9, [X19,#0x4C]                                        ; +0x11c, 0x5ae34\nSTR             X9, [X8,#0x58]                                         ; +0x120, 0x5ae38\nLDR             W9, [X19,#0x54]                                        ; +0x124, 0x5ae3c\nSTR             W9, [X8,#0x54]                                         ; +0x128, 0x5ae40\nLDR             W9, [X19,#0x44]                                        ; +0x12c, 0x5ae44\nSTR             X20, [X8,#0x18]                                        ; +0x130, 0x5ae48\nSTR             W9, [X8,#0x60]                                         ; +0x134, 0x5ae4c\nLDAXR           W8, [X22]                                              ; +0x138, 0x5ae50\nAND             W8, W8, #0xFFFFF7FF                                    ; +0x13c, 0x5ae54\nSTLXR           W9, W8, [X22]                                          ; +0x140, 0x5ae58\nCBNZ            W9, loc_5AE50                                          ; +0x144, 0x5ae5c\nLDR             X0, [X20,#0x60]                                        ; +0x148, 0x5ae60\nBL              sub_5C500                                              ; +0x14c, 0x5ae64\nCBNZ            W0, loc_5AF1C                                          ; +0x150, 0x5ae68\nTBZ             W21, #0, loc_5AED0                                     ; +0x154, 0x5ae6c\nLDR             X8, [X20,#0x1D8]                                       ; +0x158, 0x5ae70\nLDRB            W8, [X8,#0x3E]                                         ; +0x15c, 0x5ae74\nTBZ             W8, #0, loc_5AE94                                      ; +0x160, 0x5ae78\nLDR             X8, [X20,#0x60]                                        ; +0x164, 0x5ae7c\nADD             X8, X8, #0x64 ; 'd'                                    ; +0x168, 0x5ae80\nLDAXR           W9, [X8]                                               ; +0x16c, 0x5ae84\nORR             W9, W9, #0x100                                         ; +0x170, 0x5ae88\nSTLXR           W10, W9, [X8]                                          ; +0x174, 0x5ae8c\nCBNZ            W10, loc_5AE84                                         ; +0x178, 0x5ae90\nBL              sub_5C638                                              ; +0x17c, 0x5ae94\nCBNZ            W0, loc_5AF1C                                          ; +0x180, 0x5ae98\nLDR             X0, [X20,#0x70]                                        ; +0x184, 0x5ae9c\nBL              sub_AFE50                                              ; +0x188, 0x5aea0\nCBNZ            W0, loc_5AF1C                                          ; +0x18c, 0x5aea4\nLDR             X0, [X20,#0x20]                                        ; +0x190, 0x5aea8\nADD             X2, SP, #0x30+var_28                                   ; +0x194, 0x5aeac\nMOV             W1, #0xFFFFFFFD                                        ; +0x198, 0x5aeb0\nLDR             X8, [X0]                                               ; +0x19c, 0x5aeb4\nBL              sub_5C50C                                              ; +0x1a0, 0x5aeb8\nCBNZ            W0, loc_5AF1C                                          ; +0x1a4, 0x5aebc\nLDR             X0, [SP,#0x30+var_28]                                  ; +0x1a8, 0x5aec0\nLDR             X1, [X20,#0x60]                                        ; +0x1ac, 0x5aec4\nBL              sub_5C538                                              ; +0x1b0, 0x5aec8\nCBNZ            W0, loc_5AF1C                                          ; +0x1b4, 0x5aecc\nLDR             X0, [X20,#0x1D8]                                       ; +0x1b8, 0x5aed0\nLDR             X8, [X0]                                               ; +0x1bc, 0x5aed4\nLDR             X8, [X8,#0x28]                                         ; +0x1c0, 0x5aed8\nBLR             X8                                                     ; +0x1c4, 0x5aedc\nCBNZ            W0, loc_5AF1C                                          ; +0x1c8, 0x5aee0\nLDAXR           W8, [X22]                                              ; +0x1cc, 0x5aee4\nORR             W8, W8, #4                                             ; +0x1d0, 0x5aee8\nSTLXR           W9, W8, [X22]                                          ; +0x1d4, 0x5aeec\nCBNZ            W9, loc_5AEE4                                          ; +0x1d8, 0x5aef0\nLDR             X8, [X19,#0xB8]                                        ; +0x1dc, 0x5aef4\nCBZ             X8, loc_5AF24                                          ; +0x1e0, 0x5aef8\nADD             X8, X8, #0x58 ; 'X'                                    ; +0x1e4, 0x5aefc\nMOV             W0, WZR                                                ; +0x1e8, 0x5af00\nLDAXR           W9, [X8]                                               ; +0x1ec, 0x5af04\nORR             W9, W9, #4                                             ; +0x1f0, 0x5af08\nSTLXR           W10, W9, [X8]                                          ; +0x1f4, 0x5af0c\nCBNZ            W10, loc_5AF04                                         ; +0x1f8, 0x5af10\nB               loc_5AF1C                                              ; +0x1fc, 0x5af14\nMOV             W0, #0x1E                                              ; +0x200, 0x5af18\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x204, 0x5af1c\nB               loc_5C6A4                                              ; +0x208, 0x5af20\nMOV             W0, WZR                                                ; +0x20c, 0x5af24\nB               loc_5AF1C                                              ; +0x210, 0x5af28", "xrefs": ["sub_59FEC @ 0x5a0a4"], "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"}