All pastes #931756 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-03-07 10:25 UTC
rendered paste body
int __cdecl sub_4053E0()
{
  int v0; // eax@1
  unsigned int v1; // ecx@1
  unsigned int v2; // ebx@6
  int v3; // ecx@8
  unsigned int v4; // esi@10
  unsigned int v5; // eax@13
  int v6; // ecx@13
  int v7; // esi@14
  int v8; // edi@18
  unsigned int v9; // edi@23
  unsigned int v10; // esi@23
  unsigned int v11; // esi@31
  unsigned int v12; // esi@44
  signed int v13; // eax@47
  char v14; // al@50
  int v15; // ecx@57
  int i; // eax@59
  int v17; // esi@64
  int v18; // edi@67
  int v19; // eax@70
  unsigned int v20; // ecx@70
  char *v21; // esi@70
  char v22; // bl@73
  int v23; // esi@73
  bool v24; // ST28_4@80
  char v26; // al@6
  char *v27; // ST14_4@17
  int v28; // eax@17
  char *v29; // ST14_4@19
  int v30; // eax@19
  char v31; // zf@22
  char v32; // ST24_1@30
  char *v33; // ST14_4@30
  int v34; // eax@30
  char *v35; // ST14_4@39
  int v36; // eax@39
  char v37; // cf@43
  char *v38; // ST14_4@46
  int v39; // eax@46
  DWORD v40; // eax@52
  int v41; // eax@52
  int v42; // eax@52
  int v43; // eax@67
  int  s; // [sp+458h] [bp+0h]@1
  unsigned int v45; // [sp+454h] [bp-4h]@1
  int v46; // [sp+18h] [bp-440h]@1
  char *v47; // [sp+28h] [bp-430h]@4
  char v48; // [sp+0h] [bp-458h]@6
  unsigned int v49; // [sp+Ch] [bp-44Ch]@13
  unsigned int v50; // [sp+2Ch] [bp-42Ch]@13
  int v51; // [sp+24h] [bp-434h]@14
  unsigned int v52; // [sp+1Ch] [bp-43Ch]@14
  int v53; // [sp+4h] [bp-454h]@19
  int v54; // [sp+10h] [bp-448h]@20
  CHAR Buffer; // [sp+334h] [bp-124h]@38
  int v56; // [sp+330h] [bp-128h]@38
  char v57; // [sp+23h] [bp-435h]@49
  char v58; // [sp+234h] [bp-224h]@52
  char v59; // [sp+134h] [bp-324h]@52
  char v60; // [sp+434h] [bp-24h]@68
  char v61; // [sp+444h] [bp-14h]@69

  v45 = (unsigned int)& s ^ dword_95E574;
  v0 = ((unsigned __int8)sub_402260() != 0) + 1;
  v46 = v0;
  v1 = 0;
  do
  {
    byte_95E16C[v1] = 0;
    v1 += 16;
  }
  while ( v1 < 0x140 );
  if ( v0 & 2 )
    v47 = *(char **)(sub_5A2AF0("locale") + 32);
  else
    v47 = "----";
  v26 = sub_4F9680();
  sub_405160((int)&v48, (int)v47, v26);
  v2 = 0;
  if ( (unsigned int)dword_95E2D8 < 0x40 )
  {
    if ( (unsigned int)dword_95E2D4 < 0x40 )
    {
      v3 = dword_95E2E0;
      if ( !dword_95E2E0 )
        v3 = sub_80E080(64);
      v4 = 64;
      if ( 0x40u % v3 )
        v4 = v3 - 0x40u % v3 + 64;
      sub_538F00(v4);
    }
  }
  v5 = v49;
  v6 = 64;
  dword_95E2D8 = 64;
  v50 = 64;
  if ( v49 )
  {
    v7 = v49 - 1;
    v51 = 4 * v49 - 4;
    v52 = v49;
    while ( 1 )
    {
      if ( v2 >= v6 )
      {
        v27 = (char *)((int (__thiscall *)(int (***)()))*(off_95E2D0 + 1))(&off_95E2D0);
        v28 = ((int (__thiscall *)(int (***)()))*off_95E2D0)(&off_95E2D0);
        sub_5651D0(-2062548864, v28, v27, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v2);
        v5 = v49;
      }
      v8 = dword_95E2DC + 4 * v2;
      if ( v7 >= v5 )
      {
        v29 = (char *)(*(int (__thiscall **)(int *))(v53 + 4))(&v53);
        v30 = (*(int (__thiscall **)(int *))v53)(&v53);
        sub_5651D0(-2062548864, v30, v29, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v7);
      }
      if ( sub_568A60(*(char **)(v54 + v51), v50, 0, v8) )
      {
        ++v2;
        ++v50;
      }
      v51 -= 4;
      --v7;
      v31 = v52-- == 1;
      if ( v31 )
        break;
      v5 = v49;
      v6 = dword_95E2D8;
    }
  }
  v9 = v50;
  v52 = v2;
  v10 = 0;
  do
  {
    if ( *(int *)((char *)&dword_95E164 + v10) == 3 )
    {
      if ( (unsigned __int8)sub_4047A0(*(char (**)[14])((char *)&off_95E160 + v10), v9) )
      {
        ++v2;
        byte_95E16C[v10] = 1;
        ++v9;
      }
    }
    v10 += 16;
  }
  while ( v10 < 0x140 );
  v50 = 0;
  if ( v52 )
  {
    do
    {
      if ( v50 >= dword_95E2D8 )
      {
        v32 = v50;
        v33 = (char *)((int (__thiscall *)(int (***)()))*(off_95E2D0 + 1))(&off_95E2D0);
        v34 = ((int (__thiscall *)(int (***)()))*off_95E2D0)(&off_95E2D0);
        sub_5651D0(-2062548864, v34, v33, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v32);
      }
      v51 = *(_DWORD *)(dword_95E2DC + 4 * v50);
      v11 = 0;
      do
      {
        if ( *(int *)((char *)&dword_95E164 + v11) == 3 )
        {
          if ( byte_95E16C[v11]
            || !sub_565490(v47, "zhCN", 0x7FFFFFFFu)
            || !sub_565490(v47, "enCN", 0x7FFFFFFFu)
            || !sub_565490(v47, "zhTW", 0x7FFFFFFFu)
            || !sub_565490(v47, "enTW", 0x7FFFFFFFu) )
          {
            sub_5656E0(&Buffer, *(char (**)[14])((char *)&off_95E160 + v11), 256);
            *((_BYTE *)&v56 + sub_565790(&Buffer)) = 0;
            if ( v2 >= dword_95E2D8 )
            {
              v35 = (char *)((int (__thiscall *)(_DWORD))*(off_95E2D0 + 1))(&off_95E2D0);
              v36 = ((int (__thiscall *)(_DWORD))*off_95E2D0)(&off_95E2D0);
              sub_5651D0(-2062548864, v36, v35, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v2);
            }
            if ( sub_568B10(v51, &Buffer, v9, 0, dword_95E2DC + 4 * v2) )
            {
              ++v2;
              ++v9;
            }
          }
        }
        v11 += 16;
      }
      while ( v11 < 0x140 );
      v37 = v50++ + 1 < v52;
    }
    while ( v37 );
  }
  v12 = 0;
  dword_C2B94C = v2;
  v50 = 63;
  dword_C2B950 = v2;
  v51 = 0;
  do
  {
    if ( v2 >= dword_95E2D8 )
    {
      v38 = (char *)((int (__thiscall *)(_DWORD))*(off_95E2D0 + 1))(&off_95E2D0);
      v39 = ((int (__thiscall *)(_DWORD))*off_95E2D0)(&off_95E2D0);
      sub_5651D0(-2062548864, v39, v38, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v2);
    }
    *(_DWORD *)(dword_95E2DC + 4 * v2) = 0;
    v13 = *(int *)((char *)&dword_95E164 + v12);
    if ( v13 == 3 )
    {
      ++v2;
    }
    else
    {
      v57 = v13 == 2;
      if ( v46 & *(int *)((char *)&dword_95E168 + v12) )
      {
        v14 = sub_4047A0(*(char (**)[14])((char *)&off_95E160 + v12), v50);
        if ( !v14 )
        {
          if ( v57 == v14 )
          {
            v40 = sub_563A70();
            sub_564350(v40, &Buffer, 0x100u);
            sub_402170(0);
            sub_5659D0(&v58, 256, "Failed to open archive %s: %s", (char)*(char (**)[14])((char *)&off_95E160 + v51));
            sub_5656E0(&v59, "Missing or corrupted data", 2147483647);
            v41 = sub_42E9C0(2);
            sub_42EA40(v41, 0, &v58, &v59);
            v42 = sub_563A70();
            loc_571320(v42);
            v12 = v51;
          }
        }
      }
      ++v2;
      --v50;
      byte_95E16C[v12] = 1;
    }
    v12 += 16;
    v51 = v12;
  }
  while ( v12 < 0x140 );
  if ( v2 > dword_95E2D8 )
  {
    if ( v2 > dword_95E2D4 )
    {
      v15 = dword_95E2E0;
      if ( !dword_95E2E0 )
      {
        v15 = v2;
        if ( v2 >= 0x40 )
        {
          dword_95E2E0 = 64;
          v15 = 64;
        }
        else
        {
          for ( i = v2 & (v2 - 1); i; i &= i - 1 )
            v15 = i;
          if ( (unsigned int)v15 < 1 )
            v15 = 1;
        }
      }
      v17 = v2;
      if ( v2 % v15 )
        v17 = v2 + v15 - v2 % v15;
      sub_538F00(v17);
    }
  }
  dword_95E2D8 = v2;
  byte_C2B92D = sub_404920(13) != 0;
  v43 = sub_7B8CE0();
  v18 = v43;
  if ( sub_7B94E0(v43, "Wow.ini") )
  {
    sub_7B8EE0(v18, "WoW Config", "Region", &dword_C2B8EC, 0);
    if ( sub_7B8FA0(v18, "WoW Config", "Language", &v60, 16, 0) )
    {
      if ( sub_7B8FA0(v18, "WoW Config", "Country", &v61, 16, 0) )
      {
        sub_5659D0(byte_C2B970, 5, "%s%s", (char)&v60);
        v19 = 0;
        v21 = byte_C2B970;
        v20 = 0;
        do
        {
          if ( !*v21 )
            break;
          ++v20;
          v19 = *v21++ + (v19 << 8);
        }
        while ( v20 < 4 );
        dword_EDD3E4 = v19;
        v22 = sub_565490("enGB", byte_C2B970, 0x7FFFFFFFu) == 0;
        v23 = 0;
        while ( sub_565490(byte_C2B970, (&off_98C5E0)[4 * v23], 0x7FFFFFFFu)
             && (!v22 || sub_565490("enUS", (&off_98C5E0)[4 * v23], 0x7FFFFFFFu)) )
        {
          ++v23;
          if ( v23 >= 9 )
            goto LABEL_84;
        }
        dword_DA3BA0 = v23;
        v24 = v23 == 8;
        sub_4C96F0(v24);
        if ( v46 & 1 )
        {
          sub_5A2AF0("locale");
          sub_5A2580(byte_C2B970, 1, 0, 0, 1);
          v47 = byte_C2B970;
        }
      }
    }
  }
LABEL_84:
  sub_7B7C30(v18);
  sub_402440(v47);
  return sub_404510();
}