sub_1403E93BC

VOID __fastcall sub_1403E93BC(INT64 a1, INT64 *a2){
  INT64 *v2; 
  __int64 v3; 
  __int64 v4; 
  unsigned int v5; 
  INT64 v6; 
  INT64 v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  int v12; 
  __int64 v13; 
  unsigned __int8 CurrentIrql; 
  unsigned int *v15; 
  unsigned int *v16; 
  char v17; 
  unsigned __int64 v18; 
  __int64 v19; 
  char *v20; 
  unsigned int *v21; 
  __int64 v22; 
  __int64 v23; 
  bool v24; 
  char v25; 
  char v26; 
  INT64 v27; 
  INT64 *v28; 
  __int64 v29; 
  unsigned __int64 v30; 
  unsigned __int64 v31; 
  __int64 v32; 
  __int64 v33; 
  INT64 v34; 
  unsigned int v35; 
  unsigned __int64 v36; 
  __int64 v37; 
  __int64 v38; 
  INT64 v39; 
  unsigned __int8 *v40; 
  __int64 v41; 
  _QWORD *v42; 
  char *v43; 
  unsigned __int64 v44; 
  int v45; 
  __int64 v46; 
  __int64 v47; 
  __int64 v48; 
  unsigned __int64 v49; 
  unsigned __int64 i; 
  _DWORD *v51; 
  unsigned int v52; 
  unsigned __int8 v53; 
  unsigned __int64 v54; 
  unsigned __int64 v55; 
  int v56; 
  __int64 v57; 
  __int64 v58; 
  INT64 *v59; 
  __int64 v60; 
  __int64 v61; 
  __int64 v62; 
  __int64 v63; 
  unsigned __int8 v64; 
  unsigned int *v65; 
  unsigned int *v66; 
  char v67; 
  unsigned __int64 v68; 
  __int64 v69; 
  char *v70; 
  unsigned int *v71; 
  __int64 v72; 
  __int64 v73; 
  bool v74; 
  char v75; 
  char v76; 
  int v77; 
  unsigned __int8 v78; 
  unsigned __int64 v79; 
  unsigned __int64 v80; 
  int v81; 
  __int64 v82; 
  __int64 v83; 
  char **v84; 
  unsigned int v85; 
  int v86; 
  unsigned int v87; 
  INT64 v88; 
  char *v89; 
  char **v90; 
  char *v91; 
  char *v92; 
  unsigned __int64 v93; 
  int v94; 
  char *j; 
  unsigned __int64 v96; 
  unsigned __int64 v97; 
  __int64 v98; 
  __int64 v99; 
  unsigned __int64 v100; 
  unsigned __int64 v101; 
  INT64 v102; 
  unsigned int v103; 
  unsigned int v104; 
  char *v105; 
  _DWORD *v106; 
  __int64 v107; 
  __int64 v108; 
  INT64 v109; 
  unsigned __int8 v110; 
  unsigned __int64 v111; 
  unsigned __int64 v112; 
  int v113; 
  __int64 v114; 
  __int64 *v115; 
  __int64 *v116; 
  __int64 v117; 
  __int64 v118; 
  __int64 v119; 
  __int64 v120; 
  INT64 v121; 
  unsigned __int8 v122; 
  unsigned __int64 v123; 
  int v124; 
  __int64 v125; 
  __int64 v126; 
  INT64 v127; 
  INT64 v128; 
  __int64 v129; 
  int v130; 
  unsigned __int64 v131; 
  unsigned __int64 v132; 
  unsigned __int64 v133; 
  INT64 v134; 
  unsigned int v135; 
  int v136; 
  INT64 v137; 
  unsigned __int64 v138; 
  unsigned int v139; 
  __int64 v140; 
  INT64 v141; 
  INT64 v142; 
  __int64 v143; 
  __int64 v144; 
  __int64 v145; 
  INT64 *v146; 
  INT64 a4[2]; 
  char v148[88]; 
  unsigned int v150; 
  int v151; 
  unsigned __int64 v152; 
  unsigned int v153; 
  unsigned __int8 v154; 
  unsigned __int64 v155; 
  int v156; 
  unsigned int v157; 
  v2 = a2;
  v3 = a1;
  if( *(_DWORD *)a2 == 12 )
  {
    if( *(_QWORD *)(a1 + 2432) )
    {
      v4 = *(unsigned int *)(a1 + 2084);
      v5 = *(_DWORD *)(a1 + 2452);
      LOBYTE(a1) = v5;
      if( !(_DWORD)v4 )
      {
        LODWORD(a1) = v5 ^ ((unsigned __int8)v5 ^ (unsigned __int8)(8 * v5)) & 0x20;
        *(_DWORD *)(v3 + 2452) = a1;
        goto LABEL_6;
      }
      if( (((unsigned __int8)v5 ^ (unsigned __int8)(v5 >> 3)) & 4) == 0 )
      {
LABEL_6:
        if( (a1 & 4) != 0 )
        {
          v6 = v2[4];
          if( v6 )
          {
            v7 = v6 + v4;
            v8 = ((_WORD)v4 + (_WORD)v6) & 0xFFF;
            v9 = (unsigned int)(*((_DWORD *)v2 + 10) - v4) + 4095i64;
          }
          else
          {
            v9 = v2[1] & 0xFFF;
            v7 = v2[1];
            v8 = *((unsigned int *)v2 + 4) + 4095i64;
          }
          v10 = v7 & 0xFFFFFFFFFFFFF000ui64;
          v11 = (unsigned __int64)(v9 + v8) >> 12;
          while( v11 )
          {
            --v11;
            if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v3 + 688))(v10) && !*(_DWORD *)(v3 + 2296) )
            {
              *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v3 + 2320) = *(int *)v2;
              *(_QWORD *)(v3 + 2328) = v10;
              *(_DWORD *)(v3 + 2296) = 1;
              __b8(v3, 0i64);
            }
            *(_DWORD *)(v3 + 2088) += 256;
            v10 += 4096i64;
            v12 = *(_DWORD *)(v3 + 2088);
            if( v6 )
            {
              *(_DWORD *)(v3 + 2084) += 4096;
              if( v12 >= *(_DWORD *)(v3 + 2092) )
                break;
            }
          }
          if( v6 && !v11 )
            *(_DWORD *)(v3 + 2084) = 0;
          if( !*(_DWORD *)(v3 + 2084) )
          {
            v13 = *(_QWORD *)(v3 + 1344);
            CurrentIrql = KeGetCurrentIrql();
            __writecr8(0xFui64);
            (*(void(__fastcall **)(__int64))(v3 + 336))(v13);
            v15 = **(unsigned int ***)(v3 + 1552);
            v16 = v15 + 4;
            v17 = *((_BYTE *)v15 + 12);
            v18 = (unsigned __int64)&v15[6 * *v15 + 4];
            while( 2 )
            {
              v19 = 24i64;
              v20 = (char *)(v2 + 3);
              v21 = v16;
              while( 1 )
              {
                v22 = *(_QWORD *)v21;
                v21 += 2;
                v23 = *(_QWORD *)v20;
                v20 += 8;
                if( v22 != v23 )
                  break;
                v19 = (unsigned int)(v19 - 8);
                if( (unsigned int)v19 < 8 )
                {
                  v24 = (_DWORD)v19 == 0;
                  while( !v24 )
                  {
                    v25 = *(_BYTE *)v21;
                    v21 = (unsigned int *)((char *)v21 + 1);
                    v26 = *v20++;
                    if( v25 != v26 )
                      goto LABEL_29;
                    v24 = (_DWORD)v19 == 1;
                    v19 = (unsigned int)(v19 - 1);
                  }
                  goto LABEL_30;
                }
              }
LABEL_29:
              v16 += 6;
              if( (unsigned __int64)v16 < v18 )
                continue;
              break;
            }
LABEL_30:
            (*(void(__fastcall **)(_QWORD, __int64, char *, unsigned int *))(v3 + 400))(
              *(_QWORD *)(v3 + 1344),
              v19,
              v20,
              v21);
            __writecr8(CurrentIrql);
            if( !v17 )
              goto LABEL_35;
            if( (*(_DWORD *)(v3 + 2452) & 0x10) != 0 && !*(_DWORD *)(v3 + 2296) )
            {
              *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v3 + 2320) = *(int *)v2;
              *(_QWORD *)(v3 + 2328) = 1i64;
              *(_DWORD *)(v3 + 2296) = 1;
              __b8(v3, 0i64);
            }
            if( v2[3] != 1 )
            {
LABEL_35:
              if( v16 == (unsigned int *)v18 && !*(_DWORD *)(v3 + 2296) )
              {
                *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v3 + 2320) = *(int *)v2;
                *(_QWORD *)(v3 + 2328) = v16;
                *(_DWORD *)(v3 + 2296) = 1;
                __b8(v3, 0i64);
              }
            }
          }
          return;
        }
        goto LABEL_39;
      }
    }
    *(_DWORD *)(v3 + 2084) = 0;
    return;
  }
