CmpSortedValueEnumStackAdvanceInternal

INT64 __fastcall CmpSortedValueEnumStackAdvanceInternal(INT16 *rcx0){
  INT16 i; 
  INT64 EntryAtLayerHeight; 
  INT64 v5; 
  __int64 v6; 
  INT16 v7; 
  __int64 v8; 
  INT64 v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 a1; 
  __int64 j; 
  if( *((_BYTE *)rcx0 + 10) )
  {
    if( !*(_QWORD *)rcx0 )
      return 2147483674i64;
    for( i = 0; i <= rcx0[4]; ++i )
    {
      EntryAtLayerHeight = CmpSortedValueEnumStackGetEntryAtLayerHeight((INT64)rcx0, i);
      v5 = EntryAtLayerHeight;
      v6 = *(unsigned int *)(EntryAtLayerHeight + 28);
      if( (unsigned int)v6 < *(_DWORD *)(EntryAtLayerHeight + 24) )
      {
        a1 = *(_QWORD *)(*(_QWORD *)(EntryAtLayerHeight + 8) + 8 * v6);
        if( a1 == *(_QWORD *)rcx0 || !(unsigned int)CmpSortedValueEnumStackValueCompareFunction(&a1, rcx0) )
          *(_DWORD *)(v5 + 28) = v6 + 1;
      }
    }
  }
  v7 = rcx0[4];
  v8 = 0i64;
  for( j = 0i64; v7 >= 0; --v7 )
  {
    v9 = CmpSortedValueEnumStackGetEntryAtLayerHeight((INT64)rcx0, v7);
    v10 = *(unsigned int *)(v9 + 28);
    if( (unsigned int)v10 < *(_DWORD *)(v9 + 24) )
    {
      v11 = *(_QWORD *)(*(_QWORD *)(v9 + 8) + 8 * v10);
      a1 = v11;
      if( !v8 || (int)CmpSortedValueEnumStackValueCompareFunction(&j, &a1) > 0 )
      {
        v8 = v11;
        j = v11;
      }
    }
  }
  *(_QWORD *)rcx0 = v8;
  *((_BYTE *)rcx0 + 10) = 1;
  return v8 == 0 ? 0x8000001A : 0;
}

Referenced by:

CmpSortedValueEnumStackAdvance