{"type": "func", "start": 360900, "end": 361324, "name": "sub_581C4", "pseudocode": "// \n// sub_581C4 from 0x581c4 to 0x5836c (424 bytes)\n// \n// 3 xrefs:\n// > sub_57F50 @ 0x58168\n// > sub_762B0 @ 0x764a4\n// > FMOD::ChannelGroup::addGroup @ 0xd20cc\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_581C4(__int64 a1, _QWORD *a2, char a3, __int64 a4)\n{\n  unsigned int v4; // w23\n  __int64 v7; // x8\n  _QWORD *v10; // x9\n  _QWORD *v11; // x24\n  __int64 v13; // x0\n  __int16 v14; // w8\n  __int64 v15; // x8\n  __int64 v16; // [xsp+0h] [xbp-50h] BYREF\n  int v17; // [xsp+8h] [xbp-48h]\n  char v18; // [xsp+Ch] [xbp-44h]\n  __int64 v19; // [xsp+10h] [xbp-40h] BYREF\n  __int64 v20; // [xsp+18h] [xbp-38h] BYREF\n\n  v4 = 31;\n  if ( a2 && a2 != (_QWORD *)a1 )\n  {\n    if ( a2[4] == a1 )\n      return 0;\n    v7 = *(_QWORD *)(a1 + 8);\n    v18 = 0;\n    v16 = v7;\n    v17 = 2;\n    sub_520A0((__int64)&v16);\n    v10 = (_QWORD *)a2[48];\n    v11 = a2 + 47;\n    *v10 = a2[47];\n    *(_QWORD *)(a2[47] + 8LL) = v10;\n    a2[47] = a2 + 47;\n    a2[48] = a2 + 47;\n    v4 = sub_59358(a2, 0, &v20);\n    if ( v4 )\n      goto LABEL_5;\n    v13 = a2[4];\n    if ( v13 )\n    {\n      v19 = 0;\n      v4 = sub_59358(v13, 4294967293LL, &v19);\n      if ( v4 )\n        goto LABEL_5;\n      v14 = atomic_load((unsigned int *)(v19 + 100));\n      if ( (v14 & 0x400) == 0 )\n      {\n        v4 = sub_CB928(v19, v20, 0, 0);\n        if ( v4 )\n          goto LABEL_5;\n      }\n    }\n    v15 = *(_QWORD *)(a1 + 408);\n    a2[47] = a1 + 400;\n    a2[48] = v15;\n    *(_QWORD *)(a1 + 408) = v11;\n    *(_QWORD *)a2[48] = v11;\n    a2[49] = a2;\n    v4 = sub_59358(a1, 4294967293LL, &v19);\n    if ( v4 )\n      goto LABEL_5;\n    if ( v20 )\n    {\n      v4 = sub_59400(v19, v20, a4, 0);\n      if ( v4 )\n      {\nLABEL_5:\n        sub_51F94((__int64)&v16);\n        return v4;\n      }\n      if ( (a3 & 1) != 0 )\n        sub_57C48((__int64)a2, (_OWORD *)(v19 + 8));\n    }\n    a2[4] = a1;\n    sub_585B0(a2, (*(_DWORD *)(a1 + 72) >> 4) & 1);\n    v4 = sub_57CC0((__int64)a2);\n    if ( !v4 )\n      sub_58828(a2);\n    goto LABEL_5;\n  }\n  return v4;\n}", "assembly": "; \n; sub_581C4 from 0x581c4 to 0x5836c (424 bytes)\n; \n; 3 xrefs:\n; > sub_57F50 @ 0x58168\n; > sub_762B0 @ 0x764a4\n; > FMOD::ChannelGroup::addGroup @ 0xd20cc\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, #0x60                                          ; +0x0, 0x581c4\nSTP             X24, X23, [SP,#0x50+var_30]                            ; +0x4, 0x581c8\nMOV             W23, #0x1F                                             ; +0x8, 0x581cc\nSTP             X22, X21, [SP,#0x50+var_20]                            ; +0xc, 0x581d0\nSTP             X20, X19, [SP,#0x50+var_10]                            ; +0x10, 0x581d4\nSTP             X29, X30, [SP,#0x50+var_s0]                            ; +0x14, 0x581d8\nADD             X29, SP, #0x50                                         ; +0x18, 0x581dc\nCBZ             X1, loc_58268                                          ; +0x1c, 0x581e0\nMOV             X19, X1                                                ; +0x20, 0x581e4\nMOV             X20, X0                                                ; +0x24, 0x581e8\nCMP             X1, X0                                                 ; +0x28, 0x581ec\nB.EQ            loc_58268                                              ; +0x2c, 0x581f0\nLDR             X8, [X19,#0x20]                                        ; +0x30, 0x581f4\nCMP             X8, X20                                                ; +0x34, 0x581f8\nB.EQ            loc_58264                                              ; +0x38, 0x581fc\nLDR             X8, [X20,#8]                                           ; +0x3c, 0x58200\nMOV             W9, #2                                                 ; +0x40, 0x58204\nMOV             X0, SP                                                 ; +0x44, 0x58208\nMOV             X22, X3                                                ; +0x48, 0x5820c\nMOV             W21, W2                                                ; +0x4c, 0x58210\nSTRB            WZR, [SP,#0x50+var_44]                                 ; +0x50, 0x58214\nSTR             X8, [SP,#0x50+var_50]                                  ; +0x54, 0x58218\nSTR             W9, [SP,#0x50+var_48]                                  ; +0x58, 0x5821c\nBL              sub_520A0                                              ; +0x5c, 0x58220\nLDP             X8, X9, [X19,#0x178]                                   ; +0x60, 0x58224\nADD             X24, X19, #0x178                                       ; +0x64, 0x58228\nADD             X2, SP, #0x50+var_38                                   ; +0x68, 0x5822c\nMOV             X0, X19                                                ; +0x6c, 0x58230\nSTR             X8, [X9]                                               ; +0x70, 0x58234\nLDR             X8, [X19,#0x178]                                       ; +0x74, 0x58238\nMOV             W1, WZR                                                ; +0x78, 0x5823c\nSTR             X9, [X8,#8]                                            ; +0x7c, 0x58240\nLDR             X8, [X19]                                              ; +0x80, 0x58244\nSTP             X24, X24, [X19,#0x178]                                 ; +0x84, 0x58248\nBL              sub_59358                                              ; +0x88, 0x5824c\nMOV             W23, W0                                                ; +0x8c, 0x58250\nCBZ             W0, loc_58284                                          ; +0x90, 0x58254\nMOV             X0, SP                                                 ; +0x94, 0x58258\nBL              sub_51F94                                              ; +0x98, 0x5825c\nB               loc_58268                                              ; +0x9c, 0x58260\nMOV             W23, WZR                                               ; +0xa0, 0x58264\nMOV             W0, W23                                                ; +0xa4, 0x58268\nLDP             X29, X30, [SP,#0x50+var_s0]                            ; +0xa8, 0x5826c\nLDP             X20, X19, [SP,#0x50+var_10]                            ; +0xac, 0x58270\nLDP             X22, X21, [SP,#0x50+var_20]                            ; +0xb0, 0x58274\nLDP             X24, X23, [SP,#0x50+var_30]                            ; +0xb4, 0x58278\nADD             SP, SP, #0x60 ; '`'                                    ; +0xb8, 0x5827c\nRET                                                                    ; +0xbc, 0x58280\nLDR             X0, [X19,#0x20]                                        ; +0xc0, 0x58284\nCBZ             X0, loc_582D0                                          ; +0xc4, 0x58288\nSTR             XZR, [SP,#0x50+var_40]                                 ; +0xc8, 0x5828c\nLDR             X8, [X0]                                               ; +0xcc, 0x58290\nADD             X2, SP, #0x50+var_40                                   ; +0xd0, 0x58294\nMOV             W1, #0xFFFFFFFD                                        ; +0xd4, 0x58298\nBL              sub_59358                                              ; +0xd8, 0x5829c\nMOV             W23, W0                                                ; +0xdc, 0x582a0\nCBNZ            W0, loc_58258                                          ; +0xe0, 0x582a4\nLDR             X8, [SP,#0x50+var_40]                                  ; +0xe4, 0x582a8\nADD             X8, X8, #0x64 ; 'd'                                    ; +0xe8, 0x582ac\nLDAR            W8, [X8]                                               ; +0xec, 0x582b0\nTBNZ            W8, #0xA, loc_582D0                                    ; +0xf0, 0x582b4\nLDP             X0, X1, [SP,#0x50+var_40]                              ; +0xf4, 0x582b8\nMOV             X2, XZR                                                ; +0xf8, 0x582bc\nMOV             W3, WZR                                                ; +0xfc, 0x582c0\nBL              sub_CB928                                              ; +0x100, 0x582c4\nMOV             W23, W0                                                ; +0x104, 0x582c8\nCBNZ            W0, loc_58258                                          ; +0x108, 0x582cc\nLDR             X8, [X20,#0x198]                                       ; +0x10c, 0x582d0\nADD             X9, X20, #0x190                                        ; +0x110, 0x582d4\nADD             X2, SP, #0x50+var_40                                   ; +0x114, 0x582d8\nMOV             W1, #0xFFFFFFFD                                        ; +0x118, 0x582dc\nSTP             X9, X8, [X19,#0x178]                                   ; +0x11c, 0x582e0\nSTR             X24, [X20,#0x198]                                      ; +0x120, 0x582e4\nLDR             X8, [X19,#0x180]                                       ; +0x124, 0x582e8\nMOV             X0, X20                                                ; +0x128, 0x582ec\nSTR             X24, [X8]                                              ; +0x12c, 0x582f0\nSTR             X19, [X19,#0x188]                                      ; +0x130, 0x582f4\nLDR             X8, [X20]                                              ; +0x134, 0x582f8\nBL              sub_59358                                              ; +0x138, 0x582fc\nMOV             W23, W0                                                ; +0x13c, 0x58300\nCBNZ            W0, loc_58258                                          ; +0x140, 0x58304\nLDR             X1, [SP,#0x50+var_38]                                  ; +0x144, 0x58308\nCBZ             X1, loc_5833C                                          ; +0x148, 0x5830c\nLDR             X0, [SP,#0x50+var_40]                                  ; +0x14c, 0x58310\nMOV             X2, X22                                                ; +0x150, 0x58314\nMOV             W3, WZR                                                ; +0x154, 0x58318\nBL              sub_59400                                              ; +0x158, 0x5831c\nMOV             W23, W0                                                ; +0x15c, 0x58320\nCBNZ            W0, loc_58258                                          ; +0x160, 0x58324\nTBZ             W21, #0, loc_5833C                                     ; +0x164, 0x58328\nLDR             X8, [SP,#0x50+var_40]                                  ; +0x168, 0x5832c\nMOV             X0, X19                                                ; +0x16c, 0x58330\nADD             X1, X8, #8                                             ; +0x170, 0x58334\nBL              sub_57C48                                              ; +0x174, 0x58338\nSTR             X20, [X19,#0x20]                                       ; +0x178, 0x5833c\nLDR             W8, [X20,#0x48]                                        ; +0x17c, 0x58340\nMOV             X0, X19                                                ; +0x180, 0x58344\nUBFX            W1, W8, #4, #1                                         ; +0x184, 0x58348\nBL              sub_585B0                                              ; +0x188, 0x5834c\nMOV             X0, X19                                                ; +0x18c, 0x58350\nBL              sub_57CC0                                              ; +0x190, 0x58354\nMOV             W23, W0                                                ; +0x194, 0x58358\nCBNZ            W0, loc_58258                                          ; +0x198, 0x5835c\nMOV             X0, X19                                                ; +0x19c, 0x58360\nBL              sub_58828                                              ; +0x1a0, 0x58364\nB               loc_58258                                              ; +0x1a4, 0x58368", "xrefs": ["sub_57F50 @ 0x58168", "sub_762B0 @ 0x764a4", "FMOD::ChannelGroup::addGroup @ 0xd20cc"], "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"}