LABEL_39:
  v27 = v2[4];
  v28 = v2 + 6;
  v127 = v27;
  v146 = v2 + 6;
  v29 = *(unsigned int *)(v3 + 2084);
  v30 = ((v27 & 0xFFF) + (unsigned __int64)*((unsigned int *)v2 + 10) + 4095) >> 12;
  v31 = (unsigned int)v30;
  v130 = v30;
  v138 = (unsigned int)v30;
  v32 = (__int64)v2 + 20 * (unsigned int)v30 + 48;
  v145 = v32;
  v33 = (__int64)v2 + 20 * v29 + 48;
  v34 = v27 + (unsigned int)((_DWORD)v29 << 12);
  v144 = v33;
  v137 = v34;
  if( (*(_DWORD *)(v3 + 2448) & 0x40000000) != 0 && (*(_DWORD *)(v3 + 2452) & 0x1000) == 0 || !*(_QWORD *)(v3 + 2696) )
  {
    v35 = 0;
    v150 = 0;
    do
    {
      if( (unsigned int)v30 <= 0x10 )
      {
        v32 = v35;
        if( v35 >= (unsigned int)v30 )
          goto LABEL_82;
      }
      else
      {
        v36 = __rdtsc();
        v37 = __ROR8__(v36, 3);
        v32 = ((((v37 ^ v36) * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ (0x7010008004002001i64 * (v37 ^ v36)))
            % v31;
      }
      v38 = (unsigned int)v32;
      v32 = (unsigned int)((_DWORD)v32 << 12);
      v39 = v27 + (unsigned int)v32;
      v40 = (unsigned __int8 *)v28 + 20 * v38;
      if( (v40[15] & 0x80u) == 0 )
      {
        *(_DWORD *)(v3 + 2088) += 4096;
        LODWORD(v41) = *(_DWORD *)(v3 + 2068);
        v42 = (_QWORD *)v39;
        v43 = (char *)v39;
        if( v39 < (unsigned __int64)(v39 + 4096) )
        {
          do
          {
            _mm_prefetchnta(v43);
            v43 += 64;
          }
          while( (unsigned __int64)v43 < v39 + 4096 );
        }
        v44 = *(_QWORD *)(v3 + 2072);
        v45 = 32;
        do
        {
          v46 = 8i64;
          do
          {
            v47 = v44 ^ *v42;
            v48 = v42[1];
            v42 += 2;
            v44 = __ROL8__(__ROL8__(v47, v41) ^ v48, v41);
            --v46;
          }
          while( v46 );
          v49 = __ROL8__(*(_QWORD *)(v3 + 2072) ^ ((unsigned __int64)v42 - v39), 17) ^ *(_QWORD *)(v3 + 2072) ^ ((unsigned __int64)v42 - v39);
          v41 = ((unsigned __int8)(((v49 * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ v49) ^ (unsigned __int8)v41) & 0x3F;
          if( !(_DWORD)v41 )
            v41 = 1i64;
          --v45;
        }
        while( v45 );
        for( i = v44; ; LODWORD(v44) = i ^ v44 )
        {
          i >>= 31;
          if( !i )
            break;
        }
        v51 = v40 + 16;
        v52 = v44 & 0x7FFFFFFF;
        if( v52 != (*((_DWORD *)v40 + 4) & 0x7FFFFFFF) )
        {
          v151 = *((_DWORD *)v40 + 4) >> 31;
          if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
          {
            v53 = KeGetCurrentIrql();
            v154 = v53;
            __writecr8(2ui64);
            v54 = v39 & 0xFFFFFFFFFFFFF000ui64;
            v133 = (v39 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 2 )
            {
              v55 = v53;
              while( 1 )
              {
                v56 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, _QWORD *, __int64))(v3 + 1128))(
                        v54,
                        0i64,
                        v42,
                        v41);
                if( v56 != -1073741267 )
                  break;
                if( !v151 )
                  goto LABEL_70;
                v53 = v154;
                if( v154 > 1u )
                  goto LABEL_68;
                v55 = v154;
                __writecr8(v154);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v56 < 0 )
              {
LABEL_70:
                __writecr8(v55);
                v51 = v40 + 16;
                goto LABEL_71;
              }
              v53 = v154;
LABEL_68:
              v54 += 4096i64;
              v133 += 4096i64;
              if( v133 != ((v39 + 4095) | 0xFFF) )
                continue;
              break;
            }
            __writecr8(v55);
            v51 = v40 + 16;
          }
          else
          {
LABEL_71:
            v57 = (unsigned int)*v51;
            LODWORD(v57) = v57 & 0x7FFFFFFF;
            if( !*(_DWORD *)(v3 + 2296) )
            {
              *(_QWORD *)(*(_QWORD *)(v3 + 1424) + 24i64) = v57 ^ v52;
              if( !*(_DWORD *)(v3 + 2296) )
              {
                *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v3 + 2320) = *(int *)v2;
                *(_QWORD *)(v3 + 2328) = v39;
                *(_DWORD *)(v3 + 2296) = 1;
                __b8(v3, 0i64);
              }
            }
          }
        }
        sub_1403E92DC(v3, v39, 0x1000ui64, (INT64)a4);
        v58 = 16i64;
        v59 = a4;
        while( 1 )
        {
          v60 = *v59++;
          v61 = *(_QWORD *)v40;
          v40 += 8;
          if( v60 != v61 )
            break;
          v58 = (unsigned int)(v58 - 8);
          if( (unsigned int)v58 < 8 )
          {
            if( !(_DWORD)v58 )
              goto LABEL_80;
            while( 1 )
            {
              v32 = *(unsigned __int8 *)v59;
              v59 = (INT64 *)((char *)v59 + 1);
              v62 = *v40++;
              if( v32 != v62 )
                goto LABEL_90;
              v24 = (_DWORD)v58 == 1;
              v58 = (unsigned int)(v58 - 1);
              if( v24 )
                goto LABEL_80;
            }
          }
        }
LABEL_90:
        v77 = *v51 >> 31;
        if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
        {
          v78 = KeGetCurrentIrql();
          __writecr8(2ui64);
          v79 = v39 & 0xFFFFFFFFFFFFF000ui64;
          v152 = (v39 & 0xFFFFFFFFFFFFF000ui64) - 1;
          while( 2 )
          {
            v80 = v78;
            while( 1 )
            {
              v81 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, INT64 *))(v3 + 1128))(
                      v79,
                      0i64,
                      v58,
                      v59);
              if( v81 != -1073741267 )
                break;
              if( !v77 )
                goto LABEL_100;
              if( v78 > 1u )
                goto LABEL_98;
              v80 = v78;
              __writecr8(v78);
              KeGetCurrentIrql();
              __writecr8(2ui64);
            }
            if( v81 < 0 )
            {
LABEL_100:
              __writecr8(v80);
              goto LABEL_101;
            }
LABEL_98:
            v79 += 4096i64;
            v152 += 4096i64;
            if( v152 != ((v39 + 4095) | 0xFFF) )
              continue;
            break;
          }
          __writecr8(v80);
        }
        else
        {
LABEL_101:
          if( !*(_DWORD *)(v3 + 2296) )
          {
            *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v3 + 2320) = *(int *)v2;
            *(_QWORD *)(v3 + 2328) = v39;
            *(_DWORD *)(v3 + 2296) = 1;
            __b8(v3, 0i64);
          }
        }
