RtlpHpVaMgrRangeFind

unsigned __int64 __fastcall RtlpHpVaMgrRangeFind(__int64 a1, unsigned __int16 a2, unsigned __int16 a3, _QWORD *a4){
  unsigned __int64 i; 
  __int64 v7; 
  __int64 v9; 
  int v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  _QWORD **v18; 
  unsigned __int64 v19; 
  _QWORD *v20; 
  __int64 v21; 

  i = *(_QWORD *)(a1 + 8);
  v7 = a3;
  v9 = a2;
  if( (*(_BYTE *)(a1 + 16) & 1) != 0 && i )
    i ^= a1 + 8;
  v10 = *(_BYTE *)(a1 + 16) & 1;
  v11 = 0i64;
  while( i )
  {
    if( a2 < *(_WORD *)(i + 24) )
    {
      v12 = *(_QWORD *)i;
      v11 = i;
    }
    else
    {
      if( a2 <= *(_WORD *)(i + 24) )
        goto LABEL_15;
      v12 = *(_QWORD *)(i + 8);
    }
    if( v10 && v12 )
      i ^= v12;
    else
      i = v12;
  }
  i = v11;
LABEL_15:
  if( i )
  {
    if( (unsigned __int16)v7 > 1u )
    {
      v14 = *(_QWORD *)(a1 + 24);
      v15 = v7;
      v16 = v7 - 1;
      while( 1 )
      {
        v17 = (i - *(_QWORD *)(v14 + 40)) >> *(_DWORD *)(v14 + 24);
        if( v9 + v17 + v15 - (v16 & (v17 + v15 - 1)) - 1 <= v17 + *(unsigned __int16 *)(i + 24) )
          break;
        v18 = *(_QWORD ***)(i + 8);
        v19 = i;
        if( v18 )
        {
          v20 = *v18;
          for( i = *(_QWORD *)(i + 8); v20; v20 = (_QWORD *)*v20 )
            i = (unsigned __int64)v20;
        }
        else
        {
          while( 1 )
          {
            i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
            if( !i || *(_QWORD *)i == v19 )
              break;
            v19 = i;
          }
        }
        if( !i )
          return i;
      }
      LODWORD(v21) = RtlSparseArrayElementAllocated(v14 + 16, v17 + v15 - (v16 & (v17 + v15 - 1)) - 1);
      *a4 = v21;
    }
    else
    {
      *a4 = i;
    }
  }
  return i;
}

Referenced by:

RtlpHpVaMgrAlloc