PfpRpRehashIfNeeded
__int64 __fastcall PfpRpRehashIfNeeded(__int64 a1, void **a2, unsigned int a3){
unsigned int v4;
unsigned int v6;
unsigned int v7;
unsigned int v8;
int v9;
char *v11;
__int64 v12;
unsigned __int64 v13;
unsigned int v14;
__int64 v15;
__int64 v16;
_QWORD *v17;
__int64 v18;
void *v19;
char i;
__int64 v21;
v4 = 0;
v6 = 0;
v7 = *(_DWORD *)(a1 + 4);
v8 = 2 * (v7 >> 5);
if( *(_DWORD *)a1 >= v8 )
{
v6 = 2 * (*(_DWORD *)(a1 + 4) >> 5);
if( !v8 )
v6 = 64;
v9 = 1;
}
else
{
v9 = 0;
}
if( v9 && v6 <= a3 )
{
v11 = (char *)*a2;
v12 = a3;
if( ((a3 - 1) & a3) != 0 )
{
for( i = -1; a3; a3 >>= 1 )
++i;
v12 = (unsigned int)(1 << i);
}
if( (unsigned int)v12 > 0x4000000 )
v12 = 0x4000000i64;
v13 = (unsigned int)v12;
if( v11 > &v11[8 * v12] )
v13 = 0i64;
if( v13 )
memset64(v11, a1 | 1, v13);
v14 = 0;
v15 = -1i64 << (*(_BYTE *)(a1 + 4) & 0x1F);
if( (*(_DWORD *)(a1 + 4) & 0xFFFFFFE0) != 0 )
{
do
{
v16 = *(_QWORD *)(a1 + 8);
while( 1 )
{
v17 = *(_QWORD **)(v16 + 8i64 * v14);
if( ((unsigned __int8)v17 & 1) != 0 )
break;
*(_QWORD *)(v16 + 8i64 * v14) = *v17;
v21 = v15 & v17[1];
v18 = (37
* (BYTE6(v21)
+ 37
* (BYTE5(v21)
+ 37
* (BYTE4(v21)
+ 37 * (BYTE3(v21) + 37 * (BYTE2(v21) + 37 * (BYTE1(v21) + 37 * ((unsigned __int8)v21 + 11623883)))))))
+ HIBYTE(v21)) & (unsigned int)(v12 - 1);
*v17 = *(_QWORD *)&v11[8 * v18];
*(_QWORD *)&v11[8 * v18] = v17;
}
++v14;
}
while( v14 < *(_DWORD *)(a1 + 4) >> 5 );
}
v19 = *(void **)(a1 + 8);
v7 = *(_DWORD *)(a1 + 4) & 0x1F | (32 * v12);
*(_QWORD *)(a1 + 8) = v11;
*(_DWORD *)(a1 + 4) = v7;
*a2 = v19;
}
LOBYTE(v4) = v7 >= 0x20;
return v4;
}Referenced by:
PfpRpFileKeyUpdate