// // sub_180002550 from 0x180002550 to 0x180002736 (486 bytes) // // 4 xrefs: // > sub_180001E90 @ 0x180001f19 // > @ 0x18017d3a8 // > @ 0x18017d3b8 // > @ 0x1801f60fc // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall sub_180002550(int *a1, __int64 a2, int a3, int a4) { __int64 v4; // rsi int *v7; // r11 __int64 v8; // rbx int *v9; // r10 __int64 v10; // r8 unsigned int v11; // r9d __int64 v12; // rdx int v13; // ecx int v14; // eax int v15; // edx unsigned int *v16; // rax __int64 v17; // rdx char v18; // cl __int64 i; // r9 int v20; // edi int v21; // r8d int j; // ecx unsigned int v23; // edx int v25; // [rsp+0h] [rbp-BCh] _OWORD v26[8]; // [rsp+4h] [rbp-B8h] BYREF int v27; // [rsp+84h] [rbp-38h] v4 = a3; v27 = 0; v7 = a1; memset(v26, 0, sizeof(v26)); if ( a3 > 0 ) { v8 = 0; v9 = a1; do { v10 = *(char *)(v8 + a2); if ( (int)v10 <= 0 ) { if ( !a4 ) ++v9; } else { v11 = *((_DWORD *)v26 + v10); v12 = *(char *)(v8 + a2); if ( (int)v10 < 32 && v11 >> v10 ) return 0xFFFFFFFFLL; *v9 = v11; v13 = v10; ++v9; while ( 1 ) { v14 = *((_DWORD *)v26 + v12); if ( (v14 & 1) != 0 ) break; --v13; *((_DWORD *)v26 + v12--) = v14 + 1; if ( v12 <= 0 ) goto LABEL_13; } if ( v13 == 1 ) ++DWORD1(v26[0]); else *((_DWORD *)v26 + v13) = 2 * *(&v25 + v13); LABEL_13: v15 = v10 + 1; if ( (int)v10 + 1 < 33 ) { v16 = (unsigned int *)v26 + v15; do { if ( *v16 >> 1 != v11 ) break; ++v15; v11 = *v16; *v16 = 2 * *(v16 - 1); ++v16; } while ( v15 < 33 ); } } ++v8; } while ( v8 < v4 ); } if ( a4 == 1 ) { LABEL_25: if ( v4 > 0 ) { for ( i = 0; i < v4; ++i ) { v20 = *(char *)(i + a2); v21 = 0; for ( j = 0; j < v20; v21 = (2 * v21) | v23 & 1 ) v23 = (unsigned int)*v7 >> j++; if ( !a4 || (_BYTE)v20 ) *v7++ = v21; } } return 0; } else { v17 = 1; v18 = 31; while ( ((0xFFFFFFFF >> v18) & *((_DWORD *)v26 + v17)) == 0 ) { --v18; if ( ++v17 >= 33 ) goto LABEL_25; } return 0xFFFFFFFFLL; } }