PopAvlFindOrMakeStatsForScenarioType

CHAR *__stdcall PopAvlFindOrMakeStatsForScenarioType(INT64 a1){
  int v1; 
  const wchar_t *v2; 
  char *v3; 
  char *inserted; 
  char NewElement[8]; 
  _UNICODE_STRING DestinationString; 
  _QWORD Buffer[28]; 

  v1 = a1;
  NewElement[0] = 0;
  memset(Buffer, 0i64, 0xD8u);
  DestinationString = 0i64;
  if( v1 )
  {
    if( v1 != 1 )
      goto LABEL_4;
    v2 = MOBILE_HOTSPOT_STATS_ID;
  }
  else
  {
    v2 = AUDIO_STATS_ID;
  }
  RtlInitUnicodeString(&DestinationString, v2);
  PopUnicodeStringDeepCopy((PUNICODE_STRING)&Buffer[1], &DestinationString);
LABEL_4:
  v3 = (char *)RtlLookupElementGenericTableAvl(&PowerRequestStatsDatabase, Buffer);
  if( !v3 )
  {
    inserted = (char *)RtlInsertElementGenericTableAvl(
                         &PowerRequestStatsDatabase,
                         Buffer,
                         0xD8ui64,
                         (UINT8 *)NewElement);
    v3 = inserted;
    if( inserted )
    {
      if( NewElement[0] )
      {
        memset(inserted, 0i64, 0xD8u);
        if( PopUnicodeStringDeepCopy((PUNICODE_STRING)(v3 + 8), (PCUNICODE_STRING)&Buffer[1]) < 0 )
          RtlDeleteElementGenericTableAvl(&PowerRequestStatsDatabase, Buffer);
      }
    }
  }
  PopFreeUnicodeString((INT64)&Buffer[1]);
  return v3;
}

Referenced by:

PopStatsScenarioStateChange