PpmParkComputeSnapStatistics

CHAR __stdcall PpmParkComputeSnapStatistics(INT64 a1, UINT8 a2, UINT8 a3, INT64 a4, _BYTE *a5, _BYTE *a6, _BYTE *a7){
  unsigned __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  int v10; 
  unsigned __int64 v11; 
  int i; 
  __int64 v13; 
  int v14; 
  unsigned __int64 j; 
  int k; 
  int v17; 
  unsigned __int64 v18; 
  __int64 v19; 

  v7 = *(_QWORD *)(a4 + 24) - *(_QWORD *)(a4 + 32);
  v8 = a3;
  v9 = a2;
  if( (_DWORD)a1 )
    v7 /= (unsigned int)(a1 + 1);
  if( !v7 )
    return 0;
  v10 = *(_DWORD *)(a4 + 40);
  v11 = 0i64;
  for( i = 0; i < v10; v10 = *(_DWORD *)(a4 + 40) )
  {
    v13 = i++;
    *(_QWORD *)(8 * v13 + *(_QWORD *)(a4 + 16)) = *(_QWORD *)(*(_QWORD *)a4 + 8 * v13)
                                                - *(_QWORD *)(*(_QWORD *)(a4 + 8) + 8 * v13);
  }
  v14 = v10 - 1;
  for( j = 0i64; v14 >= 0; --v14 )
  {
    j += *(_QWORD *)(*(_QWORD *)(a4 + 16) + 8i64 * v14);
    if( j >= v7 - v7 * v8 / 0x64 )
      break;
  }
  *a7 = v14;
  if( __PAIR128__((unsigned __int64)a6, (unsigned __int64)a5) != 0 )
  {
    for( k = *(_DWORD *)(a4 + 40) - 1; k >= 0; --k )
    {
      v11 += *(_QWORD *)(*(_QWORD *)(a4 + 16) + 8i64 * k);
      if( v11 >= v7 - v7 * v9 / 0x64 )
        break;
    }
    if( a5 )
      *a5 = k;
    if( a6 )
    {
      if( k > 0 )
        *a6 = 100i64 * *(_QWORD *)(*(_QWORD *)(a4 + 16) + 8i64 * k) / v7;
      else
        *a6 = 0;
    }
  }
  *(_QWORD *)(a4 + 32) += v7;
  v17 = *(_DWORD *)(a4 + 40) - 1;
  if( v17 >= 0 )
  {
    while( 1 )
    {
      v18 = *(_QWORD *)(*(_QWORD *)(a4 + 16) + 8i64 * v17);
      v19 = *(_QWORD *)(a4 + 8);
      if( v18 > v7 )
        break;
      *(_QWORD *)(v19 + 8i64 * v17) += v18;
      v7 -= v18;
      if( --v17 < 0 )
        return 1;
    }
    *(_QWORD *)(v19 + 8i64 * v17) += v7;
  }
  return 1;
}

Referenced by:

PpmParkRecordNodeStatistics