Normalization__AppendDecomposedChar

NTSTATUS __stdcall Normalization__AppendDecomposedChar(
        _RTL_NORMALIZATION *pNormalization,
        INT64 cDecompose,
        _RTL_NORM_BUFFER *pNormBuffer){
  __int16 v3; 
  unsigned __int16 v6; 
  __int64 v7; 
  unsigned __int16 i; 
  __int16 v9; 
  int v10; 
  unsigned __int16 v11; 
  __int64 v12; 
  int v13; 
  INT64 v14; 
  NTSTATUS result; 

  v3 = cDecompose;
  v6 = *(_WORD *)(*((_QWORD *)pNormalization + 8) + 2i64 * ((int)cDecompose % pNormalization[14]));
  if( (v6 & 0xE000) == 0 )
  {
    v7 = *((_QWORD *)pNormalization + 9);
    for( i = 2 * v6; ; i += 2 )
    {
      v9 = *(_WORD *)(v7 + 2i64 * i);
      if( !v9 || v9 == v3 )
        break;
    }
    v6 = *(_WORD *)(v7 + 2i64 * i + 2);
  }
  v10 = v6 >> 13;
  if( v10 == 7 )
    v10 = 100;
  v11 = v6 & 0x1FFF;
  if( v10 )
  {
    do
    {
      v12 = *((_QWORD *)pNormalization + 10);
      v13 = *(unsigned __int16 *)(v12 + 2i64 * v11);
      if( !(_WORD)v13 )
        break;
      v14 = *(unsigned __int16 *)(v12 + 2i64 * v11);
      if( (unsigned int)(v13 - 55296) <= 0x7FF )
      {
        ++v11;
        --v10;
        v14 = ((v13 - 55287) << 10) + (unsigned int)*(unsigned __int16 *)(v12 + 2i64 * v11);
      }
      result = Normalization__NormalizeCharacter(
                 pNormalization,
                 v14,
                 *(_BYTE *)(((__int64)(int)v14 >> 7) + *((_QWORD *)pNormalization + 4)),
                 pNormBuffer);
      if( result )
        return result;
      --v10;
      ++v11;
    }
    while( v10 > 0 );
  }
  return 0;
}

Referenced by:

Normalization__NormalizeCharacter