AuthzBasepCopyoutClaimAttributeValues

INT64 __fastcall AuthzBasepCopyoutClaimAttributeValues(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, INT64 pSizeUsed){
  unsigned int v5; 
  UINT64 v6; 
  unsigned __int16 v9; 
  __int64 v10; 
  UINT64 v11; 
  INT64 v12; 
  __int64 *v13; 
  UINT64 v14; 
  WCHAR *v15; 
  unsigned int v16; 
  UINT64 v17; 
  WCHAR *v18; 
  __int64 v19; 
  __int64 v20; 
  UINT64 v21; 
  INT64 v22; 
  __int64 *v23; 
  UINT64 v24; 
  unsigned int v25; 
  UINT64 v26; 
  WCHAR *v27; 
  __int64 v28; 
  __int64 v29; 
  UINT64 v30; 
  INT64 v31; 
  __int64 *v32; 
  unsigned int v33; 
  UINT64 v34; 
  WCHAR *v35; 
  __int64 v36; 
  UINT64 v37; 
  INT64 v38; 
  _QWORD *v39; 
  unsigned int v40; 
  __int64 v41; 
  v5 = 0;
  v6 = a3 + a4;
  if( a3 + a4 < a3 )
    return(unsigned int)-2147483643;
  *(_QWORD *)pSizeUsed = 0i64;
  v9 = *(_WORD *)(a1 + 48);
  if( !v9 )
    return(unsigned int)-1073741811;
  if( v9 > 2u )
  {
    switch( v9 )
    {
      case 3u:
        v29 = 8i64 * *(unsigned int *)(a1 + 60);
        v30 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
        if( v30 + v29 <= v6 )
        {
          *(_QWORD *)(a2 + 24) = v30;
          v31 = a1 + 72;
          v32 = *(__int64 **)(a1 + 72);
          v15 = (WCHAR *)(v29 + v30);
          v33 = 0;
          while( v32 != (__int64 *)v31 )
          {
            v34 = *((unsigned __int16 *)v32 + 20) + 2i64;
            v35 = (WCHAR *)((char *)v15 + v34);
            if( (unsigned __int64)v15 + v34 > v6 )
              return(unsigned int)-2147483643;
            *(_QWORD *)(((a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64) + 8i64 * v33) = v15;
            RtlStringCbCopyNW(v15, v34, (PWCHAR)v32[6], v34 - 2);
            v32 = (__int64 *)*v32;
            v15 = v35;
            ++v33;
          }
          goto LABEL_33;
        }
        return(unsigned int)-2147483643;
      case 4u:
        v20 = 16i64 * *(unsigned int *)(a1 + 60);
        v21 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
        if( v21 + v20 <= v6 )
        {
          *(_QWORD *)(a2 + 24) = v21;
          v22 = a1 + 72;
          v23 = *(__int64 **)(a1 + 72);
          v24 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
          v15 = (WCHAR *)(v20 + v21);
          v25 = 0;
          while( v23 != (__int64 *)v22 )
          {
            v26 = *((unsigned __int16 *)v23 + 24) + 2i64;
            v27 = (WCHAR *)((char *)v15 + v26);
            if( (unsigned __int64)v15 + v26 > v6 )
              return(unsigned int)-2147483643;
            v28 = 2i64 * v25;
            *(_QWORD *)(v24 + 8 * v28) = v23[5];
            *(_QWORD *)(v24 + 8 * v28 + 8) = v15;
            RtlStringCbCopyNW(v15, v26, (PWCHAR)v23[7], v26 - 2);
            v23 = (__int64 *)*v23;
            v15 = v27;
            ++v25;
          }
          goto LABEL_33;
        }
        return(unsigned int)-2147483643;
      case 5u:
        goto LABEL_10;
    }
    if( v9 != 6 )
    {
      if( v9 == 16 )
      {
LABEL_10:
        v10 = 16i64 * *(unsigned int *)(a1 + 60);
        v11 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
        if( v11 + v10 <= v6 )
        {
          *(_QWORD *)(a2 + 24) = v11;
          v12 = a1 + 72;
          v13 = *(__int64 **)(a1 + 72);
          v14 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
          v15 = (WCHAR *)(v10 + v11);
          v16 = 0;
          while( v13 != (__int64 *)v12 )
          {
            v17 = *((unsigned int *)v13 + 12);
            v18 = (WCHAR *)((char *)v15 + v17);
            if( (unsigned __int64)v15 + v17 > v6 )
              return(unsigned int)-2147483643;
            v19 = 2i64 * v16;
            *(_QWORD *)(v14 + 8 * v19) = v15;
            *(_DWORD *)(v14 + 8 * v19 + 8) = v17;
            memmove((UINT8 *)v15, (UINT8 *)v13[5], v17);
            v13 = (__int64 *)*v13;
            v15 = v18;
            ++v16;
          }
          goto LABEL_33;
        }
        return(unsigned int)-2147483643;
      }
      return(unsigned int)-1073741811;
    }
  }
  v36 = 8i64 * *(unsigned int *)(a1 + 60);
  v37 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
  if( v37 + v36 <= v6 )
  {
    v38 = a1 + 72;
    *(_QWORD *)(a2 + 24) = v37;
    v39 = *(_QWORD **)(a1 + 72);
    v40 = 0;
    while( v39 != (_QWORD *)v38 )
    {
      v41 = v40++;
      *(_QWORD *)(v37 + 8 * v41) = v39[5];
      v39 = (_QWORD *)*v39;
    }
    v15 = (WCHAR *)(v36 + v37);
LABEL_33:
    *(_QWORD *)pSizeUsed = (char *)v15 - a3;
    return v5;
  }
  return(unsigned int)-2147483643;
}

Referenced by:

AuthzBasepCopyoutClaimAttributes