LABEL_80:
        *(_DWORD *)(v3 + 2088) += 0x10000;
        v28 = v2 + 6;
        LODWORD(v30) = v130;
        v27 = v127;
        v31 = v138;
      }
      v35 = v150 + 1;
      v150 = v35;
    }
    while( v35 < 0x10 );
    goto LABEL_82;
  }
  if( v33 == v32 )
    goto LABEL_82;
  do
  {
    if( *(_DWORD *)(v3 + 2088) >= *(_DWORD *)(v3 + 2092) )
      break;
    v82 = 0i64;
    if( v33 == v32 )
      goto LABEL_169;
    v83 = v33;
    do
    {
      if( *(char *)(v83 + 15) < 0 )
        break;
      v82 = (unsigned int)(v82 + 1);
      v83 = v33 + 20 * v82;
    }
    while( v83 != v32 );
    if( !(_DWORD)v82 )
      goto LABEL_169;
    v84 = *(char ***)(v3 + 2696);
    v85 = v82;
    LODWORD(v82) = 0;
    v135 = v85;
    v136 = 0;
    v129 = v33;
    v128 = v34;
    v134 = (INT64)v84;
    do
    {
      v86 = 8;
      if( v85 < 8 )
        v86 = v85;
      v87 = 0;
      v153 = v86;
      v88 = v128;
      v89 = v148;
      v90 = v84;
      do
      {
        v90[1] = (char *)4096;
        v91 = (char *)(v88 + (v87 << 12));
        *v90 = v91;
        v92 = v91;
        v93 = *(_QWORD *)(v3 + 2072);
        *(_DWORD *)(v3 + 2088) += 4096;
        v94 = *(_DWORD *)(v3 + 2068);
        v155 = v93;
        for( j = v91; j < v91 + 4096; j += 64 )
          _mm_prefetchnta(j);
        v96 = v155;
        v97 = v155;
        v156 = 32;
        do
        {
          v98 = 8i64;
          do
          {
            v99 = *((_QWORD *)v92 + 1) ^ __ROL8__(*(_QWORD *)v92 ^ v97, v94);
            v92 += 16;
            v97 = __ROL8__(v99, v94);
            --v98;
          }
          while( v98 );
          v100 = __ROL8__(v96 ^ (v92 - v91), 17) ^ v96 ^ (v92 - v91);
          v94 = ((unsigned __int8)(((v100 * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ v100) ^ (unsigned __int8)v94) & 0x3F;
          if( !v94 )
            LOBYTE(v94) = 1;
          --v156;
        }
        while( v156 );
        v101 = v97;
        v88 = v128;
        while( 1 )
        {
          v101 >>= 31;
          if( !v101 )
            break;
          LODWORD(v97) = v101 ^ v97;
        }
        ++v87;
        *(_DWORD *)v89 = v97 & 0x7FFFFFFF;
        v90 += 6;
        v89 += 4;
      }
      while( v87 < v153 );
      v2 = a2;
      v102 = v128;
      v103 = v153;
      sub_1403E933C(v3, v134, v153);
      v104 = 0;
      v157 = 0;
      if( v153 )
      {
        v105 = v148;
        v106 = (_DWORD *)(v129 + 16);
        while( 1 )
        {
          v107 = *(unsigned int *)v105;
          v108 = (unsigned int)*v106;
          v139 = v107;
          if( (_DWORD)v107 != (*v106 & 0x7FFFFFFF) )
          {
            v109 = v102 + (v104 << 12);
            v142 = v109;
            if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
            {
              v110 = KeGetCurrentIrql();
              __writecr8(2ui64);
              v111 = v109 & 0xFFFFFFFFFFFFF000ui64;
              v140 = (v109 + 4095) | 0xFFF;
              v131 = (v109 & 0xFFFFFFFFFFFFF000ui64) - 1;
              while( 2 )
              {
                v112 = v110;
                while( 1 )
                {
                  v113 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v3 + 1128))(v111, 0i64);
                  if( v113 != -1073741267 )
                    break;
                  if( v110 > 1u )
                    goto LABEL_136;
                  v112 = v110;
                  __writecr8(v110);
                  KeGetCurrentIrql();
                  __writecr8(2ui64);
                }
                if( v113 < 0 )
                {
                  __writecr8(v112);
                  v108 = (unsigned int)*v106;
                  v103 = v153;
                  v107 = v139;
                  v109 = v142;
                  v104 = v157;
                  v102 = v128;
                  break;
                }
LABEL_136:
                v111 += 4096i64;
                v131 += 4096i64;
                if( v131 != v140 )
                  continue;
                goto LABEL_137;
              }
            }
            LODWORD(v108) = v108 & 0x7FFFFFFF;
            if( !*(_DWORD *)(v3 + 2296) )
            {
              *(_QWORD *)(*(_QWORD *)(v3 + 1424) + 24i64) = v107 ^ v108;
              if( !*(_DWORD *)(v3 + 2296) )
              {
                *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v3 + 2312) = (char *)a2 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v3 + 2320) = *(int *)a2;
                *(_QWORD *)(v3 + 2328) = v109;
                *(_DWORD *)(v3 + 2296) = 1;
                __b8(v3, 0i64);
              }
            }
          }
          v114 = 16i64;
          v115 = (__int64 *)(v129 + 20i64 * v104);
          v116 = (__int64 *)(48i64 * v104 + v134 + 16);
          while( 1 )
          {
            v117 = *v116++;
            v118 = *v115++;
            if( v117 != v118 )
              break;
            v114 = (unsigned int)(v114 - 8);
            if( (unsigned int)v114 < 8 )
            {
              if( !(_DWORD)v114 )
                goto LABEL_162;
              while( 1 )
              {
                v119 = *(unsigned __int8 *)v116;
                v116 = (__int64 *)((char *)v116 + 1);
                v120 = *(unsigned __int8 *)v115;
                v115 = (__int64 *)((char *)v115 + 1);
                if( v119 != v120 )
                  goto LABEL_149;
                v24 = (_DWORD)v114 == 1;
                v114 = (unsigned int)(v114 - 1);
                if( v24 )
                  goto LABEL_162;
              }
            }
          }
LABEL_149:
          v121 = v102 + (v104 << 12);
          v141 = v121;
          if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
          {
            v122 = KeGetCurrentIrql();
            __writecr8(2ui64);
            v123 = v121 & 0xFFFFFFFFFFFFF000ui64;
            v143 = (v121 + 4095) | 0xFFF;
            v132 = (v121 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 2 )
            {
              v112 = v122;
              while( 1 )
              {
                v124 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, __int64 *))(v3 + 1128))(
                         v123,
                         0i64,
                         v114,
                         v115);
                if( v124 != -1073741267 )
                  break;
                if( v122 > 1u )
                  goto LABEL_156;
                v112 = v122;
                __writecr8(v122);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v124 < 0 )
              {
                __writecr8(v112);
                v121 = v141;
                v104 = v157;
                goto LABEL_159;
              }
LABEL_156:
              v123 += 4096i64;
              v132 += 4096i64;
              if( v132 != v143 )
                continue;
              break;
            }
