PpmParkCalculateUnparkCount

UINT8 __stdcall PpmParkCalculateUnparkCount(){
  __int64 v1; 
  unsigned __int8 v2; 
  unsigned int v3; 
  unsigned int v4; 
  unsigned __int16 v5; 
  __int64 v6; 
  unsigned __int8 v7; 
  unsigned int v8; 
  __int64 v9; 
  unsigned int v10; 
  char v11; 
  int v12; 
  unsigned __int8 v13; 
  unsigned __int8 v14; 
  unsigned int v15; 
  bool v16; 
  int v17; 
  unsigned int v18; 
  int v19; 
  char v20; 
  char v21; 
  char v22; 
  unsigned __int8 v23; 
  __int16 v24; 

  if( !PpmIsParkingEnabled )
    return 1;
  v1 = 2736i64 * *(&stru_140C23628 + 441);
  v2 = *(_BYTE *)(v1 + *(&stru_140C00F40 + 365) + 166);
  v3 = *(_DWORD *)(v1 + *(&stru_140C00F40 + 365) + 176);
  v4 = *(_DWORD *)(v1 + *(&stru_140C00F40 + 365) + 172);
  v21 = *(_BYTE *)(v1 + *(&stru_140C00F40 + 365) + 169);
  v22 = *(_BYTE *)(v1 + *(&stru_140C00F40 + 365) + 168);
  v23 = v2;
  if( *(&PopIrpWorkerControlEvent + 313) == 5 )
  {
    v4 = 0;
    v3 = 0;
  }
  v5 = 0;
  v24 = 0;
  if( !(_DWORD)PpmParkNumNodes )
    return 1;
  do
  {
    v6 = PpmParkNodes + 272i64 * v5;
    if( (*(_BYTE *)(v6 + 146) & 1) != 0 )
      goto LABEL_52;
    ++*(_DWORD *)v6;
    v7 = 0;
    v8 = *(_DWORD *)v6;
    v9 = 0i64;
    do
    {
      v10 = *(unsigned __int8 *)(v9 + v6 + 128);
      if( !(_BYTE)v10 || ((unsigned __int8)(1 << (v7 + 1)) & *(_BYTE *)(v6 + 146)) != 0 )
        goto LABEL_50;
      v11 = PpmParkUnparkCores;
      v12 = (unsigned __int8)PpmParkGranularity;
      v13 = *(_BYTE *)(v6 + 140);
      v14 = PpmParkGranularity;
      if( PpmParkUnparkCores )
        v14 = 1;
      if( (!PpmParkUnparkCores || PpmParkGranularity == 1) && v13 < (unsigned __int8)v10 && *(_BYTE *)(v6 + 141) > v2 )
        ++v13;
      v15 = *(unsigned __int8 *)(v9 + v6 + 138);
      if( PpmParkUnparkCores )
        v15 /= (unsigned __int8)PpmParkGranularity;
      v16 = (unsigned __int8)v15 <= v13;
      if( (unsigned __int8)v15 < v13 )
      {
        if( (unsigned __int8)v15 < (unsigned __int8)v10 && v8 >= v3 )
        {
          *(_DWORD *)v6 = 0;
          if( v21 )
          {
            switch( v21 )
            {
              case 1:
                LOBYTE(v15) = v14 + v15;
                break;
              case 2:
                LOBYTE(v15) = v10;
                break;
              case 3:
                v17 = *(unsigned __int8 *)(v6 + 145);
                v18 = v17 + (unsigned __int8)v15;
                LOBYTE(v15) = v15 + v17;
                if( v18 >= v10 )
                  LOBYTE(v15) = v10;
                break;
            }
            goto LABEL_45;
          }
          goto LABEL_44;
        }
        v16 = (unsigned __int8)v15 <= v13;
      }
      if( v16 || (unsigned __int8)v15 <= v14 || v8 < v4 )
        goto LABEL_45;
      *(_DWORD *)v6 = 0;
      if( v22 )
      {
        switch( v22 )
        {
          case 1:
            LOBYTE(v15) = v15 - v14;
            break;
          case 2:
            LOBYTE(v15) = v14;
            break;
          case 3:
            v19 = *(unsigned __int8 *)(v6 + 145);
            if( (unsigned __int8)v15 <= (unsigned int)(v19 + v12) )
              LOBYTE(v15) = v12;
            else
              LOBYTE(v15) = v15 - v19;
            break;
        }
        goto LABEL_45;
      }
LABEL_44:
      LOBYTE(v15) = v13;
LABEL_45:
      v20 = v15;
      if( (unsigned __int8)v15 >= (unsigned __int8)v10 )
        v20 = v10;
      if( v11 )
        v20 *= (_BYTE)v12;
      v2 = v23;
      *(_BYTE *)(v9 + v6 + 138) = v20;
LABEL_50:
      ++v7;
      ++v9;
    }
    while( v7 < 2u );
    v5 = v24;
LABEL_52:
    v24 = ++v5;
  }
  while( v5 < (unsigned int)PpmParkNumNodes );
  return 1;
}

Referenced by:

PpmCheckComputeHeteroResponse