{"type": "func", "start": 6442483216, "end": 6442483781, "name": "sub_180007E10", "pseudocode": "// \n// sub_180007E10 from 0x180007e10 to 0x180008045 (565 bytes)\n// \n// 2 xrefs:\n// > sub_180007790 @ 0x18000798b\n// > <???> @ 0x1801f63c0\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_180007E10(__int64 a1, __int64 a2, __int64 a3)\n{\n  __int64 v3; // r13\n  int v7; // eax\n  int v8; // esi\n  int v9; // eax\n  int v10; // ebp\n  int v11; // ecx\n  __int64 v12; // r12\n  unsigned int v13; // eax\n  int v14; // edx\n  unsigned __int8 v15; // al\n  int v16; // edi\n  int v17; // edx\n  int v18; // eax\n  unsigned int v19; // ecx\n  unsigned __int8 v20; // al\n  int v21; // ebp\n  __int64 v22; // rdi\n  __int64 i; // rdi\n\n  v3 = *(_QWORD *)(a2 + 32);\n  *(_OWORD *)a1 = 0;\n  *(_OWORD *)(a1 + 16) = 0;\n  *(_QWORD *)(a1 + 32) = 0;\n  if ( (unsigned int)sub_180001340(a3, 1) )\n    v7 = sub_180001340(a3, 4) + 1;\n  else\n    v7 = 1;\n  *(_DWORD *)a1 = v7;\n  v8 = 0;\n  if ( (unsigned int)sub_180001340(a3, 1)\n    && (v9 = sub_180001340(a3, 8),\n        *(_DWORD *)(a1 + 24) = v9 + 1,\n        v10 = 0,\n        *(_QWORD *)(a1 + 32) = sub_1800182F0((unsigned int)(2 * (v9 + 1))),\n        *(int *)(a1 + 24) > 0) )\n  {\n    v11 = *(_DWORD *)(a2 + 4);\n    v12 = 0;\n    while ( 1 )\n    {\n      v13 = v11 - 1;\n      v14 = 0;\n      if ( !v11 )\n        v13 = 0;\n      for ( ; v13; v13 >>= 1 )\n        ++v14;\n      v15 = sub_180001340(a3, v14);\n      v16 = v15;\n      v17 = 0;\n      *(_BYTE *)(v12 + *(_QWORD *)(a1 + 32)) = v15;\n      v18 = *(_DWORD *)(a2 + 4);\n      v19 = v18 - 1;\n      if ( !v18 )\n        v19 = 0;\n      for ( ; v19; v19 >>= 1 )\n        ++v17;\n      v20 = sub_180001340(a3, v17);\n      *(_BYTE *)(v12 + *(_QWORD *)(a1 + 32) + 1) = v20;\n      if ( v16 == v20 )\n        break;\n      v11 = *(_DWORD *)(a2 + 4);\n      if ( v16 >= v11 || v20 >= v11 )\n        break;\n      ++v10;\n      v12 += 2;\n      if ( v10 >= *(_DWORD *)(a1 + 24) )\n        goto LABEL_19;\n    }\n  }\n  else\n  {\nLABEL_19:\n    if ( (int)sub_180001340(a3, 2) <= 0 )\n    {\n      if ( *(int *)a1 <= 1\n        || (*(_QWORD *)(a1 + 8) = sub_1800182F0(*(unsigned int *)(a2 + 4)), v21 = 0, *(int *)(a2 + 4) <= 0) )\n      {\nLABEL_25:\n        *(_QWORD *)(a1 + 16) = sub_1800182F0((unsigned int)(2 * *(_DWORD *)a1));\n        if ( *(int *)a1 <= 0 )\n          return 0;\n        for ( i = 0; ; i += 2 )\n        {\n          sub_180001340(a3, 8);\n          *(_BYTE *)(i + *(_QWORD *)(a1 + 16)) = sub_180001340(a3, 8);\n          if ( *(char *)(*(_QWORD *)(a1 + 16) + i) >= *(_DWORD *)(v3 + 16) )\n            break;\n          *(_BYTE *)(*(_QWORD *)(a1 + 16) + i + 1) = sub_180001340(a3, 8);\n          if ( *(char *)(*(_QWORD *)(a1 + 16) + i + 1) >= *(_DWORD *)(v3 + 20) )\n            break;\n          if ( ++v8 >= *(_DWORD *)a1 )\n            return 0;\n        }\n      }\n      else\n      {\n        v22 = 0;\n        while ( 1 )\n        {\n          *(_BYTE *)(v22 + *(_QWORD *)(a1 + 8)) = sub_180001340(a3, 4);\n          if ( *(unsigned __int8 *)(*(_QWORD *)(a1 + 8) + v22) >= *(int *)a1 )\n            break;\n          ++v21;\n          ++v22;\n          if ( v21 >= *(_DWORD *)(a2 + 4) )\n            goto LABEL_25;\n        }\n      }\n    }\n  }\n  return 0xFFFFFFFFLL;\n}", "assembly": "; \n; sub_180007E10 from 0x180007e10 to 0x180008045 (565 bytes)\n; \n; 2 xrefs:\n; > sub_180007790 @ 0x18000798b\n; > <???> @ 0x1801f63c0\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\npush    rbx                                                            ; +0x0, 0x180007e10\npush    rsi                                                            ; +0x2, 0x180007e12\npush    r13                                                            ; +0x3, 0x180007e13\npush    r14                                                            ; +0x5, 0x180007e15\npush    r15                                                            ; +0x7, 0x180007e17\nsub     rsp, 20h                                                       ; +0x9, 0x180007e19\nmov     r13, [rdx+20h]                                                 ; +0xd, 0x180007e1d\nxorps   xmm0, xmm0                                                     ; +0x11, 0x180007e21\nmovups  xmmword ptr [rcx], xmm0                                        ; +0x14, 0x180007e24\nxor     eax, eax                                                       ; +0x17, 0x180007e27\nmov     r15, rdx                                                       ; +0x19, 0x180007e29\nmovups  xmmword ptr [rcx+10h], xmm0                                    ; +0x1c, 0x180007e2c\nmov     [rcx+20h], rax                                                 ; +0x20, 0x180007e30\nmov     rbx, rcx                                                       ; +0x24, 0x180007e34\nmov     rcx, r8                                                        ; +0x27, 0x180007e37\nmov     r14, r8                                                        ; +0x2a, 0x180007e3a\nlea     edx, [rax+1]                                                   ; +0x2d, 0x180007e3d\ncall    sub_180001340                                                  ; +0x30, 0x180007e40\ntest    eax, eax                                                       ; +0x35, 0x180007e45\njz      short loc_180007E5A                                            ; +0x37, 0x180007e47\nmov     edx, 4                                                         ; +0x39, 0x180007e49\nmov     rcx, r14                                                       ; +0x3e, 0x180007e4e\ncall    sub_180001340                                                  ; +0x41, 0x180007e51\ninc     eax                                                            ; +0x46, 0x180007e56\njmp     short loc_180007E5F                                            ; +0x48, 0x180007e58\nmov     eax, 1                                                         ; +0x4a, 0x180007e5a\nmov     [rsp+48h+arg_0], rbp                                           ; +0x4f, 0x180007e5f\nmov     edx, 1                                                         ; +0x54, 0x180007e64\nmov     [rsp+48h+arg_8], rdi                                           ; +0x59, 0x180007e69\nmov     rcx, r14                                                       ; +0x5e, 0x180007e6e\nmov     [rsp+48h+arg_10], r12                                          ; +0x61, 0x180007e71\nmov     [rbx], eax                                                     ; +0x66, 0x180007e76\ncall    sub_180001340                                                  ; +0x68, 0x180007e78\nxor     esi, esi                                                       ; +0x6d, 0x180007e7d\ntest    eax, eax                                                       ; +0x6f, 0x180007e7f\njz      loc_180007F45                                                  ; +0x71, 0x180007e81\nlea     edx, [rsi+8]                                                   ; +0x77, 0x180007e87\nmov     rcx, r14                                                       ; +0x7a, 0x180007e8a\ncall    sub_180001340                                                  ; +0x7d, 0x180007e8d\nlea     ecx, [rax+1]                                                   ; +0x82, 0x180007e92\nmov     [rbx+18h], ecx                                                 ; +0x85, 0x180007e95\nadd     ecx, ecx                                                       ; +0x88, 0x180007e98\ncall    sub_1800182F0                                                  ; +0x8a, 0x180007e9a\nmov     ebp, esi                                                       ; +0x8f, 0x180007e9f\nmov     [rbx+20h], rax                                                 ; +0x91, 0x180007ea1\ncmp     [rbx+18h], esi                                                 ; +0x95, 0x180007ea5\njle     loc_180007F45                                                  ; +0x98, 0x180007ea8\nmov     ecx, [r15+4]                                                   ; +0x9e, 0x180007eae\nmov     r12d, esi                                                      ; +0xa2, 0x180007eb2\nnop     word ptr [rax+rax+00000000h]                                   ; +0xa5, 0x180007eb5\ntest    ecx, ecx                                                       ; +0xb0, 0x180007ec0\nlea     eax, [rcx-1]                                                   ; +0xb2, 0x180007ec2\nmov     edx, esi                                                       ; +0xb5, 0x180007ec5\ncmovz   eax, ecx                                                       ; +0xb7, 0x180007ec7\ntest    eax, eax                                                       ; +0xba, 0x180007eca\njz      short loc_180007ED6                                            ; +0xbc, 0x180007ecc\nxchg    ax, ax                                                         ; +0xbe, 0x180007ece\ninc     edx                                                            ; +0xc0, 0x180007ed0\nshr     eax, 1                                                         ; +0xc2, 0x180007ed2\njnz     short loc_180007ED0                                            ; +0xc4, 0x180007ed4\nmov     rcx, r14                                                       ; +0xc6, 0x180007ed6\ncall    sub_180001340                                                  ; +0xc9, 0x180007ed9\nmovzx   edi, al                                                        ; +0xce, 0x180007ede\nmov     edx, esi                                                       ; +0xd1, 0x180007ee1\nmov     rax, [rbx+20h]                                                 ; +0xd3, 0x180007ee3\nmov     [r12+rax], dil                                                 ; +0xd7, 0x180007ee7\nmov     eax, [r15+4]                                                   ; +0xdb, 0x180007eeb\ntest    eax, eax                                                       ; +0xdf, 0x180007eef\nlea     ecx, [rax-1]                                                   ; +0xe1, 0x180007ef1\ncmovz   ecx, eax                                                       ; +0xe4, 0x180007ef4\ntest    ecx, ecx                                                       ; +0xe7, 0x180007ef7\njz      short loc_180007F06                                            ; +0xe9, 0x180007ef9\nnop     dword ptr [rax+rax+00h]                                        ; +0xeb, 0x180007efb\ninc     edx                                                            ; +0xf0, 0x180007f00\nshr     ecx, 1                                                         ; +0xf2, 0x180007f02\njnz     short loc_180007F00                                            ; +0xf4, 0x180007f04\nmov     rcx, r14                                                       ; +0xf6, 0x180007f06\ncall    sub_180001340                                                  ; +0xf9, 0x180007f09\nmovzx   edx, al                                                        ; +0xfe, 0x180007f0e\nmov     rax, [rbx+20h]                                                 ; +0x101, 0x180007f11\nmov     [r12+rax+1], dl                                                ; +0x105, 0x180007f15\ncmp     edi, edx                                                       ; +0x10a, 0x180007f1a\njz      loc_180008024                                                  ; +0x10c, 0x180007f1c\nmov     ecx, [r15+4]                                                   ; +0x112, 0x180007f22\ncmp     edi, ecx                                                       ; +0x116, 0x180007f26\njge     loc_180008024                                                  ; +0x118, 0x180007f28\ncmp     edx, ecx                                                       ; +0x11e, 0x180007f2e\njge     loc_180008024                                                  ; +0x120, 0x180007f30\ninc     ebp                                                            ; +0x126, 0x180007f36\nadd     r12, 2                                                         ; +0x128, 0x180007f38\ncmp     ebp, [rbx+18h]                                                 ; +0x12c, 0x180007f3c\njl      loc_180007EC0                                                  ; +0x12f, 0x180007f3f\nmov     edx, 2                                                         ; +0x135, 0x180007f45\nmov     rcx, r14                                                       ; +0x13a, 0x180007f4a\ncall    sub_180001340                                                  ; +0x13d, 0x180007f4d\ntest    eax, eax                                                       ; +0x142, 0x180007f52\njg      loc_180008024                                                  ; +0x144, 0x180007f54\ncmp     dword ptr [rbx], 1                                             ; +0x14a, 0x180007f5a\njle     short loc_180007FAF                                            ; +0x14d, 0x180007f5d\nmov     ecx, [r15+4]                                                   ; +0x14f, 0x180007f5f\ncall    sub_1800182F0                                                  ; +0x153, 0x180007f63\nmov     [rbx+8], rax                                                   ; +0x158, 0x180007f68\nmov     ebp, esi                                                       ; +0x15c, 0x180007f6c\ncmp     [r15+4], esi                                                   ; +0x15e, 0x180007f6e\njle     short loc_180007FAF                                            ; +0x162, 0x180007f72\nmov     rdi, rsi                                                       ; +0x164, 0x180007f74\nnop     word ptr [rax+rax+00000000h]                                   ; +0x167, 0x180007f77\nmov     edx, 4                                                         ; +0x170, 0x180007f80\nmov     rcx, r14                                                       ; +0x175, 0x180007f85\ncall    sub_180001340                                                  ; +0x178, 0x180007f88\nmov     rcx, [rbx+8]                                                   ; +0x17d, 0x180007f8d\nmov     [rdi+rcx], al                                                  ; +0x181, 0x180007f91\nmov     rax, [rbx+8]                                                   ; +0x184, 0x180007f94\nmovzx   ecx, byte ptr [rax+rdi]                                        ; +0x188, 0x180007f98\ncmp     ecx, [rbx]                                                     ; +0x18c, 0x180007f9c\njge     loc_180008024                                                  ; +0x18e, 0x180007f9e\ninc     ebp                                                            ; +0x194, 0x180007fa4\ninc     rdi                                                            ; +0x196, 0x180007fa6\ncmp     ebp, [r15+4]                                                   ; +0x199, 0x180007fa9\njl      short loc_180007F80                                            ; +0x19d, 0x180007fad\nmov     ecx, [rbx]                                                     ; +0x19f, 0x180007faf\nadd     ecx, ecx                                                       ; +0x1a1, 0x180007fb1\ncall    sub_1800182F0                                                  ; +0x1a3, 0x180007fb3\nmov     [rbx+10h], rax                                                 ; +0x1a8, 0x180007fb8\ncmp     [rbx], esi                                                     ; +0x1ac, 0x180007fbc\njle     short loc_180008020                                            ; +0x1ae, 0x180007fbe\nmov     rdi, rsi                                                       ; +0x1b0, 0x180007fc0\nmov     edx, 8                                                         ; +0x1b3, 0x180007fc3\nmov     rcx, r14                                                       ; +0x1b8, 0x180007fc8\ncall    sub_180001340                                                  ; +0x1bb, 0x180007fcb\nmov     edx, 8                                                         ; +0x1c0, 0x180007fd0\nmov     rcx, r14                                                       ; +0x1c5, 0x180007fd5\ncall    sub_180001340                                                  ; +0x1c8, 0x180007fd8\nmov     rcx, [rbx+10h]                                                 ; +0x1cd, 0x180007fdd\nmov     [rdi+rcx], al                                                  ; +0x1d1, 0x180007fe1\nmov     rax, [rbx+10h]                                                 ; +0x1d4, 0x180007fe4\nmovsx   ecx, byte ptr [rax+rdi]                                        ; +0x1d8, 0x180007fe8\ncmp     ecx, [r13+10h]                                                 ; +0x1dc, 0x180007fec\njge     short loc_180008024                                            ; +0x1e0, 0x180007ff0\nmov     edx, 8                                                         ; +0x1e2, 0x180007ff2\nmov     rcx, r14                                                       ; +0x1e7, 0x180007ff7\ncall    sub_180001340                                                  ; +0x1ea, 0x180007ffa\nmov     rcx, [rbx+10h]                                                 ; +0x1ef, 0x180007fff\nmov     [rcx+rdi+1], al                                                ; +0x1f3, 0x180008003\nmov     rax, [rbx+10h]                                                 ; +0x1f7, 0x180008007\nmovsx   ecx, byte ptr [rax+rdi+1]                                      ; +0x1fb, 0x18000800b\ncmp     ecx, [r13+14h]                                                 ; +0x200, 0x180008010\njge     short loc_180008024                                            ; +0x204, 0x180008014\ninc     esi                                                            ; +0x206, 0x180008016\nadd     rdi, 2                                                         ; +0x208, 0x180008018\ncmp     esi, [rbx]                                                     ; +0x20c, 0x18000801c\njl      short loc_180007FC3                                            ; +0x20e, 0x18000801e\nxor     eax, eax                                                       ; +0x210, 0x180008020\njmp     short loc_180008029                                            ; +0x212, 0x180008022\nmov     eax, 0FFFFFFFFh                                                ; +0x214, 0x180008024\nmov     r12, [rsp+48h+arg_10]                                          ; +0x219, 0x180008029\nmov     rdi, [rsp+48h+arg_8]                                           ; +0x21e, 0x18000802e\nmov     rbp, [rsp+48h+arg_0]                                           ; +0x223, 0x180008033\nadd     rsp, 20h                                                       ; +0x228, 0x180008038\npop     r15                                                            ; +0x22c, 0x18000803c\npop     r14                                                            ; +0x22e, 0x18000803e\npop     r13                                                            ; +0x230, 0x180008040\npop     rsi                                                            ; +0x232, 0x180008042\npop     rbx                                                            ; +0x233, 0x180008043\nretn                                                                   ; +0x234, 0x180008044", "xrefs": ["sub_180007790 @ 0x18000798b", "<???> @ 0x1801f63c0"], "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"}