LABEL_137:
            __writecr8(v112);
            v104 = v157;
            goto LABEL_161;
          }
LABEL_159:
          if( !*(_DWORD *)(v3 + 2296) )
          {
            *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v3 + 2312) = (char *)a2 - 0x4C48B4211BBACBEBi64;
            v125 = *(int *)a2;
            *(_QWORD *)(v3 + 2328) = v121;
            *(_QWORD *)(v3 + 2320) = v125;
            *(_DWORD *)(v3 + 2296) = 1;
            __b8(v3, 0i64);
          }
LABEL_161:
          v103 = v153;
LABEL_162:
          v102 = v128;
          ++v104;
          v105 += 4;
          v157 = v104;
          v106 += 5;
          if( v104 >= v103 )
          {
            LODWORD(v82) = v136;
            break;
          }
        }
      }
      v82 = v103 + (unsigned int)v82;
      v136 = v82;
      v128 = (v103 << 12) + v102;
      *(_DWORD *)(v3 + 2088) += v103 << 15;
      v85 = v135 - v103;
      v129 += 20i64 * v103;
      v135 -= v103;
      if( *(_DWORD *)(v3 + 2088) >= *(_DWORD *)(v3 + 2092) )
        break;
      v84 = (char **)v134;
    }
    while( v85 );
    v33 = v144;
    v32 = v145;
    v34 = v137;
