// // sub_180005000 from 0x180005000 to 0x1800054a8 (1192 bytes) // // 4 xrefs: // > cocos2d::extension::CCControl::removeHandleOfControlEvent @ 0x180004d2f // > cocos2d::extension::CCScrollView::unregisterScriptHandler @ 0x18001435f // > sub_180016820 @ 0x18001696f // > @ 0x1800494e0 // // 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_180005000(_QWORD *a1, __int64 *a2) { __int64 *v2; // rax __int64 *v3; // r11 __int64 *v5; // rdi __int64 ***i; // r10 __int64 *v7; // rdx __int64 *v8; // r9 __int64 **v9; // r8 __int64 **v10; // rdx __int64 *v11; // rcx __int64 v12; // rdx __int64 v13; // rax __int64 *j; // rcx __int64 **v15; // rcx char v16; // dl __int64 **v17; // r11 __int64 *v18; // rcx __int64 *v19; // rcx __int64 ***v20; // rax __int64 v21; // rdx __int64 v22; // rax __int64 *v23; // rcx __int64 v24; // rax __int64 *v25; // rax __int64 v26; // rdx _QWORD *v27; // rax __int64 *v28; // rcx __int64 ***v29; // rax __int64 **v30; // rdx __int64 **v31; // rax __int64 v32; // rax __int64 *v33; // rax __int64 v34; // rcx __int64 *result; // rax v2 = (__int64 *)a2[2]; v3 = a2 + 2; v5 = a2; if ( *((_BYTE *)v2 + 25) ) { v2 = (__int64 *)a2[1]; for ( i = (__int64 ***)(a2 + 1); !*((_BYTE *)v2 + 25); v2 = (__int64 *)v2[1] ) { if ( a2 != (__int64 *)v2[2] ) break; a2 = v2; } } else { v7 = (__int64 *)*v2; if ( !*(_BYTE *)(*v2 + 25) ) { do { v2 = v7; v7 = (__int64 *)*v7; } while ( !*((_BYTE *)v7 + 25) ); } i = (__int64 ***)(v5 + 1); } v8 = (__int64 *)*v3; if ( *(_BYTE *)(*v5 + 25) ) goto LABEL_13; if ( *((_BYTE *)v8 + 25) ) { v8 = (__int64 *)*v5; LABEL_13: v9 = *i; if ( !*((_BYTE *)v8 + 25) ) v8[1] = (__int64)v9; if ( *(__int64 **)(*a1 + 8LL) == v5 ) { *(_QWORD *)(*a1 + 8LL) = v8; } else if ( *v9 == v5 ) { *v9 = v8; } else { v9[2] = v8; } if ( *(__int64 **)*a1 == v5 ) { if ( *((_BYTE *)v8 + 25) ) { v10 = v9; } else { v11 = (__int64 *)*v8; v10 = (__int64 **)v8; if ( !*(_BYTE *)(*v8 + 25) ) { do { v10 = (__int64 **)v11; v11 = (__int64 *)*v11; } while ( !*((_BYTE *)v11 + 25) ); } } *(_QWORD *)*a1 = v10; } v12 = *a1; if ( *(__int64 **)(*a1 + 16LL) == v5 ) { if ( *((_BYTE *)v8 + 25) ) { *(_QWORD *)(v12 + 16) = v9; } else { v13 = v8[2]; for ( j = v8; !*(_BYTE *)(v13 + 25); v13 = *(_QWORD *)(v13 + 16) ) j = (__int64 *)v13; *(_QWORD *)(v12 + 16) = j; } } goto LABEL_43; } v8 = (__int64 *)v2[2]; if ( v2 == v5 ) goto LABEL_13; *(_QWORD *)(*v5 + 8) = v2; *v2 = *v5; if ( v2 == (__int64 *)*v3 ) { v9 = (__int64 **)v2; } else { v9 = (__int64 **)v2[1]; if ( !*((_BYTE *)v8 + 25) ) v8[1] = (__int64)v9; *v9 = v8; v2[2] = *v3; *(_QWORD *)(*v3 + 8) = v2; } if ( *(__int64 **)(*a1 + 8LL) == v5 ) { *(_QWORD *)(*a1 + 8LL) = v2; } else { v15 = *i; if ( **i == v5 ) *v15 = v2; else v15[2] = v2; } v16 = *((_BYTE *)v2 + 24); v2[1] = (__int64)*i; *((_BYTE *)v2 + 24) = *((_BYTE *)v5 + 24); *((_BYTE *)v5 + 24) = v16; LABEL_43: if ( *((_BYTE *)v5 + 24) == 1 ) { if ( v8 != *(__int64 **)(*a1 + 8LL) ) { do { v17 = v9; if ( *((_BYTE *)v8 + 24) != 1 ) break; v18 = *v9; if ( v8 == *v9 ) { v18 = v9[2]; if ( !*((_BYTE *)v18 + 24) ) { *((_BYTE *)v18 + 24) = 1; v19 = v9[2]; *((_BYTE *)v9 + 24) = 0; v9[2] = (__int64 *)*v19; if ( !*(_BYTE *)(*v19 + 25) ) *(_QWORD *)(*v19 + 8) = v9; v19[1] = (__int64)v9[1]; if ( v9 == *(__int64 ***)(*a1 + 8LL) ) { *(_QWORD *)(*a1 + 8LL) = v19; } else { v20 = (__int64 ***)v9[1]; if ( v9 == *v20 ) *v20 = (__int64 **)v19; else v20[2] = (__int64 **)v19; } *v19 = (__int64)v9; v9[1] = v19; v18 = v9[2]; } if ( *((_BYTE *)v18 + 25) ) goto LABEL_77; if ( *(_BYTE *)(*v18 + 24) != 1 || *(_BYTE *)(v18[2] + 24) != 1 ) { if ( *(_BYTE *)(v18[2] + 24) == 1 ) { *(_BYTE *)(*v18 + 24) = 1; v21 = *v18; *((_BYTE *)v18 + 24) = 0; *v18 = *(_QWORD *)(v21 + 16); v22 = *(_QWORD *)(v21 + 16); if ( !*(_BYTE *)(v22 + 25) ) *(_QWORD *)(v22 + 8) = v18; *(_QWORD *)(v21 + 8) = v18[1]; if ( v18 == *(__int64 **)(*a1 + 8LL) ) { *(_QWORD *)(*a1 + 8LL) = v21; } else { v27 = (_QWORD *)v18[1]; if ( v18 == (__int64 *)v27[2] ) v27[2] = v21; else *v27 = v21; } *(_QWORD *)(v21 + 16) = v18; v18[1] = v21; v18 = v9[2]; } *((_BYTE *)v18 + 24) = *((_BYTE *)v9 + 24); *((_BYTE *)v9 + 24) = 1; *(_BYTE *)(v18[2] + 24) = 1; v28 = v9[2]; v9[2] = (__int64 *)*v28; if ( !*(_BYTE *)(*v28 + 25) ) *(_QWORD *)(*v28 + 8) = v9; v28[1] = (__int64)v9[1]; if ( v9 == *(__int64 ***)(*a1 + 8LL) ) { *(_QWORD *)(*a1 + 8LL) = v28; *v28 = (__int64)v9; } else { v29 = (__int64 ***)v9[1]; if ( v9 == *v29 ) *v29 = (__int64 **)v28; else v29[2] = (__int64 **)v28; *v28 = (__int64)v9; } LABEL_108: v9[1] = v28; break; } } else { if ( !*((_BYTE *)v18 + 24) ) { *((_BYTE *)v18 + 24) = 1; v23 = *v9; *((_BYTE *)v9 + 24) = 0; *v9 = (__int64 *)v23[2]; v24 = v23[2]; if ( !*(_BYTE *)(v24 + 25) ) *(_QWORD *)(v24 + 8) = v9; v23[1] = (__int64)v9[1]; if ( v9 == *(__int64 ***)(*a1 + 8LL) ) { *(_QWORD *)(*a1 + 8LL) = v23; } else { v25 = v9[1]; if ( v9 == (__int64 **)v25[2] ) v25[2] = (__int64)v23; else *v25 = (__int64)v23; } v23[2] = (__int64)v9; v9[1] = v23; v18 = *v9; } if ( *((_BYTE *)v18 + 25) ) goto LABEL_77; v26 = v18[2]; if ( *(_BYTE *)(v26 + 24) != 1 || *(_BYTE *)(*v18 + 24) != 1 ) { if ( *(_BYTE *)(*v18 + 24) == 1 ) { *(_BYTE *)(v26 + 24) = 1; v30 = (__int64 **)v18[2]; *((_BYTE *)v18 + 24) = 0; v18[2] = (__int64)*v30; if ( !*((_BYTE *)*v30 + 25) ) (*v30)[1] = (__int64)v18; v30[1] = (__int64 *)v18[1]; if ( v18 == *(__int64 **)(*a1 + 8LL) ) { *(_QWORD *)(*a1 + 8LL) = v30; } else { v31 = (__int64 **)v18[1]; if ( v18 == *v31 ) *v31 = (__int64 *)v30; else v31[2] = (__int64 *)v30; } *v30 = v18; v18[1] = (__int64)v30; v18 = *v9; } *((_BYTE *)v18 + 24) = *((_BYTE *)v9 + 24); *((_BYTE *)v9 + 24) = 1; *(_BYTE *)(*v18 + 24) = 1; v28 = *v9; *v9 = (__int64 *)(*v9)[2]; v32 = v28[2]; if ( !*(_BYTE *)(v32 + 25) ) *(_QWORD *)(v32 + 8) = v9; v28[1] = (__int64)v9[1]; if ( v9 == *(__int64 ***)(*a1 + 8LL) ) { *(_QWORD *)(*a1 + 8LL) = v28; } else { v33 = v9[1]; if ( v9 == (__int64 **)v33[2] ) v33[2] = (__int64)v28; else *v33 = (__int64)v28; } v28[2] = (__int64)v9; goto LABEL_108; } } *((_BYTE *)v18 + 24) = 0; LABEL_77: v8 = (__int64 *)v9; v9 = (__int64 **)v9[1]; } while ( v17 != *(__int64 ***)(*a1 + 8LL) ); } *((_BYTE *)v8 + 24) = 1; } v34 = a1[1]; result = v5; if ( v34 ) a1[1] = v34 - 1; return result; }