AuthzBasepOperandValueTypesCompatible

BOOL __fastcall AuthzBasepOperandValueTypesCompatible(INT64 a1){
  BOOL result; 
  _WORD *v3; 
  INT64 v4; 
  unsigned __int16 *v5; 
  __int16 v6; 
  unsigned __int16 v7; 
  bool v8; 
  __int64 v9; 
  char v10; 
  result = *(_DWORD *)(a1 + 12);
  if( result || *(_DWORD *)(a1 + 52) == 1 )
  {
    v3 = (_WORD *)(a1 + 40);
    v4 = a1;
    v5 = (unsigned __int16 *)(a1 + 40);
    if( !result )
      v4 = (INT64)v3;
    if( !result )
      v5 = (unsigned __int16 *)a1;
    v6 = *(_WORD *)v4;
    if( *(_WORD *)v4 == 16 && *(_BYTE *)(v4 + 4) )
      goto LABEL_15;
    v7 = *v5;
    if( v7 == 16 )
    {
      if( (unsigned __int16)(v6 - 2) <= 1u )
        goto LABEL_15;
    }
    else
    {
      result = v7;
      LOWORD(result) = v7 - 1;
      if( (unsigned __int16)(v7 - 1) <= 1u && v6 == 2 )
      {
        v9 = *(_QWORD *)(v4 + 32);
        v10 = *(_BYTE *)(v9 + 8);
        if( v7 == 2 )
        {
          if( v10 != 2 )
            goto LABEL_15;
        }
        else if( v7 == 1 )
        {
          if( v10 == 2 )
            goto LABEL_15;
          result = -1;
          if( *(_QWORD *)v9 <= 0x7FFFFFFFFFFFFFFFui64 )
            goto LABEL_15;
        }
LABEL_14:
        LOBYTE(result) = 0;
        return result;
      }
      if( v7 == 6 )
      {
        if( v6 == 2 )
          goto LABEL_15;
      }
      else if( v7 == 5 && v6 == 16 )
      {
        goto LABEL_15;
      }
    }
    v8 = *(_WORD *)a1 == *v3;
  }
  else
  {
    result = *(unsigned __int16 *)(a1 + 40);
    v8 = *(_WORD *)a1 == result;
  }
  if( !v8 )
    goto LABEL_14;
LABEL_15:
  LOBYTE(result) = 1;
  return result;
}

Referenced by:

AuthzBasepComputeExpression
AuthzBasepEvaluateExpression
AuthzBasepValueInSet