sub_140A0C0FC

INT64 __fastcall sub_140A0C0FC(INT64 *a1, INT64 a2, INT64 a3){
  INT64 v3; 
  __int64 v4; 
  int *v5; 
  INT64 result; 
  int v7; 
  int *v8; 
  unsigned __int64 v9; 
  _BYTE *v10; 
  unsigned int v11; 
  unsigned int v12; 
  INT64 v13; 
  int v14; 
  unsigned int v15; 
  unsigned int v16; 
  int v17; 
  unsigned int v18; 
  INT64 v19; 
  __int64 v20; 
  int v21; 
  int v22; 
  int v23; 
  int v24; 
  __int64 v25; 
  int v26; 
  __int64 v27; 
  unsigned int v28; 
  CHAR v29; 
  __int64(__fastcall *v30)(INT64, char *, _QWORD, unsigned __int64); 
  UINT64 *v31; 
  int v32; 
  int v33; 
  int v34; 
  int *v35; 
  unsigned int v36; 
  unsigned int v37; 
  _BYTE *v38; 
  unsigned int v39; 
  unsigned int v40; 
  int v41; 
  _BYTE *v42; 
  unsigned int v43; 
  UINT64 **v44; 
  __int64 v45; 
  int v46; 
  int v47; 
  int v48; 
  int v49; 
  __int64 v50; 
  int v51; 
  unsigned __int64 v52; 
  __int64 v53; 
  int v54; 
  __int64 v55; 
  int v56; 
  ULONG_PTR v57; 
  __int64(__fastcall *v58)(ULONG_PTR, __int64, _QWORD, int *); 
  __int64 v59; 
  __int64(__fastcall *v60)(ULONG_PTR, __int64, __int64, int *); 
  INT64 v61; 
  INT64 v62; 
  __int64(__fastcall *v63)(ULONG_PTR, INT64, __int64, int *); 
  __int64(__fastcall *v64)(ULONG_PTR); 
  __int64 v65; 
  __int64 v66; 
  INT64 v67; 
  __int64 v68; 
  int v69; 
  unsigned int v70; 
  INT64 v71; 
  int v72; 
  unsigned int v73; 
  __int64 v74; 
  int v75; 
  unsigned __int64 v76; 
  int v77; 
  int v78; 
  __int64 *v79; 
  int *v80; 
  int *v81; 
  int *v82; 
  __int64 v83; 
  __int64 v84; 
  _QWORD *v85; 
  int v86; 
  _QWORD *v87; 
  char *v88; 
  int v89; 
  __int64 v90; 
  unsigned __int64 v91; 
  unsigned int v92; 
  __int64 v93; 
  __int64 v94; 
  unsigned __int128 v95; 
  unsigned int v96; 
  unsigned __int64 v97; 
  __int64 v98; 
  unsigned __int64 i; 
  bool v100; 
  _DWORD *v101; 
  ULONG_PTR v102; 
  int v103; 
  CHAR v104; 
  __int64 v105; 
  _BYTE *v106; 
  _DWORD *v107; 
  unsigned int v108; 
  int v109; 
  _QWORD *v110; 
  _DWORD *v111; 
  _QWORD *v112; 
  _QWORD *v113; 
  char *v114; 
  int v115; 
  __int64 v116; 
  unsigned __int64 v117; 
  ULONG_PTR v118; 
  unsigned int v119; 
  __int64 v120; 
  ULONG_PTR v121; 
  __int64 v122; 
  unsigned __int64 v123; 
  unsigned int v124; 
  unsigned __int64 v125; 
  __int64 v126; 
  ULONG_PTR j; 
  __int64 v128; 
  __int64 v129; 
  int v130; 
  int v131; 
  __int64 v132; 
  unsigned int v133; 
  _BYTE *v134; 
  int v135; 
  unsigned int v136; 
  __int64 v137; 
  int v138; 
  unsigned __int64 v139; 
  int v140; 
  int v141; 
  int v142; 
  __int64 v143; 
  _QWORD *v144; 
  unsigned __int64 v145; 
  _QWORD *v146; 
  unsigned int v147; 
  int v148; 
  __int64 v149; 
  char *v150; 
  unsigned int v151; 
  __int64 v152; 
  __int64 v153; 
  unsigned __int128 v154; 
  unsigned __int64 v155; 
  __int64 v156; 
  ULONG_PTR k; 
  __int64 v158; 
  ULONG_PTR v159; 
  BOOL v160; 
  unsigned int v161; 
  bool v162; 
  __int64 v163; 
  __int64 v164; 
  int v165; 
  _QWORD *v166; 
  _QWORD *v167; 
  _DWORD *v168; 
  unsigned __int16 v169; 
  unsigned int v170; 
  unsigned int v171; 
  UINT64 *v172; 
  char *v173; 
  unsigned int *v174; 
  __int64 v175; 
  unsigned int v176; 
  unsigned int v177; 
  unsigned int v178; 
  unsigned int v179; 
  __int64 v180; 
  unsigned int v181; 
  unsigned int v182; 
  unsigned int v183; 
  unsigned int *v184; 
  unsigned int *v185; 
  ULONG_PTR v186; 
  unsigned int *v187; 
  unsigned int v188; 
  int v189; 
  _DWORD *v190; 
  __int64 v191; 
  _BYTE *v192; 
  int v193; 
  __int64 v194; 
  unsigned int v195; 
  INT64 v196; 
  int v197; 
  unsigned int v198; 
  __int64 v199; 
  int v200; 
  unsigned __int64 v201; 
  int v202; 
  int v203; 
  INT64 v204; 
  _QWORD *v205; 
  __int64 v206; 
  int v207; 
  unsigned __int64 v208; 
  unsigned __int64 m; 
  ULONG_PTR v210; 
  _DWORD *v211; 
  __int64 v212; 
  UINT64 *v213; 
  __int64 v214; 
  _DWORD *v215; 
  __int64 v216; 
  _DWORD *v217; 
  __int64 v218; 
  int v219; 
  int v220; 
  __int16 v221; 
  char *v222; 
  int v223; 
  __int64 v224; 
  char v225; 
  char v226; 
  char *v227; 
  unsigned int v228; 
  char *v229; 
  __int64 v230; 
  __int64 v231; 
  char v232; 
  char v233; 
  char *v234; 
  int v235; 
  char v236; 
  char v237; 
  char *v238; 
  int v239; 
  char v240; 
  char v241; 
  int v242; 
  unsigned int v243; 
  __int64 v244; 
  INT64 v245; 
  unsigned int v246; 
  unsigned int v247; 
  unsigned int v248; 
  unsigned int v249; 
  int *v250; 
  ULONG_PTR v251; 
  unsigned int v252; 
  unsigned int v253; 
  __int64 *v254; 
  unsigned __int64 v255; 
  ULONG_PTR v256; 
  _QWORD *v257; 
  int v258; 
  char *v259; 
  __int64 v260; 
  unsigned int v261; 
  unsigned __int64 v262; 
  __int64 v263; 
  __int64 v264; 
  unsigned __int64 v265; 
  unsigned int v266; 
  unsigned __int64 v267; 
  __int64 v268; 
  unsigned __int64 n; 
  bool v270; 
  int v271; 
  unsigned int v272; 
  _BYTE *v273; 
  char v274; 
  __int64 v275; 
  unsigned __int64 v276; 
  unsigned int v277; 
  int *v278; 
  unsigned int v279; 
  unsigned __int64 v280; 
  __int64 *v281; 
  _QWORD *v282; 
  int v283; 
  char *v284; 
  __int64 v285; 
  unsigned int v286; 
  unsigned __int64 v287; 
  __int64 v288; 
  __int64 v289; 
  unsigned __int64 v290; 
  unsigned int v291; 
  unsigned __int64 v292; 
  __int64 v293; 
  unsigned __int64 ii; 
  unsigned __int64 v295; 
  unsigned __int64 v296; 
  unsigned int v297; 
  __int64 v298; 
  int *v299; 
  unsigned int v300; 
  unsigned __int64 v301; 
  __int64 *v302; 
  _QWORD *v303; 
  int v304; 
  char *v305; 
  __int64 v306; 
  unsigned int v307; 
  unsigned __int64 v308; 
  __int64 v309; 
  __int64 v310; 
  _QWORD *v311; 
  __int64 v312; 
  unsigned __int64 v313; 
  unsigned int v314; 
  unsigned __int64 v315; 
  __int64 v316; 
  unsigned __int64 jj; 
  INT64 v318; 
  unsigned int v319; 
  unsigned int v320; 
  __int64 v321; 
  __int64 v322; 
  __int64 v323; 
  __int64 v324; 
  __int64 v325; 
  __int64 kk; 
  __int64 v327; 
  INT64 v328; 
  ULONG_PTR BugCheckParameter4; 
  unsigned int v330; 
  int v331; 
  ULONG_PTR BugCheckParameter2; 
  _DWORD *v333; 
  UINT64 *a2a; 
  INT64 a5; 
  unsigned int v336; 
  unsigned int v337; 
  unsigned __int64 v338; 
  INT64 a1a; 
  INT64 v340; 
  _DWORD *v341; 
  INT64 v342; 
  INT64 v343; 
  INT64 a7; 
  __int64 v345; 
  unsigned int v346; 
  __int64 v347; 
  unsigned int v348; 
  UINT64 a8; 
  int v350; 
  int v351; 
  int v352; 
  int v353; 
  int v354; 
  int v355; 
  __int64 v356; 
  int v357[6]; 
  int *v358; 
  __int64 v359; 
  int v360; 
  _DWORD *v361; 
  int *v362; 
  char *v363; 
  char *v364; 
  char *v365; 
  char *v366; 
  ULONG_PTR v367; 
  __int64 v368; 
  INT64 v369; 
  __int64 v370; 
  __int64 v371; 
  __int64 v372; 
  char v373[8]; 
  __int64 v374; 
  int v375; 
  __int64 v376; 
  __int64 v377; 
  __int64 v378; 
  __int64 v379; 
  __int64 v380; 
  __int64 v381; 
  __int64 v382; 
  __int64 v383; 
  char v384[8]; 
  ULONG_PTR v385; 
  int v386; 
  __int64 v387; 
  int v390; 
  CHAR a3a; 
  unsigned __int16 a3b; 
  int a3c; 
  v390 = a3;
  v3 = a2;
  a1a = *a1;
  v4 = (*(__int64(__fastcall **)(INT64, char *))(a1a + 512))(a2, v373);
  v5 = 0i64;
  v359 = v374;
  if( !v374 )
    return 3221225595i64;
  v7 = 4;
  v347 = 0i64;
  v8 = (int *)&v348;
  v9 = 1i64;
  do
  {
    *(_BYTE *)v8 = 0;
    v8 = (int *)((char *)v8 + 1);
    --v7;
  }
  while( v7 );
  v10 = (_BYTE *)a1a;
  v11 = 0;
  v12 = *(_DWORD *)(a1a + 2060);
  if( v12 )
  {
    v13 = *(_QWORD *)(a1a + 2680);
    v14 = v375;
    v15 = v348;
    v16 = HIDWORD(v347);
    v17 = v347;
    while( 1 )
    {
      v18 = 0;
      v19 = v13;
      if( !v13 )
        v19 = a1a;
      v5 = (int *)(v19 + *(unsigned int *)(v19 + 2056));
      if( v17 && v16 <= v11 )
      {
        v18 = v16;
        v5 = (int *)(v19 + v15);
      }
      if( v18 != v11 )
        break;
LABEL_36:
      v16 = v18;
      LODWORD(v347) = 1;
      v9 = *v5;
      v15 = (_DWORD)v5 - v19;
      HIDWORD(v347) = v16;
      v348 = (_DWORD)v5 - v19;
      v17 = 1;
      if( (unsigned int)v9 > 0x2B
        || (v27 = 0x80000001002i64, !_bittest64(&v27, v9))
        || *((_QWORD *)v5 + 1) != v4
        || v5[4] != v14 )
      {
        v28 = v9 - 33;
        v9 = 1i64;
        if( v28 > 1 || *((_QWORD *)v5 + 4) != v359 )
        {
          ++v11;
          v5 = 0i64;
          if( v11 < v12 )
            continue;
        }
      }
      goto LABEL_43;
    }
    v20 = v11 - v18;
    v18 = v11;
    while( 1 )
    {
      v21 = *v5;
      if( *v5 > 12 )
        break;
      if( v21 == 12 )
        goto LABEL_28;
      v22 = v21 - 1;
      if( !v22 )
        goto LABEL_28;
      v23 = v22 - 6;
      if( v23 )
      {
        v24 = v23 - 1;
        if( !v24 )
        {
          v26 = *((unsigned __int16 *)v5 + 16);
LABEL_33:
          v25 = (v26 + 55) & 0xFFFFFFF8;
          goto LABEL_34;
        }
        if( v24 != 2 )
          goto LABEL_30;
        v25 = (unsigned int)(16 * (v5[7] + 3));
      }
      else
      {
        v25 = (unsigned int)(24 * (v5[6] + 2));
      }
LABEL_34:
      v5 = (int *)((char *)v5 + v25);
      if( !--v20 )
      {
        v14 = v375;
        v3 = a2;
        goto LABEL_36;
      }
    }
    if( v21 == 28 )
    {
      v26 = *((unsigned __int16 *)v5 + 20);
      goto LABEL_33;
    }
    if( v21 == 30 )
    {
      v25 = (((v5[9] != 0 ? v5[9] - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8) + 24 * (*((unsigned __int16 *)v5 + 20) + 2);
      goto LABEL_34;
    }
    if( v21 <= 32 )
    {
LABEL_30:
      v25 = 48i64;
      goto LABEL_34;
    }
    if( v21 <= 34 )
    {
      v25 = 20 * (unsigned int)(((v5[8] & 0xFFF) + (unsigned __int64)(unsigned int)v5[10] + 4095) >> 12) + 48;
      goto LABEL_34;
    }
    if( v21 != 43 )
      goto LABEL_30;
LABEL_28:
    v25 = 4 * (v5[4] / 0xCu) + 48;
    goto LABEL_34;
  }
LABEL_43:
  if( v5 )
    return 3221225742i64;
  v29 = v390;
  v30 = *(__int64(__fastcall **)(INT64, char *, _QWORD, unsigned __int64))(a1a + 512);
  a3a = v390;
  v343 = a1a;
  v31 = (UINT64 *)v30(v3, v384, 0i64, v9);
  v32 = v386;
  a2a = v31;
  v331 = v386;
  BugCheckParameter2 = v385;
  if( !v385 )
    goto LABEL_46;
  v34 = 4;
  v345 = 0i64;
  v35 = (int *)&v346;
  do
  {
    *(_BYTE *)v35 = 0;
    v35 = (int *)((char *)v35 + 1);
    --v34;
  }
  while( v34 );
  v36 = *((_DWORD *)v10 + 515);
  v37 = 0;
  if( v36 )
  {
    v38 = (_BYTE *)*((_QWORD *)v10 + 335);
    v39 = v346;
    v40 = HIDWORD(v345);
    v41 = v345;
    while( 1 )
    {
      v42 = v38;
      v43 = 0;
      if( !v38 )
        v42 = v10;
      v44 = (UINT64 **)&v42[*((unsigned int *)v42 + 514)];
      if( v41 && v40 <= v37 )
      {
        v43 = v40;
        v44 = (UINT64 **)&v42[v39];
      }
      if( v43 != v37 )
        break;
LABEL_80:
      v40 = v43;
      LODWORD(v345) = 1;
      v52 = *(int *)v44;
      v39 = (_DWORD)v44 - (_DWORD)v42;
      HIDWORD(v345) = v40;
      v346 = (_DWORD)v44 - (_DWORD)v42;
      v41 = 1;
      if( (unsigned int)v52 <= 0x2B )
      {
        v53 = 0x80000001002i64;
        if( _bittest64(&v53, v52) )
        {
          if( v44[1] == a2a && *((_DWORD *)v44 + 4) == v32 )
            goto LABEL_88;
        }
      }
      if( (unsigned int)(v52 - 33) <= 1 && v44[4] == (UINT64 *)BugCheckParameter2 )
        goto LABEL_88;
      if( ++v37 >= v36 )
        goto LABEL_87;
    }
    v45 = v37 - v43;
    v43 = v37;
    while( 1 )
    {
      v46 = *(_DWORD *)v44;
      if( *(int *)v44 > 12 )
        break;
      if( v46 == 12 )
        goto LABEL_72;
      v47 = v46 - 1;
      if( !v47 )
        goto LABEL_72;
      v48 = v47 - 6;
      if( v48 )
      {
        v49 = v48 - 1;
        if( !v49 )
        {
          v51 = *((unsigned __int16 *)v44 + 16);
LABEL_77:
          v50 = (v51 + 55) & 0xFFFFFFF8;
          goto LABEL_78;
        }
        if( v49 != 2 )
          goto LABEL_74;
        v50 = (unsigned int)(16 * (*((_DWORD *)v44 + 7) + 3));
      }
      else
      {
        v50 = (unsigned int)(24 * (*((_DWORD *)v44 + 6) + 2));
      }
LABEL_78:
      v44 = (UINT64 **)((char *)v44 + v50);
      if( !--v45 )
      {
        v3 = a2;
        v29 = v390;
        goto LABEL_80;
      }
    }
    if( v46 == 28 )
    {
      v51 = *((unsigned __int16 *)v44 + 20);
      goto LABEL_77;
    }
    if( v46 == 30 )
    {
      v50 = (((*((_DWORD *)v44 + 9) != 0 ? *((_DWORD *)v44 + 9) - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8)
          + 24 * (*((unsigned __int16 *)v44 + 20) + 2);
      goto LABEL_78;
    }
    if( v46 <= 32 )
    {
LABEL_74:
      v50 = 48i64;
      goto LABEL_78;
    }
    if( v46 <= 34 )
    {
      v50 = 20 * (unsigned int)((((_DWORD)v44[4] & 0xFFF) + (unsigned __int64)*((unsigned int *)v44 + 10) + 4095) >> 12)
          + 48;
      goto LABEL_78;
    }
    if( v46 != 43 )
      goto LABEL_74;
LABEL_72:
    v50 = 4 * (*((_DWORD *)v44 + 4) / 0xCu) + 48;
    goto LABEL_78;
  }
LABEL_87:
  v44 = 0i64;
LABEL_88:
  v358 = (int *)v44;
  if( v44 )
  {
    v33 = -1073741554;
    goto LABEL_476;
  }
  v54 = v390;
  v56 = (*((__int64(__fastcall **)(INT64))v10 + 85))(v3);
  LODWORD(a5) = v56;
  v337 = v331;
  if( (v390 & 0x10) != 0 && (*((_DWORD *)v10 + 613) & 0x400) == 0 )
  {
    v29 = v390 & 0xEF;
    a3a = v390 & 0xEF;
  }
  v57 = BugCheckParameter2;
  if( (v29 & 0x10) != 0 && !(unsigned int)sub_140A0FC50((INT64)v10, BugCheckParameter2) )
  {
    v29 &= ~0x10u;
    a3a = v29;
  }
  if( (v29 & 2) == 0 || v56 )
  {
    if( (*((_DWORD *)v10 + 612) & 0x40000000) != 0 )
    {
      v33 = sub_140A1BFE4((INT64)&a1a, BugCheckParameter2, v29);
      goto LABEL_477;
    }
    v58 = (__int64(__fastcall *)(ULONG_PTR, __int64, _QWORD, int *))*((_QWORD *)v10 + 62);
    v371 = 0i64;
    v357[4] = 0;
    LOBYTE(v55) = 1;
    v368 = v58(BugCheckParameter2, v55, 0i64, &v331);
    v59 = v331 & (unsigned int)-(v368 != 0);
    v331 = v59;
    v60 = (__int64(__fastcall *)(ULONG_PTR, __int64, __int64, int *))*((_QWORD *)v10 + 62);
    v357[1] = v59;
    LOBYTE(v59) = 1;
    v61 = v60(v57, v59, 12i64, &v331);
    v62 = v61;
    v340 = v61;
    v369 = v61;
    LOBYTE(v62) = 1;
    v331 &= -(v61 != 0);
    v63 = (__int64(__fastcall *)(ULONG_PTR, INT64, __int64, int *))*((_QWORD *)v10 + 62);
    v330 = v331;
    v357[2] = v331;
    v370 = v63(v57, v62, 10i64, &v331);
    v331 &= -(v370 != 0);
    v64 = (__int64(__fastcall *)(ULONG_PTR))*((_QWORD *)v10 + 63);
    v357[3] = v331;
    v65 = v64(v57);
    if( !v65 )
    {
      v33 = -1073741701;
      goto LABEL_477;
    }
    v66 = (*((__int64(__fastcall **)(ULONG_PTR, int *))v10 + 147))(v57, &v360);
    v67 = *((unsigned int *)v10 + 585);
    v372 = v66;
    v357[5] = v360;
    v357[0] = *(_DWORD *)(v65 + 84);
    LODWORD(v66) = v56;
    v68 = *((unsigned int *)v10 + 505);
    v367 = v57;
    v69 = (_DWORD)v66 != 0 ? 0xB : 0;
    v70 = v68 + 288;
    LODWORD(v333) = v69;
    if( (unsigned int)(v68 + 288) <= *((_DWORD *)v10 + 647) )
    {
      v71 = (INT64)v10;
      v342 = (INT64)v10;
      *((_DWORD *)v10 + 505) = v70;
    }
    else
    {
      v342 = sub_140A0EB30(v10, v70, v67);
      v71 = v342;
      if( !v342 )
      {
        v33 = -1073741670;
        goto LABEL_477;
      }
      v72 = *((_DWORD *)v10 + 612);
      if( (v72 & 4) == 0 )
      {
        v73 = *((_DWORD *)v10 + 505);
        v74 = *((_QWORD *)v10 + 249);
        v75 = (v72 & 0x20000000) != 0 ? *((_DWORD *)v10 + 585) : 0;
        if( v73 >= 8 )
        {
          v76 = (unsigned __int64)v73 >> 3;
          do
          {
            *(_QWORD *)v10 = 0i64;
            v73 -= 8;
            v10 += 8;
            --v76;
          }
          while( v76 );
        }
        for( ; v73; --v73 )
          *v10++ = 0;
        v77 = *(_DWORD *)(v71 + 2340);
        *(_DWORD *)(v71 + 2340) = v75;
        if( v75 == 3 )
        {
          (*(void(__fastcall **)(__int64))(v71 + 872))(v74);
        }
        else
        {
          v78 = 0;
          if( (*(_DWORD *)(v71 + 2448) & 0x10000000) == 0 )
            v78 = v75;
          if( v78 )
            (*(void(__fastcall **)(__int64, _QWORD))(v71 + 552))(v74 - 8, *(_QWORD *)(v74 - 8));
          else(*(void(__fastcall **)(__int64))(v71 + 256))(v74);
        }
        *(_DWORD *)(v71 + 2340) = v77;
      }
      *(_DWORD *)(v71 + 2448) &= ~4u;
      v69 = (int)v333;
    }
    *(_DWORD *)(v71 + 2060) += 6;
    v79 = (__int64 *)&v367;
    v80 = (int *)(v71 + v68);
    v341 = v80;
    v362 = v80;
    v358 = v80;
    v81 = v80;
    v82 = v357;
    v338 = 6i64;
    do
    {
      v83 = (unsigned int)*v82;
      v84 = 6i64;
      v85 = (_QWORD *)*v79;
      v86 = 48;
      do
      {
        *(_QWORD *)v81 = 0i64;
        v86 -= 8;
        v81 += 2;
        --v84;
      }
      while( v84 );
      for( ; v86; --v86 )
      {
        *(_BYTE *)v81 = 0;
        v81 = (int *)((char *)v81 + 1);
      }
      *v80 = v69;
      *((_QWORD *)v80 + 1) = v85;
      v87 = v85;
      v80[4] = v83;
      v88 = (char *)v85;
      *(_DWORD *)(v71 + 2088) += v83;
      v89 = *(_DWORD *)(v71 + 2068);
      v90 = *(_QWORD *)(v71 + 2072);
      if( v85 < (_QWORD *)((char *)v85 + v83) )
      {
        do
        {
          _mm_prefetchnta(v88);
          v88 += 64;
        }
        while( v88 < (char *)v85 + v83 );
      }
      v91 = *(_QWORD *)(v71 + 2072);
      v92 = (unsigned int)v83 >> 7;
      if( (unsigned int)v83 >> 7 )
      {
        do
        {
          v93 = 8i64;
          do
          {
            v94 = v87[1] ^ __ROL8__(*v87 ^ v91, v89);
            v87 += 2;
            v91 = __ROL8__(v94, v89);
            --v93;
          }
          while( v93 );
          v95 = (__ROL8__(v90 ^ ((char *)v87 - (char *)v85), 17) ^ v90 ^ (unsigned __int64)((char *)v87 - (char *)v85))
              * (unsigned __int128)0x7010008004002001ui64;
          v376 = *((_QWORD *)&v95 + 1);
          v89 = (BYTE8(v95) ^ (unsigned __int8)(v95 ^ v89)) & 0x3F;
          if( !v89 )
            LOBYTE(v89) = 1;
          --v92;
        }
        while( v92 );
        v71 = v342;
      }
      v96 = v83 & 0x7F;
      if( v96 >= 8 )
      {
        v97 = (unsigned __int64)(v83 & 0x7F) >> 3;
        do
        {
          v91 = __ROL8__(*v87++ ^ v91, v89);
          v96 -= 8;
          --v97;
        }
        while( v97 );
      }
      for( ; v96; --v96 )
      {
        v98 = *(unsigned __int8 *)v87;
        v87 = (_QWORD *)((char *)v87 + 1);
        v91 = __ROL8__(v98 ^ v91, v89);
      }
      for( i = v91; ; LODWORD(v91) = i ^ v91 )
      {
        i >>= 31;
        if( !i )
          break;
      }
      v69 = (int)v333;
      ++v82;
      v80[5] = v91 & 0x7FFFFFFF;
      ++v79;
      *(_DWORD *)(v71 + 2088) += v83;
      v80 += 12;
      v100 = v338-- == 1;
      v81 = v80;
      v362 = v80;
    }
    while( !v100 );
    v101 = v341;
    v102 = BugCheckParameter2;
    v103 = a5;
    *v341 = 44;
    *((_QWORD *)v101 + 3) = v102;
    if( (*(_DWORD *)(v71 + 2448) & 0x10200000) == 0 )
    {
      if( v103 )
      {
LABEL_151:
        v101[8] |= 2u;
        goto LABEL_152;
      }
      if( (*(_DWORD *)(v71 + 2452) & 0x8000) == 0 || (v101[8] |= 1u, !(unsigned int)sub_140A0FC50(v71, v102)) )
      {
LABEL_152:
        v104 = a3a;
        LODWORD(BugCheckParameter4) = v103;
        v343 = v71;
        a1a = v71;
        v33 = sub_140A0E098((INT64)&v343, a2a, v337, v102, BugCheckParameter4, a3a, &a7, &a8);
        if( v33 < 0 )
          goto LABEL_476;
        v105 = 6i64;
        v106 = (_BYTE *)v343;
        v107 = (_DWORD *)((char *)v101 + v343 - a1a);
        v108 = a8 - a7;
        v109 = 48;
        v341 = v107;
        v110 = (_QWORD *)(v102 + (unsigned int)a7);
        v111 = v107 + 48;
        v358 = v107;
        v112 = v107 + 48;
        a1a = v343;
        do
        {
          *v112 = 0i64;
          v109 -= 8;
          ++v112;
          --v105;
        }
        while( v105 );
        for( ; v109; --v109 )
        {
          *(_BYTE *)v112 = 0;
          v112 = (_QWORD *)((char *)v112 + 1);
        }
        v113 = v110;
        *v111 = (_DWORD)v333;
        v114 = (char *)v110;
        *((_QWORD *)v107 + 25) = v110;
        v107[52] = v108;
        *((_DWORD *)v106 + 522) += v108;
        v115 = *((_DWORD *)v106 + 517);
        v116 = *((_QWORD *)v106 + 259);
        v117 = (unsigned __int64)v110 + v108;
        if( (unsigned __int64)v110 < v117 )
        {
          do
          {
            _mm_prefetchnta(v114);
            v114 += 64;
          }
          while( (unsigned __int64)v114 < v117 );
        }
        v118 = *((_QWORD *)v106 + 259);
        v119 = v108 >> 7;
        if( v108 >> 7 )
        {
          do
          {
            v120 = 8i64;
            do
            {
              v121 = v118 ^ *v113;
              v122 = v113[1];
              v113 += 2;
              v118 = __ROL8__(__ROL8__(v121, v115) ^ v122, v115);
              --v120;
            }
            while( v120 );
            v123 = __ROL8__(v116 ^ ((char *)v113 - (char *)v110), 17) ^ v116 ^ ((char *)v113 - (char *)v110);
            v377 = (v123 * (unsigned __int128)0x7010008004002001ui64) >> 64;
            v115 = ((unsigned __int8)(v377 ^ v123) ^ (unsigned __int8)v115) & 0x3F;
            if( !v115 )
              LOBYTE(v115) = 1;
            --v119;
          }
          while( v119 );
          v104 = a3a;
          v111 = v107 + 48;
        }
        v124 = v108 & 0x7F;
        if( v124 >= 8 )
        {
          v125 = (unsigned __int64)v124 >> 3;
          do
          {
            v118 = __ROL8__(*v113++ ^ v118, v115);
            v124 -= 8;
            --v125;
          }
          while( v125 );
          v104 = a3a;
        }
        for( ; v124; --v124 )
        {
          v126 = *(unsigned __int8 *)v113;
          v113 = (_QWORD *)((char *)v113 + 1);
          v118 = __ROL8__(v126 ^ v118, v115);
        }
        for( j = v118; ; v118 = (unsigned int)j ^ (unsigned int)v118 )
        {
          j >>= 31;
          if( !j )
            break;
        }
        v128 = (unsigned int)a5;
        LODWORD(v118) = v118 & 0x7FFFFFFF;
        v111[5] = v118;
        v107[60] = 48;
        if( v107[64] )
          v107[66] = v107[66] & 0xFFFFFFFE | ((_DWORD)v128 != 0);
        v129 = (__int64)(v107 + 24);
        a1a = (INT64)v106;
        v361 = v107 + 24;
        v130 = v104 & 1;
        v131 = ((_DWORD)v128 != 0) + 13;
        if( v107 == (_DWORD *)-96i64 )
        {
          v132 = *((unsigned int *)v106 + 505);
          v133 = v132 + 48;
          if( (unsigned int)(v132 + 48) <= *((_DWORD *)v106 + 647) )
          {
            v134 = v106;
            *((_DWORD *)v106 + 505) = v133;
          }
          else
          {
            v134 = (_BYTE *)sub_140A0EB30(v106, v133, *((unsigned int *)v106 + 585));
            if( !v134 )
              goto LABEL_195;
            v135 = *((_DWORD *)v106 + 612);
            if( (v135 & 4) == 0 )
            {
              v136 = *((_DWORD *)v106 + 505);
              v137 = *((_QWORD *)v106 + 249);
              v138 = (v135 & 0x20000000) != 0 ? *((_DWORD *)v106 + 585) : 0;
              if( v136 >= 8 )
              {
                v139 = (unsigned __int64)v136 >> 3;
                do
                {
                  *(_QWORD *)v106 = 0i64;
                  v136 -= 8;
                  v106 += 8;
                  --v139;
                }
                while( v139 );
              }
              for( ; v136; --v136 )
                *v106++ = 0;
              v140 = *((_DWORD *)v134 + 585);
              *((_DWORD *)v134 + 585) = v138;
              if( v138 == 3 )
              {
                (*((void(__fastcall **)(__int64))v134 + 109))(v137);
              }
              else
              {
                v141 = 0;
                if( (*((_DWORD *)v134 + 612) & 0x10000000) == 0 )
                  v141 = v138;
                if( v141 )
                  (*((void(__fastcall **)(__int64, _QWORD))v134 + 69))(v137 - 8, *(_QWORD *)(v137 - 8));
                else(*((void(__fastcall **)(__int64))v134 + 32))(v137);
              }
              *((_DWORD *)v134 + 585) = v140;
            }
            *((_DWORD *)v134 + 612) &= ~4u;
          }
          ++*((_DWORD *)v134 + 515);
          v142 = 48;
          v129 = (__int64)&v134[v132];
          v143 = 6i64;
          v378 = v129;
          v144 = (_QWORD *)v129;
          do
          {
            *v144 = 0i64;
            v142 -= 8;
            ++v144;
            --v143;
          }
          while( v143 );
          for( ; v142; --v142 )
          {
            *(_BYTE *)v144 = 0;
            v144 = (_QWORD *)((char *)v144 + 1);
          }
          v145 = v340;
          *(_DWORD *)v129 = v131;
          v146 = (_QWORD *)v145;
          v147 = v330;
          *(_QWORD *)(v129 + 8) = v145;
          *(_DWORD *)(v129 + 16) = v330;
          *((_DWORD *)v134 + 522) += v330;
          v148 = *((_DWORD *)v134 + 517);
          v149 = *((_QWORD *)v134 + 259);
          if( v145 < v145 + v330 )
          {
            v150 = (char *)v145;
            do
            {
              _mm_prefetchnta(v150);
              v150 += 64;
            }
            while( (unsigned __int64)v150 < v145 + v330 );
          }
          v118 = *((_QWORD *)v134 + 259);
          v151 = v330 >> 7;
          if( v330 >> 7 )
          {
            do
            {
              v152 = 8i64;
              do
              {
                v153 = v146[1] ^ __ROL8__(*v146 ^ v118, v148);
                v146 += 2;
                v118 = __ROL8__(v153, v148);
                --v152;
              }
              while( v152 );
              v154 = (__ROL8__(v149 ^ ((unsigned __int64)v146 - v145), 17) ^ v149 ^ ((unsigned __int64)v146 - v145))
                   * (unsigned __int128)0x7010008004002001ui64;
              v379 = *((_QWORD *)&v154 + 1);
              v148 = (BYTE8(v154) ^ (unsigned __int8)(v154 ^ v148)) & 0x3F;
              if( !v148 )
                LOBYTE(v148) = 1;
              --v151;
            }
            while( v151 );
            v107 = v341;
            v147 = v330;
          }
          v128 = v147 & 0x7F;
          if( (unsigned int)v128 >= 8 )
          {
            v155 = (unsigned __int64)(v147 & 0x7F) >> 3;
            do
            {
              v118 = __ROL8__(*v146++ ^ v118, v148);
              v128 = (unsigned int)(v128 - 8);
              --v155;
            }
            while( v155 );
          }
          if( (_DWORD)v128 )
          {
            do
            {
              v156 = *(unsigned __int8 *)v146;
              v146 = (_QWORD *)((char *)v146 + 1);
              v118 = __ROL8__(v156 ^ v118, v148);
              v100 = (_DWORD)v128 == 1;
              v128 = (unsigned int)(v128 - 1);
            }
            while( !v100 );
          }
          for( k = v118 >> 31; k; k >>= 31 )
            v118 = (unsigned int)k ^ (unsigned int)v118;
          LODWORD(v118) = v118 & 0x7FFFFFFF;
          v361 = (_DWORD *)v129;
          *(_DWORD *)(v129 + 20) = v118;
          *((_DWORD *)v134 + 522) += v147;
        }
        else
        {
          v145 = v340;
          v134 = v106;
          *(_DWORD *)v129 = v131;
          v147 = v330;
        }
        v158 = v129;
        if( (*((_DWORD *)v134 + 612) & 0x40000000) != 0 && v147 )
          sub_1403E92DC((INT64)v134, v145, v147, v129 + 28);
        *(_DWORD *)(v129 + 24) = 0;
        if( v130 )
          *(_DWORD *)(v129 + 24) = 1;
        v159 = BugCheckParameter2;
        a1a = (INT64)v134;
        v160 = a5 != 0;
        v161 = v107[46] & 0xFFFFFFFE;
        v107[36] = 35;
        v162 = v107[40] < 0x94u;
        v107[46] = v161 | v160;
        if( v162 )
        {
LABEL_234:
          v100 = (*((_DWORD *)v134 + 612) & 0x400000) == 0;
          v343 = (INT64)v134;
          if( !v100 )
          {
            v168 = (_DWORD *)(*((__int64(__fastcall **)(ULONG_PTR, __int64, ULONG_PTR, __int64))v134 + 63))(
                               v159,
                               v128,
                               v118,
                               v158);
            v341 = v168;
            if( !v168 )
            {
LABEL_46:
              v33 = -1073741701;
LABEL_476:
              v54 = v390;
              goto LABEL_477;
            }
            v169 = *((_WORD *)v168 + 3);
            a3b = v169;
            v338 = v337 / 0xCui64;
            if( !v169 )
            {
              if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
              {
                HIDWORD(a8) = -805294751;
                KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 0i64, 0i64);
              }
              if( !*((_DWORD *)v134 + 574) )
              {
                *((_DWORD *)v134 + 574) = 1;
LABEL_240:
                *((_QWORD *)v134 + 288) = v134 - 0x5C5FC0A76E374B18i64;
LABEL_241:
                *((_QWORD *)v134 + 289) = 0i64;
                *((_QWORD *)v134 + 290) = 271i64;
                *((_QWORD *)v134 + 291) = v159;
                __b8((__int64)v134, 0i64);
              }
              goto LABEL_46;
            }
            v170 = 0;
            v171 = v169;
            v172 = a2a;
            v330 = 0;
            LODWORD(v333) = v169;
            v356 = 12i64 * (v337 / 0xC);
            v340 = (INT64)a2a + v356;
            v342 = (INT64)v168 + *((unsigned __int16 *)v168 + 10) + 24;
            v173 = (char *)v342;
            v174 = (unsigned int *)(v342 + 8);
            v175 = 1i64;
            do
            {
              v176 = v174[2];
              v177 = v174[1];
              if( v176 <= *v174 )
                v176 = *v174;
              v336 = v174[1];
              v178 = v177 + v176;
              if( v170 )
              {
                if( v178 < *(_DWORD *)&v173[40 * v170 - 28] )
                {
                  if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
                  {
                    v350 = -805294751;
                    KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 1ui64, 0i64);
                  }
                  if( !*((_DWORD *)v134 + 574) )
                  {
                    *((_DWORD *)v134 + 574) = 1;
                    goto LABEL_240;
                  }
                  goto LABEL_46;
                }
                v170 = v330;
              }
              if( v172 != (UINT64 *)v340 )
              {
                while( 1 )
                {
                  v179 = *((_DWORD *)v172 + 1);
                  if( *(_DWORD *)v172 >= v178 || v179 <= v177 )
                  {
LABEL_270:
                    v170 = v330;
                    v175 = 1i64;
                    v171 = (unsigned int)v333;
                    v173 = (char *)v342;
                    goto LABEL_271;
                  }
                  if( *(_DWORD *)v172 < v177 || v179 > v178 )
                    break;
                  v180 = *((unsigned int *)v172 + 2);
                  if( (v180 & 1) != 0 || (*(_BYTE *)(v180 + v159) & 0x20) != 0 )
                  {
                    v181 = v174[2];
                    v182 = v174[1];
                    if( v181 <= *v174 )
                      v181 = *v174;
                    v183 = v182 + v181;
                    v184 = (unsigned int *)(*((__int64(__fastcall **)(UINT64 *, ULONG_PTR, __int64))v134 + 131))(
                                             v172,
                                             BugCheckParameter2,
                                             v175);
                    v185 = v184;
                    if( *v184 < v182 || v184[1] > v183 )
                    {
                      v186 = BugCheckParameter2;
                      if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
                      {
                        v352 = -805294751;
                        KeBugCheckEx(
                          __ROR4__(-805306349, 92),
                          0xAui64,
                          BugCheckParameter2,
                          ((_DWORD)v184 - (_DWORD)BugCheckParameter2) | 0x80000000,
                          0i64);
                      }
                      if( !*((_DWORD *)v134 + 574) )
                      {
                        *((_QWORD *)v134 + 289) = 0i64;
                        *((_QWORD *)v134 + 290) = 271i64;
                        *((_QWORD *)v134 + 288) = v134 - 0x5C5FC0A76E374B18i64;
                        *((_QWORD *)v134 + 291) = v186;
                        *((_DWORD *)v134 + 574) = 1;
                        __b8((__int64)v134, 0i64);
                      }
                    }
                    v187 = (unsigned int *)(*((__int64(__fastcall **)(unsigned int *, ULONG_PTR, ULONG_PTR))v134 + 132))(
                                             v185,
                                             BugCheckParameter2,
                                             BugCheckParameter2 + *v185);
                    if( *v187 >= v182 && v187[1] <= v183 )
                    {
                      v159 = BugCheckParameter2;
                    }
                    else
                    {
                      v159 = BugCheckParameter2;
                      v188 = ((_DWORD)v187 - BugCheckParameter2) | 0x80000000;
                      if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
                      {
                        v351 = -805294751;
                        KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, BugCheckParameter2, v188, 0i64);
                      }
                      if( !*((_DWORD *)v134 + 574) )
                      {
                        *((_QWORD *)v134 + 289) = 0i64;
                        *((_QWORD *)v134 + 290) = 271i64;
                        *((_QWORD *)v134 + 288) = v134 - 0x5C5FC0A76E374B18i64;
                        *((_QWORD *)v134 + 291) = v159;
                        *((_DWORD *)v134 + 574) = 1;
                        __b8((__int64)v134, 0i64);
                      }
                    }
                    v177 = v336;
                  }
                  v172 = (UINT64 *)((char *)v172 + 12);
                  if( v172 == (UINT64 *)v340 )
                    goto LABEL_270;
                }
                if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
                {
                  v353 = -805294751;
                  KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 2ui64, 0i64);
                }
                if( !*((_DWORD *)v134 + 574) )
                {
                  v192 = v134 - 0x5C5FC0A76E374B18i64;
LABEL_281:
                  *((_QWORD *)v134 + 288) = v192;
                  *((_DWORD *)v134 + 574) = 1;
                  goto LABEL_241;
                }
                goto LABEL_46;
              }
LABEL_271:
              ++v170;
              v174 += 10;
              v330 = v170;
            }
            while( v170 < v171 );
            v189 = v338;
            v190 = v341;
            v191 = v356;
            if( v172 != (UINT64 *)v340 )
            {
              if( (*((_DWORD *)v134 + 612) & 0x200000) == 0 )
              {
                v354 = -805294751;
                KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v159, 3ui64, 0i64);
              }
              if( !*((_DWORD *)v134 + 574) )
              {
                v192 = v134 - 0x5C5FC0A76E374B18i64;
                goto LABEL_281;
              }
              goto LABEL_46;
            }
            if( (_DWORD)v338 )
              v193 = (v338 + 6) & 0xFFFFFFF8;
            else
              v193 = 0;
            v194 = *((unsigned int *)v134 + 505);
            v195 = v193 + 24 * v171 + v194 + 48;
            if( v195 <= *((_DWORD *)v134 + 647) )
            {
              v196 = (INT64)v134;
              v341 = v134;
              *((_DWORD *)v134 + 505) = v195;
            }
            else
            {
              v341 = (_DWORD *)sub_140A0EB30(v134, v195, *((unsigned int *)v134 + 585));
              v196 = (INT64)v341;
              if( !v341 )
                goto LABEL_195;
              v197 = *((_DWORD *)v134 + 612);
              if( (v197 & 4) == 0 )
              {
                v198 = *((_DWORD *)v134 + 505);
                v199 = *((_QWORD *)v134 + 249);
                v200 = (v197 & 0x20000000) != 0 ? *((_DWORD *)v134 + 585) : 0;
                if( v198 >= 8 )
                {
                  v201 = (unsigned __int64)v198 >> 3;
                  do
                  {
                    *(_QWORD *)v134 = 0i64;
                    v198 -= 8;
                    v134 += 8;
                    --v201;
                  }
                  while( v201 );
                }
                for( ; v198; --v198 )
                  *v134++ = 0;
                v202 = *(_DWORD *)(v196 + 2340);
                *(_DWORD *)(v196 + 2340) = v200;
                if( v200 == 3 )
                {
                  (*(void(__fastcall **)(__int64, __int64))(v196 + 872))(v199, 1i64);
                }
                else
                {
                  v203 = 0;
                  if( (*(_DWORD *)(v196 + 2448) & 0x10000000) == 0 )
                    v203 = v200;
                  if( v203 )
                    (*(void(__fastcall **)(__int64, _QWORD))(v196 + 552))(v199 - 8, *(_QWORD *)(v199 - 8));
                  else(*(void(__fastcall **)(__int64, __int64))(v196 + 256))(v199, 1i64);
                }
                *(_DWORD *)(v196 + 2340) = v202;
              }
              *(_DWORD *)(v196 + 2448) &= ~4u;
              v189 = v338;
              v171 = (unsigned int)v333;
            }
            v204 = v196 + v194;
            ++*(_DWORD *)(v196 + 2060);
            v205 = (_QWORD *)(v196 + v194);
            v380 = v196 + v194;
            v206 = 6i64;
            v207 = 48;
            do
            {
              *v205 = 0i64;
              v207 -= 8;
              ++v205;
              --v206;
            }
            while( v206 );
            for( ; v207; --v207 )
            {
              *(_BYTE *)v205 = 0;
              v205 = (_QWORD *)((char *)v205 + 1);
            }
            *(_QWORD *)(v204 + 8) = a2a;
            *(_DWORD *)v204 = 30;
            *(_DWORD *)(v204 + 16) = 0;
            v208 = *(_QWORD *)(v196 + 2072);
            for( m = v208; ; LODWORD(v208) = m ^ v208 )
            {
              m >>= 31;
              if( !m )
                break;
            }
            v210 = BugCheckParameter2;
            v100 = (_DWORD)a5 == 0;
            *(_DWORD *)(v204 + 20) = v208 & 0x7FFFFFFF;
            v134 = (_BYTE *)v196;
            *(_QWORD *)(v204 + 24) = v210;
            *(_DWORD *)(v204 + 32) = v190[20];
            *(_DWORD *)(v204 + 36) = v337;
            *(_WORD *)(v204 + 40) = a3b;
            LOWORD(v210) = *(_WORD *)(v204 + 42) & 0xFFFE;
            v387 = v196 + v194;
            v343 = v196;
            *(_WORD *)(v204 + 42) = v210 | !v100;
            a5 = v204 + 48;
            if( v189 )
              v211 = (_DWORD *)(v204 + 48 + (((unsigned int)(v189 - 1) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64));
            else
              v211 = (_DWORD *)(v204 + 48);
            v212 = *(unsigned __int16 *)(v204 + 40);
            LODWORD(v204) = 0;
            v100 = v189 == 0;
            v338 = (unsigned __int64)v211;
            v213 = a2a;
            v214 = 12i64;
            if( v100 )
              v214 = v191;
            v215 = (_DWORD *)((char *)a2a + v214);
            v216 = (__int64)&v211[6 * v212];
            v356 = v216;
            v333 = v215;
            if( v171 )
            {
              v204 = v171;
              v217 = v211 + 2;
              do
              {
                v218 = 2i64;
                do
                {
                  *((_QWORD *)v217 - 1) = 0i64;
                  *v217 = 0x80000000;
                  v217 += 3;
                  --v218;
                }
                while( v218 );
                --v204;
              }
              while( v204 );
            }
            if( v211 != (_DWORD *)v216 )
            {
              do
              {
                v219 = v204;
                if( (*((_DWORD *)v173 + 9) & 0x2000000) != 0
                  || (v220 = *(_DWORD *)v173, *(_DWORD *)v173 == 1414090313) && *((_DWORD *)v173 + 1) == 1195525195
                  || v220 == 1162297680
                  && ((v221 = *((_WORD *)v173 + 2), v221 == 30839) || v221 == 29303 || v221 == 30583)
                  || v220 == 1095914053 && *((_WORD *)v173 + 2) == 16724 )
                {
                  v219 = 1;
                }
                else
                {
                  v222 = *(char **)(v196 + 2352);
                  v223 = 7;
                  v364 = *(char **)(v196 + 2360);
                  v224 = v173 - v222;
                  v365 = *(char **)(v196 + 2368);
                  v366 = *(char **)(v196 + 2376);
                  v363 = v222;
                  while( 1 )
                  {
                    v225 = v222[v224];
                    v226 = *v222++;
                    if( v225 != v226 )
                      break;
                    if( !--v223 )
                    {
LABEL_350:
                      v219 = 1;
                      goto LABEL_351;
                    }
                  }
                  v227 = v364;
                  v228 = 8;
                  v229 = v173;
                  while( 1 )
                  {
                    v230 = *(_QWORD *)v229;
                    v229 += 8;
                    v231 = *(_QWORD *)v227;
                    v227 += 8;
                    if( v230 != v231 )
                      break;
                    v228 -= 8;
                    if( v228 < 8 )
                    {
                      if( !v228 )
                        goto LABEL_350;
                      while( 1 )
                      {
                        v232 = *v229++;
                        v233 = *v227++;
                        if( v232 != v233 )
                          goto LABEL_343;
                        if( !--v228 )
                          goto LABEL_350;
                      }
                    }
                  }
LABEL_343:
                  v234 = v365;
                  v235 = 4;
                  while( 1 )
                  {
                    v236 = v234[v173 - v365];
                    v237 = *v234++;
                    if( v236 != v237 )
                      break;
                    if( !--v235 )
                      goto LABEL_350;
                  }
                  v238 = v366;
                  v239 = 6;
                  while( 1 )
                  {
                    v240 = v238[v173 - v366];
                    v241 = *v238++;
                    if( v240 != v241 )
                      break;
                    if( !--v239 )
                      goto LABEL_350;
                  }
LABEL_351:
                  v213 = a2a;
                }
                v242 = *((_DWORD *)v173 + 9);
                LODWORD(v204) = 0;
                if( v242 < 0 )
                  v219 = 1;
                a3c = v219;
                if( v219 && *(_DWORD *)v173 == 1414090313 && *((_DWORD *)v173 + 1) == 1195525195 )
                {
                  if( (*(_DWORD *)(v196 + 2452) & 0x2000) != 0 )
                    v219 = 0;
                  a3c = v219;
                }
                if( (*(_DWORD *)(v196 + 2452) & 0x4000) != 0
                  && (v242 & 0x20000000) != 0
                  && (BugCheckParameter2 == *(_QWORD *)(v196 + 1512) || BugCheckParameter2 == *(_QWORD *)(v196 + 1520)) )
                {
                  v219 = 1;
                  a3c = 1;
                }
                v243 = *((_DWORD *)v173 + 4);
                v244 = *((unsigned int *)v173 + 3);
                v245 = v340;
                if( v243 <= *((_DWORD *)v173 + 2) )
                  v243 = *((_DWORD *)v173 + 2);
                v246 = v244 + v243;
                v336 = *((_DWORD *)v173 + 3);
                v330 = v246;
                if( v213 == (UINT64 *)v340 )
                {
                  v247 = 0;
                  v248 = 0;
                }
                else
                {
                  v247 = *(_DWORD *)v213;
                  v248 = *((_DWORD *)v213 + 1);
                }
                v337 = v248;
                v249 = v244;
                if( v213 != (UINT64 *)v340 && v247 > (unsigned int)v244 && v248 <= v246 && !v219 )
                {
                  *v211 = v244;
                  v250 = v357;
                  v211[1] = v247;
                  v251 = BugCheckParameter2;
                  v252 = v247 - v244;
                  v253 = 0;
                  v249 = v247;
                  v254 = (__int64 *)&v367;
                  v255 = BugCheckParameter2 + v244;
                  v256 = BugCheckParameter2 + v244 + v247 - (unsigned int)v244;
                  do
                  {
                    if( v255 < *v254 + (unsigned __int64)(unsigned int)*v250 && v256 > *v254 )
                    {
                      v246 = v330;
                      LODWORD(v204) = 0;
                      v215 = v333;
                      v245 = v340;
                      v213 = a2a;
                      goto LABEL_398;
                    }
                    ++v253;
                    ++v254;
                    ++v250;
                  }
                  while( v253 < 6 );
                  *(_DWORD *)(v196 + 2088) += v252;
                  v257 = (_QWORD *)v255;
                  v258 = *(_DWORD *)(v196 + 2068);
                  v259 = (char *)v255;
                  v260 = *(_QWORD *)(v196 + 2072);
                  if( v255 < v256 )
                  {
                    do
                    {
                      _mm_prefetchnta(v259);
                      v259 += 64;
                    }
                    while( (unsigned __int64)v259 < v256 );
                  }
                  LODWORD(v204) = 0;
                  v261 = v252 >> 7;
                  v262 = *(_QWORD *)(v196 + 2072);
                  if( v252 >> 7 )
                  {
                    do
                    {
                      v263 = 8i64;
                      do
                      {
                        v264 = v257[1] ^ __ROL8__(*v257 ^ v262, v258);
                        v257 += 2;
                        v262 = __ROL8__(v264, v258);
                        --v263;
                      }
                      while( v263 );
                      v265 = __ROL8__(v260 ^ ((unsigned __int64)v257 - v255), 17) ^ v260 ^ ((unsigned __int64)v257 - v255);
                      v381 = (v265 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                      v258 = ((unsigned __int8)(v381 ^ v265) ^ (unsigned __int8)v258) & 0x3F;
                      if( !v258 )
                        LOBYTE(v258) = 1;
                      --v261;
                    }
                    while( v261 );
                    v196 = (INT64)v341;
                    LODWORD(v204) = 0;
                    v248 = v337;
                  }
                  v266 = v252 & 0x7F;
                  if( v266 >= 8 )
                  {
                    v267 = (unsigned __int64)v266 >> 3;
                    do
                    {
                      v262 = __ROL8__(*v257++ ^ v262, v258);
                      v266 -= 8;
                      --v267;
                    }
                    while( v267 );
                  }
                  for( ; v266; --v266 )
                  {
                    v268 = *(unsigned __int8 *)v257;
                    v257 = (_QWORD *)((char *)v257 + 1);
                    v262 = __ROL8__(v268 ^ v262, v258);
                  }
                  for( n = v262; ; LODWORD(v262) = n ^ v262 )
                  {
                    n >>= 31;
                    if( !n )
                      break;
                  }
                  v246 = v330;
                  LODWORD(v244) = v336;
                  v215 = v333;
                  v213 = a2a;
                  *(_DWORD *)(v338 + 8) = v262 & 0x7FFFFFFF;
                  v245 = v340;
                }
                v251 = BugCheckParameter2;
LABEL_398:
                if( v247 < (unsigned int)v244 )
                {
                  v271 = a3c;
                }
                else
                {
                  v270 = v248 <= v246;
                  v271 = a3c;
                  if( v270 && v213 != (UINT64 *)v245 )
                  {
                    v272 = v215[1];
                    if( v272 <= v246 )
                    {
                      v273 = (_BYTE *)a5;
                      do
                      {
                        if( v215 == (_DWORD *)v245 )
                          break;
                        if( v271 )
                        {
                          v274 = 0x80;
                        }
                        else
                        {
                          v275 = *((unsigned int *)v213 + 1);
                          v249 = *v215;
                          if( *v215 < (unsigned int)v275 )
                          {
                            if( (*(_DWORD *)(v196 + 2448) & 0x200000) == 0 )
                            {
                              v355 = -805294751;
                              KeBugCheckEx(__ROR4__(-805306349, 92), 0xAui64, v251, 6ui64, 0i64);
                            }
                            if( !*(_DWORD *)(v196 + 2296) )
                            {
                              *(_QWORD *)(v196 + 2312) = 0i64;
                              *(_QWORD *)(v196 + 2320) = 271i64;
                              *(_QWORD *)(v196 + 2304) = v196 - 0x5C5FC0A76E374B18i64;
                              *(_QWORD *)(v196 + 2328) = v251;
                              *(_DWORD *)(v196 + 2296) = 1;
                              __b8(v196, 0i64);
                            }
                          }
                          v276 = v251 + v275;
                          v277 = v249 - v275;
                          v278 = v357;
                          v279 = 0;
                          v280 = v251 + v275 + v249 - (unsigned int)v275;
                          v281 = (__int64 *)&v367;
                          do
                          {
                            if( v276 < *v281 + (unsigned __int64)(unsigned int)*v278 && v280 > *v281 )
                              goto LABEL_434;
                            ++v279;
                            ++v281;
                            ++v278;
                          }
                          while( v279 < 6 );
                          if( v277 < 4 )
                          {
LABEL_434:
                            LODWORD(v204) = 0;
                            v274 = 0x80;
                            goto LABEL_435;
                          }
                          *(_DWORD *)(v196 + 2088) += v277;
                          v282 = (_QWORD *)v276;
                          v283 = *(_DWORD *)(v196 + 2068);
                          v284 = (char *)v276;
                          v285 = *(_QWORD *)(v196 + 2072);
                          if( v276 < v280 )
                          {
                            do
                            {
                              _mm_prefetchnta(v284);
                              v284 += 64;
                            }
                            while( (unsigned __int64)v284 < v280 );
                          }
                          LODWORD(v204) = 0;
                          v286 = v277 >> 7;
                          v287 = *(_QWORD *)(v196 + 2072);
                          if( v277 >> 7 )
                          {
                            do
                            {
                              v288 = 8i64;
                              do
                              {
                                v289 = v282[1] ^ __ROL8__(*v282 ^ v287, v283);
                                v282 += 2;
                                v287 = __ROL8__(v289, v283);
                                --v288;
                              }
                              while( v288 );
                              v290 = __ROL8__(v285 ^ ((unsigned __int64)v282 - v276), 17) ^ v285 ^ ((unsigned __int64)v282
                                                                                                  - v276);
                              v382 = (v290 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                              v283 = ((unsigned __int8)(v382 ^ v290) ^ (unsigned __int8)v283) & 0x3F;
                              if( !v283 )
                                LOBYTE(v283) = 1;
                              --v286;
                            }
                            while( v286 );
                            v196 = (INT64)v341;
                            LODWORD(v204) = 0;
                            v271 = a3c;
                          }
                          v291 = v277 & 0x7F;
                          if( v291 >= 8 )
                          {
                            v292 = (unsigned __int64)v291 >> 3;
                            do
                            {
                              v287 = __ROL8__(*v282++ ^ v287, v283);
                              v291 -= 8;
                              --v292;
                            }
                            while( v292 );
                          }
                          for( ; v291; --v291 )
                          {
                            v293 = *(unsigned __int8 *)v282;
                            v282 = (_QWORD *)((char *)v282 + 1);
                            v287 = __ROL8__(v293 ^ v287, v283);
                          }
                          for( ii = v287; ; LOBYTE(v287) = ii ^ v287 )
                          {
                            ii >>= 7;
                            if( !ii )
                              break;
                          }
                          v251 = BugCheckParameter2;
                          v274 = v287 & 0x7F;
LABEL_435:
                          v213 = a2a;
                          v215 = v333;
                          v246 = v330;
                          v273 = (_BYTE *)a5;
                        }
                        *v273 = v274;
                        v213 = (UINT64 *)((char *)v213 + 12);
                        v215 += 3;
                        v245 = v340;
                        v273 = (_BYTE *)(a5 + 1);
                        a2a = v213;
                        ++a5;
                        v333 = v215;
                        if( v215 != (_DWORD *)v340 )
                          v272 = v215[1];
                      }
                      while( v272 <= v246 );
                    }
                  }
                }
                v295 = v338;
                if( !v271 && v249 != v246 )
                {
                  v296 = BugCheckParameter2 + v249;
                  v297 = v246 - v249;
                  *(_DWORD *)(v338 + 16) = v246;
                  v298 = v246 - v249;
                  v299 = v357;
                  v300 = 0;
                  *(_DWORD *)(v295 + 12) = v249;
                  v301 = v296 + v298;
                  v302 = (__int64 *)&v367;
                  do
                  {
                    if( v296 < *v302 + (unsigned __int64)(unsigned int)*v299 && v301 > *v302 )
                    {
                      LODWORD(v204) = 0;
                      goto LABEL_466;
                    }
                    ++v300;
                    ++v302;
                    ++v299;
                  }
                  while( v300 < 6 );
                  *(_DWORD *)(v196 + 2088) += v297;
                  v303 = (_QWORD *)v296;
                  v304 = *(_DWORD *)(v196 + 2068);
                  v305 = (char *)v296;
                  v306 = *(_QWORD *)(v196 + 2072);
                  if( v296 < v301 )
                  {
                    do
                    {
                      _mm_prefetchnta(v305);
                      v305 += 64;
                    }
                    while( (unsigned __int64)v305 < v301 );
                  }
                  LODWORD(v204) = 0;
                  v307 = v297 >> 7;
                  v308 = *(_QWORD *)(v196 + 2072);
                  if( v297 >> 7 )
                  {
                    do
                    {
                      v309 = 8i64;
                      do
                      {
                        v310 = *v303 ^ v308;
                        v311 = v303 + 1;
                        v312 = *v311 ^ __ROL8__(v310, v304);
                        v303 = v311 + 1;
                        v308 = __ROL8__(v312, v304);
                        --v309;
                      }
                      while( v309 );
                      v313 = __ROL8__(v306 ^ ((unsigned __int64)v303 - v296), 17) ^ v306 ^ ((unsigned __int64)v303 - v296);
                      v383 = (v313 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                      v304 = ((unsigned __int8)(v383 ^ v313) ^ (unsigned __int8)v304) & 0x3F;
                      if( !v304 )
                        LOBYTE(v304) = 1;
                      --v307;
                    }
                    while( v307 );
                    v196 = (INT64)v341;
                    LODWORD(v204) = 0;
                  }
                  v314 = v297 & 0x7F;
                  if( v314 >= 8 )
                  {
                    v315 = (unsigned __int64)v314 >> 3;
                    do
                    {
                      v308 = __ROL8__(*v303++ ^ v308, v304);
                      v314 -= 8;
                      --v315;
                    }
                    while( v315 );
                  }
                  for( ; v314; --v314 )
                  {
                    v316 = *(unsigned __int8 *)v303;
                    v303 = (_QWORD *)((char *)v303 + 1);
                    v308 = __ROL8__(v316 ^ v308, v304);
                  }
                  for( jj = v308; ; LODWORD(v308) = jj ^ v308 )
                  {
                    jj >>= 31;
                    if( !jj )
                      break;
                  }
                  v295 = v338;
                  *(_DWORD *)(v338 + 20) = v308 & 0x7FFFFFFF;
LABEL_466:
                  v213 = a2a;
                }
                v215 = v333;
                if( v213 != (UINT64 *)v340 && *(_DWORD *)v213 >= v336 && *((_DWORD *)v213 + 1) <= v330 )
                {
                  if( v333 != (_DWORD *)v340 )
                  {
                    v318 = a5;
                    *(_BYTE *)a5 = 0x80;
                    v215 += 3;
                    a5 = v318 + 1;
                    v333 = v215;
                  }
                  v213 = (UINT64 *)((char *)v213 + 12);
                  a2a = v213;
                }
                v211 = (_DWORD *)(v295 + 24);
                v173 = (char *)(v342 + 40);
                v338 = (unsigned __int64)v211;
                v342 += 40i64;
              }
              while( v211 != (_DWORD *)v356 );
              v134 = (_BYTE *)v343;
            }
          }
          a1a = (INT64)v134;
          v33 = 0;
          goto LABEL_476;
        }
        v163 = *((_QWORD *)v107 + 19);
        v164 = (*((__int64(__fastcall **)(ULONG_PTR, __int64, ULONG_PTR, __int64))v134 + 63))(v159, v128, v118, v158);
        if( v164 )
        {
          v118 = v159 + *(unsigned int *)(v164 + 80);
          v128 = v107[46] | 2u;
          v107[46] = v128;
          v165 = v128;
          v166 = *(_QWORD **)(v163 + 112);
          if( (unsigned __int64)v166 >= v159 && (unsigned __int64)v166 < v118 )
          {
            v165 = v128 | 4;
            *((_QWORD *)v107 + 21) = *v166;
            v107[46] = v128 | 4;
          }
          v167 = *(_QWORD **)(v163 + 120);
          if( (unsigned __int64)v167 >= v159 && (unsigned __int64)v167 < v118 )
          {
            *((_QWORD *)v107 + 22) = *v167;
            v107[46] = v165 | 8;
          }
          goto LABEL_234;
        }
LABEL_195:
        v33 = -1073741670;
        goto LABEL_476;
      }
      v101[8] |= 4u;
    }
    if( !v103 )
      goto LABEL_152;
    goto LABEL_151;
  }
  v33 = 0;
LABEL_477:
  *a1 = a1a;
  if( (int)(v33 + 0x80000000) >= 0 && v33 != -1073741554 )
    return(unsigned int)v33;
  v319 = v54 & 0xFFFFFFEF;
  if( (v319 & 0x80000004) != -2147483644 )
  {
    v320 = v319 | 0x80000000;
    v321 = v359;
    v322 = (*(__int64(__fastcall **)(__int64))(a1a + 504))(v359);
    v323 = *(unsigned int *)(v322 + 148);
    if( (unsigned int)v323 >= 0x14 )
    {
      v324 = *(unsigned int *)(v322 + 144);
      v325 = v321 + v324 + v323;
      for( kk = v324 + v321; kk != v325; kk += 20i64 )
      {
        if( !*(_DWORD *)(kk + 12) )
          break;
        v327 = *(unsigned int *)(kk + 16);
        if( !(_DWORD)v327 )
          break;
        v328 = *(_QWORD *)(v327 + v321);
        if( v328 )
        {
          result = sub_140A0C0FC(&a1a, v328, v320);
          *a1 = a1a;
          if( (((_DWORD)result + 0x80000000) & 0x80000000) == 0 && (_DWORD)result != -1073741554 )
            return result;
        }
      }
    }
  }
  return 0i64;
}

Referenced by:

sub_140A0C0FC