{"type": "func", "start": 373052, "end": 373680, "name": "sub_5B13C", "pseudocode": "// \n// sub_5B13C from 0x5b13c to 0x5b3b0 (628 bytes)\n// \n// 2 xrefs:\n// > sub_5C6D0 @ 0x5c6d8\n// > sub_5C71C @ 0x5c724\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_5B13C(__int64 a1, char a2)\n{\n  __int64 v2; // x21\n  _QWORD *v3; // x8\n  __int64 result; // x0\n  float v7; // s0\n  _QWORD *v8; // x8\n  _BOOL4 v9; // w20\n  __int64 *v10; // x8\n  char v11; // cf\n  char v12; // zf\n  int v13; // w9\n  __int64 *v14; // x22\n  __int64 v15; // x8\n  __int64 *v16; // x22\n  __int64 *v17; // x8\n  unsigned int v18; // w9\n  unsigned int v19; // w10\n  __int64 v20; // x8\n  __int64 v21; // x10\n  unsigned int v22; // [xsp+Ch] [xbp-24h] BYREF\n\n  v2 = *(_QWORD *)(*(_QWORD *)(a1 + 472) + 40LL);\n  if ( v2 )\n  {\n    v3 = *(_QWORD **)(v2 + 240);\n    if ( v3 && *(_DWORD *)(v2 + 228) && !*(_QWORD *)(a1 + 496) )\n      *(_QWORD *)(a1 + 496) = *v3;\n    if ( *(_QWORD *)(a1 + 496) )\n    {\n      result = sub_5A4DC(a1, &v22, 2u);\n      if ( (_DWORD)result )\n      {\nLABEL_8:\n        *(_DWORD *)(a1 + 504) = v22;\n        return 0;\n      }\n      v7 = *(float *)(a1 + 556);\n      if ( (a2 & 1) != 0 )\n      {\n        if ( v7 <= 0.0 )\n          v8 = (_QWORD *)(*(_QWORD *)(v2 + 248) + 8LL);\n        else\n          v8 = *(_QWORD **)(v2 + 240);\n        *(_QWORD *)(a1 + 496) = *v8;\n        while ( 1 )\n        {\n          if ( v7 > 0.0 && (result = ((__int64 (*)(void))sub_5C704)(), !v12 & v11) )\n          {\n            v19 = *((_DWORD *)v17 + 11);\n          }\n          else\n          {\n            if ( v7 >= 0.0 )\n              goto LABEL_8;\n            result = sub_5C704(result);\n            if ( v11 )\n              goto LABEL_8;\n            v19 = *((_DWORD *)v17 + 11);\n            if ( v7 <= 0.0 )\n            {\n              if ( v19 <= v18 )\n                goto LABEL_8;\n              v20 = v17[1];\n              *(_QWORD *)(a1 + 496) = v20;\n              v21 = *(_QWORD *)(v2 + 240);\n              goto LABEL_66;\n            }\n          }\n          if ( v19 >= v18 )\n            goto LABEL_8;\n          v20 = *v17;\n          *(_QWORD *)(a1 + 496) = v20;\n          v21 = *(_QWORD *)(v2 + 248);\nLABEL_66:\n          if ( v21 == v20 )\n            goto LABEL_8;\n        }\n      }\n      v9 = v7 > 0.0 && v22 < *(_DWORD *)(a1 + 504) || v7 < 0.0 && v22 > *(_DWORD *)(a1 + 504);\n      while ( 1 )\n      {\n        if ( v7 > 0.0 )\n        {\n          result = ((__int64 (*)(void))sub_5C704)();\n          if ( !v12 & v11 )\n            goto LABEL_31;\n        }\n        if ( v7 >= 0.0 )\n        {\n          if ( !v9 )\n            goto LABEL_8;\n          v10 = *(__int64 **)(a1 + 496);\n        }\n        else\n        {\n          result = ((__int64 (*)(void))sub_5C704)();\n          if ( v11 )\n            v13 = 0;\n          else\n            v13 = 1;\n          if ( ((v9 | v13) & 1) == 0 )\n            goto LABEL_8;\n        }\n        if ( v7 > 0.0 )\n        {\nLABEL_31:\n          if ( v10 != *(__int64 **)(v2 + 248) )\n          {\n            v14 = (__int64 *)*v10;\n            if ( !*(_QWORD *)(v2 + 168) || *(_DWORD *)(v2 + 192) == *((unsigned __int16 *)v10 + 24) )\n            {\n              if ( *(_QWORD *)(a1 + 368) )\n              {\n                result = sub_5C594(result);\n                if ( (_DWORD)result )\n                  return result;\n              }\n            }\n            v10 = v14;\n            *(_QWORD *)(a1 + 496) = v14;\n          }\n          if ( !v9 )\n            goto LABEL_49;\n          if ( v10 != *(__int64 **)(v2 + 248) )\n            goto LABEL_48;\n          v9 = 0;\n          v15 = **(_QWORD **)(v2 + 240);\n        }\n        else\n        {\n          if ( v10 != *(__int64 **)(v2 + 240) )\n          {\n            v16 = (__int64 *)v10[1];\n            if ( !*(_QWORD *)(v2 + 168) || *(_DWORD *)(v2 + 192) == *((unsigned __int16 *)v10 + 24) )\n            {\n              if ( *(_QWORD *)(a1 + 368) )\n              {\n                result = sub_5C594(result);\n                if ( (_DWORD)result )\n                  return result;\n              }\n            }\n            v10 = v16;\n            *(_QWORD *)(a1 + 496) = v16;\n          }\n          if ( !v9 )\n          {\nLABEL_49:\n            v9 = 0;\n            goto LABEL_52;\n          }\n          if ( v10 != *(__int64 **)(v2 + 240) )\n          {\nLABEL_48:\n            v9 = 1;\n            goto LABEL_52;\n          }\n          v9 = 0;\n          v15 = *(_QWORD *)(*(_QWORD *)(v2 + 248) + 8LL);\n        }\n        *(_QWORD *)(a1 + 496) = v15;\nLABEL_52:\n        v7 = *(float *)(a1 + 556);\n      }\n    }\n  }\n  return 0;\n}", "assembly": "; \n; sub_5B13C from 0x5b13c to 0x5b3b0 (628 bytes)\n; \n; 2 xrefs:\n; > sub_5C6D0 @ 0x5c6d8\n; > sub_5C71C @ 0x5c724\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, 0x5b13c\nSTP             X22, X21, [SP,#0x30+var_20]                            ; +0x4, 0x5b140\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x8, 0x5b144\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0xc, 0x5b148\nLDR             X8, [X0,#0x1D8]                                        ; +0x10, 0x5b14c\nADD             X29, SP, #0x30                                         ; +0x14, 0x5b150\nLDR             X21, [X8,#0x28]                                        ; +0x18, 0x5b154\nCBZ             X21, loc_5B1B0                                         ; +0x1c, 0x5b158\nLDR             X8, [X21,#0xF0]                                        ; +0x20, 0x5b15c\nMOV             X19, X0                                                ; +0x24, 0x5b160\nMOV             W20, W1                                                ; +0x28, 0x5b164\nCBZ             X8, loc_5B184                                          ; +0x2c, 0x5b168\nLDR             W9, [X21,#0xE4]                                        ; +0x30, 0x5b16c\nCBZ             W9, loc_5B184                                          ; +0x34, 0x5b170\nLDR             X9, [X19,#0x1F0]                                       ; +0x38, 0x5b174\nCBNZ            X9, loc_5B184                                          ; +0x3c, 0x5b178\nLDR             X8, [X8]                                               ; +0x40, 0x5b17c\nSTR             X8, [X19,#0x1F0]                                       ; +0x44, 0x5b180\nLDR             X8, [X19,#0x1F0]                                       ; +0x48, 0x5b184\nCBZ             X8, loc_5B1B0                                          ; +0x4c, 0x5b188\nADD             X1, SP, #0x30+var_24                                   ; +0x50, 0x5b18c\nMOV             W2, #2                                                 ; +0x54, 0x5b190\nMOV             X0, X19                                                ; +0x58, 0x5b194\nBL              sub_5A4DC                                              ; +0x5c, 0x5b198\nCBZ             W0, loc_5B1BC                                          ; +0x60, 0x5b19c\nLDR             W8, [SP,#0x30+var_24]                                  ; +0x64, 0x5b1a0\nMOV             W0, WZR                                                ; +0x68, 0x5b1a4\nSTR             W8, [X19,#0x1F8]                                       ; +0x6c, 0x5b1a8\nB               loc_5B1B4                                              ; +0x70, 0x5b1ac\nMOV             W0, WZR                                                ; +0x74, 0x5b1b0\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x78, 0x5b1b4\nB               loc_5C6A4                                              ; +0x7c, 0x5b1b8\nLDR             S0, [X19,#0x22C]                                       ; +0x80, 0x5b1bc\nFCMP            S0, #0.0                                               ; +0x84, 0x5b1c0\nTBZ             W20, #0, loc_5B1D4                                     ; +0x88, 0x5b1c4\nB.LE            loc_5B330                                              ; +0x8c, 0x5b1c8\nLDR             X8, [X21,#0xF0]                                        ; +0x90, 0x5b1cc\nB               loc_5B338                                              ; +0x94, 0x5b1d0\nB.LE            loc_5B1E8                                              ; +0x98, 0x5b1d4\nLDR             W8, [SP,#0x30+var_24]                                  ; +0x9c, 0x5b1d8\nLDR             W9, [X19,#0x1F8]                                       ; +0xa0, 0x5b1dc\nCMP             W8, W9                                                 ; +0xa4, 0x5b1e0\nB.CC            loc_5B200                                              ; +0xa8, 0x5b1e4\nFCMP            S0, #0.0                                               ; +0xac, 0x5b1e8\nB.GE            loc_5B208                                              ; +0xb0, 0x5b1ec\nLDR             W8, [SP,#0x30+var_24]                                  ; +0xb4, 0x5b1f0\nLDR             W9, [X19,#0x1F8]                                       ; +0xb8, 0x5b1f4\nCMP             W8, W9                                                 ; +0xbc, 0x5b1f8\nB.LS            loc_5B208                                              ; +0xc0, 0x5b1fc\nMOV             W20, #1                                                ; +0xc4, 0x5b200\nB               loc_5B20C                                              ; +0xc8, 0x5b204\nMOV             W20, WZR                                               ; +0xcc, 0x5b208\nFCMP            S0, #0.0                                               ; +0xd0, 0x5b20c\nB.LE            loc_5B224                                              ; +0xd4, 0x5b210\nLDR             X8, [X19,#0x1F0]                                       ; +0xd8, 0x5b214\nLDR             W9, [SP,#0x30+var_24]                                  ; +0xdc, 0x5b218\nBL              sub_5C704                                              ; +0xe0, 0x5b21c\nB.HI            loc_5B258                                              ; +0xe4, 0x5b220\nFCMP            S0, #0.0                                               ; +0xe8, 0x5b224\nB.GE            loc_5B248                                              ; +0xec, 0x5b228\nLDR             X8, [X19,#0x1F0]                                       ; +0xf0, 0x5b22c\nLDR             W9, [SP,#0x30+var_24]                                  ; +0xf4, 0x5b230\nBL              sub_5C704                                              ; +0xf8, 0x5b234\nCSET            W9, CC                                                 ; +0xfc, 0x5b238\nORR             W9, W20, W9                                            ; +0x100, 0x5b23c\nTBNZ            W9, #0, loc_5B250                                      ; +0x104, 0x5b240\nB               loc_5B1A0                                              ; +0x108, 0x5b244\nTBZ             W20, #0, loc_5B1A0                                     ; +0x10c, 0x5b248\nLDR             X8, [X19,#0x1F0]                                       ; +0x110, 0x5b24c\nFCMP            S0, #0.0                                               ; +0x114, 0x5b250\nB.LE            loc_5B2B8                                              ; +0x118, 0x5b254\nLDR             X9, [X21,#0xF8]                                        ; +0x11c, 0x5b258\nCMP             X8, X9                                                 ; +0x120, 0x5b25c\nB.EQ            loc_5B298                                              ; +0x124, 0x5b260\nLDR             X9, [X21,#0xA8]                                        ; +0x128, 0x5b264\nLDR             X22, [X8]                                              ; +0x12c, 0x5b268\nCBZ             X9, loc_5B280                                          ; +0x130, 0x5b26c\nLDRH            W9, [X8,#0x30]                                         ; +0x134, 0x5b270\nLDR             W10, [X21,#0xC0]                                       ; +0x138, 0x5b274\nCMP             W10, W9                                                ; +0x13c, 0x5b278\nB.NE            loc_5B290                                              ; +0x140, 0x5b27c\nLDR             X9, [X19,#0x170]                                       ; +0x144, 0x5b280\nCBZ             X9, loc_5B290                                          ; +0x148, 0x5b284\nBL              sub_5C594                                              ; +0x14c, 0x5b288\nCBNZ            W0, loc_5B1B4                                          ; +0x150, 0x5b28c\nMOV             X8, X22                                                ; +0x154, 0x5b290\nSTR             X22, [X19,#0x1F0]                                      ; +0x158, 0x5b294\nTBZ             W20, #0, loc_5B310                                     ; +0x15c, 0x5b298\nLDR             X9, [X21,#0xF8]                                        ; +0x160, 0x5b29c\nCMP             X8, X9                                                 ; +0x164, 0x5b2a0\nB.NE            loc_5B308                                              ; +0x168, 0x5b2a4\nLDR             X8, [X21,#0xF0]                                        ; +0x16c, 0x5b2a8\nMOV             W20, WZR                                               ; +0x170, 0x5b2ac\nLDR             X8, [X8]                                               ; +0x174, 0x5b2b0\nB               loc_5B324                                              ; +0x178, 0x5b2b4\nLDR             X9, [X21,#0xF0]                                        ; +0x17c, 0x5b2b8\nCMP             X8, X9                                                 ; +0x180, 0x5b2bc\nB.EQ            loc_5B2F8                                              ; +0x184, 0x5b2c0\nLDR             X9, [X21,#0xA8]                                        ; +0x188, 0x5b2c4\nLDR             X22, [X8,#8]                                           ; +0x18c, 0x5b2c8\nCBZ             X9, loc_5B2E0                                          ; +0x190, 0x5b2cc\nLDRH            W9, [X8,#0x30]                                         ; +0x194, 0x5b2d0\nLDR             W10, [X21,#0xC0]                                       ; +0x198, 0x5b2d4\nCMP             W10, W9                                                ; +0x19c, 0x5b2d8\nB.NE            loc_5B2F0                                              ; +0x1a0, 0x5b2dc\nLDR             X9, [X19,#0x170]                                       ; +0x1a4, 0x5b2e0\nCBZ             X9, loc_5B2F0                                          ; +0x1a8, 0x5b2e4\nBL              sub_5C594                                              ; +0x1ac, 0x5b2e8\nCBNZ            W0, loc_5B1B4                                          ; +0x1b0, 0x5b2ec\nMOV             X8, X22                                                ; +0x1b4, 0x5b2f0\nSTR             X22, [X19,#0x1F0]                                      ; +0x1b8, 0x5b2f4\nTBZ             W20, #0, loc_5B310                                     ; +0x1bc, 0x5b2f8\nLDR             X9, [X21,#0xF0]                                        ; +0x1c0, 0x5b2fc\nCMP             X8, X9                                                 ; +0x1c4, 0x5b300\nB.EQ            loc_5B318                                              ; +0x1c8, 0x5b304\nMOV             W20, #1                                                ; +0x1cc, 0x5b308\nB               loc_5B328                                              ; +0x1d0, 0x5b30c\nMOV             W20, WZR                                               ; +0x1d4, 0x5b310\nB               loc_5B328                                              ; +0x1d8, 0x5b314\nLDR             X8, [X21,#0xF8]                                        ; +0x1dc, 0x5b318\nMOV             W20, WZR                                               ; +0x1e0, 0x5b31c\nLDR             X8, [X8,#8]                                            ; +0x1e4, 0x5b320\nSTR             X8, [X19,#0x1F0]                                       ; +0x1e8, 0x5b324\nLDR             S0, [X19,#0x22C]                                       ; +0x1ec, 0x5b328\nB               loc_5B20C                                              ; +0x1f0, 0x5b32c\nLDR             X8, [X21,#0xF8]                                        ; +0x1f4, 0x5b330\nADD             X8, X8, #8                                             ; +0x1f8, 0x5b334\nLDR             X8, [X8]                                               ; +0x1fc, 0x5b338\nSTR             X8, [X19,#0x1F0]                                       ; +0x200, 0x5b33c\nLDR             W9, [SP,#0x30+var_24]                                  ; +0x204, 0x5b340\nFCMP            S0, #0.0                                               ; +0x208, 0x5b344\nB.LE            loc_5B35C                                              ; +0x20c, 0x5b348\nBL              sub_5C704                                              ; +0x210, 0x5b34c\nB.LS            loc_5B35C                                              ; +0x214, 0x5b350\nLDR             W10, [X8,#0x2C]                                        ; +0x218, 0x5b354\nB               loc_5B378                                              ; +0x21c, 0x5b358\nFCMP            S0, #0.0                                               ; +0x220, 0x5b35c\nB.GE            loc_5B1A0                                              ; +0x224, 0x5b360\nBL              sub_5C704                                              ; +0x228, 0x5b364\nB.CS            loc_5B1A0                                              ; +0x22c, 0x5b368\nLDR             W10, [X8,#0x2C]                                        ; +0x230, 0x5b36c\nFCMP            S0, #0.0                                               ; +0x234, 0x5b370\nB.LE            loc_5B390                                              ; +0x238, 0x5b374\nCMP             W10, W9                                                ; +0x23c, 0x5b378\nB.CS            loc_5B1A0                                              ; +0x240, 0x5b37c\nLDR             X8, [X8]                                               ; +0x244, 0x5b380\nSTR             X8, [X19,#0x1F0]                                       ; +0x248, 0x5b384\nLDR             X10, [X21,#0xF8]                                       ; +0x24c, 0x5b388\nB               loc_5B3A4                                              ; +0x250, 0x5b38c\nCMP             W10, W9                                                ; +0x254, 0x5b390\nB.LS            loc_5B1A0                                              ; +0x258, 0x5b394\nLDR             X8, [X8,#8]                                            ; +0x25c, 0x5b398\nSTR             X8, [X19,#0x1F0]                                       ; +0x260, 0x5b39c\nLDR             X10, [X21,#0xF0]                                       ; +0x264, 0x5b3a0\nCMP             X10, X8                                                ; +0x268, 0x5b3a4\nB.NE            loc_5B344                                              ; +0x26c, 0x5b3a8\nB               loc_5B1A0                                              ; +0x270, 0x5b3ac", "xrefs": ["sub_5C6D0 @ 0x5c6d8", "sub_5C71C @ 0x5c724"], "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"}