KsepCacheLookup

_QWORD *__fastcall KsepCacheLookup(INT64 a1, INT64 a2){
  unsigned int v4; 
  _QWORD **v5; 
  _QWORD *v6; 
  _QWORD *result; 
  _QWORD *v8; 
  _QWORD *v9; 
  __int64 v10; 
  _QWORD *v11; 
  _QWORD *v12; 
  v4 = (*(__int64(__fastcall **)(INT64))(a1 + 80))(a2);
  v5 = (_QWORD **)(*(_QWORD *)(a1 + 16) + 16i64 * (v4 % *(_DWORD *)(a1 + 12)));
  v6 = *v5;
  if( *v5 == v5 )
  {
LABEL_2:
    ++*(_DWORD *)(a1 + 52);
    return 0i64;
  }
  else
  {
    while( 1 )
    {
      v8 = v6 - 1;
      if( v4 == *((_DWORD *)v6 - 2) )
      {
        if( (*(unsigned int(__fastcall **)(INT64, _QWORD *))(a1 + 72))(a2, v6 - 1) )
          break;
      }
      v6 = (_QWORD *)*v6;
      if( v6 == (_QWORD *)(*(_QWORD *)(a1 + 16) + 16i64 * (v4 % *(_DWORD *)(a1 + 12))) )
        goto LABEL_2;
    }
    v9 = v8 + 3;
    v10 = v8[3];
    if( *(_QWORD **)(v10 + 8) != v8 + 3
      || (v11 = (_QWORD *)v8[4], (_QWORD *)*v11 != v9)
      || (*v11 = v10, *(_QWORD *)(v10 + 8) = v11, v12 = *(_QWORD **)(a1 + 40), *v12 != a1 + 32) )
    {
      __fastfail(3u);
    }
    *v9 = a1 + 32;
    v8[4] = v12;
    *v12 = v9;
    *(_QWORD *)(a1 + 40) = v9;
    result = v6 - 1;
    ++*(_DWORD *)(a1 + 48);
  }
  return result;
}

Referenced by:

KseAddHardwareId
KseLookupHardwareId
KseQueryDeviceDataList
KsepDbCacheInsertDevice
KsepDbCacheQueryDevice