LABEL_169:
    while( 1 )
    {
      v126 = v33 + 20 * v82;
      if( v126 == v32 || *(char *)(v126 + 15) >= 0 )
        break;
      v82 = (unsigned int)(v82 + 1);
    }
    v34 += (unsigned int)((_DWORD)v82 << 12);
    v137 = v34;
    v33 += 20 * v82;
    v144 = v33;
  }
  while( v33 != v32 );
  if( v33 != v32 )
  {
    *(_DWORD *)(v3 + 2084) = (v33 - (__int64)v146) / 20;
    return;
  }
LABEL_82:
  v63 = *(_QWORD *)(v3 + 1344);
  v64 = KeGetCurrentIrql();
  __writecr8(0xFui64);
  (*(void(__fastcall **)(__int64, __int64))(v3 + 336))(v63, v32);
  v65 = **(unsigned int ***)(v3 + 1552);
  v66 = v65 + 4;
  v67 = *((_BYTE *)v65 + 12);
  v68 = (unsigned __int64)&v65[6 * *v65 + 4];
  while( 2 )
  {
    v69 = 24i64;
    v70 = (char *)(v2 + 3);
    v71 = v66;
    while( 1 )
    {
      v72 = *(_QWORD *)v71;
      v71 += 2;
      v73 = *(_QWORD *)v70;
      v70 += 8;
      if( v72 != v73 )
        break;
      v69 = (unsigned int)(v69 - 8);
      if( (unsigned int)v69 < 8 )
      {
        v74 = (_DWORD)v69 == 0;
        while( !v74 )
        {
          v75 = *(_BYTE *)v71;
          v71 = (unsigned int *)((char *)v71 + 1);
          v76 = *v70++;
          if( v75 != v76 )
            goto LABEL_173;
          v74 = (_DWORD)v69 == 1;
          v69 = (unsigned int)(v69 - 1);
        }
        goto LABEL_174;
      }
    }
LABEL_173:
    v66 += 6;
    if( (unsigned __int64)v66 < v68 )
      continue;
    break;
  }
LABEL_174:
  (*(void(__fastcall **)(_QWORD, __int64, char *, unsigned int *))(v3 + 400))(*(_QWORD *)(v3 + 1344), v69, v70, v71);
  __writecr8(v64);
  if( !v67 )
    goto LABEL_185;
  if( (*(_DWORD *)(v3 + 2452) & 0x10) != 0 && !*(_DWORD *)(v3 + 2296) )
  {
    *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
    *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
    *(_QWORD *)(v3 + 2320) = *(int *)v2;
    *(_QWORD *)(v3 + 2328) = 1i64;
    *(_DWORD *)(v3 + 2296) = 1;
    __b8(v3, 0i64);
  }
  if( v2[3] != 1 )
  {
LABEL_185:
    if( v66 == (unsigned int *)v68 && !*(_DWORD *)(v3 + 2296) )
    {
      *(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
      *(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
      *(_QWORD *)(v3 + 2320) = *(int *)v2;
      *(_QWORD *)(v3 + 2328) = v66;
      *(_DWORD *)(v3 + 2296) = 1;
      __b8(v3, 0i64);
    }
  }
  *(_DWORD *)(v3 + 2084) = 0;
}

Referenced by:

Argument1