karuta_X

Untitled

Oct 17th, 2016
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 365.72 KB | None | 0 0
  1. // Trainer Asphalt 8 2.7.0n.c
  2.  
  3.  
  4. #include "Trainer Asphalt 8 2.7.0n.h"
  5.  
  6. word32 fn00401000(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  7. {
  8. fn00401000_entry:
  9.     def fp
  10.     def edi
  11.     def esi
  12.     def ebx
  13.     def dwArg00
  14.     def dwArg04
  15.     def dwArg08
  16.     def dwLoc04
  17.     esp_2 = fp - 3252
  18.     branch (fp - 3252 & fp - 3252) == 0x00 l0040102F
  19.     goto l0040101C
  20. l00401000:
  21. l0040101C:
  22.     call ADVAPI32.dll!ConvertStringSecurityDescriptorToSecurityDescriptorA (retsize: 4; depth: 3272)
  23.         uses: al,C_8,cl,cx,CZ,dl,ds,dwLoc04,dwLoc0CAC_5,dwLoc0CB4_4,dwLoc0CB8_713,dwLoc0CBC_716,dwLoc0CC0_718,dwLoc0CC4_720,eax_3,ebp,ebx,ecx_714,edi,edx,es,esi,esp_719,SCZO,SZO_6,xmm0,Z_7
  24.         defs: al_739,C_727,cl_731,cx_737,CZ_736,dl_738,ds_741,eax_725,ebp_735,ebx_732,ecx_729,edi_734,edx_730,es_740,esi_733,esp_723,SCZO_724,SZO_726,xmm0_742,Z_728
  25. l0040102F:
  26.     edi_40 = PHI(edi, edi_734)
  27.     esi_41 = PHI(esi, esi_733)
  28.     ebx_42 = PHI(ebx, ebx_732)
  29.     esp_43 = PHI(esp_2, esp_723)
  30.     esp_45 = esp_43 - 0x04
  31.     Mem46[esp_45 + 0x00:word32] = 0x0104
  32.     edx_47 = esp_45 + 0x0488
  33.     esp_48 = esp_45 - 0x04
  34.     Mem49[esp_45 - 0x04 + 0x00:word32] = esp_45 + 0x0488
  35.     esp_50 = esp_45 - 0x08
  36.     Mem51[esp_45 - 0x08 + 0x00:word32] = 0x00
  37.     GetModuleFileNameA(Mem51[esp_45 - 0x08 + 0x00:HMODULE], Mem51[esp_45 - 0x04 + 0x00:LPSTR], Mem51[esp_45 + 0x00:DWORD])
  38.     esp_53 = esp_45 + 0x04
  39.     eax_54 = 0x00
  40. l00401050:
  41.     eax_58 = PHI(eax_54, eax_61)
  42.     cl_59 = Mem51[esp_45 + 0x0488 + eax_58:byte]
  43.     Mem60[esp_45 + 900 + eax_58:byte] = cl_59
  44.     eax_61 = eax_58 + 0x01
  45.     branch cl_59 != 0x00 l00401050
  46. l00401063:
  47.     esp_66 = esp_45
  48.     Mem67[esp_45 + 0x00:word32] = ebx_42
  49.     esp_68 = esp_45 - 0x04
  50.     Mem69[esp_45 - 0x04 + 0x00:word32] = esi_41
  51.     esp_70 = esp_45 - 0x08
  52.     Mem71[esp_45 - 0x08 + 0x00:word32] = edi_40
  53.     eax_72 = esp_45 + 900
  54.     esp_73 = esp_45 - 0x0C
  55.     Mem74[esp_45 - 0x0C + 0x00:word32] = esp_45 + 900
  56.     call SHLWAPI.dll!PathRemoveFileSpecA (retsize: 4; depth: 4)
  57.         uses: al_62,C_65,cl_59,cx_34,CZ_35,dl_33,ds_31,dwLoc0CAC_5,dwLoc0CB4_4,dwLoc0CB8_26,dwLoc0CBC_27,dwLoc0CC0_28,dwLoc0CC4_29,eax_72,ebp_39,ebx_42,ecx_38,edi_40,edx_47,es_32,esi_41,esp_73,SCZO_44,SZO_63,xmm0_30,Z_64
  58.         defs: al_91,C_79,cl_83,cx_89,CZ_88,dl_90,ds_93,eax_77,ebp_87,ebx_84,ecx_81,edi_86,edx_82,es_92,esi_85,esp_75,SCZO_76,SZO_78,xmm0_94,Z_80
  59.     ecx_95 = esp_75 + 0x038C
  60.     esp_96 = esp_75 - 0x04
  61.     Mem97[esp_75 - 0x04 + 0x00:word32] = esp_75 + 0x038C
  62.     call SHLWAPI.dll!PathAddBackslashA (retsize: 4; depth: 4)
  63.         uses: al_91,C_79,cl_83,cx_89,CZ_88,dl_90,ds_93,dwLoc0CAC_5,dwLoc0CB4_4,dwLoc0CB8_26,dwLoc0CBC_27,dwLoc0CC0_28,dwLoc0CC4_29,eax_77,ebp_87,ebx_84,ecx_95,edi_86,edx_82,es_92,esi_85,esp_96,SCZO_76,SZO_78,xmm0_94,Z_80
  64.         defs: al_114,C_102,cl_106,cx_112,CZ_111,dl_113,ds_116,eax_100,ebp_110,ebx_107,ecx_104,edi_109,edx_105,es_115,esi_108,esp_98,SCZO_99,SZO_101,xmm0_117,Z_103
  65.     edx_118 = esp_98 + 0x038C
  66.     esp_119 = esp_98 - 0x04
  67.     Mem120[esp_98 - 0x04 + 0x00:word32] = esp_98 + 0x038C
  68.     esp_121 = esp_98 - 0x08
  69.     Mem122[esp_98 - 0x08 + 0x00:word32] = 0x0040B3B4
  70.     eax_123 = esp_98 + 0x0594
  71.     esp_124 = esp_98 - 0x0C
  72.     Mem125[esp_98 - 0x0C + 0x00:word32] = 0x0114
  73.     esp_126 = esp_98 - 0x10
  74.     Mem127[esp_98 - 0x10 + 0x00:word32] = esp_98 + 0x0594
  75.     eax_133 = fn00401426(esi_108, es_115, ds_116, dwArg00, dwArg04, dwArg08, out esi_131, out xmm0_132)
  76.     esp_134 = esp_98
  77.     ecx_136 = esp_98 + 0x0490
  78.     esp_137 = esp_98 - 0x04
  79.     Mem138[esp_98 - 0x04 + 0x00:word32] = esp_98 + 0x0490
  80.     call SHLWAPI.dll!PathStripPathA (retsize: 4; depth: 4)
  81.         uses: al_114,C_102,cl_106,cx_112,CZ_111,dl_113,ds_116,dwLoc0CAC_5,dwLoc0CB4_4,dwLoc0CB8_26,dwLoc0CBC_27,dwLoc0CC0_28,dwLoc0CC4_29,eax_133,ebp_110,ebx_107,ecx_136,edi_109,edx_118,es_115,esi_131,esp_137,SCZO_135,SZO_101,xmm0_132,Z_103
  82.         defs: al_155,C_143,cl_147,cx_153,CZ_152,dl_154,ds_157,eax_141,ebp_151,ebx_148,ecx_145,edi_150,edx_146,es_156,esi_149,esp_139,SCZO_140,SZO_142,xmm0_158,Z_144
  83.     esp_160 = esp_139 - 0x04
  84.     Mem161[esp_139 - 0x04 + 0x00:word32] = 0x0A
  85.     esp_162 = esp_139 - 0x08
  86.     Mem163[esp_139 - 0x08 + 0x00:word32] = 4240324
  87.     esp_164 = esp_139 - 0x0C
  88.     Mem165[esp_139 - 0x0C + 0x00:word32] = 0x00
  89.     eax_166 = GetModuleHandleA(Mem165[esp_139 - 0x0C + 0x00:LPCSTR])
  90.     esp_167 = esp_139 - 0x08
  91.     esp_169 = esp_139 - 0x0C
  92.     Mem170[esp_139 - 0x0C + 0x00:word32] = eax_166
  93.     eax_171 = FindResourceA(Mem170[esp_139 - 0x0C + 0x00:HMODULE], Mem170[esp_139 - 0x08 + 0x00:LPCSTR], Mem170[esp_139 - 0x04 + 0x00:LPCSTR])
  94.     esp_172 = esp_139
  95.     esp_173 = esp_139 - 0x04
  96.     Mem174[esp_139 - 0x04 + 0x00:word32] = 0x0A
  97.     esp_175 = esp_139 - 0x08
  98.     Mem176[esp_139 - 0x08 + 0x00:word32] = 4240340
  99.     esp_177 = esp_139 - 0x0C
  100.     Mem178[esp_139 - 0x0C + 0x00:word32] = 0x00
  101.     edi_179 = eax_171
  102.     eax_180 = GetModuleHandleA(Mem178[esp_139 - 0x0C + 0x00:LPCSTR])
  103.     esp_181 = esp_139 - 0x08
  104.     esp_182 = esp_139 - 0x0C
  105.     Mem183[esp_139 - 0x0C + 0x00:word32] = eax_180
  106.     eax_184 = FindResourceA(Mem183[esp_139 - 0x0C + 0x00:HMODULE], Mem183[esp_139 - 0x08 + 0x00:LPCSTR], Mem183[esp_139 - 0x04 + 0x00:LPCSTR])
  107.     esp_185 = esp_139
  108.     ebx_186 = eax_184
  109.     branch eax_171 == 0x00 l00401412
  110. l004010E6:
  111.     esp_235 = esp_139 - 0x04
  112.     Mem236[esp_139 - 0x04 + 0x00:word32] = ebp_151
  113.     esp_237 = esp_139 - 0x08
  114.     Mem238[esp_139 - 0x08 + 0x00:word32] = eax_171
  115.     esp_239 = esp_139 - 0x0C
  116.     Mem240[esp_139 - 0x0C + 0x00:word32] = 0x00
  117.     eax_241 = GetModuleHandleA(Mem240[esp_139 - 0x0C + 0x00:LPCSTR])
  118.     esp_242 = esp_139 - 0x08
  119.     esp_244 = esp_139 - 0x0C
  120.     Mem245[esp_139 - 0x0C + 0x00:word32] = eax_241
  121.     eax_246 = SizeofResource(Mem245[esp_139 - 0x0C + 0x00:HMODULE], Mem245[esp_139 - 0x08 + 0x00:HRSRC])
  122.     esp_247 = esp_139 - 0x04
  123.     esp_248 = esp_139 - 0x08
  124.     Mem249[esp_139 - 0x08 + 0x00:word32] = eax_184
  125.     esp_250 = esp_139 - 0x0C
  126.     Mem251[esp_139 - 0x0C + 0x00:word32] = 0x00
  127.     Mem252[esp_139 + 0x18:word32] = eax_246
  128.     eax_253 = GetModuleHandleA(Mem252[esp_139 - 0x0C + 0x00:LPCSTR])
  129.     esp_254 = esp_139 - 0x08
  130.     esp_255 = esp_139 - 0x0C
  131.     Mem256[esp_139 - 0x0C + 0x00:word32] = eax_253
  132.     eax_257 = SizeofResource(Mem256[esp_139 - 0x0C + 0x00:HMODULE], Mem256[esp_139 - 0x08 + 0x00:HRSRC])
  133.     esp_258 = esp_139 - 0x04
  134.     esp_259 = esp_139 - 0x08
  135.     Mem260[esp_139 - 0x08 + 0x00:word32] = eax_171
  136.     esp_261 = esp_139 - 0x0C
  137.     Mem262[esp_139 - 0x0C + 0x00:word32] = 0x00
  138.     Mem263[esp_139 + 0x28:word32] = eax_257
  139.     eax_264 = GetModuleHandleA(Mem263[esp_139 - 0x0C + 0x00:LPCSTR])
  140.     esp_265 = esp_139 - 0x08
  141.     esp_267 = esp_139 - 0x0C
  142.     Mem268[esp_139 - 0x0C + 0x00:word32] = eax_264
  143.     eax_269 = LoadResource(Mem268[esp_139 - 0x0C + 0x00:HMODULE], Mem268[esp_139 - 0x08 + 0x00:HRSRC])
  144.     esp_270 = esp_139 - 0x04
  145.     esp_271 = esp_139 - 0x08
  146.     Mem272[esp_139 - 0x08 + 0x00:word32] = eax_184
  147.     esp_273 = esp_139 - 0x0C
  148.     Mem274[esp_139 - 0x0C + 0x00:word32] = 0x00
  149.     Mem275[esp_139 + 0x1C:word32] = eax_269
  150.     eax_276 = GetModuleHandleA(Mem275[esp_139 - 0x0C + 0x00:LPCSTR])
  151.     esp_277 = esp_139 - 0x08
  152.     esp_278 = esp_139 - 0x0C
  153.     Mem279[esp_139 - 0x0C + 0x00:word32] = eax_276
  154.     eax_280 = LoadResource(Mem279[esp_139 - 0x0C + 0x00:HMODULE], Mem279[esp_139 - 0x08 + 0x00:HRSRC])
  155.     esp_281 = esp_139 - 0x04
  156.     edx_282 = esp_139 + 0x0288
  157.     esp_283 = esp_139 - 0x08
  158.     Mem284[esp_139 - 0x08 + 0x00:word32] = esp_139 + 0x0288
  159.     esp_285 = esp_139 - 0x0C
  160.     Mem286[esp_139 - 0x0C + 0x00:word32] = 0x0104
  161.     Mem287[esp_139 + 0x24:word32] = eax_280
  162.     GetTempPathA(Mem287[esp_139 - 0x0C + 0x00:DWORD], Mem287[esp_139 - 0x08 + 0x00:LPSTR])
  163.     esp_289 = esp_139 - 0x04
  164.     C_291 = false
  165.     CZ_292 = false (alias)
  166.     branch false l004013FD
  167. l0040113E:
  168.     eax_311 = esp_139 + 0x0288
  169.     eax_312 = esp_139 + 0x0287
  170. l00401146:
  171.     eax_315 = PHI(eax_312, eax_317)
  172.     cl_316 = Mem287[eax_315 + 0x01:byte]
  173.     eax_317 = eax_315 + 0x01
  174.     branch cl_316 != 0x00 l00401146
  175. l0040114E:
  176.     ecx_322 = Mem287[4240348:word32]
  177.     edx_323 = Mem287[0x0040B3E0:word32]
  178.     Mem325[eax_317 + 0x00:word32] = ecx_322
  179.     cx_326 = Mem325[0x0040B3E4:word16]
  180.     Mem327[eax_317 + 0x04:word32] = edx_323
  181.     dl_328 = Mem327[0x0040B3E6:byte]
  182.     Mem329[eax_317 + 0x08:word16] = cx_326
  183.     Mem330[eax_317 + 0x0A:byte] = dl_328
  184.     eax_331 = esp_139 + 0x0C
  185.     esp_332 = esp_139 - 0x08
  186.     Mem333[esp_139 - 0x08 + 0x00:word32] = esp_139 + 0x0C
  187.     ecx_334 = esp_139 + 0x0288
  188.     esp_335 = esp_139 - 0x0C
  189.     Mem336[esp_139 - 0x0C + 0x00:word32] = esp_139 + 0x0288
  190.     CreateDirectoryA(Mem336[esp_139 - 0x0C + 0x00:LPCSTR], Mem336[esp_139 - 0x08 + 0x00:LPSECURITY_ATTRIBUTES])
  191.     esp_338 = esp_139 - 0x04
  192.     edx_339 = esp_139 + 0x80
  193.     esp_340 = esp_139 - 0x08
  194.     Mem341[esp_139 - 0x08 + 0x00:word32] = esp_139 + 0x80
  195.     esp_342 = esp_139 - 0x0C
  196.     Mem343[esp_139 - 0x0C + 0x00:word32] = 0x00
  197.     esp_344 = esp_139 - 0x10
  198.     Mem345[esp_139 - 0x10 + 0x00:word32] = 4240360
  199.     eax_346 = esp_139 + 0x0288
  200.     esp_347 = esp_139 - 0x14
  201.     Mem348[esp_139 - 0x14 + 0x00:word32] = esp_139 + 0x0288
  202.     GetTempFileNameA(Mem348[esp_139 - 0x14 + 0x00:LPCSTR], Mem348[esp_139 - 0x10 + 0x00:LPCSTR], Mem348[esp_139 - 0x0C + 0x00:UINT], Mem348[esp_139 - 0x08 + 0x00:LPSTR])
  203.     esp_350 = esp_139 - 0x04
  204.     C_352 = false
  205.     CZ_353 = false (alias)
  206.     branch false l004013EF
  207. l004011AD:
  208.     ecx_354 = esp_139 + 0x80
  209.     esp_355 = esp_139 - 0x08
  210.     Mem356[esp_139 - 0x08 + 0x00:word32] = esp_139 + 0x80
  211.     DeleteFileA(Mem356[esp_139 - 0x08 + 0x00:LPCSTR])
  212.     esp_358 = esp_139 - 0x04
  213.     edx_359 = esp_139 + 0x0C
  214.     esp_360 = esp_139 - 0x08
  215.     Mem361[esp_139 - 0x08 + 0x00:word32] = esp_139 + 0x0C
  216.     eax_362 = esp_139 + 0x80
  217.     esp_363 = esp_139 - 0x0C
  218.     Mem364[esp_139 - 0x0C + 0x00:word32] = esp_139 + 0x80
  219.     eax_365 = CreateDirectoryA(Mem364[esp_139 - 0x0C + 0x00:LPCSTR], Mem364[esp_139 - 0x08 + 0x00:LPSECURITY_ATTRIBUTES])
  220.     esp_366 = esp_139 - 0x04
  221.     branch eax_365 == 0x00 l004013E1
  222. l004011D2:
  223.     eax_370 = 0x00
  224. l004011E0:
  225.     eax_374 = PHI(eax_370, eax_377)
  226.     cl_375 = Mem364[esp_139 + 0x80 + eax_374:byte]
  227.     Mem376[esp_139 + 0x06A8 + eax_374:byte] = cl_375
  228.     eax_377 = eax_374 + 0x01
  229.     branch cl_375 != 0x00 l004011E0
  230. l004011F3:
  231.     edi_382 = esp_139 + 0x06A8
  232.     edi_383 = esp_139 + 0x06A7
  233. l00401200:
  234.     edi_385 = PHI(edi_383, edi_387)
  235.     al_386 = Mem376[edi_385 + 0x01:byte]
  236.     edi_387 = edi_385 + 0x01
  237.     branch al_386 != 0x00 l00401200
  238. l00401208:
  239.     cx_391 = Mem376[4240364:word16]
  240.     eax_392 = esp_139 + 0x06A8
  241.     Mem393[edi_387 + 0x00:word16] = cx_391
  242.     eax_394 = esp_139 + 0x06A7
  243. l00401220:
  244.     eax_398 = PHI(eax_394, eax_400)
  245.     cl_399 = Mem393[eax_398 + 0x01:byte]
  246.     eax_400 = eax_398 + 0x01
  247.     branch cl_399 != 0x00 l00401220
  248. l00401228:
  249.     edx_405 = Mem393[0x0040B3F0:word32]
  250.     ecx_406 = Mem393[0x0040B3F4:word32]
  251.     edi_407 = CreateFileA
  252.     Mem408[eax_400 + 0x00:word32] = edx_405
  253.     edx_409 = Mem408[0x0040B3F8:word32]
  254.     esp_410 = esp_139 - 0x08
  255.     Mem411[esp_139 - 0x08 + 0x00:word32] = 0x00
  256.     esp_412 = esp_139 - 0x0C
  257.     Mem413[esp_139 - 0x0C + 0x00:word32] = 0x80
  258.     Mem414[eax_400 + 0x04:word32] = ecx_406
  259.     ecx_415 = Mem414[4240380:word32]
  260.     Mem416[eax_400 + 0x08:word32] = edx_409
  261.     esp_417 = esp_139 - 0x10
  262.     Mem418[esp_139 - 0x10 + 0x00:word32] = 0x02
  263.     edx_419 = esp_139 + 0x0C
  264.     esp_420 = esp_139 - 0x14
  265.     Mem421[esp_139 - 0x14 + 0x00:word32] = esp_139 + 0x0C
  266.     esp_422 = esp_139 - 0x18
  267.     Mem423[esp_139 - 0x18 + 0x00:word32] = 0x03
  268.     Mem424[eax_400 + 0x0C:word32] = ecx_415
  269.     esp_425 = esp_139 - 0x1C
  270.     Mem426[esp_139 - 0x1C + 0x00:word32] = 0x40000000
  271.     eax_427 = esp_139 + 0x06A8
  272.     esp_428 = esp_139 - 0x20
  273.     Mem429[esp_139 - 0x20 + 0x00:word32] = esp_139 + 0x06A8
  274.     eax_430 = CreateFileA(Mem429[esp_139 - 0x20 + 0x00:LPCSTR], Mem429[esp_139 - 0x1C + 0x00:DWORD], Mem429[esp_139 - 0x18 + 0x00:DWORD], Mem429[esp_139 - 0x14 + 0x00:LPSECURITY_ATTRIBUTES], Mem429[esp_139 - 0x10 + 0x00:DWORD], Mem429[esp_139 - 0x0C + 0x00:DWORD], Mem429[esp_139 - 0x08 + 0x00:HANDLE])
  275.     esp_431 = esp_139 - 0x04
  276.     esi_434 = eax_430
  277.     branch eax_430 == 0x00 l00401299
  278. l00401282:
  279.     edx_675 = Mem429[esp_139 + 0x28:word32]
  280.     eax_676 = Mem429[esp_139 + 0x24:word32]
  281.     esp_677 = esp_139 - 0x08
  282.     Mem678[esp_139 - 0x08 + 0x00:word32] = 0x00
  283.     ecx_679 = esp_139 + 0x20
  284.     esp_680 = esp_139 - 0x0C
  285.     Mem681[esp_139 - 0x0C + 0x00:word32] = esp_139 + 0x20
  286.     esp_682 = esp_139 - 0x10
  287.     Mem683[esp_139 - 0x10 + 0x00:word32] = edx_675
  288.     esp_684 = esp_139 - 0x14
  289.     Mem685[esp_139 - 0x14 + 0x00:word32] = eax_676
  290.     esp_686 = esp_139 - 0x18
  291.     Mem687[esp_139 - 0x18 + 0x00:word32] = eax_430
  292.     WriteFile(Mem687[esp_139 - 0x18 + 0x00:HANDLE], Mem687[esp_139 - 0x14 + 0x00:LPCVOID], Mem687[esp_139 - 0x10 + 0x00:DWORD], Mem687[esp_139 - 0x0C + 0x00:LPDWORD], Mem687[esp_139 - 0x08 + 0x00:LPOVERLAPPED])
  293.     esp_689 = esp_139 - 0x04
  294.     esp_690 = esp_139 - 0x08
  295.     Mem691[esp_139 - 0x08 + 0x00:word32] = eax_430
  296.     CloseHandle(Mem691[esp_139 - 0x08 + 0x00:HANDLE])
  297.     esp_693 = esp_139 - 0x04
  298. l00401299:
  299.     esp_438 = PHI(esp_431, esp_693)
  300.     ecx_439 = esp_438 + 0x0494
  301.     esp_440 = esp_438 - 0x04
  302.     Mem441[esp_440 + 0x00:word32] = ecx_439
  303.     edx_442 = esp_440 + 0x88
  304.     esp_443 = esp_440 - 0x04
  305.     Mem444[esp_440 - 0x04 + 0x00:word32] = esp_440 + 0x88
  306.     esp_445 = esp_440 - 0x08
  307.     Mem446[esp_440 - 0x08 + 0x00:word32] = 0x0040B400
  308.     eax_447 = esp_440 + 0x018C
  309.     esp_448 = esp_440 - 0x0C
  310.     Mem449[esp_440 - 0x0C + 0x00:word32] = 0x0104
  311.     esp_450 = esp_440 - 0x10
  312.     Mem451[esp_440 - 0x10 + 0x00:word32] = esp_440 + 0x018C
  313.     fn00401426(eax_430, es_156, ds_157, dwArg00, dwArg04, dwArg08, out esi_452, out xmm0_453)
  314.     ecx_455 = esp_440 + 0x059C
  315.     esp_456 = esp_440 - 0x14
  316.     Mem457[esp_440 - 0x14 + 0x00:word32] = esp_440 + 0x059C
  317.     edx_458 = esp_440 + 0x018C
  318.     esp_459 = esp_440 - 0x18
  319.     Mem460[esp_440 - 0x18 + 0x00:word32] = esp_440 + 0x018C
  320.     esp_461 = esp_440 - 0x1C
  321.     Mem462[esp_440 - 0x1C + 0x00:word32] = 0x0040B408
  322.     eax_463 = esp_440 + 0x0AB0
  323.     esp_464 = esp_440 - 0x20
  324.     Mem465[esp_440 - 0x20 + 0x00:word32] = 0x0218
  325.     esp_466 = esp_440 - 0x24
  326.     Mem467[esp_440 - 0x24 + 0x00:word32] = esp_440 + 0x0AB0
  327.     eax_470 = fn00401426(esi_452, es_156, ds_157, dwArg00, dwArg04, dwArg08, out esi_468, out xmm0_469)
  328.     esp_471 = esp_440 + 0x04
  329.     esp_473 = esp_440
  330.     Mem474[esp_440 + 0x00:word32] = 0x00
  331.     esp_475 = esp_440 - 0x04
  332.     Mem476[esp_440 - 0x04 + 0x00:word32] = 0x80
  333.     esp_477 = esp_440 - 0x08
  334.     Mem478[esp_440 - 0x08 + 0x00:word32] = 0x02
  335.     ecx_479 = esp_440 + 0x14
  336.     esp_480 = esp_440 - 0x0C
  337.     Mem481[esp_440 - 0x0C + 0x00:word32] = esp_440 + 0x14
  338.     esp_482 = esp_440 - 0x10
  339.     Mem483[esp_440 - 0x10 + 0x00:word32] = 0x03
  340.     esp_484 = esp_440 - 0x14
  341.     Mem485[esp_440 - 0x14 + 0x00:word32] = 0x40000000
  342.     edx_486 = esp_440 + 0x018C
  343.     esp_487 = esp_440 - 0x18
  344.     Mem488[esp_440 - 0x18 + 0x00:word32] = esp_440 + 0x018C
  345.     eax_491 = CreateFileA(Mem0[esp + 0x00:LPCSTR], Mem0[esp + 0x04:DWORD], Mem0[esp + 0x08:DWORD], Mem0[esp + 0x0C:LPSECURITY_ATTRIBUTES], Mem0[esp + 0x0010:DWORD], Mem0[esp + 0x0014:DWORD], Mem0[esp + 0x0018:HANDLE])
  346.     esi_509 = eax_491
  347.     branch eax_491 == 0x00 l00401326
  348. l0040130F:
  349.     ecx_620 = Mem488[esp_489 + 0x1C:word32]
  350.     edx_621 = Mem488[esp_489 + 0x20:word32]
  351.     esp_622 = esp_489 - 0x04
  352.     Mem623[esp_489 - 0x04 + 0x00:word32] = 0x00
  353.     eax_624 = esp_489 + 0x24
  354.     esp_625 = esp_489 - 0x08
  355.     Mem626[esp_489 - 0x08 + 0x00:word32] = esp_489 + 0x24
  356.     esp_627 = esp_489 - 0x0C
  357.     Mem628[esp_489 - 0x0C + 0x00:word32] = ecx_620
  358.     esp_629 = esp_489 - 0x10
  359.     Mem630[esp_489 - 0x10 + 0x00:word32] = edx_621
  360.     esp_631 = esp_489 - 0x14
  361.     Mem632[esp_489 - 0x14 + 0x00:word32] = eax_491
  362.     call ebx_498 (retsize: 4; depth: 4)
  363.         uses: al_505,C_512,cl_497,cx_503,CZ_502,dl_504,ds_507,dwLoc04,dwLoc0CAC_5,dwLoc0CB4_4,dwLoc0CB8_26,dwLoc0CBC_27,dwLoc0CC0_28,dwLoc0CC4_29,eax_624,ebp_501,ebx_498,ecx_620,edi_500,edx_621,es_506,esi_509,esp_631,SCZO_490,SZO_510,xmm0_508,Z_511
  364.         defs: al_649,C_637,cl_641,cx_647,CZ_646,dl_648,ds_651,eax_635,ebp_645,ebx_642,ecx_639,edi_644,edx_640,es_650,esi_643,esp_633,SCZO_634,SZO_636,xmm0_652,Z_638
  365.     esp_653 = esp_633 - 0x04
  366.     Mem654[esp_633 - 0x04 + 0x00:word32] = esi_643
  367.     call ebp_645 (retsize: 4; depth: 4)
  368.         uses: al_649,C_637,cl_641,cx_647,CZ_646,dl_648,ds_651,dwLoc04,dwLoc0CAC_5,dwLoc0CB4_4,dwLoc0CB8_26,dwLoc0CBC_27,dwLoc0CC0_28,dwLoc0CC4_29,eax_635,ebp_645,ebx_642,ecx_639,edi_644,edx_640,es_650,esi_643,esp_653,SCZO_634,SZO_636,xmm0_652,Z_638
  369.         defs: al_671,C_659,cl_663,cx_669,CZ_668,dl_670,ds_673,eax_657,ebp_667,ebx_664,ecx_661,edi_666,edx_662,es_672,esi_665,esp_655,SCZO_656,SZO_658,xmm0_674,Z_660
  370. l00401326:
  371.     xmm0_513 = PHI(xmm0_508, xmm0_674)
  372.     esp_524 = PHI(esp_489, esp_655)
  373.     esp_526 = esp_524 - 0x04
  374.     Mem527[esp_526 + 0x00:word32] = 0x44
  375.     eax_528 = esp_526 + 0x44
  376.     esp_529 = esp_526 - 0x04
  377.     Mem530[esp_526 - 0x04 + 0x00:word32] = 0x00
  378.     esp_531 = esp_526 - 0x08
  379.     Mem532[esp_526 - 0x08 + 0x00:word32] = esp_526 + 0x44
  380.     fn00404CA0(xmm0_513, dwLoc04, dwArg00, dwArg04, dwArg08, out edx_534, out edi_535)
  381.     esp_537 = esp_526 + 0x04
  382.     ecx_539 = esp_526 + 0x34
  383.     esp_540 = esp_526
  384.     Mem541[esp_526 + 0x00:word32] = esp_526 + 0x34
  385.     edx_542 = esp_526 + 0x44
  386.     esp_543 = esp_526 - 0x04
  387.     Mem544[esp_526 - 0x04 + 0x00:word32] = esp_526 + 0x44
  388.     Mem545[esp_526 + 0x34:word32] = 0x00
  389.     Mem546[esp_526 + 0x38:word32] = 0x00
  390.     Mem547[esp_526 + 0x3C:word32] = 0x00
  391.     Mem548[esp_526 + 0x40:word32] = 0x00
  392.     eax_549 = esp_526 + 0x88
  393.     esp_550 = esp_526 - 0x08
  394.     Mem551[esp_526 - 0x08 + 0x00:word32] = esp_526 + 0x88
  395.     esp_552 = esp_526 - 0x0C
  396.     Mem553[esp_526 - 0x0C + 0x00:word32] = 0x00
  397.     esp_554 = esp_526 - 0x10
  398.     Mem555[esp_526 - 0x10 + 0x00:word32] = 0x00
  399.     esp_556 = esp_526 - 0x14
  400.     Mem557[esp_526 - 0x14 + 0x00:word32] = 0x00
  401.     esp_558 = esp_526 - 0x18
  402.     Mem559[esp_526 - 0x18 + 0x00:word32] = 0x00
  403.     esp_560 = esp_526 - 0x1C
  404.     Mem561[esp_526 - 0x1C + 0x00:word32] = 0x00
  405.     ecx_562 = esp_526 + 0x0AB0
  406.     esp_563 = esp_526 - 0x20
  407.     Mem564[esp_526 - 0x20 + 0x00:word32] = esp_526 + 0x0AB0
  408.     edx_565 = esp_526 + 0x018C
  409.     esp_566 = esp_526 - 0x24
  410.     Mem567[esp_526 - 0x24 + 0x00:word32] = esp_526 + 0x018C
  411.     Mem568[esp_526 + 0x44:word32] = 0x44
  412.     eax_569 = CreateProcessA(Mem568[esp_526 - 0x24 + 0x00:LPCSTR], Mem568[esp_526 - 0x20 + 0x00:LPSTR], Mem568[esp_526 - 0x1C + 0x00:LPSECURITY_ATTRIBUTES], Mem568[esp_526 - 0x18 + 0x00:LPSECURITY_ATTRIBUTES], Mem568[esp_526 - 0x14 + 0x00:BOOL], Mem568[esp_526 - 0x10 + 0x00:DWORD], Mem568[esp_526 - 0x0C + 0x00:LPVOID], Mem568[esp_526 - 0x08 + 0x00:LPCSTR], Mem568[esp_526 - 0x04 + 0x00:LPSTARTUPINFOA], Mem568[esp_526 + 0x00:LPPROCESS_INFORMATION])
  413.     esp_570 = esp_526 + 0x04
  414.     branch eax_569 == 0x00 l00401396
  415. l00401387:
  416.     eax_603 = Mem568[esp_526 + 0x34:word32]
  417.     esp_604 = esp_526
  418.     Mem605[esp_526 + 0x00:word32] = ~0x00
  419.     esp_606 = esp_526 - 0x04
  420.     Mem607[esp_526 - 0x04 + 0x00:word32] = eax_603
  421.     WaitForSingleObject(Mem607[esp_526 - 0x04 + 0x00:HANDLE], Mem607[esp_526 + 0x00:DWORD])
  422.     esp_609 = esp_526 + 0x04
  423.     goto l004013AA
  424. l00401396:
  425.     esp_610 = esp_526
  426.     Mem611[esp_526 + 0x00:word32] = 0x10
  427.     esp_612 = esp_526 - 0x04
  428.     Mem613[esp_526 - 0x04 + 0x00:word32] = 4240400
  429.     esp_614 = esp_526 - 0x08
  430.     Mem615[esp_526 - 0x08 + 0x00:word32] = 0x0040B420
  431.     esp_616 = esp_526 - 0x0C
  432.     Mem617[esp_526 - 0x0C + 0x00:word32] = 0x00
  433.     MessageBoxA(Mem617[esp_526 - 0x0C + 0x00:HWND], Mem617[esp_526 - 0x08 + 0x00:LPCSTR], Mem617[esp_526 - 0x04 + 0x00:LPCSTR], Mem617[esp_526 + 0x00:UINT])
  434.     esp_619 = esp_526 + 0x04
  435. l004013AA:
  436.     esp_574 = PHI(esp_609, esp_619)
  437.     ecx_576 = esp_574 + 0x0188
  438.     esp_577 = esp_574 - 0x04
  439.     Mem578[esp_577 + 0x00:word32] = ecx_576
  440.     DeleteFileA(Mem578[esp_577 + 0x00:LPCSTR])
  441.     esp_580 = esp_577 + 0x04
  442.     edx_581 = esp_577 + 0x06B0
  443.     esp_582 = esp_577
  444.     Mem583[esp_577 + 0x00:word32] = esp_577 + 0x06B0
  445.     DeleteFileA(Mem583[esp_577 + 0x00:LPCSTR])
  446.     esp_585 = esp_577 + 0x04
  447.     eax_586 = esp_577 + 0x88
  448.     esp_587 = esp_577
  449.     Mem588[esp_577 + 0x00:word32] = esp_577 + 0x88
  450.     RemoveDirectoryA(Mem588[esp_577 + 0x00:LPCSTR])
  451.     esp_590 = esp_577 + 0x04
  452.     ebp_591 = Mem588[esp_577 + 0x04:word32]
  453.     esp_592 = esp_577 + 0x08
  454.     edi_593 = Mem588[esp_577 + 0x08:word32]
  455.     esp_594 = esp_577 + 0x0C
  456.     esi_595 = Mem588[esp_577 + 0x0C:word32]
  457.     esp_596 = esp_577 + 0x10
  458.     eax_597 = 0x00
  459.     ebx_599 = Mem588[esp_577 + 0x10:word32]
  460.     return 0x00
  461. l004013E1:
  462.     esp_694 = esp_139 - 0x08
  463.     Mem695[esp_139 - 0x08 + 0x00:word32] = 0x10
  464.     esp_696 = esp_139 - 0x0C
  465.     Mem697[esp_139 - 0x0C + 0x00:word32] = 0x0040B47C
  466.     esp_698 = esp_139 - 0x10
  467.     Mem699[esp_139 - 0x10 + 0x00:word32] = 4240524
  468.     goto l00401409
  469. l004013EF:
  470.     esp_700 = esp_139 - 0x08
  471.     Mem701[esp_139 - 0x08 + 0x00:word32] = 0x10
  472.     esp_702 = esp_139 - 0x0C
  473.     Mem703[esp_139 - 0x0C + 0x00:word32] = 0x0040B47C
  474.     esp_704 = esp_139 - 0x10
  475.     Mem705[esp_139 - 0x10 + 0x00:word32] = 0x0040B4B0
  476.     goto l00401409
  477. l004013FD:
  478.     esp_706 = esp_139 - 0x08
  479.     Mem707[esp_139 - 0x08 + 0x00:word32] = 0x10
  480.     esp_708 = esp_139 - 0x0C
  481.     Mem709[esp_139 - 0x0C + 0x00:word32] = 0x0040B47C
  482.     esp_710 = esp_139 - 0x10
  483.     Mem711[esp_139 - 0x10 + 0x00:word32] = 0x0040B4D4
  484. l00401409:
  485.     esp_304 = PHI(esp_710, esp_704, esp_698)
  486.     esp_305 = esp_304 - 0x04
  487.     Mem306[esp_305 + 0x00:word32] = 0x00
  488.     MessageBoxA(Mem306[esp_305 + 0x00:HWND], Mem306[esp_305 + 0x04:LPCSTR], Mem306[esp_305 + 0x08:LPCSTR], Mem306[esp_305 + 0x0C:UINT])
  489.     esp_308 = esp_305 + 0x10
  490.     ebp_309 = Mem306[esp_305 + 0x10:word32]
  491.     esp_310 = esp_305 + 0x14
  492. l00401412:
  493.     ebp_223 = PHI(ebp_151, ebp_309)
  494.     esp_224 = PHI(esp_185, esp_310)
  495.     edi_225 = Mem183[esp_224 + 0x00:word32]
  496.     esp_226 = esp_224 + 0x04
  497.     esi_227 = Mem183[esp_226 + 0x00:word32]
  498.     esp_228 = esp_226 + 0x04
  499.     eax_229 = 0x00
  500.     ebx_231 = Mem183[esp_226 + 0x04:word32]
  501.     return 0x00
  502. fn00401000_exit:
  503.     ebp_202 = PHI(ebp_223, ebp_591)
  504.     edi_203 = PHI(edi_225, edi_593)
  505.     esi_204 = PHI(esi_227, esi_595)
  506.     ebx_207 = PHI(ebx_231, ebx_599)
  507.     use ebx_207 (=> ebxOut)
  508.     use ebp_202 (=> ebpOut)
  509.     use esi_204 (=> esiOut)
  510.     use edi_203 (=> ediOut)
  511. }
  512.  
  513. word32 fn00401426(word32 esi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & esiOut, ptr32 & xmm0Out)
  514. {
  515.     *esiOut = esi;
  516.     word128 xmm0_25;
  517.     return fn00401A94(esi, es, ds, dwArg04, dwArg08, dwArg0C, 0x00, fp + 0x10, out xmm0_25);
  518. }
  519.  
  520. void fn00401444(word32 ebx, word32 ebp, selector es, selector ds)
  521. {
  522.     word32 ebp_11 = fp - 0x04;
  523.     if (Mem0[0x0040DF08:word32] == 0x01)
  524.         ebp_11 = fn0040204F(ebx, es, ds);
  525.     Mem13[fp - 0x08 + 0x00:word32] = Mem0[ebp_11 + 0x08:word32];
  526.     word32 edx_17;
  527.     byte bl_18;
  528.     word128 xmm0_19;
  529.     fn00401EA4(ebp_11, es, ds, dwArg00, out edx_17, out bl_18, out xmm0_19);
  530.     Mem22[fp - 0x0C + 0x00:word32] = 0xFF;
  531.     fn00401BF0(dwArg00);
  532.     return;
  533. }
  534.  
  535. DWORD Win32CrtStartup()
  536. {
  537.     fn0040310C();
  538.     word32 ebp_10;
  539.     fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B570, 88, out ebp_10);
  540.     Mem13[ebp_10 - 0x04 + 0x00:word32] = 0x00;
  541.     Mem16[fp - 0x0C + 0x00:word32] = ebp_10 - 0x68;
  542.     GetStartupInfoA(Mem16[fp - 0x0C + 0x00:LPSTARTUPINFOA]);
  543.     Mem19[fp - 0x0C + 0x00:word32] = ~0x01;
  544.     Mem22[ebp_10 - 0x04 + 0x00:word32] = Mem19[fp - 0x0C + 0x00:word32];
  545.     if (Mem22[0x00400000:word16] == 23117)
  546.     {
  547.         word32 eax_244 = Mem22[0x0040003C:word32];
  548.         if (Mem22[eax_244 + 0x00400000:word32] == 0x4550 && (Mem22[eax_244 + 0x00400018:word16] == 0x010B && Mem22[eax_244 + 0x00400074:word32] >u 0x0E))
  549.         {
  550.             Mem259[ebp_10 - 0x1C + 0x00:word32] = (word32) (Mem22[eax_244 + 0x004000E8:word32] != 0x00);
  551. l004014D7:
  552.             Mem41[fp - 0x0C + 0x00:word32] = 0x01;
  553.             word32 esp_106 = fp - 0x08;
  554.             if (fn00402EEF(dwArg00) == 0x00)
  555.             {
  556.                 Mem232[fp - 0x0C + 0x00:word32] = 0x1C;
  557.                 fn00401444(0x01, ebp_10, es, ds);
  558.                 esp_106 = fp - 0x08;
  559.             }
  560.             word32 ebx_53;
  561.             word32 ebp_54;
  562.             if (fn00402D62(0x01, ebp_10, 0x00, es, ds, out ebx_53, out ebp_54) == 0x00)
  563.             {
  564.                 word32 esp_227 = esp_106 - 0x04;
  565.                 Mem228[esp_227 + 0x00:word32] = 0x10;
  566.                 fn00401444(ebx_53, ebp_54, es, ds);
  567.                 esp_106 = esp_227 + 0x04;
  568.             }
  569.             word32 edi_61;
  570.             word32 esi_107 = fn00402906(88, dwArg00, out edi_61);
  571.             Mem63[ebp_54 - 0x04 + 0x00:word32] = ebx_53;
  572.             word32 ebp_65;
  573.             word32 ebx_211;
  574.             if (fn004026B2(ebx_53, esi_107, edi_61, es, ds, out ebx_211, out ebp_65) < 0x00)
  575.             {
  576.                 word32 esp_217 = esp_106 - 0x04;
  577.                 Mem218[esp_217 + 0x00:word32] = 0x1B;
  578.                 word32 eax_219;
  579.                 word32 edx_220;
  580.                 word128 xmm0_223;
  581.                 fn00401B9C(ebx_211, ebp_65, es, ds, out eax_219, out edx_220, out ebx_211, out esi_107, out xmm0_223);
  582.                 esp_106 = esp_217 + 0x04;
  583.             }
  584.             Mem81[4258520:word32] = GetCommandLineA();
  585.             Mem83[0x0040DF00:word32] = fn0040257B(ebp_65, es, ds);
  586.             word32 eax_209 = fn004024C0(ebp_65, esi_107, edi_61, es, ds);
  587.             if (eax_209 < 0x00)
  588.             {
  589.                 word32 esp_207 = esp_106 - 0x04;
  590.                 Mem208[esp_207 + 0x00:word32] = 0x08;
  591.                 word32 edx_210;
  592.                 word128 xmm0_213;
  593.                 fn00401B9C(ebx_211, ebp_65, es, ds, out eax_209, out edx_210, out ebx_211, out esi_107, out xmm0_213);
  594.                 esp_106 = esp_207 + 0x04;
  595.             }
  596.             word32 ebp_98;
  597.             word32 ebx_108;
  598.             if (fn00402248(eax_209, ebx_211, esi_107, edi_61, es, ds, out ebx_108, out ebp_98) < 0x00)
  599.             {
  600.                 word32 esp_197 = esp_106 - 0x04;
  601.                 Mem198[esp_197 + 0x00:word32] = 0x09;
  602.                 word32 eax_199;
  603.                 word32 edx_200;
  604.                 word128 xmm0_203;
  605.                 fn00401B9C(ebx_108, ebp_98, es, ds, out eax_199, out edx_200, out ebx_108, out esi_107, out xmm0_203);
  606.                 esp_106 = esp_197 + 0x04;
  607.             }
  608.             word32 esp_109 = esp_106 - 0x04;
  609.             Mem110[esp_109 + 0x00:word32] = ebx_108;
  610.             word32 esi_112;
  611.             word32 ebx_111;
  612.             word32 eax_113 = fn00401C5B(ebx_108, ebp_98, esi_107, es, ds, dwArg00, out ebx_111, out esi_112);
  613.             word32 esp_116 = esp_109 + 0x04;
  614.             if (eax_113 != esi_112)
  615.             {
  616.                 Mem188[esp_109 + 0x00:word32] = eax_113;
  617.                 word32 eax_189;
  618.                 word32 edx_190;
  619.                 word128 xmm0_193;
  620.                 fn00401B9C(ebx_111, ebp_98, es, ds, out eax_189, out edx_190, out ebx_111, out esi_112, out xmm0_193);
  621.                 esp_116 = esp_109 + 0x04;
  622.             }
  623.             word32 ecx_135;
  624.             word32 ebx_126;
  625.             word32 ebp_127;
  626.             word32 esi_128;
  627.             word32 edi_129;
  628.             word32 eax_130 = fn004021E9(ebx_111, esi_112, es, ds, out ebx_126, out ebp_127, out esi_128, out edi_129);
  629.             if ((Mem110[ebp_127 - 0x3C + 0x00:byte] & 0x01) != 0x00)
  630.                 ecx_135 = (word32) Mem110[ebp_127 - 0x38 + 0x00:word16];
  631.             else
  632.             {
  633.                 word32 esp_181 = esp_116 - 0x04;
  634.                 Mem182[esp_181 + 0x00:word32] = 0x0A;
  635.                 ecx_135 = Mem182[esp_181 + 0x00:word32];
  636.                 esp_116 = esp_181 + 0x04;
  637.             }
  638.             word32 esp_139 = esp_116 - 0x04;
  639.             Mem140[esp_139 + 0x00:word32] = ecx_135;
  640.             Mem142[esp_139 - 0x04 + 0x00:word32] = eax_130;
  641.             Mem144[esp_139 - 0x08 + 0x00:word32] = esi_128;
  642.             Mem146[esp_139 - 0x0C + 0x00:word32] = 0x00400000;
  643.             word32 ebp_148;
  644.             word32 edi_150;
  645.             word32 esi_149;
  646.             word32 ebx_147;
  647.             word32 eax_151 = fn00401000(ebx_126, esi_128, edi_129, es, ds, out ebx_147, out ebp_148, out esi_149, out edi_150);
  648.             Mem154[ebp_148 - 0x20 + 0x00:word32] = eax_151;
  649.             if (Mem154[ebp_148 - 0x1C + 0x00:word32] == esi_149)
  650.             {
  651.                 Mem174[esp_139 + 0x00:word32] = eax_151;
  652.                 ebx_147 = fn00401E0C(ebx_147, esi_149, edi_150, es, ds, dwArg00, out esi_149);
  653.             }
  654.             word32 edi_161;
  655.             word32 ebp_162 = fn00401E38(ebx_147, esi_149, edi_150, es, ds, out edi_161);
  656.             Mem163[ebp_162 - 0x04 + 0x00:word32] = edi_161;
  657.             word32 eax_164 = Mem163[ebp_162 - 0x20 + 0x00:word32];
  658.             word32 ebp_169;
  659.             word32 esi_170;
  660.             word32 edi_171;
  661.             fn00402F65(ebp_162, 88, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_169, out esi_170, out edi_171);
  662.             return eax_164;
  663.         }
  664.     }
  665.     Mem242[ebp_10 - 0x1C + 0x00:word32] = 0x00;
  666.     goto l004014D7;
  667. }
  668.  
  669. word32 fn004015F5(word32 ebx, word32 ebp, selector es, selector ds, word32 dwArg08, ptr32 & blOut, ptr32 & xmm0Out)
  670. {
  671.     *blOut = bl;
  672.     word32 eax_108;
  673.     word32 esi_61;
  674.     word32 eax_60;
  675.     word32 ebx_21;
  676.     word128 xmm0_22;
  677.     Mem24[fp + 0x08:word32] = fn00403DB1(ebx, es, ds, dwArg08, out ebx_21, out xmm0_22);
  678.     word32 eax_25 = Mem24[dwArg08 + 0x0C:word32];
  679.     word32 ebp_187 = fp - 0x04;
  680.     word32 esi_137 = dwArg08;
  681.     byte al_26 = (byte) eax_25;
  682.     if ((al_26 & 0x82) == 0x00)
  683.     {
  684.         word32 edx_74;
  685.         word32 ebx_75;
  686.         word32 ebp_76;
  687.         word32 edi_78;
  688.         word128 xmm0_79;
  689.         fn0040197F(ebx_21, fp - 0x04, dwArg08, es, ds, out eax_60, out edx_74, out ebx_75, out ebp_76, out esi_61, out edi_78, out xmm0_79);
  690.         Mem81[eax_60 + 0x00:word32] = 0x09;
  691.         goto l0040161B;
  692.     }
  693.     if ((al_26 & 0x40) != 0x00)
  694.     {
  695.         word32 edx_86;
  696.         word32 ebx_87;
  697.         word32 ebp_88;
  698.         word32 edi_90;
  699.         word128 xmm0_91;
  700.         fn0040197F(ebx_21, fp - 0x04, dwArg08, es, ds, out eax_60, out edx_86, out ebx_87, out ebp_88, out esi_61, out edi_90, out xmm0_91);
  701.         Mem93[eax_60 + 0x00:word32] = 0x22;
  702. l0040161B:
  703.         Mem64[esi_61 + 0x0C:word32] = Mem24[esi_61 + 0x0C:word32] | 0x20;
  704.         eax_108 = eax_60 | ~0x00;
  705.         return eax_108;
  706.     }
  707.     Mem95[fp - 0x10 + 0x00:word32] = ebx_21;
  708.     word32 esp_114 = fp - 0x10;
  709.     word32 ebx_134 = 0x00;
  710.     if ((al_26 & 0x01) != 0x00)
  711.     {
  712.         Mem338[dwArg08 + 0x04:word32] = 0x00;
  713.         if ((al_26 & 0x10) == 0x00)
  714.         {
  715.             Mem349[dwArg08 + 0x0C:word32] = eax_25 | 0x20;
  716.             eax_108 = eax_25 | 0x20 | ~0x00;
  717.             goto l00401755;
  718.         }
  719.         Mem346[dwArg08 + 0x00:word32] = Mem338[dwArg08 + 0x08:word32];
  720.         Mem347[dwArg08 + 0x0C:word32] = eax_25 & ~0x01;
  721.     }
  722.     word32 eax_122 = Mem95[dwArg08 + 0x0C:word32] & ~0x10 | 0x02;
  723.     Mem123[dwArg08 + 0x0C:word32] = eax_122;
  724.     Mem124[dwArg08 + 0x04:word32] = 0x00;
  725.     Mem125[fp - 0x08 + 0x00:word32] = 0x00;
  726.     if ((eax_122 & 0x010C) != 0x00)
  727.     {
  728. l0040169A:
  729.         word32 edi_180;
  730.         word32 eax_166;
  731.         word32 esp_142 = esp_114 - 0x04;
  732.         Mem143[esp_142 + 0x00:word32] = edi;
  733.         if ((Mem125[esi_137 + 0x0C:word32] & 0x0108) != 0x00)
  734.         {
  735.             word32 eax_196 = Mem143[esi_137 + 0x08:word32];
  736.             word32 edi_198 = Mem143[esi_137 + 0x00:word32];
  737.             Mem200[esi_137 + 0x00:word32] = eax_196 + 0x01;
  738.             Mem206[esi_137 + 0x04:word32] = Mem200[esi_137 + 0x18:word32] - 0x01;
  739.             edi_180 = edi_198 - eax_196;
  740.             if (edi_180 > ebx_134)
  741.             {
  742.                 Mem226[esp_142 - 0x04 + 0x00:word32] = edi_180;
  743.                 Mem228[esp_142 - 0x08 + 0x00:word32] = eax_196;
  744.                 Mem230[esp_142 - 0x0C + 0x00:word32] = Mem228[fp + 0x08:word32];
  745.                 word128 xmm0_234;
  746.                 word32 eax_235 = fn00403A73(ebx_134, esi_137, edi_180, es, ds, out ebp_187, out esi_137, out edi_180, out xmm0_234);
  747.                 Mem238[ebp_187 - 0x04 + 0x00:word32] = eax_235;
  748.             }
  749.             else
  750.             {
  751.                 word32 eax_245;
  752.                 word32 ecx_239 = Mem206[fp + 0x08:word32];
  753.                 if (ecx_239 != ~0x00 && ecx_239 != ~0x01)
  754.                     eax_245 = ((ecx_239 & 0x1F) << 0x06) + 0x0040F9C0[(ecx_239 >> 0x05) * 0x04];
  755.                 else
  756.                     eax_245 = 4248144;
  757.                 if ((Mem206[eax_245 + 0x04:byte] & 0x20) != 0x00)
  758.                 {
  759.                     Mem251[esp_142 - 0x04 + 0x00:word32] = 0x02;
  760.                     Mem253[esp_142 - 0x08 + 0x00:word32] = ebx_134;
  761.                     Mem255[esp_142 - 0x0C + 0x00:word32] = ebx_134;
  762.                     Mem257[esp_142 - 0x10 + 0x00:word32] = ecx_239;
  763.                     word32 edx_258;
  764.                     word128 xmm0_262;
  765.                     word32 eax_263 = fn00403227(ebx_134, esi_137, edi_180, es, ds, out edx_258, out ebp_187, out esi_137, out edi_180, out xmm0_262);
  766.                     eax_166 = eax_263 & edx_258;
  767.                     if (eax_166 == ~0x00)
  768.                     {
  769. l00401743:
  770.                         Mem171[esi_137 + 0x0C:word32] = Mem143[esi_137 + 0x0C:word32] | 0x20;
  771.                         eax_108 = eax_166 | ~0x00;
  772.                         goto l00401754;
  773.                     }
  774.                 }
  775.             }
  776.             Mem220[Mem206[esi_137 + 0x08:word32] + 0x00:byte] = Mem206[ebp_187 + 0x08:byte];
  777.             eax_166 = Mem220[esi_137 + 0x08:word32];
  778.             Mem224[eax_166 + 0x00:byte] = Mem220[ebp_187 + 0x08:byte];
  779.         }
  780.         else
  781.         {
  782.             Mem288[esp_142 - 0x04 + 0x00:word32] = 0x01;
  783.             Mem291[esp_142 - 0x08 + 0x00:word32] = fp + 0x04;
  784.             Mem293[esp_142 - 0x0C + 0x00:word32] = Mem291[fp + 0x08:word32];
  785.             word128 xmm0_297;
  786.             eax_166 = fn00403A73(ebx_134, esi_137, 0x01, es, ds, out ebp_187, out esi_137, out edi_180, out xmm0_297);
  787.             Mem302[ebp_187 - 0x04 + 0x00:word32] = eax_166;
  788.         }
  789.         if (Mem143[ebp_187 - 0x04 + 0x00:word32] == edi_180)
  790.         {
  791.             eax_108 = Mem143[ebp_187 + 0x08:word32] & 0xFF;
  792. l00401754:
  793.             esp_114 = esp_142 + 0x04;
  794. l00401755:
  795.             byte bl_116;
  796.             *blOut = (byte) Mem95[esp_114 + 0x00:word32];
  797.             return eax_108;
  798.         }
  799.         goto l00401743;
  800.     }
  801.     fn00403BFC();
  802.     if (dwArg08 != 0x0040D2C0)
  803.     {
  804.         fn00403BFC();
  805.         if (dwArg08 != 4248288)
  806.         {
  807. l00401693:
  808.             word32 esp_314 = esp_114 - 0x04;
  809.             Mem315[esp_314 + 0x00:word32] = dwArg08;
  810.             word128 xmm0_317;
  811.             ebx_134 = fn00403B4F(ebx_134, es, ds, out esi_137, out xmm0_317);
  812.             esp_114 = esp_314 + 0x04;
  813.             goto l0040169A;
  814.         }
  815.     }
  816.     Mem324[fp - 0x14 + 0x00:word32] = Mem125[fp + 0x08:word32];
  817.     esp_114 = fp - 0x10;
  818.     word32 edx_326;
  819.     word128 xmm0_328;
  820.     if (fn00403B98(0x00, dwArg08, es, ds, dwArg00, out edx_326, out ebx_134, out xmm0_328) != 0x00)
  821.         goto l0040169A;
  822.     goto l00401693;
  823. }
  824.  
  825. word32 fn00401759(word32 ecx, word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & xmm0Out)
  826. {
  827.     *ebxOut = ebx;
  828.     *xmm0Out = xmm0;
  829.     Mem15[ecx + 0x0C:byte] = 0x00;
  830.     word32 edi_3 = edi;
  831.     word32 esi_14 = ecx;
  832.     if (dwArg04 == 0x00)
  833.     {
  834.         word32 ebp_40;
  835.         word128 xmm0_41;
  836.         word32 ebx_39;
  837.         edx = fn00402C19(ebx, fp - 0x04, ecx, es, ds, out ebx_39, out ebp_40, out xmm0_41);
  838.         Mem43[ecx + 0x08:word32] = dwArg04;
  839.         Mem45[ecx + 0x00:word32] = Mem43[dwArg04 + 0x6C:word32];
  840.         Mem47[ecx + 0x04:word32] = Mem45[dwArg04 + 0x68:word32];
  841.         if (Mem47[ecx + 0x00:word32] != Mem47[4250408:word32] && (Mem47[dwArg04 + 0x70:word32] & Mem47[0x0040DA44:word32]) == 0x00)
  842.         {
  843.             word128 xmm0_99;
  844.             word32 eax_100 = fn00404775(ebx_39, ecx, edi, es, ds, out edx, out ebx_39, out esi_14, out edi_3, out xmm0_99);
  845.             Mem101[esi_14 + 0x00:word32] = eax_100;
  846.         }
  847.         if (Mem47[esi_14 + 0x04:word32] != Mem47[4249928:word32] && (Mem47[Mem47[esi_14 + 0x08:word32] + 0x70:word32] & Mem47[0x0040DA44:word32]) == 0x00)
  848.         {
  849.             word32 ebx_84;
  850.             word32 ebp_85;
  851.             word32 edi_87;
  852.             word128 xmm0_88;
  853.             word32 eax_89 = fn00404009(ebx_39, esi_14, edi_3, es, ds, out edx, out ebx_84, out ebp_85, out esi_14, out edi_87, out xmm0_88);
  854.             Mem90[esi_14 + 0x04:word32] = eax_89;
  855.         }
  856.         word32 eax_69 = Mem47[esi_14 + 0x08:word32];
  857.         if ((Mem47[eax_69 + 0x70:byte] & 0x02) == 0x00)
  858.         {
  859.             Mem74[eax_69 + 0x70:word32] = Mem47[eax_69 + 0x70:word32] | 0x02;
  860.             Mem77[esi_14 + 0x0C:byte] = 0x01;
  861.         }
  862.     }
  863.     else
  864.     {
  865.         Mem103[ecx + 0x00:word32] = Mem15[dwArg04 + 0x00:word32];
  866.         Mem105[ecx + 0x04:word32] = Mem103[dwArg04 + 0x04:word32];
  867.     }
  868.     return edx;
  869. }
  870.  
  871. void fn004017E0(word32 dwArg04)
  872. {
  873.     Mem10[0x0040DF0C:word32] = dwArg04;
  874.     return;
  875. }
  876.  
  877. word32 fn004017EF(word32 esi, selector es, selector ds, word128 xmm0, word32 dwArg00, ptr32 & edxOut, ptr32 & blOut)
  878. {
  879.     word32 eax_11 = Mem0[0x0040DB60:word32] ^ fp - 0x04;
  880.     word32 edx_30;
  881.     word32 edi_31;
  882.     fn00404CA0(xmm0, dwLoc0340, fp + ~0x0327, 0x00, 0x4C, out edx_30, out edi_31);
  883.     Mem61[fp - 0x0334 + 0x00:word32] = cond(fp - 0x0330);
  884.     word32 eax_75 = IsDebuggerPresent();
  885.     Mem77[fp - 0x0334 + 0x00:word32] = 0x00;
  886.     SetUnhandledExceptionFilter(Mem77[fp - 0x0334 + 0x00:LPTOP_LEVEL_EXCEPTION_FILTER]);
  887.     Mem84[fp - 0x0334 + 0x00:word32] = fp + ~0x02DB;
  888.     word32 esp_124 = fp - 0x0330;
  889.     if (UnhandledExceptionFilter(Mem84[fp - 0x0334 + 0x00:(ptr (struct "_EXCEPTION_POINTERS"))]) == 0x00 && eax_75 == 0x00)
  890.     {
  891.         Mem122[fp - 0x0334 + 0x00:word32] = 0x02;
  892.         fn00404C95();
  893.         esp_124 = fp - 0x0330;
  894.     }
  895.     word32 esp_93 = esp_124 - 0x04;
  896.     Mem94[esp_93 + 0x00:word32] = 0xC0000417;
  897.     Mem97[esp_93 - 0x04 + 0x00:word32] = GetCurrentProcess();
  898.     word32 eax_98 = TerminateProcess(Mem97[esp_93 - 0x04 + 0x00:HANDLE], Mem97[esp_93 + 0x00:UINT]);
  899.     word32 ebx_107 = Mem97[esp_93 + 0x04:word32];
  900.     byte bl_108;
  901.     *blOut = (byte) ebx_107;
  902.     return fn00404BEF(eax_98, eax_11 ^ fp - 0x04, edx_30, ebx_107, fp - 0x04, esi, edi_31, es, ds);
  903. }
  904.  
  905. word32 fn00401917(selector es, selector ds, word128 xmm0, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut)
  906. {
  907.     *esiOut = esi;
  908.     *ebxOut = ebx;
  909.     word32 dwLoc08_10 = Mem0[0x0040DF0C:word32];
  910.     word32 eax_11 = fn004029CD(fp - 0x04, dwLoc08_10);
  911.     if (eax_11 == 0x00)
  912.     {
  913.         Mem78[fp - 0x08 + 0x00:word32] = 0x02;
  914.         fn00404C95();
  915.         word32 edx_84;
  916.         byte bl_85;
  917.         return fn004017EF(esi, es, ds, xmm0, dwArg00, out edx_84, out bl_85);
  918.     }
  919.     else
  920.     {
  921.         word32 esp_56;
  922.         word32 edi_57;
  923.         word32 ebp_58;
  924.         word32 ecx_59;
  925.         word32 eax_60;
  926.         byte SZO_61;
  927.         byte C_62;
  928.         byte Z_63;
  929.         byte SCZO_64;
  930.         word32 ebx_65;
  931.         word32 edx_66;
  932.         word32 esi_67;
  933.         selector ss_68;
  934.         selector cs_69;
  935.         selector ds_70;
  936.         selector es_71;
  937.         selector fs_72;
  938.         selector gs_73;
  939.         byte SCZDOP_74;
  940.         word128 xmm0_75;
  941.         byte bl_76;
  942.         eax_11();
  943.         return eax_60;
  944.     }
  945. }
  946.  
  947. word32 fn0040193D(word32 dwArg04)
  948. {
  949.     word32 ecx_10 = 0x00;
  950.     if (dwArg04 == 0x0040D010[ecx_10 * 0x08])
  951.         return 0x0040D014[ecx_10 * 0x08];
  952.     else
  953.     {
  954.         ecx_10 = ecx_10 + 0x01;
  955.         if (ecx_10 <u 0x2D)
  956.             goto l00401947;
  957.         if (dwArg04 >u 0x24)
  958.             return (0x00 - (0x0E <u dwArg04 + ~0xBB) & 0x0E) + 0x08;
  959.         else
  960.             return 0x0D;
  961.     }
  962. }
  963.  
  964. bool fn0040197F(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  965. {
  966.     word32 eax_7;
  967.     word32 edx_8;
  968.     word32 ebx_9;
  969.     word32 ebp_10;
  970.     word32 esi_11;
  971.     word32 edi_12;
  972.     word128 xmm0_13;
  973.     bool D_14 = fn00402BA0(ebx, ebp, esi, es, ds, out eax_7, out edx_8, out ebx_9, out ebp_10, out esi_11, out edi_12, out xmm0_13);
  974.     if (eax_7 != 0x00)
  975.     {
  976.         word32 eax_29;
  977.         *eaxOut = eax_7 + 0x08;
  978.         return D_14;
  979.     }
  980.     else
  981.     {
  982.         word32 eax_27;
  983.         *eaxOut = 4247928;
  984.         return D_14;
  985.     }
  986. }
  987.  
  988. word32 fn00401992(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  989. {
  990.     word32 eax_7;
  991.     word32 edx_8;
  992.     word32 ebx_9;
  993.     word32 ebp_10;
  994.     word32 esi_11;
  995.     word32 edi_12;
  996.     word128 xmm0_13;
  997.     fn00402BA0(ebx, ebp, esi, es, ds, out eax_7, out edx_8, out ebx_9, out ebp_10, out esi_11, out edi_12, out xmm0_13);
  998.     if (eax_7 != 0x00)
  999.         return eax_7 + 0x0C;
  1000.     else
  1001.         return 4247932;
  1002. }
  1003.  
  1004. word32 fn004019A5(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  1005. {
  1006.     word32 edx_14;
  1007.     word32 ebx_15;
  1008.     word32 ebp_16;
  1009.     word32 esi_17;
  1010.     word32 edi_18;
  1011.     word128 xmm0_19;
  1012.     word32 eax_20 = fn00401992(ebx, fp - 0x04, esi, es, ds, out edx_14, out ebx_15, out ebp_16, out esi_17, out edi_18, out xmm0_19);
  1013.     word32 ecx_22 = Mem0[ebp_16 + 0x08:word32];
  1014.     Mem24[fp - 0x0C + 0x00:word32] = ecx_22;
  1015.     Mem25[eax_20 + 0x00:word32] = ecx_22;
  1016.     word32 eax_31;
  1017.     word32 edx_32;
  1018.     word32 ebx_33;
  1019.     word32 ebp_34;
  1020.     word32 esi_35;
  1021.     word32 edi_36;
  1022.     word128 xmm0_37;
  1023.     fn0040197F(ebx_15, ebp_16, fn0040193D(dwArg00), es, ds, out eax_31, out edx_32, out ebx_33, out ebp_34, out esi_35, out edi_36, out xmm0_37);
  1024.     Mem39[eax_31 + 0x00:word32] = esi_35;
  1025.     return eax_31;
  1026. }
  1027.  
  1028. word32 fn004019C8(word32 esi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, word32 dwArg10, word32 dwArg14, word32 dwArg18, ptr32 & blOut, ptr32 & xmm0Out)
  1029. {
  1030.     word32 eax_130;
  1031.     word32 esp_141;
  1032.     if (dwArg10 == 0x00)
  1033.     {
  1034.         word32 eax_58;
  1035.         word32 edx_59;
  1036.         word32 ebx_60;
  1037.         word32 ebp_61;
  1038.         word32 esi_62;
  1039.         word32 edi_63;
  1040.         word128 xmm0_64;
  1041.         fn0040197F(0x00, fp - 0x04, esi, es, ds, out eax_58, out edx_59, out ebx_60, out ebp_61, out esi_62, out edi_63, out xmm0_64);
  1042.         Mem67[fp - 44 + 0x00:word32] = ebx_60;
  1043.         Mem69[fp - 0x30 + 0x00:word32] = ebx_60;
  1044.         Mem71[fp - 0x34 + 0x00:word32] = ebx_60;
  1045.         Mem73[fp - 0x38 + 0x00:word32] = ebx_60;
  1046.         Mem75[fp - 0x3C + 0x00:word32] = ebx_60;
  1047.         Mem76[eax_58 + 0x00:word32] = 22;
  1048.         esp_141 = fp - 0x28;
  1049.         word32 edx_77;
  1050.         word32 ebx_78;
  1051.         word32 esi_79;
  1052.         eax_130 = fn00401917(es, ds, xmm0_64, out edx_77, out ebx_78, out esi_79) | ~0x00;
  1053.         goto l00401A91;
  1054.     }
  1055.     word32 esp_137;
  1056.     if (dwArg0C != 0x00 && dwArg08 == 0x00)
  1057.     {
  1058.         word32 eax_249;
  1059.         word32 edx_250;
  1060.         word32 ebx_251;
  1061.         word32 ebp_252;
  1062.         word32 esi_253;
  1063.         word32 edi_254;
  1064.         word128 xmm0_255;
  1065.         fn0040197F(0x00, fp - 0x04, dwArg08, es, ds, out eax_249, out edx_250, out ebx_251, out ebp_252, out esi_253, out edi_254, out xmm0_255);
  1066.         Mem258[fp - 0x34 + 0x00:word32] = ebx_251;
  1067.         Mem260[fp - 0x38 + 0x00:word32] = ebx_251;
  1068.         Mem262[fp - 0x3C + 0x00:word32] = ebx_251;
  1069.         Mem264[fp - 0x40 + 0x00:word32] = ebx_251;
  1070.         Mem266[fp - 0x44 + 0x00:word32] = ebx_251;
  1071.         Mem267[eax_249 + 0x00:word32] = 22;
  1072.         esp_137 = fp - 0x30;
  1073.         word32 edx_268;
  1074.         word32 ebx_269;
  1075.         word32 esi_270;
  1076.         eax_130 = fn00401917(es, ds, xmm0_255, out edx_268, out ebx_269, out esi_270) | ~0x00;
  1077.         goto l00401A8F;
  1078.     }
  1079.     word32 dwLoc20_144 = 0x7FFFFFFF;
  1080.     if (dwArg0C <=u 0x7FFFFFFF)
  1081.         dwLoc20_144 = dwArg0C;
  1082.     word32 esp_169;
  1083.     word32 edi_170;
  1084.     word32 ebp_171;
  1085.     byte SCZO_172;
  1086.     word32 ebx_173;
  1087.     byte SZO_174;
  1088.     byte C_175;
  1089.     byte Z_176;
  1090.     word32 esi_178;
  1091.     byte CZ_179;
  1092.     byte SO_180;
  1093.     byte S_181;
  1094.     word32 ecx_183;
  1095.     byte al_184;
  1096.     selector es_185;
  1097.     selector ds_186;
  1098.     word128 xmm0_187;
  1099.     bool D_188;
  1100.     word32 edx_189;
  1101.     byte bl_182;
  1102.     dwArg04();
  1103.     esp_137 = fp - 0x30;
  1104.     if (esi_178 == 0x00)
  1105.     {
  1106. l00401A8F:
  1107.         esp_141 = esp_137 + 0x08;
  1108. l00401A91:
  1109.         byte bl_49;
  1110.         *blOut = (byte) Mem0[esp_141 + 0x00:word32];
  1111.         return eax_130;
  1112.     }
  1113.     if (fp >= 0x24)
  1114.     {
  1115.         if (dwLoc20_144 >= 0x01)
  1116.         {
  1117.             Mem231[dwArg08 + 0x00:byte] = bl_182;
  1118. l00401A7C:
  1119.             eax_130 = Mem0[ebp_171 + 0x14:word32];
  1120.             goto l00401A8F;
  1121.         }
  1122.         esp_137 = fp - 0x30;
  1123.         word128 xmm0_238;
  1124.         if (fn004015F5(ebx_173, ebp_171, es_185, ds_186, fp - 0x24, out bl_182, out xmm0_238) != ~0x00)
  1125.             goto l00401A7C;
  1126.     }
  1127.     Mem208[esi_178 - 0x01 + edi_170:byte] = bl_182;
  1128.     word32 eax_210 = (word32) (Mem0[ebp_171 - 0x1C + 0x00:word32] >= ebx_173);
  1129.     eax_130 = eax_210 - 0x02;
  1130.     goto l00401A8F;
  1131. }
  1132.  
  1133. word32 fn00401A94(word32 esi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, word32 dwArg10, word32 dwArg14, ptr32 & xmm0Out)
  1134. {
  1135.     word32 eax_103;
  1136.     if (dwArg0C == 0x00)
  1137.     {
  1138.         word32 eax_46;
  1139.         word32 edx_47;
  1140.         word32 ebx_48;
  1141.         word32 ebp_49;
  1142.         word32 esi_50;
  1143.         word32 edi_51;
  1144.         word128 xmm0_52;
  1145.         fn0040197F(0x00, fp - 0x04, esi, es, ds, out eax_46, out edx_47, out ebx_48, out ebp_49, out esi_50, out edi_51, out xmm0_52);
  1146.         Mem55[fp - 0x0C + 0x00:word32] = ebx_48;
  1147.         Mem57[fp - 0x10 + 0x00:word32] = ebx_48;
  1148.         Mem59[fp - 0x14 + 0x00:word32] = ebx_48;
  1149.         Mem61[fp - 0x18 + 0x00:word32] = ebx_48;
  1150.         Mem63[fp - 0x1C + 0x00:word32] = ebx_48;
  1151.         Mem64[eax_46 + 0x00:word32] = 22;
  1152.         word32 edx_65;
  1153.         word32 ebx_66;
  1154.         word32 esi_67;
  1155.         eax_103 = fn00401917(es, ds, xmm0_52, out edx_65, out ebx_66, out esi_67) | ~0x00;
  1156.         return eax_103;
  1157.     }
  1158.     word32 ebx_125;
  1159.     word128 xmm0_123;
  1160.     word32 esp_127 = fp - 0x0C;
  1161.     if (dwArg04 != 0x00 && dwArg08 >u 0x00)
  1162.     {
  1163.         byte bl_174;
  1164.         word128 xmm0_175;
  1165.         eax_103 = fn004019C8(dwArg04, es, ds, 0x00404DC0, dwArg04, dwArg08, dwArg0C, dwArg10, dwArg14, out bl_174, out xmm0_175);
  1166.         esp_127 = fp - 0x0C;
  1167.         if (eax_103 < 0x00)
  1168.             Mem195[dwArg04 + 0x00:byte] = bl_174;
  1169.         if (eax_103 != ~0x01)
  1170.             return eax_103;
  1171.         word32 eax_186;
  1172.         word32 edx_187;
  1173.         word32 ebp_189;
  1174.         word32 esi_190;
  1175.         word32 edi_191;
  1176.         fn0040197F(0x00, fp - 0x04, dwArg04, es, ds, out eax_186, out edx_187, out ebx_125, out ebp_189, out esi_190, out edi_191, out xmm0_123);
  1177.         Mem194[eax_186 + 0x00:word32] = 0x22;
  1178.     }
  1179.     else
  1180.     {
  1181.         word32 eax_148;
  1182.         word32 edx_149;
  1183.         word32 ebp_151;
  1184.         word32 esi_152;
  1185.         word32 edi_153;
  1186.         fn0040197F(0x00, fp - 0x04, dwArg04, es, ds, out eax_148, out edx_149, out ebx_125, out ebp_151, out esi_152, out edi_153, out xmm0_123);
  1187.         Mem156[eax_148 + 0x00:word32] = 22;
  1188.     }
  1189.     word32 esp_128 = esp_127 - 0x04;
  1190.     Mem129[esp_128 + 0x00:word32] = ebx_125;
  1191.     Mem131[esp_128 - 0x04 + 0x00:word32] = ebx_125;
  1192.     Mem133[esp_128 - 0x08 + 0x00:word32] = ebx_125;
  1193.     Mem135[esp_128 - 0x0C + 0x00:word32] = ebx_125;
  1194.     Mem137[esp_128 - 0x10 + 0x00:word32] = ebx_125;
  1195.     word32 edx_138;
  1196.     word32 ebx_139;
  1197.     word32 esi_140;
  1198.     eax_103 = fn00401917(es, ds, xmm0_123, out edx_138, out ebx_139, out esi_140) | ~0x00;
  1199.     return eax_103;
  1200. }
  1201.  
  1202. word32 fn00401B6C(word32 dwArg04)
  1203. {
  1204.     word32 edi_10 = 1000;
  1205.     do
  1206.     {
  1207.         Sleep(edi_10);
  1208.         word32 eax_24 = GetModuleHandleW(dwArg04);
  1209.         edi_10 = edi_10 + 1000;
  1210.     } while (edi_10 >u 60000 || eax_24 != 0x00);
  1211.     return eax_24;
  1212. }
  1213.  
  1214. bool fn00401B9C(word32 ebx, word32 ebp, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  1215. {
  1216.     word32 ebp_11 = fn0040204F(ebx, es, ds);
  1217.     Mem14[fp - 0x08 + 0x00:word32] = Mem0[ebp_11 + 0x08:word32];
  1218.     word32 edx_16;
  1219.     byte bl_17;
  1220.     word128 xmm0_18;
  1221.     bool D_19 = fn00401EA4(ebp_11, es, ds, dwArg00, out edx_16, out bl_17, out xmm0_18);
  1222.     Mem21[fp - 0x0C + 0x00:word32] = Mem14[0x0040D180:word32];
  1223.     word32 eax_22 = fn004029CD(ebp_11, dwArg00);
  1224.     Mem24[fp - 0x10 + 0x00:word32] = 0xFF;
  1225.     word32 esp_25;
  1226.     word32 edi_26;
  1227.     word32 ebp_27;
  1228.     word32 eax_28;
  1229.     byte SCZO_29;
  1230.     bool D_30;
  1231.     word32 ebx_31;
  1232.     selector es_32;
  1233.     selector ds_33;
  1234.     word32 edx_34;
  1235.     word32 esi_35;
  1236.     word128 xmm0_36;
  1237.     byte bl_37;
  1238.     eax_22();
  1239.     return D_30;
  1240. }
  1241.  
  1242. void fn00401BC5(word32 dwArg04)
  1243. {
  1244.     word32 eax_10 = GetModuleHandleW(0x0040A21C);
  1245.     if (eax_10 != 0x00)
  1246.     {
  1247.         word32 eax_31 = GetProcAddress(eax_10, 0x0040A20C);
  1248.         if (eax_31 != 0x00)
  1249.         {
  1250.             word32 esp_39;
  1251.             word32 edi_40;
  1252.             word32 ebp_41;
  1253.             word32 eax_42;
  1254.             byte SZO_43;
  1255.             byte C_44;
  1256.             byte Z_45;
  1257.             eax_31();
  1258.         }
  1259.     }
  1260.     return;
  1261. }
  1262.  
  1263. void fn00401BF0(word32 dwArg04)
  1264. {
  1265.     fn00401BC5(dwArg04);
  1266.     Mem15[fp - 0x08 + 0x00:word32] = Mem0[fp + 0x04:word32];
  1267.     ExitProcess(Mem15[fp - 0x08 + 0x00:UINT]);
  1268. }
  1269.  
  1270. word32 fn00401C08(word32 ebx, word32 edi, selector es, selector ds)
  1271. {
  1272.     word32 edx_8;
  1273.     word32 ebx_9;
  1274.     word128 xmm0_10;
  1275.     fn00405B56(ebx, edi, es, ds, 0x08, out edx_8, out ebx_9, out xmm0_10);
  1276.     return ebp;
  1277. }
  1278.  
  1279. void fn00401C11()
  1280. {
  1281.     fn00405A7C(0x08);
  1282.     return;
  1283. }
  1284.  
  1285. void fn00401C1A(word32 eax, word32 dwArg04)
  1286. {
  1287.     word32 esi_12 = eax;
  1288.     while (esi_12 <u dwArg04)
  1289.     {
  1290.         word32 eax_30 = Mem0[esi_12 + 0x00:word32];
  1291.         if (eax_30 != 0x00)
  1292.         {
  1293.             word32 esp_44;
  1294.             word32 edi_45;
  1295.             word32 ebp_46;
  1296.             word32 eax_48;
  1297.             byte SCZO_49;
  1298.             byte C_50;
  1299.             byte SZO_51;
  1300.             byte Z_52;
  1301.             eax_30();
  1302.         }
  1303.         esi_12 = esi_12 + 0x04;
  1304.     }
  1305.     return;
  1306. }
  1307.  
  1308. word32 fn00401C37(word32 dwArg04, word32 dwArg08)
  1309. {
  1310.     word32 esi_12 = dwArg04;
  1311.     word32 eax_13 = 0x00;
  1312.     while (esi_12 <u dwArg08 && true)
  1313.     {
  1314.         word32 ecx_40 = Mem0[esi_12 + 0x00:word32];
  1315.         if (ecx_40 != 0x00)
  1316.         {
  1317.             word32 esp_55;
  1318.             word32 edi_56;
  1319.             word32 ebp_57;
  1320.             byte SZO_60;
  1321.             byte C_61;
  1322.             byte SCZO_62;
  1323.             byte Z_63;
  1324.             word32 ecx_64;
  1325.             ecx_40();
  1326.         }
  1327.         esi_12 = esi_12 + 0x04;
  1328.     }
  1329.     return eax_13;
  1330. }
  1331.  
  1332. word32 fn00401C5B(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & esiOut)
  1333. {
  1334.     *esiOut = esi;
  1335.     *ebxOut = ebx;
  1336.     word32 edi_116 = edi;
  1337.     word32 esp_109 = fp - 0x04;
  1338.     word32 ebp_117 = fp - 0x04;
  1339.     if (Mem0[0x0040FAD0:word32] != 0x00)
  1340.     {
  1341.         word32 eax_107 = fn00405D60(0x0040FAD0);
  1342.         esp_109 = fp - 0x04;
  1343.         if (eax_107 != 0x00)
  1344.         {
  1345.             word32 esp_115;
  1346.             byte SCZO_118;
  1347.             byte Z_119;
  1348.             word32 ecx_120;
  1349.             word32 eax_121;
  1350.             byte SZO_122;
  1351.             byte C_123;
  1352.             Mem0[0x0040FAD0:word32]();
  1353.             esp_109 = fp - 0x04;
  1354.         }
  1355.     }
  1356.     fn00404879(ebp_117, esi);
  1357.     word32 esp_25 = esp_109 - 0x04;
  1358.     Mem26[esp_25 + 0x00:word32] = 4235644;
  1359.     Mem28[esp_25 - 0x04 + 0x00:word32] = 0x0040A164;
  1360.     word32 eax_31 = fn00401C37(dwArg00, dwArg04);
  1361.     if (true)
  1362.     {
  1363.         Mem56[esp_25 + 0x00:word32] = 4204844;
  1364.         word32 esi_57;
  1365.         word32 ebx_58 = fn00405CB0(ebx, esi, edi_116, es, ds, dwArg00, out esi_57);
  1366.         *ebxOut = ebx_58;
  1367.         Mem60[esp_25 + 0x00:word32] = 0x0040A160;
  1368.         fn00401C1A(0x0040A15C, dwArg00);
  1369.         if (Mem60[0x0040FAD4:word32] != 0x00)
  1370.         {
  1371.             Mem79[esp_25 + 0x00:word32] = 0x0040FAD4;
  1372.             word32 eax_80 = fn00405D60(dwArg00);
  1373.             if (eax_80 != 0x00)
  1374.             {
  1375.                 Mem87[esp_25 + 0x00:word32] = 0x00;
  1376.                 Mem89[esp_25 - 0x04 + 0x00:word32] = 0x02;
  1377.                 Mem91[esp_25 - 0x08 + 0x00:word32] = 0x00;
  1378.                 word32 esp_92;
  1379.                 word32 edi_93;
  1380.                 word32 ebp_94;
  1381.                 byte SCZO_95;
  1382.                 byte Z_96;
  1383.                 word32 ecx_97;
  1384.                 word32 eax_98;
  1385.                 byte SZO_99;
  1386.                 byte C_100;
  1387.                 word32 ebx_101;
  1388.                 word32 esi_102;
  1389.                 selector es_103;
  1390.                 selector ds_104;
  1391.                 Mem91[0x0040FAD4:word32]();
  1392.             }
  1393.         }
  1394.         eax_31 = 0x00;
  1395.     }
  1396.     return eax_31;
  1397. }
  1398.  
  1399. word32 fn00401CE0(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  1400. {
  1401.     *esiOut = esi;
  1402.     *ediOut = edi;
  1403.     word32 ebp_10;
  1404.     fn00402F20(ebx, esi, edi, dwLoc0C, 4240792, 0x18, out ebp_10);
  1405.     Mem13[fp - 0x0C + 0x00:word32] = 0x08;
  1406.     word32 edx_17;
  1407.     word32 ebx_18;
  1408.     word128 xmm0_19;
  1409.     fn00405B56(ebx, edi, es, ds, dwArg00, out edx_17, out ebx_18, out xmm0_19);
  1410.     Mem24[ebp_10 - 0x04 + 0x00:word32] = Mem13[ebp_10 - 0x04 + 0x00:word32] & 0x00;
  1411.     word32 esp_105 = fp - 0x08;
  1412.     word32 ebx_121 = 0x01;
  1413.     if (Mem24[0x0040DF40:word32] != 0x01)
  1414.     {
  1415.         Mem81[4251452:word32] = 0x01;
  1416.         Mem83[4251448:byte] = Mem81[ebp_10 + 0x10:byte];
  1417.         if (Mem83[ebp_10 + 0x0C:word32] == 0x00)
  1418.         {
  1419.             Mem107[fp - 0x0C + 0x00:word32] = Mem83[4258504:word32];
  1420.             word32 eax_108 = fn004029CD(ebp_10, dwArg00);
  1421.             Mem112[ebp_10 - 0x28 + 0x00:word32] = eax_108;
  1422.             word32 esp_110 = fp - 0x08;
  1423.             word32 edi_111 = eax_108;
  1424.             *ediOut = edi_111;
  1425.             if (eax_108 != 0x00)
  1426.             {
  1427.                 Mem137[fp - 0x0C + 0x00:word32] = Mem112[0x0040FAC4:word32];
  1428.                 word32 eax_138 = fn004029CD(ebp_10, dwArg00);
  1429.                 Mem142[ebp_10 - 0x24 + 0x00:word32] = eax_138;
  1430.                 Mem143[ebp_10 - 0x1C + 0x00:word32] = eax_108;
  1431.                 Mem144[ebp_10 - 0x20 + 0x00:word32] = eax_138;
  1432.                 esp_110 = fp - 0x08;
  1433.                 word32 esi_141 = eax_138;
  1434.                 while (true)
  1435.                 {
  1436.                     word32 esi_160 = esi_141 - 0x04;
  1437.                     *esiOut = esi_160;
  1438.                     Mem161[ebp_10 - 0x24 + 0x00:word32] = esi_160;
  1439.                     if (esi_160 <u edi_111)
  1440.                         break;
  1441.                     word32 eax_166 = fn004029C4(ebp_10, out ebp_10, out esi_141);
  1442.                     if (Mem161[esi_141 + 0x00:word32] == eax_166)
  1443.                         continue;
  1444.                     if (esi_141 <u edi_111)
  1445.                         break;
  1446.                     word32 esp_171 = esp_110 - 0x04;
  1447.                     Mem172[esp_171 + 0x00:word32] = Mem161[esi_141 + 0x00:word32];
  1448.                     word32 eax_173 = fn004029CD(ebp_10, dwArg00);
  1449.                     word32 ebp_175;
  1450.                     word32 esi_176;
  1451.                     word32 eax_177 = fn004029C4(ebp_10, out ebp_175, out esi_176);
  1452.                     Mem178[esi_176 + 0x00:word32] = eax_177;
  1453.                     word32 esp_179;
  1454.                     word32 ecx_180;
  1455.                     byte SZO_182;
  1456.                     byte C_183;
  1457.                     byte SCZO_185;
  1458.                     byte Z_186;
  1459.                     byte al_187;
  1460.                     word32 edi_188;
  1461.                     word32 eax_189;
  1462.                     selector es_191;
  1463.                     selector ds_192;
  1464.                     bool D_193;
  1465.                     word32 edx_194;
  1466.                     word128 xmm0_195;
  1467.                     eax_173();
  1468.                     Mem197[esp_179 - 0x04 + 0x00:word32] = Mem178[4258504:word32];
  1469.                     word32 eax_198 = fn004029CD(ebp_10, dwArg00);
  1470.                     Mem201[esp_179 - 0x08 + 0x00:word32] = Mem197[0x0040FAC4:word32];
  1471.                     word32 eax_202 = fn004029CD(ebp_10, dwArg00);
  1472.                     esp_110 = esp_179 + 0x04;
  1473.                     if (Mem201[ebp_10 - 0x1C + 0x00:word32] != eax_198 || Mem201[(ebp_10 - 0x20) + 0x00:word32] != eax_202)
  1474.                     {
  1475.                         Mem213[ebp_10 - 0x1C + 0x00:word32] = eax_198;
  1476.                         Mem214[ebp_10 - 0x28 + 0x00:word32] = eax_198;
  1477.                         Mem215[ebp_10 - 0x20 + 0x00:word32] = eax_202;
  1478.                         Mem217[ebp_10 - 0x24 + 0x00:word32] = eax_202;
  1479.                         esi_141 = eax_202;
  1480.                     }
  1481.                     *ediOut = Mem201[ebp_10 - 0x28 + 0x00:word32];
  1482.                 }
  1483.             }
  1484.             word32 esp_131 = esp_110 - 0x04;
  1485.             Mem132[esp_131 + 0x00:word32] = 0x0040A18C;
  1486.             fn00401C1A(0x0040A180, dwArg00);
  1487.             esp_105 = esp_131 + 0x04;
  1488.         }
  1489.         word32 esp_101 = esp_105 - 0x04;
  1490.         Mem102[esp_101 + 0x00:word32] = 0x0040A194;
  1491.         fn00401C1A(0x0040A190, dwArg00);
  1492.         esp_105 = esp_101 + 0x04;
  1493.     }
  1494.     Mem47[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  1495.     fn00401DF7(ebp_10);
  1496.     if (Mem47[ebp_10 + 0x10:word32] != 0x00)
  1497.     {
  1498.         word32 ebp_77;
  1499.         word32 esi_78;
  1500.         word32 edi_79;
  1501.         return fn00402F65(ebp_10, 0x18, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_77, out esi_78, out edi_79);
  1502.     }
  1503.     else
  1504.     {
  1505.         Mem62[0x0040DF40:word32] = ebx_121;
  1506.         word32 esp_63 = esp_105 - 0x04;
  1507.         Mem64[esp_63 + 0x00:word32] = 0x08;
  1508.         fn00405A7C(dwArg00);
  1509.         Mem69[esp_63 + 0x00:word32] = Mem64[ebp_10 + 0x08:word32];
  1510.         fn00401BF0(dwArg00);
  1511.         fn00401DF7(ebp_10);
  1512.         return 0x01;
  1513.     }
  1514. }
  1515.  
  1516. void fn00401DF7(word32 ebp)
  1517. {
  1518.     if (Mem0[ebp + 0x10:word32] != 0x00)
  1519.         fn00405A7C(0x08);
  1520.     return;
  1521. }
  1522.  
  1523. word32 fn00401E0C(word32 ebx, word32 esi, word32 edi, selector es, selector ds, word32 dwArg04, ptr32 & esiOut)
  1524. {
  1525.     word32 ebp_19;
  1526.     word32 esi_20;
  1527.     word32 edi_21;
  1528.     return fn00401CE0(ebx, esi, edi, es, ds, out ebp_19, out esi_20, out edi_21);
  1529. }
  1530.  
  1531. word32 fn00401E38(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ediOut)
  1532. {
  1533.     word32 ebp_13;
  1534.     word32 esi_14;
  1535.     word32 edi_15;
  1536.     fn00401CE0(ebx, esi, edi, es, ds, out ebp_13, out esi_14, out edi_15);
  1537.     return ebp_13;
  1538. }
  1539.  
  1540. word32 fn00401E56(word32 ebp, word32 esi)
  1541. {
  1542.     word32 ebp_8;
  1543.     word32 esi_9;
  1544.     word32 eax_10 = fn004029C4(ebp, out ebp_8, out esi_9);
  1545.     Mem13[fp - 0x08 + 0x00:word32] = eax_10;
  1546.     fn004060BC(dwArg00);
  1547.     Mem16[fp - 0x0C + 0x00:word32] = eax_10;
  1548.     fn0040604D(dwArg00);
  1549.     Mem18[fp - 0x10 + 0x00:word32] = eax_10;
  1550.     fn004017E0(dwArg00);
  1551.     Mem20[fp - 0x14 + 0x00:word32] = eax_10;
  1552.     fn0040603E(dwArg00);
  1553.     Mem22[fp - 0x18 + 0x00:word32] = eax_10;
  1554.     fn0040602F(dwArg00);
  1555.     Mem24[fp - 0x1C + 0x00:word32] = eax_10;
  1556.     fn00405E1D(dwArg00);
  1557.     Mem26[fp - 0x20 + 0x00:word32] = eax_10;
  1558.     fn00402088();
  1559.     Mem28[fp - 0x24 + 0x00:word32] = eax_10;
  1560.     word32 ebp_29 = fn004059C9(ebp_8);
  1561.     Mem31[fp - 0x28 + 0x00:word32] = 0x00401E22;
  1562.     Mem35[0x0040D180:word32] = fn00402952(ebp_29, dwArg00);
  1563.     return ebp_29;
  1564. }
  1565.  
  1566. bool fn00401EA4(word32 ebp, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & blOut, ptr32 & xmm0Out)
  1567. {
  1568.     *xmm0Out = xmm0;
  1569.     *edxOut = edx;
  1570.     word32 esp_119 = fp - 0x18;
  1571.     word32 edi_25 = 0x00;
  1572.     if (dwArg04 != 4247944[edi_25 * 0x08])
  1573.     {
  1574.         edi_25 = edi_25 + 0x01;
  1575.         if (edi_25 <u 0x17)
  1576.             goto l00401EB8;
  1577.     }
  1578.     if (edi_25 <u 0x17)
  1579.     {
  1580.         word32 eax_73;
  1581.         word32 edx_74;
  1582.         word32 ebx_75;
  1583.         word128 xmm0_76;
  1584.         D = fn004063ED(dwArg04, es, ds, 0x03, out eax_73, out edx_74, out ebx_75, out xmm0_76);
  1585.         esp_119 = fp - 0x18;
  1586.         if (eax_73 == 0x01)
  1587.         {
  1588. l00402018:
  1589.             word32 esp_89 = esp_119 - 0x04;
  1590.             Mem90[esp_89 + 0x00:word32] = ~0x0B;
  1591.             word32 eax_91 = GetStdHandle(Mem90[esp_89 + 0x00:DWORD]);
  1592.             esp_119 = esp_89 + 0x04;
  1593.             if (eax_91 != 0x00 && eax_91 != ~0x00)
  1594.             {
  1595.                 Mem100[esp_89 + 0x00:word32] = 0x00;
  1596.                 Mem103[esp_89 - 0x04 + 0x00:word32] = fp - 0x0C;
  1597.                 word32 esi_104 = edi_25 * 0x08 + 4247948;
  1598.                 Mem106[esp_89 - 0x08 + 0x00:word32] = Mem103[esi_104 + 0x00:word32];
  1599.                 word32 edx_108;
  1600.                 Mem113[esp_89 - 0x08 + 0x00:word32] = fn00404990(dwArg00, out edx_108);
  1601.                 Mem115[esp_89 - 0x0C + 0x00:word32] = Mem113[esi_104 + 0x00:word32];
  1602.                 Mem117[esp_89 - 0x10 + 0x00:word32] = eax_91;
  1603.                 WriteFile(Mem117[esp_89 - 0x10 + 0x00:HANDLE], Mem117[esp_89 - 0x0C + 0x00:LPCVOID], Mem117[esp_89 - 0x08 + 0x00:DWORD], Mem117[esp_89 - 0x04 + 0x00:LPDWORD], Mem117[esp_89 + 0x00:LPOVERLAPPED]);
  1604.                 esp_119 = esp_89 + 0x04;
  1605.             }
  1606.             goto l0040204A;
  1607.         }
  1608.         Mem121[fp - 0x1C + 0x00:word32] = 0x03;
  1609.         word32 eax_122;
  1610.         word32 edx_123;
  1611.         word32 ebx_124;
  1612.         word128 xmm0_125;
  1613.         D = fn004063ED(ebx_75, es, ds, dwArg00, out eax_122, out edx_123, out ebx_124, out xmm0_125);
  1614.         esp_119 = fp - 0x18;
  1615.         if (eax_122 == 0x00 && Mem121[0x0040D000:word32] == 0x01)
  1616.             goto l00402018;
  1617.         if (ebx_124 != 252)
  1618.         {
  1619.             Mem135[fp - 0x1C + 0x00:word32] = 4237272;
  1620.             Mem139[fp - 0x20 + 0x00:word32] = 788;
  1621.             Mem142[fp - 0x24 + 0x00:word32] = 4251464;
  1622.             word32 eax_144;
  1623.             word128 xmm0_145;
  1624.             fn00406385(0x00, es, ds, dwArg00, dwArg04, dwArg08, out eax_144, out xmm0_145);
  1625.             word32 esp_147 = fp - 0x18;
  1626.             if (eax_144 != 0x00)
  1627.             {
  1628.                 Mem353[fp - 0x1C + 0x00:word32] = 0x00;
  1629.                 Mem355[fp - 0x20 + 0x00:word32] = 0x00;
  1630.                 Mem357[fp - 0x24 + 0x00:word32] = 0x00;
  1631.                 Mem359[fp - 0x28 + 0x00:word32] = 0x00;
  1632.                 Mem361[fp - 44 + 0x00:word32] = 0x00;
  1633.                 word32 edx_362;
  1634.                 byte bl_363;
  1635.                 fn004017EF(0x00, es, ds, xmm0_145, ebp, out edx_362, out bl_363);
  1636.                 esp_147 = fp - 0x14;
  1637.             }
  1638.             word32 esp_155 = esp_147 - 0x04;
  1639.             Mem156[esp_155 + 0x00:word32] = 0x0104;
  1640.             Mem159[esp_155 - 0x04 + 0x00:word32] = 0x0040DF61;
  1641.             Mem161[esp_155 - 0x08 + 0x00:word32] = 0x00;
  1642.             Mem162[0x0040E065:byte] = 0x00;
  1643.             word32 esp_164 = esp_155 + 0x04;
  1644.             if (GetModuleFileNameA(Mem162[esp_155 - 0x08 + 0x00:HMODULE], Mem162[esp_155 - 0x04 + 0x00:LPSTR], Mem162[esp_155 + 0x00:DWORD]) == 0x00)
  1645.             {
  1646.                 Mem321[esp_155 + 0x00:word32] = 0x0040A7C0;
  1647.                 Mem323[esp_155 - 0x04 + 0x00:word32] = 0x02FB;
  1648.                 Mem325[esp_155 - 0x08 + 0x00:word32] = 0x0040DF61;
  1649.                 word32 eax_326;
  1650.                 word128 xmm0_327;
  1651.                 fn00406385(0x0040DF61, es, ds, dwArg00, dwArg04, dwArg08, out eax_326, out xmm0_327);
  1652.                 esp_164 = esp_155 + 0x04;
  1653.                 if (eax_326 != 0x00)
  1654.                 {
  1655.                     Mem337[esp_155 + 0x00:word32] = 0x00;
  1656.                     Mem339[esp_155 - 0x04 + 0x00:word32] = 0x00;
  1657.                     Mem341[esp_155 - 0x08 + 0x00:word32] = 0x00;
  1658.                     Mem343[esp_155 - 0x0C + 0x00:word32] = 0x00;
  1659.                     Mem345[esp_155 - 0x10 + 0x00:word32] = 0x00;
  1660.                     word32 edx_346;
  1661.                     byte bl_347;
  1662.                     fn004017EF(0x0040DF61, es, ds, xmm0_327, ebp, out edx_346, out bl_347);
  1663.                     esp_164 = esp_155 + 0x08;
  1664.                 }
  1665.             }
  1666.             word32 esi_186;
  1667.             word32 esp_175 = esp_164 - 0x04;
  1668.             Mem176[esp_175 + 0x00:word32] = 0x0040DF61;
  1669.             word32 esp_181 = esp_175 + 0x04;
  1670.             word32 edx_177;
  1671.             if (fn00404990(dwArg00, out edx_177) >u ~0x3A)
  1672.             {
  1673.                 Mem277[esp_175 + 0x00:word32] = 0x0040DF61;
  1674.                 word32 edx_278;
  1675.                 word32 eax_279 = fn00404990(dwArg00, out edx_278);
  1676.                 Mem283[esp_175 - 0x04 + 0x00:word32] = 0x03;
  1677.                 Mem286[esp_175 - 0x08 + 0x00:word32] = 4237244;
  1678.                 Mem290[esp_175 - 0x0C + 0x00:word32] = 4252252 - (eax_279 + 0x0040DF26);
  1679.                 Mem292[esp_175 - 0x10 + 0x00:word32] = eax_279 + 0x0040DF26;
  1680.                 word32 eax_294;
  1681.                 word128 xmm0_295;
  1682.                 fn004062D0(es, ds, dwArg00, dwArg04, dwArg08, dwArg0C, out eax_294, out xmm0_295);
  1683.                 esp_181 = esp_175 + 0x04;
  1684.                 if (eax_294 != 0x00)
  1685.                 {
  1686.                     Mem305[esp_175 + 0x00:word32] = 0x00;
  1687.                     Mem307[esp_175 - 0x04 + 0x00:word32] = 0x00;
  1688.                     Mem309[esp_175 - 0x08 + 0x00:word32] = 0x00;
  1689.                     Mem311[esp_175 - 0x0C + 0x00:word32] = 0x00;
  1690.                     Mem313[esp_175 - 0x10 + 0x00:word32] = 0x00;
  1691.                     word32 edx_314;
  1692.                     byte bl_315;
  1693.                     fn004017EF(0x00, es, ds, xmm0_295, ebp, out edx_314, out bl_315);
  1694.                     esi_186 = 0x00;
  1695.                     esp_181 = esp_175 + 0x08;
  1696. l00401FBE:
  1697.                     word32 esp_189 = esp_181 - 0x04;
  1698.                     Mem190[esp_189 + 0x00:word32] = 4237240;
  1699.                     Mem192[esp_189 - 0x04 + 0x00:word32] = 788;
  1700.                     Mem194[esp_189 - 0x08 + 0x00:word32] = 4251464;
  1701.                     word32 eax_195;
  1702.                     word32 edx_196;
  1703.                     word128 xmm0_197;
  1704.                     fn0040625C(esi_186, es, ds, dwArg00, dwArg04, dwArg08, out eax_195, out edx_196, out xmm0_197);
  1705.                     word32 esp_199 = esp_189 + 0x04;
  1706.                     if (eax_195 != 0x00)
  1707.                     {
  1708.                         Mem250[esp_189 + 0x00:word32] = esi_186;
  1709.                         Mem252[esp_189 - 0x04 + 0x00:word32] = esi_186;
  1710.                         Mem254[esp_189 - 0x08 + 0x00:word32] = esi_186;
  1711.                         Mem256[esp_189 - 0x0C + 0x00:word32] = esi_186;
  1712.                         Mem258[esp_189 - 0x10 + 0x00:word32] = esi_186;
  1713.                         word32 edx_259;
  1714.                         byte bl_260;
  1715.                         fn004017EF(esi_186, es, ds, xmm0_197, ebp, out edx_259, out bl_260);
  1716.                         esp_199 = esp_189 + 0x08;
  1717.                     }
  1718.                     word32 esp_207 = esp_199 - 0x04;
  1719.                     Mem208[esp_207 + 0x00:word32] = 4247948[Mem194[fp - 0x08 + 0x00:word32] * 0x08];
  1720.                     Mem210[esp_207 - 0x04 + 0x00:word32] = 788;
  1721.                     Mem212[esp_207 - 0x08 + 0x00:word32] = 4251464;
  1722.                     word32 eax_213;
  1723.                     word32 edx_214;
  1724.                     word128 xmm0_215;
  1725.                     D = fn0040625C(esi_186, es, ds, dwArg00, dwArg04, dwArg08, out eax_213, out edx_214, out xmm0_215);
  1726.                     word32 esp_217 = esp_207 + 0x04;
  1727.                     if (eax_213 != 0x00)
  1728.                     {
  1729.                         Mem234[esp_207 + 0x00:word32] = esi_186;
  1730.                         Mem236[esp_207 - 0x04 + 0x00:word32] = esi_186;
  1731.                         Mem238[esp_207 - 0x08 + 0x00:word32] = esi_186;
  1732.                         Mem240[esp_207 - 0x0C + 0x00:word32] = esi_186;
  1733.                         Mem242[esp_207 - 0x10 + 0x00:word32] = esi_186;
  1734.                         word32 edx_243;
  1735.                         byte bl_244;
  1736.                         fn004017EF(esi_186, es, ds, xmm0_215, ebp, out edx_243, out bl_244);
  1737.                         esp_217 = esp_207 + 0x08;
  1738.                     }
  1739.                     word32 esp_225 = esp_217 - 0x04;
  1740.                     Mem226[esp_225 + 0x00:word32] = 0x00012010;
  1741.                     Mem228[esp_225 - 0x04 + 0x00:word32] = 0x0040A790;
  1742.                     Mem230[esp_225 - 0x08 + 0x00:word32] = 4251464;
  1743.                     fn004060F3(fp - 0x04);
  1744.                     esp_119 = esp_225 + 0x04;
  1745.                     goto l0040204A;
  1746.                 }
  1747.             }
  1748.             esi_186 = 0x00;
  1749.             goto l00401FBE;
  1750.         }
  1751.     }
  1752. l0040204A:
  1753.     byte bl_62;
  1754.     *blOut = (byte) Mem0[esp_119 + 0x08:word32];
  1755.     return D;
  1756. }
  1757.  
  1758. word32 fn0040204F(word32 ebx, selector es, selector ds)
  1759. {
  1760.     word32 eax_7;
  1761.     word32 edx_8;
  1762.     word32 ebx_9;
  1763.     word128 xmm0_10;
  1764.     fn004063ED(ebx, es, ds, 0x03, out eax_7, out edx_8, out ebx_9, out xmm0_10);
  1765.     word32 esp_14 = fp;
  1766.     if (eax_7 != 0x01)
  1767.     {
  1768.         Mem57[fp - 0x04 + 0x00:word32] = 0x03;
  1769.         word32 eax_58;
  1770.         word32 edx_59;
  1771.         word32 ebx_60;
  1772.         word128 xmm0_61;
  1773.         fn004063ED(ebx_9, es, ds, dwArg00, out eax_58, out edx_59, out ebx_60, out xmm0_61);
  1774.         esp_14 = fp;
  1775.         if (eax_58 != 0x00 || Mem57[0x0040D000:word32] != 0x01)
  1776.             return ebp;
  1777.     }
  1778.     word32 esp_39 = esp_14 - 0x04;
  1779.     Mem40[esp_39 + 0x00:word32] = 252;
  1780.     word32 edx_42;
  1781.     byte bl_43;
  1782.     word128 xmm0_44;
  1783.     fn00401EA4(ebp, es, ds, dwArg00, out edx_42, out bl_43, out xmm0_44);
  1784.     Mem47[esp_39 - 0x04 + 0x00:word32] = 0xFF;
  1785.     word32 edx_48;
  1786.     byte bl_49;
  1787.     word128 xmm0_50;
  1788.     fn00401EA4(ebp, es, ds, dwArg00, out edx_48, out bl_49, out xmm0_50);
  1789.     return ebp;
  1790. }
  1791.  
  1792. void fn00402088()
  1793. {
  1794.     return;
  1795. }
  1796.  
  1797. word32 fn004021E9(word32 ebx, word32 esi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  1798. {
  1799. fn004021E9_entry:
  1800.     *ebpOut = ebp
  1801.     *ebxOut = ebx
  1802.     word32 esp_31 = fp - 0x08
  1803.     word32 edi_115 = 0x00
  1804.     branch Mem0[0x0040FACC:word32] != 0x00 l004021FC
  1805.     goto l004021F7
  1806. l004021E9:
  1807. l004021F7:
  1808.     word32 ebp_113
  1809.     word32 esi_114
  1810.     eax = fn004044A8(ebx, esi, 0x00, es, ds, out ebx, out ebp_113, out esi_114, out edi_115)
  1811. l004021FC:
  1812.     word32 esi_101 = Mem0[4258520:word32]
  1813.     branch esi_101 != 0x00 l0040220B
  1814. l00402206:
  1815.     esi_101 = 4237424
  1816. l0040220B:
  1817.     byte al_36 = Mem0[esi_101 + 0x00:byte]
  1818.     word32 eax_100 = DPB(eax, al_36, 0)
  1819.     branch al_36 >u 0x20 l00402219
  1820. l00402211:
  1821.     branch al_36 == 0x00 l00402243
  1822. l00402215:
  1823.     branch edi_115 == 0x00 l0040223D
  1824. l00402219:
  1825.     branch al_36 != 0x22 l00402226
  1826. l0040221D:
  1827.     edi_115 = (word32) (edi_115 == 0x00)
  1828. l00402226:
  1829.     word32 esp_47 = esp_31 - 0x04
  1830.     Mem48[esp_47 + 0x00:word32] = (word32) al_36
  1831.     word32 esi_53
  1832.     eax = fn0040648B(ebx, es, ds, dwArg00, out ebx, out esi_53)
  1833.     esp_31 = esp_47 + 0x04
  1834.     branch eax == 0x00 l00402235
  1835. l00402234:
  1836.     esi_53 = esi_53 + 0x01
  1837. l00402235:
  1838.     esi_101 = esi_53 + 0x01
  1839.     goto l0040220B
  1840. l00402238:
  1841. l0040223C:
  1842.     esi_101 = esi_101 + 0x01
  1843. l0040223D:
  1844.     byte al_102 = Mem0[esi_101 + 0x00:byte]
  1845.     eax_100 = DPB(eax_100, al_102, 0) (alias)
  1846.     branch al_102 != 0x00 && al_102 <=u 0x20 l00402238
  1847. l00402243:
  1848.     word32 esp_82 = esp_31 + 0x04
  1849.     word32 esi_83 = Mem0[esp_82 + 0x00:word32]
  1850.     return eax_100
  1851.     word32 edi_85
  1852.     *ediOut = Mem0[esp_82 + 0x04:word32]
  1853.     word32 esi_89
  1854.     *esiOut = Mem0[esp_82 + 0x08:word32]
  1855.     return esi_83
  1856. fn004021E9_exit:
  1857. }
  1858.  
  1859. word32 fn00402248(word32 eax, word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut)
  1860. {
  1861.     *ebpOut = ebp;
  1862.     *ebxOut = ebx;
  1863.     if (Mem0[0x0040FACC:word32] == 0x00)
  1864.     {
  1865.         word32 ebp_283;
  1866.         eax = fn004044A8(ebx, esi, edi, es, ds, out ebx, out ebp_283, out esi, out edi);
  1867.     }
  1868.     word32 eax_128;
  1869.     Mem18[fp - 0x04 + 0x00:word32] = esi;
  1870.     word32 esi_19 = Mem18[0x0040DF00:word32];
  1871.     Mem21[fp - 0x08 + 0x00:word32] = edi;
  1872.     word32 esp_20 = fp - 0x08;
  1873.     word32 edi_22 = 0x00;
  1874.     if (esi_19 != 0x00)
  1875.     {
  1876.         while (true)
  1877.         {
  1878.             byte al_74 = Mem21[esi_19 + 0x00:byte];
  1879.             if (al_74 == 0x00)
  1880.                 break;
  1881.             if (al_74 != 0x3D)
  1882.                 edi_22 = edi_22 + 0x01;
  1883.             word32 esp_273 = esp_20 - 0x04;
  1884.             Mem274[esp_273 + 0x00:word32] = esi_19;
  1885.             esp_20 = esp_273 + 0x04;
  1886.             word32 edx_275;
  1887.             esi_19 = esi_19 + 0x01 + fn00404990(dwArg00, out edx_275);
  1888.         }
  1889.         word32 esp_79 = esp_20 - 0x04;
  1890.         Mem80[esp_79 + 0x00:word32] = 0x04;
  1891.         word32 edi_81 = edi_22 + 0x01;
  1892.         Mem84[esp_79 - 0x04 + 0x00:word32] = edi_81;
  1893.         word32 edx_88;
  1894.         word32 ebp_90;
  1895.         word32 esi_91;
  1896.         word32 edi_92;
  1897.         word128 xmm0_93;
  1898.         word32 ebx_112;
  1899.         fn004048DF(ebx, edi_81, es, ds, out eax, out edx_88, out ebx_112, out ebp_90, out esi_91, out edi_92, out xmm0_93);
  1900.         Mem100[4251424:word32] = eax;
  1901.         word32 edi_117 = eax;
  1902.         if (eax != 0x00)
  1903.         {
  1904.             word32 esi_104 = Mem100[0x0040DF00:word32];
  1905.             Mem106[esp_79 + 0x00:word32] = ebx_112;
  1906.             word32 esp_105 = esp_79;
  1907.             while (true)
  1908.             {
  1909.                 word32 esp_134;
  1910.                 if (Mem106[esi_104 + 0x00:byte] == 0x00)
  1911.                     break;
  1912.                 word32 esp_161 = esp_105 - 0x04;
  1913.                 Mem162[esp_161 + 0x00:word32] = esi_104;
  1914.                 word32 edx_164;
  1915.                 word32 eax_165 = fn00404990(dwArg00, out edx_164);
  1916.                 ebx_112 = eax_165 + 0x01;
  1917.                 esp_105 = esp_161 + 0x04;
  1918.                 if (Mem162[esi_104 + 0x00:byte] != 0x3D)
  1919.                 {
  1920.                     Mem190[esp_161 + 0x00:word32] = 0x01;
  1921.                     Mem192[esp_161 - 0x04 + 0x00:word32] = eax_165 + 0x01;
  1922.                     word32 eax_193;
  1923.                     word32 edx_194;
  1924.                     word32 ebp_196;
  1925.                     word32 edi_198;
  1926.                     word128 xmm0_199;
  1927.                     fn004048DF(eax_165 + 0x01, edi_117, es, ds, out eax_193, out edx_194, out ebx_112, out ebp_196, out esi_104, out edi_198, out xmm0_199);
  1928.                     Mem205[edi_198 + 0x00:word32] = eax_193;
  1929.                     if (eax_193 == 0x00)
  1930.                     {
  1931.                         Mem253[esp_161 + 0x00:word32] = Mem205[4251424:word32];
  1932.                         word32 eax_254;
  1933.                         word32 edx_255;
  1934.                         word32 ebx_256;
  1935.                         word32 ebp_257;
  1936.                         word32 esi_258;
  1937.                         word32 edi_259;
  1938.                         word128 xmm0_260;
  1939.                         fn004047EB(ebx_112, esi_104, edi_198, es, ds, out eax_254, out edx_255, out ebx_256, out ebp_257, out esi_258, out edi_259, out xmm0_260);
  1940.                         Mem263[4251424:word32] = Mem253[4251424:word32] & 0x00;
  1941.                         esp_134 = esp_161;
  1942.                         eax_128 = eax_254 | ~0x00;
  1943.                         goto l0040230A;
  1944.                     }
  1945.                     Mem210[esp_161 + 0x00:word32] = esi_104;
  1946.                     Mem212[esp_161 - 0x04 + 0x00:word32] = ebx_112;
  1947.                     Mem214[esp_161 - 0x08 + 0x00:word32] = eax_193;
  1948.                     word32 eax_217;
  1949.                     word128 xmm0_218;
  1950.                     fn00406385(esi_104, es, ds, dwArg00, dwArg04, dwArg08, out eax_217, out xmm0_218);
  1951.                     esp_105 = esp_161 + 0x04;
  1952.                     if (eax_217 != 0x00)
  1953.                     {
  1954.                         Mem236[esp_161 + 0x00:word32] = 0x00;
  1955.                         Mem238[esp_161 - 0x04 + 0x00:word32] = 0x00;
  1956.                         Mem240[esp_161 - 0x08 + 0x00:word32] = 0x00;
  1957.                         Mem242[esp_161 - 0x0C + 0x00:word32] = 0x00;
  1958.                         Mem244[esp_161 - 0x10 + 0x00:word32] = 0x00;
  1959.                         word32 edx_246;
  1960.                         byte bl_247;
  1961.                         fn004017EF(esi_104, es, ds, xmm0_218, dwLoc04, out edx_246, out bl_247);
  1962.                         esp_105 = esp_161 + 0x08;
  1963.                     }
  1964.                     edi_117 = edi_198 + 0x04;
  1965.                 }
  1966.                 esi_104 = esi_104 + ebx_112;
  1967.             }
  1968.             esp_134 = esp_105 - 0x04;
  1969.             Mem141[esp_134 + 0x00:word32] = Mem106[0x0040DF00:word32];
  1970.             word32 eax_142;
  1971.             word32 edx_143;
  1972.             word32 ebx_144;
  1973.             word32 ebp_145;
  1974.             word32 esi_146;
  1975.             word32 edi_147;
  1976.             word128 xmm0_148;
  1977.             fn004047EB(ebx_112, esi_104, edi_117, es, ds, out eax_142, out edx_143, out ebx_144, out ebp_145, out esi_146, out edi_147, out xmm0_148);
  1978.             Mem151[0x0040DF00:word32] = Mem141[0x0040DF00:word32] & 0x00;
  1979.             Mem154[edi_147 + 0x00:word32] = Mem151[edi_147 + 0x00:word32] & 0x00;
  1980.             Mem156[0x0040FAC0:word32] = 0x01;
  1981.             eax_128 = 0x00;
  1982. l0040230A:
  1983.             word32 ebx_137;
  1984.             *ebxOut = Mem106[esp_134 + 0x04:word32];
  1985.             return eax_128;
  1986.         }
  1987.     }
  1988.     eax_128 = eax | ~0x00;
  1989.     return eax_128;
  1990. }
  1991.  
  1992. void fn00402326(word32 edx, word32 ebp, word32 edi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C)
  1993. {
  1994. fn00402326_entry:
  1995.     Mem21[edi + 0x00:word32] = 0x00
  1996.     Mem26[dwArg0C + 0x00:word32] = 0x01
  1997.     word32 ecx_12 = dwArg0C
  1998.     word32 esp_124 = fp - 0x10
  1999.     word32 esi_101 = edx
  2000.     word32 edx_127 = dwArg08
  2001.     branch dwArg04 == 0x00 l0040234E
  2002.     goto l00402345
  2003. l00402326:
  2004. l00402345:
  2005.     Mem405[dwArg04 + 0x00:word32] = dwArg08
  2006.     ebx = dwArg04
  2007. l0040234E:
  2008. l00402351:
  2009.     byte bl_308
  2010.     branch Mem26[esi_101 + 0x00:byte] != 0x22 l00402366
  2011. l00402356:
  2012.     Mem348[fp - 0x08 + 0x00:word32] = (word32) (Mem26[fp - 0x08 + 0x00:word32] == 0x00)
  2013.     bl_308 = 0x22
  2014.     ebx = DPB(ebx, 0x22, 0) (alias)
  2015.     esi_101 = esi_101 + 0x01
  2016.     goto l004023A2
  2017. l00402366:
  2018.     Mem350[edi + 0x00:word32] = Mem26[edi + 0x00:word32] + 0x01
  2019.     branch edx_127 == 0x00 l00402374
  2020. l0040236C:
  2021.     Mem397[edx_127 + 0x00:byte] = Mem350[esi_101 + 0x00:byte]
  2022.     Mem400[fp + 0x08:word32] = edx_127 + 0x01
  2023. l00402374:
  2024.     bl_308 = Mem350[esi_101 + 0x00:byte]
  2025.     word32 esp_359 = esp_124 - 0x04
  2026.     Mem360[esp_359 + 0x00:word32] = (word32) bl_308
  2027.     esp_124 = esp_359 + 0x04
  2028.     branch fn0040648B(DPB(ebx, bl_308, 0), es, ds, dwArg00, out ebx, out esi_101) == 0x00 l00402398
  2029. l00402385:
  2030.     Mem383[edi + 0x00:word32] = Mem360[edi + 0x00:word32] + 0x01
  2031.     branch Mem383[fp + 0x08:word32] == 0x00 l00402397
  2032. l0040238D:
  2033.     word32 ecx_390 = Mem383[fp + 0x08:word32]
  2034.     byte al_391 = Mem383[esi_101 + 0x00:byte]
  2035.     Mem393[fp + 0x08:word32] = Mem383[fp + 0x08:word32] + 0x01
  2036.     Mem395[ecx_390 + 0x00:byte] = al_391
  2037. l00402397:
  2038.     esi_101 = esi_101 + 0x01
  2039. l00402398:
  2040.     edx_127 = Mem360[fp + 0x08:word32]
  2041.     ecx_12 = Mem360[fp + 0x0C:word32]
  2042.     branch bl_308 == 0x00 l004023D4
  2043. l004023A2:
  2044.     branch Mem26[fp - 0x08 + 0x00:word32] != 0x00 l00402351
  2045.     branch Mem26[fp - 0x08 + 0x00:word32] != 0x00 l00402351
  2046. l004023A8:
  2047.     branch bl_308 == 0x20 l004023B2
  2048.     branch bl_308 == 0x20 l004023B2
  2049. l004023AD:
  2050.     branch bl_308 != 0x09 l00402351
  2051.     branch bl_308 != 0x09 l00402351
  2052. l004023B2:
  2053.     branch edx_127 == 0x00 l004023BA
  2054.     branch edx_127 == 0x00 l004023BA
  2055. l004023B6:
  2056.     Mem333[edx_127 - 0x01 + 0x00:byte] = 0x00
  2057.     Mem334[edx_127 - 0x01 + 0x00:byte] = 0x00
  2058. l004023BA:
  2059.     Mem63[fp - 0x08 + 0x00:word32] = Mem26[fp - 0x08 + 0x00:word32] & 0x00
  2060. l004023BE:
  2061.     branch Mem63[esi_101 + 0x00:byte] == 0x00 l004024B0
  2062. l004023C7:
  2063.     byte al_103 = Mem63[esi_101 + 0x00:byte]
  2064.     branch al_103 == 0x20 || al_103 == 0x09 l004023D1
  2065.     goto l004023D7
  2066. l004023CD:
  2067. l004023D1:
  2068.     esi_101 = esi_101 + 0x01
  2069.     goto l004023C7
  2070. l004023D4:
  2071.     esi_101 = esi_101 - 0x01
  2072.     goto l004023BA
  2073. l004023D7:
  2074.     branch Mem63[esi_101 + 0x00:byte] == 0x00 l004024B0
  2075. l004023E0:
  2076.     branch Mem63[fp + 0x04:word32] == 0x00 l004023EF
  2077. l004023E6:
  2078.     word32 eax_303 = Mem63[fp + 0x04:word32]
  2079.     Mem305[fp + 0x04:word32] = Mem63[fp + 0x04:word32] + 0x04
  2080.     Mem307[eax_303 + 0x00:word32] = edx_127
  2081. l004023EF:
  2082.     Mem120[ecx_12 + 0x00:word32] = Mem63[ecx_12 + 0x00:word32] + 0x01
  2083. l004023F1:
  2084.     word32 ebx_130 = 0x01
  2085.     word32 ecx_132 = 0x00
  2086.     byte cl_133 = 0x00
  2087.     goto l004023FA
  2088. l004023F8:
  2089.     ecx_132 = ecx_132 + 0x01
  2090.     esi_101 = esi_101 + 0x01
  2091.     cl_133 = (byte) ecx_132 (alias)
  2092. l004023FA:
  2093.     branch Mem120[esi_101 + 0x00:byte] == 0x5C l004023F8
  2094. l004023FF:
  2095.     branch Mem120[esi_101 + 0x00:byte] != 0x22 l0040242A
  2096. l00402404:
  2097.     branch (cl_133 & 0x01) != 0x00 l00402428
  2098. l00402409:
  2099.     branch Mem120[fp - 0x08 + 0x00:word32] == 0x00 l0040241B
  2100. l0040240F:
  2101.     word32 eax_294 = esi_101 + 0x01
  2102.     branch Mem120[eax_294 + 0x00:byte] != 0x22 l0040241B
  2103. l00402417:
  2104.     esi_101 = eax_294
  2105.     goto l00402428
  2106. l0040241B:
  2107.     Mem293[fp - 0x08 + 0x00:word32] = (word32) (Mem120[fp - 0x08 + 0x00:word32] == 0x00)
  2108.     ebx_130 = 0x00
  2109. l00402428:
  2110.     ecx_132 = ecx_132 >>u 0x01
  2111. l0040242A:
  2112.     branch ecx_132 == 0x00 l00402440
  2113. l0040242E:
  2114.     ecx_132 = ecx_132 - 0x01
  2115.     branch edx_127 == 0x00 l00402437
  2116. l00402433:
  2117.     Mem269[edx_127 + 0x00:byte] = 0x5C
  2118.     edx_127 = edx_127 + 0x01
  2119. l00402437:
  2120.     Mem264[edi + 0x00:word32] = Mem120[edi + 0x00:word32] + 0x01
  2121.     branch ecx_132 != 0x00 l0040242E
  2122. l0040243D:
  2123.     Mem268[fp + 0x08:word32] = edx_127
  2124. l00402440:
  2125.     byte al_158 = Mem120[esi_101 + 0x00:byte]
  2126.     branch al_158 == 0x00 || Mem120[(fp - 0x08) + 0x00:word32] == 0x00 && (al_158 == 0x20 || al_158 == 0x09) l0040249B
  2127.     goto l00402454
  2128. l00402446:
  2129. l0040244C:
  2130. l00402450:
  2131. l00402454:
  2132.     branch ebx_130 == 0x00 l00402495
  2133. l00402458:
  2134.     word32 esp_195 = esp_124 - 0x04
  2135.     Mem196[esp_195 + 0x00:word32] = (int32) al_158
  2136.     branch edx_127 == 0x00 l00402483
  2137. l00402460:
  2138.     esp_124 = esp_195 + 0x04
  2139.     word32 ebx_215
  2140.     branch fn0040648B(ebx_130, es, ds, dwArg00, out ebx_215, out esi_101) == 0x00 l00402477
  2141. l0040246A:
  2142.     byte al_230 = Mem196[esi_101 + 0x00:byte]
  2143.     word32 ecx_231 = Mem196[fp + 0x08:word32]
  2144.     Mem233[fp + 0x08:word32] = Mem196[fp + 0x08:word32] + 0x01
  2145.     Mem234[ecx_231 + 0x00:byte] = al_230
  2146.     Mem237[edi + 0x00:word32] = Mem234[edi + 0x00:word32] + 0x01
  2147.     esi_101 = esi_101 + 0x01
  2148. l00402477:
  2149.     word32 ecx_224 = Mem196[fp + 0x08:word32]
  2150.     byte al_225 = Mem196[esi_101 + 0x00:byte]
  2151.     Mem227[fp + 0x08:word32] = Mem196[fp + 0x08:word32] + 0x01
  2152.     Mem229[ecx_224 + 0x00:byte] = al_225
  2153.     goto l00402490
  2154. l00402483:
  2155.     esp_124 = esp_195 + 0x04
  2156.     word32 ebx_239
  2157.     branch fn0040648B(ebx_130, es, ds, dwArg00, out ebx_239, out esi_101) == 0x00 l00402490
  2158. l0040248D:
  2159.     Mem249[edi + 0x00:word32] = Mem196[edi + 0x00:word32] + 0x01
  2160.     esi_101 = esi_101 + 0x01
  2161. l00402490:
  2162.     Mem209[edi + 0x00:word32] = Mem196[edi + 0x00:word32] + 0x01
  2163.     edx_127 = Mem209[fp + 0x08:word32]
  2164. l00402495:
  2165.     esi_101 = esi_101 + 0x01
  2166.     goto l004023F1
  2167. l0040249B:
  2168.     branch edx_127 == 0x00 l004024A6
  2169. l0040249F:
  2170.     Mem173[edx_127 + 0x00:byte] = 0x00
  2171.     edx_127 = edx_127 + 0x01
  2172.     Mem176[fp + 0x08:word32] = edx_127
  2173. l004024A6:
  2174.     Mem169[edi + 0x00:word32] = Mem120[edi + 0x00:word32] + 0x01
  2175.     ecx_12 = Mem169[fp + 0x0C:word32]
  2176.     goto l004023BE
  2177. l004024B0:
  2178.     word32 eax_80 = Mem63[fp + 0x04:word32]
  2179.     branch eax_80 == 0x00 l004024BC
  2180. l004024B9:
  2181.     Mem97[eax_80 + 0x00:word32] = Mem63[eax_80 + 0x00:word32] & 0x00
  2182. l004024BC:
  2183.     Mem91[ecx_12 + 0x00:word32] = Mem63[ecx_12 + 0x00:word32] + 0x01
  2184.     return
  2185. fn00402326_exit:
  2186. }
  2187.  
  2188. word32 fn004024C0(word32 ebp, word32 esi, word32 edi, selector es, selector ds)
  2189. {
  2190.     word32 ebp_138 = fp - 0x04;
  2191.     word32 ebx_12 = 0x00;
  2192.     if (Mem0[0x0040FACC:word32] == 0x00)
  2193.     {
  2194.         word32 esi_139;
  2195.         word32 edi_140;
  2196.         fn004044A8(0x00, esi, edi, es, ds, out ebx_12, out ebp_138, out esi_139, out edi_140);
  2197.     }
  2198.     Mem26[fp - 0x20 + 0x00:word32] = 0x0104;
  2199.     Mem29[fp - 0x24 + 0x00:word32] = 4252256;
  2200.     Mem31[fp - 0x28 + 0x00:word32] = ebx_12;
  2201.     Mem32[0x0040E364:byte] = 0x00;
  2202.     GetModuleFileNameA(Mem32[fp - 0x28 + 0x00:HMODULE], Mem32[fp - 0x24 + 0x00:LPSTR], Mem32[fp - 0x20 + 0x00:DWORD]);
  2203.     word32 eax_35 = Mem32[4258520:word32];
  2204.     Mem36[0x0040DF30:word32] = 4252256;
  2205.     if (eax_35 != ebx_12)
  2206.     {
  2207.         Mem134[ebp_138 - 0x04 + 0x00:word32] = eax_35;
  2208.         if (Mem134[eax_35 + 0x00:byte] != 0x00)
  2209.         {
  2210. l0040250B:
  2211.             word32 eax_128;
  2212.             word32 edx_40 = Mem36[ebp_138 - 0x04 + 0x00:word32];
  2213.             Mem43[fp - 0x20 + 0x00:word32] = ebp_138 - 0x08;
  2214.             Mem45[fp - 0x24 + 0x00:word32] = ebx_12;
  2215.             Mem47[fp - 0x28 + 0x00:word32] = ebx_12;
  2216.             fn00402326(edx_40, ebp_138, ebp_138 - 0x0C, es, ds, dwArg00, dwArg04, dwArg08);
  2217.             word32 eax_106 = Mem47[ebp_138 - 0x08 + 0x00:word32];
  2218.             if (eax_106 <u 0x3FFFFFFF)
  2219.             {
  2220.                 word32 ecx_91 = Mem47[ebp_138 - 0x0C + 0x00:word32];
  2221.                 if (ecx_91 <u ~0x00)
  2222.                 {
  2223.                     eax_106 = (eax_106 << 0x02) + ecx_91;
  2224.                     if (eax_106 >=u ecx_91)
  2225.                     {
  2226.                         Mem100[fp - 0x20 + 0x00:word32] = eax_106;
  2227.                         word32 ebx_101;
  2228.                         word32 ebp_102;
  2229.                         word32 esi_103;
  2230.                         word32 edi_104;
  2231.                         word128 xmm0_105;
  2232.                         eax_106 = fn0040489A(ebx_12, ebp_138, es, ds, out ebx_101, out ebp_102, out esi_103, out edi_104, out xmm0_105);
  2233.                         if (eax_106 != ebx_101)
  2234.                         {
  2235.                             word32 edx_112 = Mem100[ebp_102 - 0x04 + 0x00:word32];
  2236.                             Mem115[fp - 0x20 + 0x00:word32] = ebp_102 - 0x08;
  2237.                             Mem119[fp - 0x24 + 0x00:word32] = edi_104 + eax_106;
  2238.                             Mem121[fp - 0x28 + 0x00:word32] = eax_106;
  2239.                             fn00402326(edx_112, ebp_102, ebp_102 - 0x0C, es, ds, dwArg00, dwArg04, dwArg08);
  2240.                             Mem126[4251412:word32] = Mem121[ebp_102 - 0x08 + 0x00:word32] - 0x01;
  2241.                             Mem127[4251416:word32] = eax_106;
  2242.                             eax_128 = 0x00;
  2243.                             return eax_128;
  2244.                         }
  2245.                     }
  2246.                 }
  2247.             }
  2248.             eax_128 = eax_106 | ~0x00;
  2249.             return eax_128;
  2250.         }
  2251.     }
  2252.     Mem133[ebp_138 - 0x04 + 0x00:word32] = 4252256;
  2253.     goto l0040250B;
  2254. }
  2255.  
  2256. word32 fn0040257B(word32 ebp, selector es, selector ds)
  2257. {
  2258.     word32 eax_167;
  2259.     word32 ebp_115 = fp - 0x04;
  2260.     word32 eax_259 = Mem0[4252520:word32];
  2261.     word32 ebx_114 = 0x00;
  2262.     word16 bx_108 = 0x00;
  2263.     word32 edi_112 = 0x00;
  2264.     if (eax_259 == 0x00)
  2265.     {
  2266.         word32 eax_323 = GetEnvironmentStringsW();
  2267.         edi_112 = eax_323;
  2268.         if (eax_323 != 0x00)
  2269.         {
  2270.             Mem327[4252520:word32] = 0x01;
  2271. l004025D0:
  2272.             if (edi_112 == 0x00)
  2273.             {
  2274.                 word32 eax_240 = GetEnvironmentStringsW();
  2275.                 edi_112 = eax_240;
  2276.                 if (eax_240 == 0x00)
  2277.                     goto l004025DC;
  2278.             }
  2279.             word32 eax_117 = edi_112;
  2280.             if (Mem0[edi_112 + 0x00:word16] != bx_108)
  2281.                 do
  2282.                 {
  2283.                     do
  2284.                     {
  2285.                         word32 eax_228 = eax_117 + 0x01;
  2286.                         eax_117 = eax_228 + 0x01;
  2287.                     } while (Mem0[eax_228 + 0x01:word16] != bx_108);
  2288.                     eax_117 = eax_228 + 0x03;
  2289.                 } while (Mem0[eax_228 + 0x03:word16] != bx_108);
  2290.             word32 esp_143 = fp - 0x1C;
  2291.             if (WideCharToMultiByte(0x00, 0x00, edi_112, (eax_117 - edi_112 >> 0x01) + 0x01, 0x00, 0x00, 0x00, 0x00) != 0x00)
  2292.             {
  2293.                 word32 esi_172;
  2294.                 word128 xmm0_174;
  2295.                 word32 ebp_171;
  2296.                 word32 eax_175 = fn0040489A(ebx_114, ebp_115, es, ds, out ebx_114, out ebp_171, out esi_172, out edi_112, out xmm0_174);
  2297.                 Mem178[ebp_171 - 0x04 + 0x00:word32] = eax_175;
  2298.                 esp_143 = fp - 0x1C;
  2299.                 if (eax_175 != ebx_114)
  2300.                 {
  2301.                     Mem182[fp - 0x20 + 0x00:word32] = ebx_114;
  2302.                     Mem184[fp - 0x24 + 0x00:word32] = ebx_114;
  2303.                     Mem186[fp - 0x28 + 0x00:word32] = Mem184[ebp_171 - 0x08 + 0x00:word32];
  2304.                     Mem188[fp - 44 + 0x00:word32] = eax_175;
  2305.                     Mem190[fp - 0x30 + 0x00:word32] = Mem188[ebp_171 - 0x0C + 0x00:word32];
  2306.                     Mem192[fp - 0x34 + 0x00:word32] = edi_112;
  2307.                     Mem194[fp - 0x38 + 0x00:word32] = ebx_114;
  2308.                     Mem196[fp - 0x3C + 0x00:word32] = ebx_114;
  2309.                     esp_143 = fp - 0x1C;
  2310.                     if (WideCharToMultiByte(Mem196[fp - 0x3C + 0x00:UINT], Mem196[fp - 0x38 + 0x00:DWORD], Mem196[fp - 0x34 + 0x00:LPCWSTR], Mem196[fp - 0x30 + 0x00:int32], Mem196[fp - 44 + 0x00:LPSTR], Mem196[fp - 0x28 + 0x00:int32], Mem196[fp - 0x24 + 0x00:LPCSTR], Mem196[fp - 0x20 + 0x00:LPBOOL]) == 0x00)
  2311.                     {
  2312.                         Mem215[fp - 0x20 + 0x00:word32] = Mem196[ebp_171 - 0x04 + 0x00:word32];
  2313.                         word32 eax_216;
  2314.                         word32 edx_217;
  2315.                         word32 ebx_218;
  2316.                         word32 esi_220;
  2317.                         word128 xmm0_222;
  2318.                         fn004047EB(ebx_114, esi_172, edi_112, es, ds, out eax_216, out edx_217, out ebx_218, out ebp_171, out esi_220, out edi_112, out xmm0_222);
  2319.                         Mem226[ebp_171 - 0x04 + 0x00:word32] = ebx_218;
  2320.                         esp_143 = fp - 0x1C;
  2321.                     }
  2322.                     ebx_114 = Mem196[ebp_171 - 0x04 + 0x00:word32];
  2323.                 }
  2324.             }
  2325.             word32 esp_163 = esp_143 - 0x04;
  2326.             Mem164[esp_163 + 0x00:word32] = edi_112;
  2327.             FreeEnvironmentStringsW(Mem164[esp_163 + 0x00:LPWCH]);
  2328.             eax_167 = ebx_114;
  2329.             return eax_167;
  2330.         }
  2331.         if (GetLastError() == 0x78)
  2332.         {
  2333.             Mem335[4252520:word32] = 0x02;
  2334.             eax_259 = 0x02;
  2335.         }
  2336.         else
  2337.             eax_259 = Mem0[4252520:word32];
  2338.     }
  2339.     if (eax_259 != 0x01)
  2340.     {
  2341.         if (eax_259 != 0x02 && eax_259 != 0x00)
  2342.             goto l004025DC;
  2343.         word32 eax_266 = GetEnvironmentStrings();
  2344.         if (eax_266 != 0x00)
  2345.         {
  2346.             if (Mem0[eax_266 + 0x00:byte] != 0x00)
  2347.                 do
  2348.                 {
  2349.                     do
  2350.                         eax_266 = eax_266 + 0x01;
  2351.                     while (Mem0[eax_266 + 0x00:byte] != 0x00);
  2352.                     eax_266 = eax_266 + 0x01;
  2353.                 } while (Mem0[eax_266 + 0x01:byte] != 0x00);
  2354.             word32 ebx_280;
  2355.             word32 ebp_281;
  2356.             word32 esi_282;
  2357.             word32 edi_283;
  2358.             word128 xmm0_284;
  2359.             word32 eax_285 = fn0040489A(0x00, fp - 0x04, es, ds, out ebx_280, out ebp_281, out esi_282, out edi_283, out xmm0_284);
  2360.             if (eax_285 != ebx_280)
  2361.             {
  2362.                 Mem296[fp - 0x20 + 0x00:word32] = Mem0[ebp_281 - 0x08 + 0x00:word32];
  2363.                 Mem298[fp - 0x24 + 0x00:word32] = esi_282;
  2364.                 Mem300[fp - 0x28 + 0x00:word32] = eax_285;
  2365.                 word32 esi_304;
  2366.                 word32 edi_305;
  2367.                 fn004064B0(ebp_281, dwArg00, dwArg04, dwArg08, out esi_304, out edi_305);
  2368.                 Mem310[fp - 0x20 + 0x00:word32] = esi_304;
  2369.                 FreeEnvironmentStringsA(Mem310[fp - 0x20 + 0x00:LPCH]);
  2370.                 eax_167 = edi_305;
  2371.                 return eax_167;
  2372.             }
  2373.             Mem292[fp - 0x20 + 0x00:word32] = esi_282;
  2374.             FreeEnvironmentStringsA(Mem292[fp - 0x20 + 0x00:LPCH]);
  2375.         }
  2376. l004025DC:
  2377.         eax_167 = 0x00;
  2378.         return eax_167;
  2379.     }
  2380.     goto l004025D0;
  2381. }
  2382.  
  2383. word32 fn004026B2(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut)
  2384. {
  2385.     word32 eax_154;
  2386.     word32 ebp_10;
  2387.     fn00402F20(ebx, esi, edi, dwLoc0C, 4240824, 0x54, out ebp_10);
  2388.     Mem16[ebp_10 - 0x04 + 0x00:word32] = 0x00;
  2389.     Mem20[fp - 0x0C + 0x00:word32] = ebp_10 - 100;
  2390.     GetStartupInfoA(Mem20[fp - 0x0C + 0x00:LPSTARTUPINFOA]);
  2391.     Mem22[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  2392.     Mem24[fp - 0x0C + 0x00:word32] = 0x40;
  2393.     Mem26[fp - 0x10 + 0x00:word32] = 0x20;
  2394.     Mem30[fp - 0x10 + 0x00:word32] = Mem26[fp - 0x10 + 0x00:word32];
  2395.     word32 edx_34;
  2396.     word32 ebx_35;
  2397.     word32 esi_37;
  2398.     word32 edi_38;
  2399.     word128 xmm0_39;
  2400.     word32 eax_210;
  2401.     word32 ebp_112;
  2402.     fn004048DF(ebx, 0x00, es, ds, out eax_210, out edx_34, out ebx_35, out ebp_112, out esi_37, out edi_38, out xmm0_39);
  2403.     word32 esp_109 = fp - 0x08;
  2404.     if (eax_210 == edi_38)
  2405.     {
  2406. l004028FD:
  2407.         eax_154 = eax_210 | ~0x00;
  2408.         goto l00402900;
  2409.     }
  2410.     Mem90[0x0040F9C0:word32] = eax_210;
  2411.     Mem91[4258220:word32] = esi_37;
  2412.     word32 ecx_456 = eax_210 + 0x0800;
  2413.     while (eax_210 <u ecx_456)
  2414.     {
  2415.         Mem442[eax_210 + 0x04:byte] = 0x00;
  2416.         Mem444[eax_210 + 0x00:word32] = Mem442[eax_210 + 0x00:word32] | ~0x00;
  2417.         Mem446[eax_210 + 0x05:byte] = 0x0A;
  2418.         Mem447[eax_210 + 0x08:word32] = edi_38;
  2419.         Mem448[eax_210 + 0x24:byte] = 0x00;
  2420.         Mem449[eax_210 + 0x25:byte] = 0x0A;
  2421.         Mem450[eax_210 + 0x26:byte] = 0x0A;
  2422.         Mem451[eax_210 + 0x38:word32] = edi_38;
  2423.         Mem452[eax_210 + 0x34:byte] = 0x00;
  2424.         eax_210 = eax_210 + 0x40;
  2425.         ecx_456 = Mem452[0x0040F9C0:word32] + 0x0800;
  2426.     }
  2427.     if (Mem91[ebp_112 - 0x32 + 0x00:word16] != 0x00)
  2428.     {
  2429.         word32 eax_251 = Mem91[ebp_112 - 0x30 + 0x00:word32];
  2430.         if (eax_251 == edi_38)
  2431.             goto l00402844;
  2432.         word32 edi_255 = Mem91[eax_251 + 0x00:word32];
  2433.         Mem259[ebp_112 - 0x1C + 0x00:word32] = eax_251 + 0x04 + edi_255;
  2434.         word32 ebx_257 = eax_251 + 0x04;
  2435.         if (edi_255 >= 0x0800)
  2436.             edi_255 = 0x0800;
  2437.         Mem265[ebp_112 - 0x20 + 0x00:word32] = 0x01;
  2438.         while (Mem265[4258220:word32] < edi_255)
  2439.         {
  2440.             word32 esp_381 = esp_109 - 0x04;
  2441.             Mem382[esp_381 + 0x00:word32] = 0x40;
  2442.             Mem384[esp_381 - 0x04 + 0x00:word32] = 0x20;
  2443.             word32 edx_386;
  2444.             word32 esi_389;
  2445.             word128 xmm0_391;
  2446.             word32 eax_385;
  2447.             fn004048DF(ebx_257, edi_255, es, ds, out eax_385, out edx_386, out ebx_257, out ebp_112, out esi_389, out edi_255, out xmm0_391);
  2448.             esp_109 = esp_381 + 0x04;
  2449.             if (eax_385 == 0x00)
  2450.             {
  2451.                 edi_255 = Mem384[4258220:word32];
  2452.                 break;
  2453.             }
  2454.             word32 ecx_401 = Mem384[ebp_112 - 0x20 + 0x00:word32] * 0x04 + 0x0040F9C0;
  2455.             Mem402[ecx_401 + 0x00:word32] = eax_385;
  2456.             Mem404[4258220:word32] = Mem402[4258220:word32] + 0x20;
  2457.             word32 edx_406 = eax_385 + 0x0800;
  2458.             while (eax_385 <u edx_406)
  2459.             {
  2460.                 Mem416[eax_385 + 0x04:byte] = 0x00;
  2461.                 Mem418[eax_385 + 0x00:word32] = Mem416[eax_385 + 0x00:word32] | ~0x00;
  2462.                 Mem420[eax_385 + 0x05:byte] = 0x0A;
  2463.                 Mem422[eax_385 + 0x08:word32] = Mem420[eax_385 + 0x08:word32] & 0x00;
  2464.                 Mem425[eax_385 + 0x24:byte] = Mem422[eax_385 + 0x24:byte] & 0x80;
  2465.                 Mem427[eax_385 + 0x25:byte] = 0x0A;
  2466.                 Mem428[eax_385 + 0x26:byte] = 0x0A;
  2467.                 Mem430[eax_385 + 0x38:word32] = Mem428[eax_385 + 0x38:word32] & 0x00;
  2468.                 Mem432[eax_385 + 0x34:byte] = 0x00;
  2469.                 eax_385 = eax_385 + 0x40;
  2470.                 edx_406 = Mem432[ecx_401 + 0x00:word32] + esi_389;
  2471.             }
  2472.             Mem414[ebp_112 - 0x20 + 0x00:word32] = Mem404[ebp_112 - 0x20 + 0x00:word32] + 0x01;
  2473.         }
  2474.         Mem295[ebp_112 - 0x20 + 0x00:word32] = Mem265[ebp_112 - 0x20 + 0x00:word32] & 0x00;
  2475.         if (edi_255 > 0x00)
  2476.         {
  2477. l004027D7:
  2478.             word32 ecx_309 = Mem295[Mem295[ebp_112 - 0x1C + 0x00:word32] + 0x00:word32];
  2479.             if (ecx_309 != ~0x00 && ecx_309 != ~0x01)
  2480.             {
  2481.                 byte al_332 = Mem295[ebx_257 + 0x00:byte];
  2482.                 if ((al_332 & 0x01) == 0x00)
  2483.                     goto l00402837;
  2484.                 if ((al_332 & 0x08) == 0x00)
  2485.                 {
  2486.                     word32 esp_374 = esp_109 - 0x04;
  2487.                     Mem375[esp_374 + 0x00:word32] = ecx_309;
  2488.                     esp_109 = esp_374 + 0x04;
  2489.                     if (GetFileType(Mem375[esp_374 + 0x00:HANDLE]) == 0x00)
  2490.                         goto l00402837;
  2491.                 }
  2492.                 word32 esi_341 = Mem295[ebp_112 - 0x20 + 0x00:word32];
  2493.                 word32 esi_346 = ((esi_341 & 0x1F) << 0x06) + 0x0040F9C0[(esi_341 >> 0x05) * 0x04];
  2494.                 Mem350[esi_346 + 0x00:word32] = Mem295[Mem295[ebp_112 - 0x1C + 0x00:word32] + 0x00:word32];
  2495.                 Mem352[esi_346 + 0x04:byte] = Mem350[ebx_257 + 0x00:byte];
  2496.                 word32 esp_353 = esp_109 - 0x04;
  2497.                 Mem354[esp_353 + 0x00:word32] = 4000;
  2498.                 Mem357[esp_353 - 0x04 + 0x00:word32] = esi_346 + 0x0C;
  2499.                 word32 esi_360;
  2500.                 eax_210 = fn0040605C(ebx_257, esi_346, edi_255, out ebx_257, out ebp_112, out esi_360, out edi_255);
  2501.                 esp_109 = esp_353 + 0x04;
  2502.                 if (eax_210 == 0x00)
  2503.                     goto l004028FD;
  2504.                 Mem372[esi_360 + 0x08:word32] = Mem357[esi_360 + 0x08:word32] + 0x01;
  2505.             }
  2506. l00402837:
  2507.             Mem324[ebp_112 - 0x20 + 0x00:word32] = Mem295[ebp_112 - 0x20 + 0x00:word32] + 0x01;
  2508.             Mem327[ebp_112 - 0x1C + 0x00:word32] = Mem324[ebp_112 - 0x1C + 0x00:word32] + 0x04;
  2509.             ebx_257 = ebx_257 + 0x01;
  2510.             if (Mem327[ebp_112 - 0x20 + 0x00:word32] < edi_255)
  2511.                 goto l004027D7;
  2512.             goto l00402844;
  2513.         }
  2514.     }
  2515. l00402844:
  2516.     word32 ebx_116 = 0x00;
  2517. l00402846:
  2518.     word32 esi_130 = (ebx_116 << 0x06) + Mem91[0x0040F9C0:word32];
  2519.     word32 eax_131 = Mem91[esi_130 + 0x00:word32];
  2520.     if (eax_131 != ~0x00 && eax_131 != ~0x01)
  2521.     {
  2522.         Mem248[esi_130 + 0x04:byte] = Mem91[esi_130 + 0x04:byte] | 0x80;
  2523.         goto l004028D5;
  2524.     }
  2525.     word32 eax_164;
  2526.     Mem159[esi_130 + 0x04:byte] = 0x81;
  2527.     if (ebx_116 == 0x00)
  2528.     {
  2529.         word32 esp_232 = esp_109 - 0x04;
  2530.         Mem233[esp_232 + 0x00:word32] = ~0x09;
  2531.         eax_164 = Mem233[esp_232 + 0x00:word32];
  2532.         esp_109 = esp_232 + 0x04;
  2533.     }
  2534.     else
  2535.         eax_164 = 0x00 - (0x01 - ebx_116 == 0x00) + ~0x0A;
  2536.     word32 esp_167 = esp_109 - 0x04;
  2537.     Mem168[esp_167 + 0x00:word32] = eax_164;
  2538.     word32 eax_169 = GetStdHandle(Mem168[esp_167 + 0x00:DWORD]);
  2539.     esp_109 = esp_167 + 0x04;
  2540.     if (eax_169 != ~0x00 && eax_169 != 0x00)
  2541.     {
  2542.         Mem188[esp_167 + 0x00:word32] = eax_169;
  2543.         word32 eax_189 = GetFileType(Mem188[esp_167 + 0x00:HANDLE]);
  2544.         esp_109 = esp_167 + 0x04;
  2545.         if (eax_189 != 0x00)
  2546.         {
  2547.             Mem195[esi_130 + 0x00:word32] = eax_169;
  2548.             if ((eax_189 & 0xFF) == 0x02)
  2549.                 Mem223[esi_130 + 0x04:byte] = Mem195[esi_130 + 0x04:byte] | 0x40;
  2550.             else if ((eax_189 & 0xFF) == 0x03)
  2551.                 Mem229[esi_130 + 0x04:byte] = Mem195[esi_130 + 0x04:byte] | 0x08;
  2552.             Mem202[esp_167 + 0x00:word32] = 4000;
  2553.             Mem205[esp_167 - 0x04 + 0x00:word32] = esi_130 + 0x0C;
  2554.             word32 esi_208;
  2555.             word32 edi_209;
  2556.             eax_210 = fn0040605C(ebx_116, esi_130, eax_169, out ebx_116, out ebp_112, out esi_208, out edi_209);
  2557.             esp_109 = esp_167 + 0x04;
  2558.             if (eax_210 == 0x00)
  2559.                 goto l004028FD;
  2560.             Mem220[esi_208 + 0x08:word32] = Mem205[esi_208 + 0x08:word32] + 0x01;
  2561. l004028D5:
  2562.             ebx_116 = ebx_116 + 0x01;
  2563.             if (ebx_116 < 0x03)
  2564.                 goto l00402846;
  2565.             word32 esp_150 = esp_109 - 0x04;
  2566.             Mem151[esp_150 + 0x00:word32] = Mem91[4258220:word32];
  2567.             SetHandleCount(Mem151[esp_150 + 0x00:UINT]);
  2568.             eax_154 = 0x00;
  2569. l00402900:
  2570.             word32 ebp_66;
  2571.             word32 esi_67;
  2572.             word32 edi_68;
  2573.             word32 ebx_69;
  2574.             *ebxOut = fn00402F65(ebp_112, 0x54, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_66, out esi_67, out edi_68);
  2575.             return eax_154;
  2576.         }
  2577.     }
  2578.     Mem180[esi_130 + 0x04:byte] = Mem168[esi_130 + 0x04:byte] | 0x40;
  2579.     Mem183[esi_130 + 0x00:word32] = ~0x01;
  2580.     goto l004028D5;
  2581. }
  2582.  
  2583. word32 fn00402906(word32 dwArg00, word32 dwArg04, ptr32 & ediOut)
  2584. {
  2585.     word32 edi_11 = 0x0040B560;
  2586.     if (false)
  2587.         do
  2588.         {
  2589.             word32 eax_37 = Mem0[edi_11 + 0x00:word32];
  2590.             if (eax_37 != 0x00)
  2591.             {
  2592.                 word32 esp_50;
  2593.                 word32 esi_52;
  2594.                 word32 eax_53;
  2595.                 byte SCZO_54;
  2596.                 byte C_55;
  2597.                 byte SZO_56;
  2598.                 byte Z_57;
  2599.                 eax_37();
  2600.             }
  2601.             edi_11 = edi_11 + 0x04;
  2602.         } while (edi_11 <u 0x0040B560);
  2603.     return esi;
  2604.     word32 edi_26;
  2605.     *ediOut = dwArg00;
  2606.     return dwArg04;
  2607. }
  2608.  
  2609. word32 fn00402952(word32 ebp, word32 dwArg04)
  2610. {
  2611.     word32 eax_122;
  2612.     word32 esp_109 = fp - 0x08;
  2613.     if (TlsGetValue(Mem0[4248212:word32]) != 0x00 && Mem0[4248208:word32] != ~0x00)
  2614.     {
  2615.         word32 dwLoc10_106 = Mem0[4248212:word32];
  2616.         word32 eax_107 = TlsGetValue(dwLoc10_106);
  2617.         word32 edi_110;
  2618.         word32 ebp_111;
  2619.         word32 esi_112;
  2620.         word32 eax_113;
  2621.         byte SZO_114;
  2622.         byte C_115;
  2623.         byte Z_116;
  2624.         byte SCZO_117;
  2625.         word32 ecx_118;
  2626.         eax_107();
  2627.         if (eax_113 != 0x00)
  2628.         {
  2629.             eax_122 = Mem0[eax_113 + 0x01F8:word32];
  2630.             goto l004029B2;
  2631.         }
  2632.     }
  2633.     word32 esp_72 = esp_109 - 0x04;
  2634.     Mem73[esp_72 + 0x00:word32] = 4237444;
  2635.     word32 eax_74 = GetModuleHandleW(Mem73[esp_72 + 0x00:LPCWSTR]);
  2636.     word32 esp_75 = esp_72 + 0x04;
  2637.     if (eax_74 == 0x00)
  2638.     {
  2639.         Mem92[esp_72 + 0x00:word32] = 4237444;
  2640.         eax_74 = fn00401B6C(dwArg00);
  2641.         esp_75 = esp_72 + 0x04;
  2642.         if (eax_74 == 0x00)
  2643.             return dwArg04;
  2644.     }
  2645.     word32 esp_85 = esp_75 - 0x04;
  2646.     Mem86[esp_85 + 0x00:word32] = 0x0040A874;
  2647.     Mem88[esp_85 - 0x04 + 0x00:word32] = eax_74;
  2648.     eax_122 = GetProcAddress(Mem88[esp_85 - 0x04 + 0x00:HMODULE], Mem88[esp_85 + 0x00:LPCSTR]);
  2649.     esp_109 = esp_85 + 0x04;
  2650. l004029B2:
  2651.     if (eax_122 != 0x00)
  2652.     {
  2653.         word32 esp_51 = esp_109 - 0x04;
  2654.         Mem52[esp_51 + 0x00:word32] = dwArg04;
  2655.         word32 esp_53;
  2656.         word32 edi_54;
  2657.         word32 ebp_55;
  2658.         word32 esi_56;
  2659.         word32 eax_57;
  2660.         byte SZO_58;
  2661.         byte C_59;
  2662.         byte Z_60;
  2663.         byte SCZO_61;
  2664.         word32 ecx_62;
  2665.         eax_122();
  2666.         dwArg04 = eax_57;
  2667.     }
  2668.     return dwArg04;
  2669. }
  2670.  
  2671. word32 fn004029C4(word32 ebp, ptr32 & ebpOut, ptr32 & esiOut)
  2672. {
  2673.     *ebpOut = ebp;
  2674.     *esiOut = esi;
  2675.     return fn00402952(ebp, 0x00);
  2676. }
  2677.  
  2678. word32 fn004029CD(word32 ebp, word32 dwArg04)
  2679. {
  2680.     word32 eax_122;
  2681.     word32 esp_109 = fp - 0x08;
  2682.     if (TlsGetValue(Mem0[4248212:word32]) != 0x00 && Mem0[4248208:word32] != ~0x00)
  2683.     {
  2684.         word32 dwLoc10_106 = Mem0[4248212:word32];
  2685.         word32 eax_107 = TlsGetValue(dwLoc10_106);
  2686.         word32 edi_110;
  2687.         word32 ebp_111;
  2688.         word32 esi_112;
  2689.         word32 eax_113;
  2690.         byte SZO_114;
  2691.         byte C_115;
  2692.         byte Z_116;
  2693.         byte SCZO_117;
  2694.         word32 ecx_118;
  2695.         eax_107();
  2696.         if (eax_113 != 0x00)
  2697.         {
  2698.             eax_122 = Mem0[eax_113 + 0x01FC:word32];
  2699.             goto l00402A2D;
  2700.         }
  2701.     }
  2702.     word32 esp_72 = esp_109 - 0x04;
  2703.     Mem73[esp_72 + 0x00:word32] = 4237444;
  2704.     word32 eax_74 = GetModuleHandleW(Mem73[esp_72 + 0x00:LPCWSTR]);
  2705.     word32 esp_75 = esp_72 + 0x04;
  2706.     if (eax_74 == 0x00)
  2707.     {
  2708.         Mem92[esp_72 + 0x00:word32] = 4237444;
  2709.         eax_74 = fn00401B6C(dwArg00);
  2710.         esp_75 = esp_72 + 0x04;
  2711.         if (eax_74 == 0x00)
  2712.             return dwArg04;
  2713.     }
  2714.     word32 esp_85 = esp_75 - 0x04;
  2715.     Mem86[esp_85 + 0x00:word32] = 0x0040A8A0;
  2716.     Mem88[esp_85 - 0x04 + 0x00:word32] = eax_74;
  2717.     eax_122 = GetProcAddress(Mem88[esp_85 - 0x04 + 0x00:HMODULE], Mem88[esp_85 + 0x00:LPCSTR]);
  2718.     esp_109 = esp_85 + 0x04;
  2719. l00402A2D:
  2720.     if (eax_122 != 0x00)
  2721.     {
  2722.         word32 esp_51 = esp_109 - 0x04;
  2723.         Mem52[esp_51 + 0x00:word32] = dwArg04;
  2724.         word32 esp_53;
  2725.         word32 edi_54;
  2726.         word32 ebp_55;
  2727.         word32 esi_56;
  2728.         word32 eax_57;
  2729.         byte SZO_58;
  2730.         byte C_59;
  2731.         byte Z_60;
  2732.         byte SCZO_61;
  2733.         word32 ecx_62;
  2734.         eax_122();
  2735.         dwArg04 = eax_57;
  2736.     }
  2737.     return dwArg04;
  2738. }
  2739.  
  2740. word32 fn00402A48(word32 ebp, ptr32 & ebpOut)
  2741. {
  2742.     *ebpOut = ebp;
  2743.     word32 eax_10 = TlsGetValue(Mem0[4248212:word32]);
  2744.     word32 esi_12 = eax_10;
  2745.     if (eax_10 == 0x00)
  2746.     {
  2747.         word32 eax_28 = fn004029CD(ebp, Mem0[4252528:word32]);
  2748.         Mem33[fp - 0x08 + 0x00:word32] = eax_28;
  2749.         Mem35[fp - 0x0C + 0x00:word32] = Mem33[4248212:word32];
  2750.         TlsSetValue(Mem35[fp - 0x0C + 0x00:DWORD], Mem35[fp - 0x08 + 0x00:LPVOID]);
  2751.         esi_12 = eax_28;
  2752.     }
  2753.     return esi_12;
  2754. }
  2755.  
  2756. word32 fn00402A7C(word32 ebx, word32 ebp, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebpOut)
  2757. {
  2758.     *ebpOut = ebp;
  2759.     word32 esp_1 = fp;
  2760.     if (Mem0[4248208:word32] != ~0x00)
  2761.     {
  2762.         word32 dwLoc08_180 = Mem0[4252536:word32];
  2763.         word32 eax_181 = fn004029CD(ebp, dwLoc08_180);
  2764.         word32 eax_185;
  2765.         byte SCZO_186;
  2766.         byte Z_187;
  2767.         word32 ecx_188;
  2768.         byte SZO_189;
  2769.         byte C_190;
  2770.         byte SO_194;
  2771.         word32 ebp_195;
  2772.         bool D_198;
  2773.         word32 edx_199;
  2774.         word128 xmm0_200;
  2775.         eax_181();
  2776.         Mem202[4248208:word32] = Mem0[4248208:word32] | ~0x00;
  2777.     }
  2778.     word32 eax_37 = Mem0[4248212:word32];
  2779.     if (eax_37 != ~0x00)
  2780.     {
  2781.         word32 esp_169 = esp_1 - 0x04;
  2782.         Mem170[esp_169 + 0x00:word32] = eax_37;
  2783.         TlsFree(Mem170[esp_169 + 0x00:DWORD]);
  2784.         Mem174[4248212:word32] = Mem170[4248212:word32] | ~0x00;
  2785.         esp_1 = esp_169 + 0x04;
  2786.     }
  2787.     word32 esp_45 = esp_1 - 0x04;
  2788.     Mem46[esp_45 + 0x00:word32] = ebx;
  2789.     Mem49[esp_45 - 0x04 + 0x00:word32] = esi;
  2790.     Mem52[esp_45 - 0x08 + 0x00:word32] = edi;
  2791.     word32 ebx_117 = DeleteCriticalSection;
  2792.     word32 esi_159 = 0x0040DB70;
  2793.     word32 esp_168 = esp_45 - 0x08;
  2794.     do
  2795.     {
  2796.         word32 edi_64 = Mem52[esi_159 + 0x00:word32];
  2797.         if (edi_64 != 0x00 && Mem52[esi_159 + 0x04:word32] != 0x01)
  2798.         {
  2799.             word32 esp_150 = esp_168 - 0x04;
  2800.             Mem151[esp_150 + 0x00:word32] = edi_64;
  2801.             DeleteCriticalSection(Mem151[esp_150 + 0x00:LPCRITICAL_SECTION]);
  2802.             Mem154[esp_150 + 0x00:word32] = edi_64;
  2803.             word32 eax_155;
  2804.             word32 edx_156;
  2805.             word32 ebp_158;
  2806.             word32 edi_160;
  2807.             word128 xmm0_161;
  2808.             fn004047EB(ebx_117, esi_159, edi_64, es, ds, out eax_155, out edx_156, out ebx_117, out ebp_158, out esi_159, out edi_160, out xmm0_161);
  2809.             Mem164[esi_159 + 0x00:word32] = Mem154[esi_159 + 0x00:word32] & 0x00;
  2810.             esp_168 = esp_150 + 0x04;
  2811.         }
  2812.         esi_159 = esi_159 + 0x08;
  2813.     } while (esi_159 < 0x0040DC90);
  2814.     word32 esi_116 = 0x0040DB70;
  2815.     word32 esp_118 = esp_168 + 0x04;
  2816.     do
  2817.     {
  2818.         word32 eax_100 = Mem52[esi_116 + 0x00:word32];
  2819.         if (eax_100 != 0x00 && Mem52[esi_116 + 0x04:word32] == 0x01)
  2820.         {
  2821.             word32 esp_129 = esp_118 - 0x04;
  2822.             Mem130[esp_129 + 0x00:word32] = eax_100;
  2823.             word32 eax_132;
  2824.             byte SCZO_133;
  2825.             byte Z_134;
  2826.             word32 ecx_135;
  2827.             byte SZO_136;
  2828.             byte C_137;
  2829.             word32 edi_138;
  2830.             byte SO_141;
  2831.             word32 ebp_142;
  2832.             selector es_143;
  2833.             selector ds_144;
  2834.             bool D_145;
  2835.             word32 edx_146;
  2836.             word128 xmm0_147;
  2837.             ebx_117();
  2838.         }
  2839.         esi_116 = esi_116 + 0x08;
  2840.     } while (esi_116 < 0x0040DC90);
  2841.     return Mem52[esp_118 + 0x04:word32];
  2842. }
  2843.  
  2844. bool fn00402AB9(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  2845. {
  2846.     word32 ebp_10;
  2847.     fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B5D8, 0x0C, out ebp_10);
  2848.     Mem14[fp - 0x0C + 0x00:word32] = 4237444;
  2849.     word32 eax_115 = GetModuleHandleW(Mem14[fp - 0x0C + 0x00:LPCWSTR]);
  2850.     word32 esp_111 = fp - 0x08;
  2851.     if (eax_115 == 0x00)
  2852.     {
  2853.         Mem114[fp - 0x0C + 0x00:word32] = 4237444;
  2854.         eax_115 = fn00401B6C(dwArg00);
  2855.         esp_111 = fp - 0x08;
  2856.     }
  2857.     Mem24[ebp_10 - 0x1C + 0x00:word32] = eax_115;
  2858.     word32 esi_25 = Mem24[ebp_10 + 0x08:word32];
  2859.     Mem26[esi_25 + 0x5C:word32] = 4237304;
  2860.     Mem29[esi_25 + 0x14:word32] = 0x01;
  2861.     if (eax_115 != 0x00)
  2862.     {
  2863.         word32 esp_98 = esp_111 - 0x04;
  2864.         Mem99[esp_98 + 0x00:word32] = 0x0040A874;
  2865.         Mem101[esp_98 - 0x04 + 0x00:word32] = eax_115;
  2866.         Mem105[esi_25 + 0x01F8:word32] = GetProcAddress(Mem101[esp_98 - 0x04 + 0x00:HMODULE], Mem101[esp_98 + 0x00:LPCSTR]);
  2867.         Mem107[esp_98 + 0x00:word32] = 0x0040A8A0;
  2868.         Mem109[esp_98 - 0x04 + 0x00:word32] = Mem107[ebp_10 - 0x1C + 0x00:word32];
  2869.         Mem112[esi_25 + 0x01FC:word32] = GetProcAddress(Mem109[esp_98 - 0x04 + 0x00:HMODULE], Mem109[esp_98 + 0x00:LPCSTR]);
  2870.         ebx = GetProcAddress;
  2871.         esp_111 = esp_98 + 0x04;
  2872.     }
  2873.     Mem35[esi_25 + 0x70:word32] = 0x01;
  2874.     Mem36[esi_25 + 200:byte] = 0x43;
  2875.     Mem37[esi_25 + 331:byte] = 0x43;
  2876.     Mem38[esi_25 + 0x68:word32] = 4248864;
  2877.     word32 esp_39 = esp_111 - 0x04;
  2878.     Mem40[esp_39 + 0x00:word32] = 0x0D;
  2879.     word32 edx_44;
  2880.     word32 ebx_45;
  2881.     word128 xmm0_46;
  2882.     fn00405B56(ebx, 0x01, es, ds, dwArg00, out edx_44, out ebx_45, out xmm0_46);
  2883.     Mem51[ebp_10 - 0x04 + 0x00:word32] = Mem40[ebp_10 - 0x04 + 0x00:word32] & 0x00;
  2884.     Mem55[esp_39 + 0x00:word32] = Mem51[esi_25 + 0x68:word32];
  2885.     InterlockedIncrement(Mem55[esp_39 + 0x00:(ptr LONG)]);
  2886.     Mem58[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  2887.     fn00402B8E();
  2888.     Mem60[esp_39 + 0x00:word32] = 0x0C;
  2889.     word32 edx_61;
  2890.     word32 ebx_62;
  2891.     word128 xmm0_63;
  2892.     bool D_64 = fn00405B56(ebx_45, 0x01, es, ds, dwArg00, out edx_61, out ebx_62, out xmm0_63);
  2893.     Mem67[ebp_10 - 0x04 + 0x00:word32] = 0x01;
  2894.     word32 eax_68 = Mem67[ebp_10 + 0x0C:word32];
  2895.     Mem69[esi_25 + 0x6C:word32] = eax_68;
  2896.     if (eax_68 == 0x00)
  2897.         Mem97[esi_25 + 0x6C:word32] = Mem69[4250408:word32];
  2898.     Mem75[esp_39 + 0x00:word32] = Mem69[esi_25 + 0x6C:word32];
  2899.     word32 ebp_76;
  2900.     word32 esi_77;
  2901.     word32 edi_78;
  2902.     fn0040460F(dwArg00, out ebp_76, out esi_77, out edi_78);
  2903.     Mem82[ebp_76 - 0x04 + 0x00:word32] = ~0x01;
  2904.     fn00402B97();
  2905.     word32 ebp_86;
  2906.     word32 esi_87;
  2907.     word32 edi_88;
  2908.     word32 ebx_89;
  2909.     *ebxOut = fn00402F65(ebp_76, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_86, out esi_87, out edi_88);
  2910.     return D_64;
  2911. }
  2912.  
  2913. void fn00402B8E()
  2914. {
  2915.     fn00405A7C(0x0D);
  2916.     return;
  2917. }
  2918.  
  2919. void fn00402B97()
  2920. {
  2921.     fn00405A7C(0x0C);
  2922.     return;
  2923. }
  2924.  
  2925. bool fn00402BA0(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  2926. {
  2927.     GetLastError();
  2928.     word32 ebp_15;
  2929.     word32 eax_16 = fn00402A48(ebp, out ebp_15);
  2930.     word32 esi_19;
  2931.     word32 eax_20;
  2932.     byte SZO_21;
  2933.     byte C_22;
  2934.     byte Z_23;
  2935.     word32 ecx_24;
  2936.     word32 ebx_26;
  2937.     word32 ebp_27;
  2938.     selector es_28;
  2939.     selector ds_29;
  2940.     word32 edx_30;
  2941.     word128 xmm0_31;
  2942.     bool D_123;
  2943.     word32 edi_121;
  2944.     word32 esp_127;
  2945.     eax_16();
  2946.     word32 esi_120 = eax_20;
  2947.     if (eax_20 == 0x00)
  2948.     {
  2949.         Mem66[esp_127 - 0x04 + 0x00:word32] = 0x0214;
  2950.         Mem68[esp_127 - 0x08 + 0x00:word32] = 0x01;
  2951.         word32 eax_69;
  2952.         word32 edx_70;
  2953.         word32 ebx_71;
  2954.         word32 ebp_72;
  2955.         word32 esi_73;
  2956.         word128 xmm0_75;
  2957.         D_123 = fn004048DF(ebx_26, edi_121, es_28, ds_29, out eax_69, out edx_70, out ebx_71, out ebp_72, out esi_73, out edi_121, out xmm0_75);
  2958.         esi_120 = eax_69;
  2959.         if (eax_69 != 0x00)
  2960.         {
  2961.             Mem86[esp_127 - 0x04 + 0x00:word32] = eax_69;
  2962.             Mem88[esp_127 - 0x08 + 0x00:word32] = Mem86[4248208:word32];
  2963.             Mem90[esp_127 - 0x0C + 0x00:word32] = Mem88[4252532:word32];
  2964.             word32 eax_92 = fn004029CD(ebp_72, dwArg00);
  2965.             word32 esp_95;
  2966.             word32 edi_96;
  2967.             word32 esi_97;
  2968.             word32 eax_98;
  2969.             byte SZO_99;
  2970.             byte C_100;
  2971.             byte Z_101;
  2972.             word32 ecx_102;
  2973.             bool D_103;
  2974.             word32 ebx_104;
  2975.             word32 ebp_105;
  2976.             selector es_106;
  2977.             selector ds_107;
  2978.             word32 edx_108;
  2979.             word128 xmm0_109;
  2980.             eax_92();
  2981.             if (eax_98 != 0x00)
  2982.             {
  2983.                 Mem114[esp_95 - 0x04 + 0x00:word32] = 0x00;
  2984.                 Mem116[esp_95 - 0x08 + 0x00:word32] = esi_97;
  2985.                 word32 edx_117;
  2986.                 word32 ebx_118;
  2987.                 word32 ebp_119;
  2988.                 word128 xmm0_122;
  2989.                 D_123 = fn00402AB9(ebx_104, esi_97, edi_96, es_106, ds_107, out edx_117, out ebx_118, out ebp_119, out esi_120, out edi_121, out xmm0_122);
  2990.                 word32 eax_128 = GetCurrentThreadId();
  2991.                 Mem130[esi_120 + 0x04:word32] = Mem116[esi_120 + 0x04:word32] | ~0x00;
  2992.                 Mem133[esi_120 + 0x00:word32] = eax_128;
  2993.                 esp_127 = esp_95;
  2994.             }
  2995.             else
  2996.             {
  2997.                 Mem135[esp_95 - 0x04 + 0x00:word32] = esi_97;
  2998.                 word32 eax_136;
  2999.                 word32 edx_137;
  3000.                 word32 ebx_138;
  3001.                 word32 ebp_139;
  3002.                 word32 esi_140;
  3003.                 word128 xmm0_142;
  3004.                 D_123 = fn004047EB(ebx_104, esi_97, edi_96, es_106, ds_107, out eax_136, out edx_137, out ebx_138, out ebp_139, out esi_140, out edi_121, out xmm0_142);
  3005.                 esp_127 = esp_95;
  3006.                 esi_120 = 0x00;
  3007.             }
  3008.         }
  3009.     }
  3010.     word32 esp_50 = esp_127 - 0x04;
  3011.     Mem51[esp_50 + 0x00:word32] = edi_121;
  3012.     SetLastError(Mem51[esp_50 + 0x00:DWORD]);
  3013.     word32 edi_53;
  3014.     *ediOut = Mem51[esp_50 + 0x04:word32];
  3015.     word32 eax_55;
  3016.     *eaxOut = esi_120;
  3017.     word32 esi_56;
  3018.     *esiOut = Mem51[esp_50 + 0x08:word32];
  3019.     return D_123;
  3020. }
  3021.  
  3022. word32 fn00402C19(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & xmm0Out)
  3023. {
  3024.     word32 eax_11;
  3025.     word32 ebx_13;
  3026.     word32 ebp_14;
  3027.     word32 esi_15;
  3028.     word32 edi_16;
  3029.     word128 xmm0_17;
  3030.     word32 edx_12;
  3031.     fn00402BA0(ebx, ebp, esi, es, ds, out eax_11, out edx_12, out ebx_13, out ebp_14, out esi_15, out edi_16, out xmm0_17);
  3032.     if (eax_11 == 0x00)
  3033.     {
  3034.         Mem39[fp - 0x08 + 0x00:word32] = 0x10;
  3035.         word32 eax_40;
  3036.         word32 ebx_42;
  3037.         word32 esi_43;
  3038.         word128 xmm0_44;
  3039.         fn00401B9C(ebx_13, ebp_14, es, ds, out eax_40, out edx_12, out ebx_42, out esi_43, out xmm0_44);
  3040.     }
  3041.     return edx_12;
  3042. }
  3043.  
  3044. word32 fn00402D62(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut)
  3045. {
  3046. fn00402D62_entry:
  3047.     def ds
  3048.     def es
  3049.     def ebx
  3050.     def ebp
  3051.     def dwArg00
  3052.     esi_9 = 4237444
  3053.     eax_12 = GetModuleHandleW(4237444)
  3054.     branch eax_12 != 0x00 l00402D7D
  3055.     goto l00402D76
  3056. l00402D62:
  3057. l00402D76:
  3058.     dwLoc0C_299 = 4237444
  3059.     eax_300 = fn00401B6C(4237444)
  3060. l00402D7D:
  3061.     eax_20 = PHI(eax_12, eax_300)
  3062.     edi_22 = eax_20
  3063.     branch eax_20 == 0x00 l00402EE5
  3064. l00402D87:
  3065.     dwLoc10_100 = eax_20
  3066.     eax_101 = GetProcAddress(eax_20, 0x0040A8D0)
  3067.     dwLoc10_106 = eax_20
  3068.     Mem107[4252524:word32] = eax_101
  3069.     eax_108 = GetProcAddress(eax_20, 0x0040A8C4)
  3070.     dwLoc10_113 = eax_20
  3071.     Mem114[4252528:word32] = eax_108
  3072.     eax_115 = GetProcAddress(eax_20, 0x0040A8B8)
  3073.     dwLoc10_120 = eax_20
  3074.     Mem121[4252532:word32] = eax_115
  3075.     eax_122 = GetProcAddress(eax_20, 0x0040A8B0)
  3076.     esi_126 = TlsSetValue
  3077.     Mem127[4252536:word32] = eax_122
  3078.     branch Mem121[4252524:word32] == 0x00 || (Mem127[4252528:word32] == 0x00 || (Mem127[4252532:word32] == 0x00 || eax_122 == 0x00)) l00402DE6
  3079.     goto l00402E0A
  3080. l00402DD0:
  3081. l00402DD9:
  3082. l00402DE2:
  3083. l00402DE6:
  3084.     eax_285 = TlsGetValue
  3085.     Mem286[4252528:word32] = TlsGetValue
  3086.     eax_287 = TlsFree
  3087.     Mem288[4252524:word32] = 0x00402A3F
  3088.     Mem289[4252532:word32] = TlsSetValue
  3089.     Mem290[4252536:word32] = TlsFree
  3090. l00402E0A:
  3091.     eax_130 = TlsAlloc()
  3092.     Mem131[4248212:word32] = eax_130
  3093.     branch eax_130 == ~0x00 l00402EEA
  3094. l00402E1E:
  3095.     eax_141 = TlsSetValue(Mem0[esp + 0x00:DWORD], Mem0[esp + 0x04:LPVOID])
  3096.     branch eax_141 == 0x00 l00402EEA
  3097. l00402E2F:
  3098.     ebp_157 = fn00401E56(ebp_148, esi_140)
  3099.     esp_158 = esp_138 - 0x04
  3100.     Mem159[esp_138 - 0x04 + 0x00:word32] = Mem131[4252524:word32]
  3101.     eax_161 = fn00402952(ebp_157, dwArg00)
  3102.     esp_162 = esp_138 - 0x08
  3103.     Mem163[esp_138 - 0x08 + 0x00:word32] = Mem159[4252528:word32]
  3104.     Mem164[4252524:word32] = eax_161
  3105.     eax_165 = fn00402952(ebp_157, dwArg00)
  3106.     esp_166 = esp_138 - 0x0C
  3107.     Mem167[esp_138 - 0x0C + 0x00:word32] = Mem164[4252532:word32]
  3108.     Mem168[4252528:word32] = eax_165
  3109.     eax_169 = fn00402952(ebp_157, dwArg00)
  3110.     esp_170 = esp_138 - 0x10
  3111.     Mem171[esp_138 - 0x10 + 0x00:word32] = Mem168[4252536:word32]
  3112.     Mem172[4252532:word32] = eax_169
  3113.     eax_173 = fn00402952(ebp_157, dwArg00)
  3114.     esp_174 = esp_138
  3115.     Mem176[4252536:word32] = eax_173
  3116.     eax_179 = fn004059DA(ebx_147, out ebx_177, out ebp_178)
  3117.     branch eax_179 == 0x00 l00402EE5
  3118. l00402E80:
  3119.     esp_183 = esp_138 - 0x04
  3120.     Mem184[esp_138 - 0x04 + 0x00:word32] = 0x00402C33
  3121.     esp_185 = esp_138 - 0x08
  3122.     Mem186[esp_138 - 0x08 + 0x00:word32] = Mem184[4252524:word32]
  3123.     eax_187 = fn004029CD(ebp_178, dwArg00)
  3124.     call eax_187 (retsize: 4; depth: 4)
  3125.         uses: C_182,D_151,ds_150,dwLoc04_6,dwLoc08_8,dwLoc0C_135,dwLoc10_137,eax_187,ebp_178,ebx_177,ecx_188,edi_139,edx_152,es_149,esi_140,esp_189,SCZO_175,SZO_180,xmm0_153,Z_181
  3126.         defs: C_195,D_203,ds_202,eax_193,ebp_200,ebx_199,ecx_197,edi_191,edx_204,es_201,esi_192,esp_190,SCZO_198,SZO_194,xmm0_205,Z_196
  3127.     Mem206[4248208:word32] = eax_193
  3128.     branch eax_193 == ~0x00 l00402EE5
  3129. l00402E9D:
  3130.     esp_209 = esp_190 - 0x04
  3131.     Mem210[esp_190 - 0x04 + 0x00:word32] = 0x0214
  3132.     esp_211 = esp_190 - 0x08
  3133.     Mem212[esp_190 - 0x08 + 0x00:word32] = 0x01
  3134.     D_220 = fn004048DF(ebx_199, edi_191, es_201, ds_202, out eax_213, out edx_214, out ebx_215, out ebp_216, out esi_217, out edi_218, out xmm0_219)
  3135.     esi_221 = eax_213
  3136.     esp_223 = esp_190 - 0x04
  3137.     esp_225 = esp_190
  3138.     branch eax_213 == 0x00 l00402EE5
  3139. l00402EB1:
  3140.     esp_229 = esp_190 - 0x04
  3141.     Mem230[esp_190 - 0x04 + 0x00:word32] = eax_213
  3142.     esp_231 = esp_190 - 0x08
  3143.     Mem232[esp_190 - 0x08 + 0x00:word32] = Mem230[4248208:word32]
  3144.     esp_233 = esp_190 - 0x0C
  3145.     Mem234[esp_190 - 0x0C + 0x00:word32] = Mem232[4252532:word32]
  3146.     eax_235 = fn004029CD(ebp_216, dwArg00)
  3147.     call eax_235 (retsize: 4; depth: 4)
  3148.         uses: C_228,D_220,ds_202,dwLoc04_6,dwLoc08_8,dwLoc0C_135,dwLoc10_137,eax_235,ebp_216,ebx_215,ecx_236,edi_218,edx_214,es_201,esi_221,esp_237,SCZO_207,SZO_226,xmm0_219,Z_227
  3149.         defs: C_243,D_251,ds_250,eax_241,ebp_248,ebx_247,ecx_245,edi_239,edx_252,es_249,esi_240,esp_238,SCZO_246,SZO_242,xmm0_253,Z_244
  3150.     branch eax_241 == 0x00 l00402EE5
  3151. l00402ECA:
  3152.     esp_257 = esp_238 - 0x04
  3153.     Mem258[esp_238 - 0x04 + 0x00:word32] = 0x00
  3154.     esp_259 = esp_238 - 0x08
  3155.     Mem260[esp_238 - 0x08 + 0x00:word32] = esi_240
  3156.     fn00402AB9(ebx_247, esi_240, edi_239, es_249, ds_250, out edx_261, out ebx_262, out ebp_263, out esi_264, out edi_265, out xmm0_266)
  3157.     eax_272 = GetCurrentThreadId()
  3158.     v11_273 = Mem260[esi_264 + 0x04:word32] | ~0x00
  3159.     Mem274[esi_264 + 0x04:word32] = v11_273
  3160.     Mem276[esi_264 + 0x00:word32] = eax_272
  3161.     eax_279 = 0x01
  3162.     goto l00402EEC
  3163. l00402EE5:
  3164.     ds_78 = PHI(ds, ds_150, ds_202, ds_202, ds_250)
  3165.     es_79 = PHI(es, es_149, es_201, es_201, es_249)
  3166.     ebx_83 = PHI(ebx, ebx_177, ebx_199, ebx_215, ebx_247)
  3167.     ebp_84 = PHI(ebp, ebp_178, ebp_200, ebp_216, ebp_248)
  3168.     edi_91 = PHI(edi_22, edi_139, edi_191, edi_218, edi_239)
  3169.     esi_92 = PHI(esi_9, esi_140, esi_192, esi_221, esi_240)
  3170.     ebx_95 = fn00402A7C(ebx_83, ebp_84, esi_92, edi_91, es_79, ds_78, out ebp_94)
  3171. l00402EEA:
  3172.     ebx_65 = PHI(ebx_95, ebx, ebx_147)
  3173.     ebp_66 = PHI(ebp_94, ebp, ebp_148)
  3174.     eax_73 = 0x00
  3175. l00402EEC:
  3176.     ebx_42 = PHI(ebx_65, ebx_262)
  3177.     ebp_43 = PHI(ebp_66, ebp_263)
  3178.     eax_48 = PHI(eax_73, eax_279)
  3179.     return eax_48
  3180. fn00402D62_exit:
  3181.     use ebx_42 (=> ebxOut)
  3182.     use ebp_43 (=> ebpOut)
  3183. }
  3184.  
  3185. word32 fn00402EEF(word32 dwArg04)
  3186. {
  3187.     word32 eax_20 = HeapCreate((word32) (dwArg04 == 0x00), 0x1000, 0x00);
  3188.     Mem23[4252540:word32] = eax_20;
  3189.     if (eax_20 != 0x00)
  3190.     {
  3191.         Mem40[0x0040F9A8:word32] = 0x01;
  3192.         return 0x01;
  3193.     }
  3194.     else
  3195.         return eax_20;
  3196. }
  3197.  
  3198. word32 fn00402F20(word32 ebx, word32 esi, word32 edi, word32 dwArg00, word32 dwArg04, word32 dwArg08, ptr32 & ebpOut)
  3199. {
  3200.     word32 esp_13 = fp - 0x08 - dwArg08;
  3201.     Mem16[esp_13 - 0x04 + 0x00:word32] = ebx;
  3202.     Mem19[esp_13 - 0x08 + 0x00:word32] = esi;
  3203.     Mem22[esp_13 - 0x0C + 0x00:word32] = edi;
  3204.     Mem32[esp_13 - 0x10 + 0x00:word32] = Mem22[0x0040DB60:word32] ^ fp + 0x08;
  3205.     Mem36[esp_13 - 0x14 + 0x00:word32] = dwArg00;
  3206.     Mem41[fs:0x00:word32] = fp - 0x08;
  3207.     word32 ebp_12;
  3208.     *ebpOut = fp + 0x08;
  3209.     return fp - 0x08;
  3210. }
  3211.  
  3212. word32 fn00402F65(word32 ebp, word32 dwArg00, word32 dwArg04, word32 dwArg08, word32 dwArg0C, word32 dwArg10, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  3213. {
  3214.     Mem5[fs:0x00:word32] = Mem0[ebp - 0x10 + 0x00:word32];
  3215.     word32 ebp_22;
  3216.     *ebpOut = Mem5[ebp + 0x00:word32];
  3217.     Mem25[ebp + 0x00:word32] = dwArg00;
  3218.     word32 edi_14;
  3219.     *ediOut = dwArg08;
  3220.     word32 esi_17;
  3221.     *esiOut = dwArg0C;
  3222.     return dwArg10;
  3223. }
  3224.  
  3225. void fn0040310C()
  3226. {
  3227.     word32 eax_10 = Mem0[0x0040DB60:word32];
  3228.     if (eax_10 != 0xBB40E64E && (eax_10 & 0xFFFF0000) != 0x00)
  3229.         Mem95[0x0040DB64:word32] = ~eax_10;
  3230.     else
  3231.     {
  3232.         GetSystemTimeAsFileTime(fp - 0x0C);
  3233.         word32 esi_59 = dwLoc08 & 0x00 ^ dwLoc0C & 0x00 ^ GetCurrentProcessId() ^ GetCurrentThreadId() ^ GetTickCount();
  3234.         QueryPerformanceCounter(fp - 0x14);
  3235.         word32 esi_69 = esi_59 ^ (dwLoc10 ^ dwLoc14);
  3236.         if (esi_69 == 0xBB40E64E)
  3237.             esi_69 = ~0x44BF19B0;
  3238.         else if ((esi_69 & 0xFFFF0000) == 0x00)
  3239.             esi_69 = esi_69 | esi_69 << 0x10;
  3240.         Mem77[0x0040DB60:word32] = esi_69;
  3241.         Mem79[0x0040DB64:word32] = ~esi_69;
  3242.     }
  3243.     return;
  3244. }
  3245.  
  3246. word32 fn004031A2(word32 ebx, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  3247. {
  3248.     word32 eax_111;
  3249.     word32 ebx_31;
  3250.     word128 xmm0_32;
  3251.     word32 eax_33 = fn004074B5(ebx, dwArg04, es, ds, dwArg04, out ebx_31, out xmm0_32);
  3252.     word32 edi_34 = edi | ~0x00;
  3253.     if (eax_33 != (edi | ~0x00))
  3254.     {
  3255.         Mem87[fp - 0x18 + 0x00:word32] = Mem0[fp + 0x10:word32];
  3256.         Mem90[fp - 0x1C + 0x00:word32] = fp - 0x08;
  3257.         Mem92[fp - 0x20 + 0x00:word32] = Mem90[fp - 0x0C + 0x00:word32];
  3258.         Mem94[fp - 0x24 + 0x00:word32] = eax_33;
  3259.         word32 eax_95 = SetFilePointer(Mem94[fp - 0x24 + 0x00:HANDLE], Mem94[fp - 0x20 + 0x00:LONG], Mem94[fp - 0x1C + 0x00:PLONG], Mem94[fp - 0x18 + 0x00:DWORD]);
  3260.         Mem97[fp - 0x0C + 0x00:word32] = eax_95;
  3261.         if (eax_95 == (edi | ~0x00))
  3262.         {
  3263.             word32 eax_114 = GetLastError();
  3264.             if (eax_114 != 0x00)
  3265.             {
  3266.                 Mem119[fp - 0x18 + 0x00:word32] = eax_114;
  3267.                 word32 edx_120;
  3268.                 word32 ebx_121;
  3269.                 word128 xmm0_122;
  3270.                 fn004019A5(ebx_31, fp - 0x04, dwArg04, es, ds, out edx_120, out ebx_121, out xmm0_122);
  3271. l004031D3:
  3272.                 eax_111 = edi_34;
  3273.                 word32 edx_74;
  3274.                 *edxOut = edi_34;
  3275.                 return eax_111;
  3276.             }
  3277.         }
  3278.         word32 eax_106 = 0x0040F9C0[(dwArg04 >> 0x05) * 0x04] + 0x04 + ((dwArg04 & 0x1F) << 0x06);
  3279.         Mem108[eax_106 + 0x00:byte] = Mem97[eax_106 + 0x00:byte] & ~0x02;
  3280.         eax_111 = Mem108[fp - 0x0C + 0x00:word32];
  3281.         word32 edx_112;
  3282.         *edxOut = Mem108[fp - 0x08 + 0x00:word32];
  3283.         return eax_111;
  3284.     }
  3285.     else
  3286.     {
  3287.         word32 eax_75;
  3288.         word32 edx_76;
  3289.         word32 ebx_77;
  3290.         word32 ebp_78;
  3291.         word32 esi_79;
  3292.         word128 xmm0_81;
  3293.         fn0040197F(ebx_31, fp - 0x04, dwArg04, es, ds, out eax_75, out edx_76, out ebx_77, out ebp_78, out esi_79, out edi_34, out xmm0_81);
  3294.         Mem83[eax_75 + 0x00:word32] = 0x09;
  3295.         goto l004031D3;
  3296.     }
  3297. }
  3298.  
  3299. word32 fn00403227(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  3300. {
  3301.     word32 ebp_144;
  3302.     word32 esi_114;
  3303.     word32 eax_168;
  3304.     word32 ebp_10;
  3305.     fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B628, 0x14, out ebp_10);
  3306.     Mem13[ebp_10 - 0x24 + 0x00:word32] = esi | ~0x00;
  3307.     Mem14[ebp_10 - 0x20 + 0x00:word32] = esi | ~0x00;
  3308.     word32 eax_15 = Mem14[ebp_10 + 0x08:word32];
  3309.     if (eax_15 == ~0x01)
  3310.     {
  3311.         word32 edx_59;
  3312.         word32 ebx_60;
  3313.         word32 ebp_61;
  3314.         word32 esi_62;
  3315.         word32 edi_63;
  3316.         word128 xmm0_64;
  3317.         word32 eax_65 = fn00401992(ebx, ebp_10, esi | ~0x00, es, ds, out edx_59, out ebx_60, out ebp_61, out esi_62, out edi_63, out xmm0_64);
  3318.         Mem67[eax_65 + 0x00:word32] = Mem14[eax_65 + 0x00:word32] & 0x00;
  3319.         word32 eax_70;
  3320.         word32 edx_71;
  3321.         word32 ebx_72;
  3322.         word32 edi_75;
  3323.         word128 xmm0_76;
  3324.         fn0040197F(ebx_60, ebp_61, esi_62, es, ds, out eax_70, out edx_71, out ebx_72, out ebp_144, out esi_114, out edi_75, out xmm0_76);
  3325.         Mem78[eax_70 + 0x00:word32] = 0x09;
  3326.     }
  3327.     else
  3328.     {
  3329.         if (eax_15 >= 0x00 && eax_15 <u Mem14[4258220:word32])
  3330.         {
  3331.             word32 ebx_123 = (eax_15 >> 0x05) * 0x04 + 0x0040F9C0;
  3332.             word32 esi_126 = (eax_15 & 0x1F) << 0x06;
  3333.             if (((int32) Mem14[Mem14[ebx_123 + 0x00:word32] + 0x04 + esi_126:byte] & 0x01) == 0x00)
  3334.             {
  3335.                 word32 edx_133;
  3336.                 word32 ebx_134;
  3337.                 word32 ebp_135;
  3338.                 word32 esi_136;
  3339.                 word32 edi_137;
  3340.                 word128 xmm0_138;
  3341.                 word32 eax_139 = fn00401992(ebx_123, ebp_10, esi_126, es, ds, out edx_133, out ebx_134, out ebp_135, out esi_136, out edi_137, out xmm0_138);
  3342.                 Mem140[eax_139 + 0x00:word32] = edi_137;
  3343.                 word32 eax_141;
  3344.                 word32 edx_142;
  3345.                 word32 ebx_143;
  3346.                 word32 esi_145;
  3347.                 word32 edi_146;
  3348.                 word128 xmm0_147;
  3349.                 fn0040197F(ebx_134, ebp_135, esi_136, es, ds, out eax_141, out edx_142, out ebx_143, out ebp_144, out esi_145, out edi_146, out xmm0_147);
  3350.                 Mem149[eax_141 + 0x00:word32] = 0x09;
  3351.                 Mem151[fp - 0x0C + 0x00:word32] = edi_146;
  3352.                 Mem153[fp - 0x10 + 0x00:word32] = edi_146;
  3353.                 Mem155[fp - 0x14 + 0x00:word32] = edi_146;
  3354.                 Mem157[fp - 0x18 + 0x00:word32] = edi_146;
  3355.                 Mem159[fp - 0x1C + 0x00:word32] = edi_146;
  3356.                 word32 edx_160;
  3357.                 word32 ebx_161;
  3358.                 word32 esi_162;
  3359.                 fn00401917(es, ds, xmm0_147, out edx_160, out ebx_161, out esi_162);
  3360.                 word32 edx_165;
  3361.                 *edxOut = edx_160 | ~0x00;
  3362.                 eax_168 = edx_160 | ~0x00;
  3363.             }
  3364.             else
  3365.             {
  3366.                 Mem170[fp - 0x0C + 0x00:word32] = eax_15;
  3367.                 word32 ebx_171;
  3368.                 word32 esi_173;
  3369.                 word32 edi_174;
  3370.                 fn0040752C(ebx_123, esi_126, 0x00, es, ds, out ebx_171, out ebp_144, out esi_173, out edi_174);
  3371.                 Mem178[ebp_144 - 0x04 + 0x00:word32] = edi_174;
  3372.                 if ((Mem178[Mem178[ebx_171 + 0x00:word32] + 0x04 + esi_173:byte] & 0x01) != 0x00)
  3373.                 {
  3374.                     Mem197[fp - 0x0C + 0x00:word32] = Mem178[ebp_144 + 0x14:word32];
  3375.                     Mem199[fp - 0x10 + 0x00:word32] = Mem197[ebp_144 + 0x10:word32];
  3376.                     Mem201[fp - 0x14 + 0x00:word32] = Mem199[ebp_144 + 0x0C:word32];
  3377.                     Mem203[fp - 0x18 + 0x00:word32] = Mem201[ebp_144 + 0x08:word32];
  3378.                     word32 edx_204;
  3379.                     word32 ebx_205;
  3380.                     word128 xmm0_206;
  3381.                     Mem210[ebp_144 - 0x24 + 0x00:word32] = fn004031A2(ebx_171, es, ds, dwArg00, dwArg04, dwArg08, out edx_204, out ebx_205, out xmm0_206);
  3382.                     Mem211[ebp_144 - 0x20 + 0x00:word32] = edx_204;
  3383.                 }
  3384.                 else
  3385.                 {
  3386.                     word32 eax_213;
  3387.                     word32 edx_214;
  3388.                     word32 ebx_215;
  3389.                     word32 ebp_216;
  3390.                     word32 esi_217;
  3391.                     word32 edi_218;
  3392.                     word128 xmm0_219;
  3393.                     fn0040197F(ebx_171, ebp_144, esi_173, es, ds, out eax_213, out edx_214, out ebx_215, out ebp_216, out esi_217, out edi_218, out xmm0_219);
  3394.                     Mem221[eax_213 + 0x00:word32] = 0x09;
  3395.                     word32 edx_222;
  3396.                     word32 ebx_223;
  3397.                     word32 esi_225;
  3398.                     word32 edi_226;
  3399.                     word128 xmm0_227;
  3400.                     word32 eax_228 = fn00401992(ebx_215, ebp_216, esi_217, es, ds, out edx_222, out ebx_223, out ebp_144, out esi_225, out edi_226, out xmm0_227);
  3401.                     Mem229[eax_228 + 0x00:word32] = edi_226;
  3402.                     Mem231[ebp_144 - 0x24 + 0x00:word32] = Mem229[ebp_144 - 0x24 + 0x00:word32] | ~0x00;
  3403.                     Mem234[ebp_144 - 0x20 + 0x00:word32] = Mem231[ebp_144 - 0x20 + 0x00:word32] | ~0x00;
  3404.                 }
  3405.                 Mem193[ebp_144 - 0x04 + 0x00:word32] = ~0x01;
  3406.                 fn00403336(ebp_144);
  3407.                 eax_168 = Mem193[ebp_144 - 0x24 + 0x00:word32];
  3408.                 word32 edx_195;
  3409.                 *edxOut = Mem193[ebp_144 - 0x20 + 0x00:word32];
  3410.             }
  3411. l00403330:
  3412.             word32 ebp_34;
  3413.             word32 esi_35;
  3414.             word32 edi_36;
  3415.             fn00402F65(ebp_144, 0x14, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_34, out esi_35, out edi_36);
  3416.             return eax_168;
  3417.         }
  3418.         word32 edx_85;
  3419.         word32 ebx_86;
  3420.         word32 ebp_87;
  3421.         word32 esi_88;
  3422.         word32 edi_89;
  3423.         word128 xmm0_90;
  3424.         word32 eax_91 = fn00401992(ebx, ebp_10, esi | ~0x00, es, ds, out edx_85, out ebx_86, out ebp_87, out esi_88, out edi_89, out xmm0_90);
  3425.         Mem92[eax_91 + 0x00:word32] = edi_89;
  3426.         word32 eax_93;
  3427.         word32 edx_94;
  3428.         word32 ebx_95;
  3429.         word32 esi_97;
  3430.         word32 edi_98;
  3431.         word128 xmm0_99;
  3432.         fn0040197F(ebx_86, ebp_87, esi_88, es, ds, out eax_93, out edx_94, out ebx_95, out ebp_144, out esi_97, out edi_98, out xmm0_99);
  3433.         Mem101[eax_93 + 0x00:word32] = 0x09;
  3434.         Mem103[fp - 0x0C + 0x00:word32] = edi_98;
  3435.         Mem105[fp - 0x10 + 0x00:word32] = edi_98;
  3436.         Mem107[fp - 0x14 + 0x00:word32] = edi_98;
  3437.         Mem109[fp - 0x18 + 0x00:word32] = edi_98;
  3438.         Mem111[fp - 0x1C + 0x00:word32] = edi_98;
  3439.         word32 edx_112;
  3440.         word32 ebx_113;
  3441.         fn00401917(es, ds, xmm0_99, out edx_112, out ebx_113, out esi_114);
  3442.     }
  3443.     eax_168 = esi_114;
  3444.     word32 edx_55;
  3445.     *edxOut = esi_114;
  3446.     goto l00403330;
  3447. }
  3448.  
  3449. void fn00403336(word32 ebp)
  3450. {
  3451.     fn004075CC(Mem0[ebp + 0x08:word32]);
  3452.     return;
  3453. }
  3454.  
  3455. word32 fn00403340(word32 edx, word32 ebx, word32 ebp, word32 esi, word32 edi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & ebpOut, ptr32 & xmm0Out)
  3456. {
  3457.     *xmm0Out = xmm0;
  3458.     word32 eax_121;
  3459.     fn004077F0(6884, dwLoc08);
  3460.     Mem23[fp - 0x04 + 0x00:word32] = esi;
  3461.     word32 edi_102 = edi;
  3462.     word32 ebp_100 = fp - 0x04;
  3463.     word32 esp_120 = fp - 0x04;
  3464.     if (dwArg0C == 0x00)
  3465.     {
  3466.         eax_121 = 0x00;
  3467.         goto l00403A66;
  3468.     }
  3469.     if (dwArg08 == 0x00)
  3470.     {
  3471.         word32 edx_89;
  3472.         word32 ebx_90;
  3473.         word32 ebp_91;
  3474.         word32 esi_92;
  3475.         word32 edi_93;
  3476.         word128 xmm0_94;
  3477.         word32 eax_95 = fn00401992(ebx, fp - 0x04, 0x00, es, ds, out edx_89, out ebx_90, out ebp_91, out esi_92, out edi_93, out xmm0_94);
  3478.         Mem96[eax_95 + 0x00:word32] = esi_92;
  3479.         word32 eax_97;
  3480.         word32 edx_98;
  3481.         word32 ebx_99;
  3482.         word32 esi_101;
  3483.         word128 xmm0_103;
  3484.         fn0040197F(ebx_90, ebp_91, esi_92, es, ds, out eax_97, out edx_98, out ebx_99, out ebp_100, out esi_101, out edi_102, out xmm0_103);
  3485.         Mem106[fp - 0x08 + 0x00:word32] = esi_101;
  3486.         Mem108[fp - 0x0C + 0x00:word32] = esi_101;
  3487.         Mem110[fp - 0x10 + 0x00:word32] = esi_101;
  3488.         Mem112[fp - 0x14 + 0x00:word32] = esi_101;
  3489.         Mem114[fp - 0x18 + 0x00:word32] = esi_101;
  3490.         Mem115[eax_97 + 0x00:word32] = 22;
  3491.         esp_120 = fp - 0x04;
  3492.         word32 esi_118;
  3493.         eax_121 = fn00401917(es, ds, xmm0_103, out edx, out ebx, out esi_118) | ~0x00;
  3494.         goto l00403A66;
  3495.     }
  3496.     word32 esp_1004;
  3497.     word32 eax_1358;
  3498.     Mem128[fp - 0x08 + 0x00:word32] = ebx;
  3499.     Mem130[fp - 0x0C + 0x00:word32] = edi;
  3500.     word32 esi_1025 = (dwArg04 >> 0x05) * 0x04 + 0x0040F9C0;
  3501.     word32 edi_139 = (dwArg04 & 0x1F) << 0x06;
  3502.     word32 eax_140 = Mem130[esi_1025 + 0x00:word32] + edi_139;
  3503.     byte bl_146 = Mem130[eax_140 + 0x24:byte] * 0x02 >> 0x01;
  3504.     word32 esp_129 = fp - 0x0C;
  3505.     word32 ebx_1313 = DPB(ebx, bl_146, 0);
  3506.     if ((bl_146 == 0x02 || bl_146 == 0x01) && ((byte) (~dwArg0C) & 0x01) == 0x00)
  3507.     {
  3508.         word32 edx_1325;
  3509.         word32 ebx_1326;
  3510.         word32 ebp_1327;
  3511.         word32 esi_1328;
  3512.         word32 edi_1329;
  3513.         word128 xmm0_1330;
  3514.         Mem1335[fn00401992(ebx_1313, fp - 0x04, esi_1025, es, ds, out edx_1325, out ebx_1326, out ebp_1327, out esi_1328, out edi_1329, out xmm0_1330) + 0x00:word32] = 0x00;
  3515.         word32 eax_1336;
  3516.         word32 edx_1337;
  3517.         word32 ebx_1338;
  3518.         word32 esi_1340;
  3519.         word32 edi_1341;
  3520.         word128 xmm0_1342;
  3521.         fn0040197F(ebx_1326, ebp_1327, 0x00, es, ds, out eax_1336, out edx_1337, out ebx_1338, out ebp_100, out esi_1340, out edi_1341, out xmm0_1342);
  3522.         Mem1345[fp - 0x10 + 0x00:word32] = esi_1340;
  3523.         Mem1347[fp - 0x14 + 0x00:word32] = esi_1340;
  3524.         Mem1349[fp - 0x18 + 0x00:word32] = esi_1340;
  3525.         Mem1351[fp - 0x1C + 0x00:word32] = esi_1340;
  3526.         Mem1353[fp - 0x20 + 0x00:word32] = esi_1340;
  3527.         Mem1354[eax_1336 + 0x00:word32] = 22;
  3528.         word32 ebx_1356;
  3529.         word32 esi_1357;
  3530.         eax_1358 = fn00401917(es, ds, xmm0_1342, out edx, out ebx_1356, out esi_1357);
  3531.         esp_1004 = fp - 0x0C;
  3532.         goto l00403A53;
  3533.     }
  3534.     if ((Mem130[eax_140 + 0x04:byte] & 0x20) != 0x00)
  3535.     {
  3536.         Mem1305[fp - 0x10 + 0x00:word32] = 0x02;
  3537.         Mem1307[fp - 0x14 + 0x00:word32] = 0x00;
  3538.         Mem1309[fp - 0x18 + 0x00:word32] = 0x00;
  3539.         Mem1311[fp - 0x1C + 0x00:word32] = dwArg04;
  3540.         word32 edx_1312;
  3541.         word128 xmm0_1314;
  3542.         fn004031A2(ebx_1313, es, ds, dwArg00, dwArg04, dwArg08, out edx_1312, out ebx_1313, out xmm0_1314);
  3543.         esp_129 = fp - 0x0C;
  3544.     }
  3545.     word32 ecx_409;
  3546.     word32 esp_215 = esp_129 - 0x04;
  3547.     Mem216[esp_215 + 0x00:word32] = Mem130[fp + 0x04:word32];
  3548.     esp_1004 = esp_215 + 0x04;
  3549.     word128 xmm0_220;
  3550.     word32 ebx_1022;
  3551.     if (fn00403B98(ebx_1313, esi_1025, es, ds, dwArg00, out edx, out ebx_1022, out xmm0_220) != 0x00)
  3552.     {
  3553.         word32 eax_937 = Mem216[esi_1025 + 0x00:word32];
  3554.         if ((Mem216[edi_139 + 0x04 + eax_937:byte] & 0x80) != 0x00)
  3555.         {
  3556.             word128 xmm0_944;
  3557.             edx = fn00402C19(ebx_1022, fp - 0x04, esi_1025, es, ds, out ebx_1022, out ebp_100, out xmm0_944);
  3558.             word32 ecx_954 = (word32) (Mem216[Mem216[eax_937 + 0x6C:word32] + 0x14:word32] == 0x00);
  3559.             Mem956[esp_215 + 0x00:word32] = ebp_100 + ~0x1AE3;
  3560.             Mem959[esp_215 - 0x04 + 0x00:word32] = Mem956[edi_139 + Mem956[esi_1025 + 0x00:word32]:word32];
  3561.             Mem960[ebp_100 + ~0x1ADF:word32] = ecx_954;
  3562.             esp_1004 = esp_215 + 0x04;
  3563.             if (GetConsoleMode(Mem960[esp_215 - 0x04 + 0x00:HANDLE], Mem960[esp_215 + 0x00:LPDWORD]) != 0x00)
  3564.             {
  3565.                 ecx_409 = 0x00;
  3566.                 if (Mem960[ebp_100 + ~0x1ADF:word32] != 0x00 && bl_146 == 0x00)
  3567.                 {
  3568. l004036D7:
  3569.                     word32 eax_413 = Mem216[esi_1025 + 0x00:word32] + edi_139;
  3570.                     if ((Mem216[eax_413 + 0x04:byte] & 0x80) != 0x00)
  3571.                     {
  3572.                         word32 eax_420 = Mem216[ebp_100 + ~0x1ACB:word32];
  3573.                         Mem424[ebp_100 + ~0x1ABF:word32] = ecx_409;
  3574.                         if (bl_146 == 0x00)
  3575.                         {
  3576.                             Mem428[ebp_100 + 4294960444:word32] = eax_420;
  3577.                             if (Mem428[ebp_100 + 0x10:word32] <=u ecx_409)
  3578.                                 goto l00403A28;
  3579.                             while (true)
  3580.                             {
  3581.                                 word32 ecx_443 = Mem428[ebp_100 + 4294960444:word32];
  3582.                                 Mem445[ebp_100 + ~0x1ABB:word32] = Mem428[ebp_100 + ~0x1ABB:word32] & 0x00;
  3583.                                 word32 ecx_447 = ecx_443 - Mem445[ebp_100 + ~0x1ACB:word32];
  3584.                                 word32 eax_450 = ebp_100 + ~0x1AB7;
  3585.                                 if (ecx_447 <u Mem445[ebp_100 + 0x10:word32])
  3586.                                 {
  3587.                                     word32 edx_513 = Mem445[ebp_100 + 4294960444:word32];
  3588.                                     Mem515[ebp_100 + 4294960444:word32] = Mem445[ebp_100 + 4294960444:word32] + 0x01;
  3589.                                     byte dl_516 = Mem515[edx_513 + 0x00:byte];
  3590.                                     edx = DPB(edx_513, dl_516, 0);
  3591.                                     ecx_447 = ecx_447 + 0x01;
  3592.                                     if (dl_516 == 0x0A)
  3593.                                     {
  3594.                                         Mem536[ebp_100 + ~0x1ACF:word32] = Mem515[ebp_100 + ~0x1ACF:word32] + 0x01;
  3595.                                         Mem537[eax_450 + 0x00:byte] = 0x0D;
  3596.                                         Mem543[ebp_100 + ~0x1ABB:word32] = Mem537[ebp_100 + ~0x1ABB:word32] + 0x01;
  3597.                                         eax_450 = eax_450 + 0x01;
  3598.                                     }
  3599.                                     Mem526[eax_450 + 0x00:byte] = dl_516;
  3600.                                     Mem532[ebp_100 + ~0x1ABB:word32] = Mem526[ebp_100 + ~0x1ABB:word32] + 0x01;
  3601.                                     eax_450 = eax_450 + 0x01;
  3602.                                     if (Mem532[ebp_100 + ~0x1ABB:word32] <u 0x13FF)
  3603.                                         goto l00403729;
  3604.                                 }
  3605.                                 word32 esp_481 = esp_1004 - 0x04;
  3606.                                 Mem482[esp_481 + 0x00:word32] = 0x00;
  3607.                                 Mem485[esp_481 - 0x04 + 0x00:word32] = ebp_100 + ~0x1AD3;
  3608.                                 ebx_1022 = eax_450 - (ebp_100 + ~0x1AB7);
  3609.                                 Mem487[esp_481 - 0x08 + 0x00:word32] = ebx_1022;
  3610.                                 Mem490[esp_481 - 0x0C + 0x00:word32] = ebp_100 + ~0x1AB7;
  3611.                                 Mem493[esp_481 - 0x10 + 0x00:word32] = Mem490[edi_139 + Mem490[esi_1025 + 0x00:word32]:word32];
  3612.                                 esp_1004 = esp_481 + 0x04;
  3613.                                 if (WriteFile(Mem493[esp_481 - 0x10 + 0x00:HANDLE], Mem493[esp_481 - 0x0C + 0x00:LPCVOID], Mem493[esp_481 - 0x08 + 0x00:DWORD], Mem493[esp_481 - 0x04 + 0x00:LPDWORD], Mem493[esp_481 + 0x00:LPOVERLAPPED]) == 0x00)
  3614.                                     break;
  3615.                                 word32 eax_500 = Mem493[ebp_100 + ~0x1AD3:word32];
  3616.                                 Mem503[ebp_100 + 4294960440:word32] = Mem493[ebp_100 + 4294960440:word32] + eax_500;
  3617.                                 if (eax_500 < ebx_1022)
  3618.                                     goto l004039E3;
  3619.                                 if (Mem503[ebp_100 + 4294960444:word32] - Mem503[ebp_100 + ~0x1ACB:word32] >=u Mem503[ebp_100 + 0x10:word32])
  3620.                                     goto l004039E3;
  3621.                                 esi_1025 = Mem503[ebp_100 + 4294960424:word32];
  3622.                             }
  3623.                             goto l004039D7;
  3624.                         }
  3625.                         Mem545[ebp_100 + ~0x1ABB:word32] = eax_420;
  3626.                         if (bl_146 == 0x02)
  3627.                         {
  3628.                             if (Mem545[ebp_100 + 0x10:word32] <=u ecx_409)
  3629.                                 goto l00403A28;
  3630.                             while (true)
  3631.                             {
  3632.                                 word32 ecx_562 = Mem545[ebp_100 + ~0x1ABB:word32];
  3633.                                 Mem564[ebp_100 + 4294960444:word32] = Mem545[ebp_100 + 4294960444:word32] & 0x00;
  3634.                                 word32 ecx_566 = ecx_562 - Mem564[ebp_100 + ~0x1ACB:word32];
  3635.                                 word32 eax_569 = ebp_100 + ~0x1AB7;
  3636.                                 if (ecx_566 <u Mem564[ebp_100 + 0x10:word32])
  3637.                                 {
  3638.                                     word32 edx_635 = Mem564[ebp_100 + ~0x1ABB:word32];
  3639.                                     Mem637[ebp_100 + ~0x1ABB:word32] = Mem564[ebp_100 + ~0x1ABB:word32] + 0x02;
  3640.                                     edx = (word32) Mem637[edx_635 + 0x00:word16];
  3641.                                     word16 dx_641 = (word16) edx;
  3642.                                     ecx_566 = ecx_566 + 0x02;
  3643.                                     if (dx_641 == 0x0A)
  3644.                                     {
  3645.                                         Mem662[ebp_100 + ~0x1ACF:word32] = Mem637[ebp_100 + ~0x1ACF:word32] + 0x02;
  3646.                                         word32 esp_663 = esp_1004 - 0x04;
  3647.                                         Mem664[esp_663 + 0x00:word32] = 0x0D;
  3648.                                         Mem668[eax_569 + 0x00:word16] = (word16) Mem664[esp_663 + 0x00:word32];
  3649.                                         Mem675[ebp_100 + 4294960444:word32] = Mem668[ebp_100 + 4294960444:word32] + 0x02;
  3650.                                         esp_1004 = esp_663 + 0x04;
  3651.                                         eax_569 = eax_569 + 0x02;
  3652.                                     }
  3653.                                     Mem652[ebp_100 + 4294960444:word32] = Mem637[ebp_100 + 4294960444:word32] + 0x02;
  3654.                                     Mem653[eax_569 + 0x00:word16] = dx_641;
  3655.                                     eax_569 = eax_569 + 0x02;
  3656.                                     if (Mem653[ebp_100 + 4294960444:word32] <u 5118)
  3657.                                         goto l004037FC;
  3658.                                 }
  3659.                                 word32 esp_603 = esp_1004 - 0x04;
  3660.                                 Mem604[esp_603 + 0x00:word32] = 0x00;
  3661.                                 Mem607[esp_603 - 0x04 + 0x00:word32] = ebp_100 + ~0x1AD3;
  3662.                                 ebx_1022 = eax_569 - (ebp_100 + ~0x1AB7);
  3663.                                 Mem609[esp_603 - 0x08 + 0x00:word32] = ebx_1022;
  3664.                                 Mem612[esp_603 - 0x0C + 0x00:word32] = ebp_100 + ~0x1AB7;
  3665.                                 Mem615[esp_603 - 0x10 + 0x00:word32] = Mem612[edi_139 + Mem612[esi_1025 + 0x00:word32]:word32];
  3666.                                 esp_1004 = esp_603 + 0x04;
  3667.                                 if (WriteFile(Mem615[esp_603 - 0x10 + 0x00:HANDLE], Mem615[esp_603 - 0x0C + 0x00:LPCVOID], Mem615[esp_603 - 0x08 + 0x00:DWORD], Mem615[esp_603 - 0x04 + 0x00:LPDWORD], Mem615[esp_603 + 0x00:LPOVERLAPPED]) == 0x00)
  3668.                                     break;
  3669.                                 word32 eax_622 = Mem615[ebp_100 + ~0x1AD3:word32];
  3670.                                 Mem625[ebp_100 + 4294960440:word32] = Mem615[ebp_100 + 4294960440:word32] + eax_622;
  3671.                                 if (eax_622 < ebx_1022)
  3672.                                     goto l004039E3;
  3673.                                 if (Mem625[ebp_100 + ~0x1ABB:word32] - Mem625[ebp_100 + ~0x1ACB:word32] >=u Mem625[ebp_100 + 0x10:word32])
  3674.                                     goto l004039E3;
  3675.                                 esi_1025 = Mem625[ebp_100 + 4294960424:word32];
  3676.                             }
  3677. l004039D7:
  3678.                             Mem401[ebp_100 + ~0x1ABF:word32] = GetLastError();
  3679.                             goto l004039E3;
  3680.                         }
  3681.                         if (Mem545[ebp_100 + 0x10:word32] <=u ecx_409)
  3682.                             goto l00403A28;
  3683.                         do
  3684.                         {
  3685.                             word32 ecx_688 = Mem545[ebp_100 + ~0x1ABB:word32];
  3686.                             Mem690[ebp_100 + 4294960444:word32] = Mem545[ebp_100 + 4294960444:word32] & 0x00;
  3687.                             word32 ecx_692 = ecx_688 - Mem690[ebp_100 + ~0x1ACB:word32];
  3688.                             word32 esp_695 = esp_1004 - 0x04;
  3689.                             Mem696[esp_695 + 0x00:word32] = 0x02;
  3690.                             word32 eax_697 = ebp_100 + ~0x06B7;
  3691.                             word32 esi_701 = Mem696[esp_695 + 0x00:word32];
  3692.                             word32 esp_703 = esp_695 + 0x04;
  3693.                             if (ecx_692 <u Mem696[ebp_100 + 0x10:word32])
  3694.                             {
  3695.                                 word16 dx_865 = (word16) (word32) Mem696[Mem696[ebp_100 + ~0x1ABB:word32] + 0x00:word16];
  3696.                                 Mem867[ebp_100 + ~0x1ABB:word32] = Mem696[ebp_100 + ~0x1ABB:word32] + esi_701;
  3697.                                 ecx_692 = ecx_692 + esi_701;
  3698.                                 if (dx_865 == 0x0A)
  3699.                                 {
  3700.                                     word32 esp_885 = esp_703 - 0x04;
  3701.                                     Mem886[esp_885 + 0x00:word32] = 0x0D;
  3702.                                     Mem890[eax_697 + 0x00:word16] = (word16) Mem886[esp_885 + 0x00:word32];
  3703.                                     Mem896[ebp_100 + 4294960444:word32] = Mem890[ebp_100 + 4294960444:word32] + esi_701;
  3704.                                     esp_703 = esp_885 + 0x04;
  3705.                                     eax_697 = eax_697 + esi_701;
  3706.                                 }
  3707.                                 Mem877[ebp_100 + 4294960444:word32] = Mem867[ebp_100 + 4294960444:word32] + esi_701;
  3708.                                 Mem878[eax_697 + 0x00:word16] = dx_865;
  3709.                                 eax_697 = eax_697 + esi_701;
  3710.                                 if (Mem878[ebp_100 + 4294960444:word32] <u 0x06A8)
  3711.                                     goto l004038C8;
  3712.                             }
  3713.                             word32 esp_726 = esp_703 - 0x04;
  3714.                             Mem727[esp_726 + 0x00:word32] = 0x00;
  3715.                             Mem729[esp_726 - 0x04 + 0x00:word32] = 0x00;
  3716.                             Mem731[esp_726 - 0x08 + 0x00:word32] = 0x0D55;
  3717.                             Mem734[esp_726 - 0x0C + 0x00:word32] = ebp_100 + ~0x140F;
  3718.                             word32 ecx_735 = ebp_100 + ~0x06B7;
  3719.                             int64 edx_eax_737 = (int64) (eax_697 - ecx_735);
  3720.                             Mem743[esp_726 - 0x10 + 0x00:word32] = (word32) edx_eax_737 - SLICE(edx_eax_737, word32, 32) >> 0x01;
  3721.                             Mem746[esp_726 - 0x14 + 0x00:word32] = ecx_735;
  3722.                             Mem748[esp_726 - 0x18 + 0x00:word32] = 0x00;
  3723.                             Mem750[esp_726 - 0x1C + 0x00:word32] = 65001;
  3724.                             word32 eax_751 = WideCharToMultiByte(Mem750[esp_726 - 0x1C + 0x00:UINT], Mem750[esp_726 - 0x18 + 0x00:DWORD], Mem750[esp_726 - 0x14 + 0x00:LPCWSTR], Mem750[esp_726 - 0x10 + 0x00:int32], Mem750[esp_726 - 0x0C + 0x00:LPSTR], Mem750[esp_726 - 0x08 + 0x00:int32], Mem750[esp_726 - 0x04 + 0x00:LPCSTR], Mem750[esp_726 + 0x00:LPBOOL]);
  3725.                             Mem759[esp_726 + 0x00:word32] = 0x00;
  3726.                             Mem761[esp_726 - 0x04 + 0x00:word32] = 0x00;
  3727.                             Mem763[esp_726 - 0x08 + 0x00:word32] = 0x0D55;
  3728.                             Mem766[esp_726 - 0x0C + 0x00:word32] = ebp_100 + ~0x140F;
  3729.                             word32 ecx_767 = ebp_100 + ~0x06B7;
  3730.                             int64 edx_eax_769 = (int64) (eax_751 - ecx_767);
  3731.                             edx = SLICE(edx_eax_769, word32, 32);
  3732.                             Mem777[esp_726 - 0x10 + 0x00:word32] = (word32) edx_eax_769 - edx >> 0x01;
  3733.                             Mem780[esp_726 - 0x14 + 0x00:word32] = ecx_767;
  3734.                             Mem782[esp_726 - 0x18 + 0x00:word32] = 0x00;
  3735.                             Mem784[esp_726 - 0x1C + 0x00:word32] = 65001;
  3736.                             word32 eax_785 = WideCharToMultiByte(Mem784[esp_726 - 0x1C + 0x00:UINT], Mem784[esp_726 - 0x18 + 0x00:DWORD], Mem784[esp_726 - 0x14 + 0x00:LPCWSTR], Mem784[esp_726 - 0x10 + 0x00:int32], Mem784[esp_726 - 0x0C + 0x00:LPSTR], Mem784[esp_726 - 0x08 + 0x00:int32], Mem784[esp_726 - 0x04 + 0x00:LPCSTR], Mem784[esp_726 + 0x00:LPBOOL]);
  3737.                             word32 esi_756 = 0x00;
  3738.                             esp_1004 = esp_726 + 0x04;
  3739.                             ebx_1022 = eax_785;
  3740.                             if (eax_785 == 0x00)
  3741.                                 goto l004039D7;
  3742.                             do
  3743.                             {
  3744.                                 word32 esp_797 = esp_1004 - 0x04;
  3745.                                 Mem798[esp_797 + 0x00:word32] = 0x00;
  3746.                                 Mem801[esp_797 - 0x04 + 0x00:word32] = ebp_100 + ~0x1AD3;
  3747.                                 Mem805[esp_797 - 0x08 + 0x00:word32] = eax_785 - esi_756;
  3748.                                 Mem808[esp_797 - 0x0C + 0x00:word32] = ebp_100 + ~0x140F + esi_756;
  3749.                                 Mem812[esp_797 - 0x10 + 0x00:word32] = Mem808[edi_139 + Mem808[Mem808[ebp_100 + 4294960424:word32] + 0x00:word32]:word32];
  3750.                                 Mem818[esp_797 + 0x00:word32] = 0x00;
  3751.                                 Mem821[esp_797 - 0x04 + 0x00:word32] = ebp_100 + ~0x1AD3;
  3752.                                 Mem825[esp_797 - 0x08 + 0x00:word32] = eax_785 - esi_756;
  3753.                                 Mem828[esp_797 - 0x0C + 0x00:word32] = ebp_100 + ~0x140F + esi_756;
  3754.                                 Mem832[esp_797 - 0x10 + 0x00:word32] = Mem828[edi_139 + Mem828[Mem828[ebp_100 + 4294960424:word32] + 0x00:word32]:word32];
  3755.                                 esp_1004 = esp_797 + 0x04;
  3756.                                 if (WriteFile(Mem832[esp_797 - 0x10 + 0x00:HANDLE], Mem832[esp_797 - 0x0C + 0x00:LPCVOID], Mem832[esp_797 - 0x08 + 0x00:DWORD], Mem832[esp_797 - 0x04 + 0x00:LPDWORD], Mem832[esp_797 + 0x00:LPOVERLAPPED]) == 0x00)
  3757.                                 {
  3758.                                     Mem860[ebp_100 + ~0x1ABF:word32] = GetLastError();
  3759.                                     break;
  3760.                                 }
  3761.                                 word32 esi_851 = esi_756 + Mem832[ebp_100 + ~0x1AD3:word32];
  3762.                                 esi_756 = esi_851 + Mem832[ebp_100 + ~0x1AD3:word32];
  3763.                             } while (eax_785 > esi_756);
  3764.                             if (eax_785 > esi_756)
  3765.                                 break;
  3766.                             word32 eax_846 = Mem832[ebp_100 + ~0x1ABB:word32] - Mem832[ebp_100 + ~0x1ACB:word32];
  3767.                             Mem848[ebp_100 + 4294960440:word32] = eax_846;
  3768.                         } while (eax_846 <u Mem848[ebp_100 + 0x10:word32]);
  3769.                     }
  3770.                     else
  3771.                     {
  3772.                         word32 esp_898 = esp_1004 - 0x04;
  3773.                         Mem899[esp_898 + 0x00:word32] = 0x00;
  3774.                         Mem902[esp_898 - 0x04 + 0x00:word32] = ebp_100 + ~0x1AD3;
  3775.                         Mem904[esp_898 - 0x08 + 0x00:word32] = Mem902[ebp_100 + 0x10:word32];
  3776.                         Mem906[esp_898 - 0x0C + 0x00:word32] = Mem904[ebp_100 + ~0x1ACB:word32];
  3777.                         Mem908[esp_898 - 0x10 + 0x00:word32] = Mem906[eax_413 + 0x00:word32];
  3778.                         esp_1004 = esp_898 + 0x04;
  3779.                         if (WriteFile(Mem908[esp_898 - 0x10 + 0x00:HANDLE], Mem908[esp_898 - 0x0C + 0x00:LPCVOID], Mem908[esp_898 - 0x08 + 0x00:DWORD], Mem908[esp_898 - 0x04 + 0x00:LPDWORD], Mem908[esp_898 + 0x00:LPOVERLAPPED]) == 0x00)
  3780.                             goto l004039D7;
  3781.                         word32 eax_915 = Mem908[ebp_100 + ~0x1AD3:word32];
  3782.                         Mem918[ebp_100 + ~0x1ABF:word32] = Mem908[ebp_100 + ~0x1ABF:word32] & 0x00;
  3783.                         Mem921[ebp_100 + 4294960440:word32] = eax_915;
  3784.                     }
  3785. l004039E3:
  3786.                     if (Mem216[ebp_100 + 4294960440:word32] != 0x00)
  3787.                     {
  3788.                         eax_121 = Mem216[ebp_100 + 4294960440:word32] - Mem216[ebp_100 + ~0x1ACF:word32];
  3789.                         goto l00403A64;
  3790.                     }
  3791. l004039EC:
  3792.                     if (Mem216[ebp_100 + ~0x1ABF:word32] != 0x00)
  3793.                     {
  3794.                         word32 esp_309 = esp_1004 - 0x04;
  3795.                         Mem310[esp_309 + 0x00:word32] = 0x05;
  3796.                         word32 esi_311 = Mem310[esp_309 + 0x00:word32];
  3797.                         esp_1004 = esp_309 + 0x04;
  3798.                         if (Mem310[ebp_100 + ~0x1ABF:word32] == esi_311)
  3799.                         {
  3800.                             word32 eax_316;
  3801.                             word32 edx_317;
  3802.                             word32 ebx_318;
  3803.                             word32 ebp_319;
  3804.                             word32 esi_320;
  3805.                             word32 edi_321;
  3806.                             word128 xmm0_322;
  3807.                             fn0040197F(ebx_1022, ebp_100, esi_311, es, ds, out eax_316, out edx_317, out ebx_318, out ebp_319, out esi_320, out edi_321, out xmm0_322);
  3808.                             Mem324[eax_316 + 0x00:word32] = 0x09;
  3809.                             word32 ebx_326;
  3810.                             word32 esi_328;
  3811.                             word32 edi_329;
  3812.                             word128 xmm0_330;
  3813.                             eax_1358 = fn00401992(ebx_318, ebp_319, esi_320, es, ds, out edx, out ebx_326, out ebp_100, out esi_328, out edi_329, out xmm0_330);
  3814.                             Mem335[eax_1358 + 0x00:word32] = esi_328;
  3815.                         }
  3816.                         else
  3817.                         {
  3818.                             Mem337[esp_309 + 0x00:word32] = Mem310[ebp_100 + ~0x1ABF:word32];
  3819.                             word32 ebx_339;
  3820.                             word128 xmm0_340;
  3821.                             eax_1358 = fn004019A5(ebx_1022, ebp_100, esi_311, es, ds, out edx, out ebx_339, out xmm0_340);
  3822.                             esp_1004 = esp_309 + 0x04;
  3823.                         }
  3824. l00403A53:
  3825.                         eax_121 = eax_1358 | ~0x00;
  3826.                         goto l00403A64;
  3827.                     }
  3828.                     esi_1025 = Mem216[ebp_100 + 4294960424:word32];
  3829. l00403A28:
  3830.                     if ((Mem216[edi_139 + 0x04 + Mem216[esi_1025 + 0x00:word32]:byte] & 0x40) == 0x00 || Mem216[Mem216[ebp_100 + ~0x1ACB:word32] + 0x00:byte] != 0x1A)
  3831.                     {
  3832.                         word32 eax_253;
  3833.                         word32 edx_254;
  3834.                         word32 ebx_255;
  3835.                         word32 ebp_256;
  3836.                         word32 esi_257;
  3837.                         word32 edi_258;
  3838.                         word128 xmm0_259;
  3839.                         fn0040197F(ebx_1022, ebp_100, esi_1025, es, ds, out eax_253, out edx_254, out ebx_255, out ebp_256, out esi_257, out edi_258, out xmm0_259);
  3840.                         Mem261[eax_253 + 0x00:word32] = 0x1C;
  3841.                         word32 ebx_263;
  3842.                         word32 esi_265;
  3843.                         word32 edi_266;
  3844.                         word128 xmm0_267;
  3845.                         eax_1358 = fn00401992(ebx_255, ebp_256, esi_257, es, ds, out edx, out ebx_263, out ebp_100, out esi_265, out edi_266, out xmm0_267);
  3846.                         Mem273[eax_1358 + 0x00:word32] = Mem261[eax_1358 + 0x00:word32] & 0x00;
  3847.                         goto l00403A53;
  3848.                     }
  3849.                     eax_121 = 0x00;
  3850. l00403A64:
  3851.                     word32 esp_175 = esp_1004 + 0x04;
  3852.                     edi_102 = Mem130[esp_1004 + 0x00:word32];
  3853.                     ebx = Mem130[esp_175 + 0x00:word32];
  3854.                     esp_120 = esp_175 + 0x04;
  3855. l00403A66:
  3856.                     word32 eax_60 = fn00404BEF(eax_121, Mem23[ebp_100 - 0x04 + 0x00:word32] ^ ebp_100, edx, ebx, ebp_100, Mem23[esp_120 + 0x00:word32], edi_102, es, ds);
  3857.                     word32 ebp_65;
  3858.                     *ebpOut = Mem23[ebp_100 + 0x00:word32];
  3859.                     return eax_60;
  3860.                 }
  3861.                 word32 eax_974 = GetConsoleCP();
  3862.                 ebx_1022 = Mem960[ebp_100 + ~0x1ACB:word32];
  3863.                 Mem978[ebp_100 + ~0x1AE3:word32] = eax_974;
  3864.                 Mem983[ebp_100 + 4294960444:word32] = 0x00;
  3865.                 if (Mem983[ebp_100 + 0x10:word32] <=u 0x00)
  3866.                     goto l004039EC;
  3867.                 Mem986[ebp_100 + ~0x1ABB:word32] = 0x00;
  3868. l004034B0:
  3869.                 byte al_1005 = Mem986[ebp_100 + ~0x1AD8:byte];
  3870.                 if (al_1005 != 0x00)
  3871.                 {
  3872.                     if (al_1005 == 0x01 || al_1005 == 0x02)
  3873.                     {
  3874.                         esi_1025 = (word32) Mem986[ebx_1022 + 0x00:word16];
  3875.                         Mem1295[ebp_100 + ~0x1ABB:word32] = Mem986[ebp_100 + ~0x1ABB:word32] + 0x02;
  3876.                         Mem1297[ebp_100 + ~0x1ABF:word32] = esi_1025;
  3877.                         Mem1298[ebp_100 + ~0x1ADF:word32] = (word32) ((word16) esi_1025 == 0x0A);
  3878.                         ebx_1022 = ebx_1022 + 0x02;
  3879.                     }
  3880.                     if (al_1005 == 0x01 || al_1005 == 0x02)
  3881.                     {
  3882.                         word32 esp_1246 = esp_1004 - 0x04;
  3883.                         Mem1247[esp_1246 + 0x00:word32] = Mem986[ebp_100 + ~0x1ABF:word32];
  3884.                         word16 ax_1251 = fn004075F3(edx, ebx_1022, esi_1025, edi_139, es, ds, wArg00, out ebp_100, out esi_1025);
  3885.                         esp_1004 = esp_1246 + 0x04;
  3886.                         if (ax_1251 != Mem1247[ebp_100 + ~0x1ABF:word16])
  3887.                             goto l004039D7;
  3888.                         Mem1258[ebp_100 + 4294960440:word32] = Mem1247[ebp_100 + 4294960440:word32] + 0x02;
  3889.                         if (Mem1258[ebp_100 + ~0x1ADF:word32] != 0x00)
  3890.                         {
  3891.                             Mem1262[esp_1246 + 0x00:word32] = 0x0D;
  3892.                             word32 eax_1263 = Mem1262[esp_1246 + 0x00:word32];
  3893.                             Mem1266[esp_1246 + 0x00:word32] = eax_1263;
  3894.                             Mem1267[ebp_100 + ~0x1ABF:word32] = eax_1263;
  3895.                             word16 ax_1270 = fn004075F3(edx, ebx_1022, esi_1025, edi_139, es, ds, wArg00, out ebp_100, out esi_1025);
  3896.                             esp_1004 = esp_1246 + 0x04;
  3897.                             if (ax_1270 != Mem1267[ebp_100 + ~0x1ABF:word16])
  3898.                                 goto l004039D7;
  3899.                             Mem1277[ebp_100 + 4294960440:word32] = Mem1267[ebp_100 + 4294960440:word32] + 0x01;
  3900.                             Mem1279[ebp_100 + ~0x1ACF:word32] = Mem1277[ebp_100 + ~0x1ACF:word32] + 0x01;
  3901.                         }
  3902.                     }
  3903.                     goto l004036A8;
  3904.                 }
  3905.                 word32 esp_1153;
  3906.                 byte cl_1034 = Mem986[ebx_1022 + 0x00:byte];
  3907.                 word32 esi_1036 = Mem986[ebp_100 + 4294960424:word32];
  3908.                 Mem1042[ebp_100 + ~0x1ADF:word32] = (word32) (cl_1034 == 0x0A);
  3909.                 word32 eax_1044 = Mem1042[esi_1036 + 0x00:word32] + edi_139;
  3910.                 if (Mem1042[eax_1044 + 0x38:word32] != 0x00)
  3911.                 {
  3912.                     Mem1166[ebp_100 - 0x0C + 0x00:byte] = Mem1042[eax_1044 + 0x34:byte];
  3913.                     Mem1167[ebp_100 - 11 + 0x00:byte] = cl_1034;
  3914.                     Mem1169[eax_1044 + 0x38:word32] = Mem1167[eax_1044 + 0x38:word32] & 0x00;
  3915.                     word32 esp_1172 = esp_1004 - 0x04;
  3916.                     Mem1173[esp_1172 + 0x00:word32] = 0x02;
  3917.                     Mem1176[esp_1172 - 0x04 + 0x00:word32] = ebp_100 - 0x0C;
  3918.                     esp_1153 = esp_1172 - 0x04;
  3919.                 }
  3920.                 else
  3921.                 {
  3922.                     word32 esp_1178 = esp_1004 - 0x04;
  3923.                     Mem1179[esp_1178 + 0x00:word32] = (int32) cl_1034;
  3924.                     esp_1004 = esp_1178 + 0x04;
  3925.                     word32 esi_1181;
  3926.                     word128 xmm0_1182;
  3927.                     if (fn00404BDC(ebx_1022, es, ds, dwArg00, out ebx_1022, out esi_1181, out xmm0_1182) != 0x00)
  3928.                     {
  3929.                         if (Mem1179[ebp_100 + ~0x1ACB:word32] - ebx_1022 + Mem1179[ebp_100 + 0x10:word32] <=u 0x01)
  3930.                         {
  3931.                             byte dl_1221 = Mem1179[ebx_1022 + 0x00:byte];
  3932.                             word32 ecx_1220 = Mem1179[esi_1181 + 0x00:word32];
  3933.                             Mem1226[ebp_100 + 4294960440:word32] = Mem1179[ebp_100 + 4294960440:word32] + 0x01;
  3934.                             Mem1228[edi_139 + 0x34 + ecx_1220:byte] = dl_1221;
  3935.                             Mem1230[edi_139 + 0x38 + Mem1228[esi_1181 + 0x00:word32]:word32] = 0x01;
  3936.                             edx = DPB(edx, dl_1221, 0);
  3937.                             break;
  3938.                         }
  3939.                         Mem1200[esp_1178 + 0x00:word32] = 0x02;
  3940.                         Mem1203[esp_1178 - 0x04 + 0x00:word32] = ebx_1022;
  3941.                         Mem1205[esp_1178 - 0x08 + 0x00:word32] = ebp_100 + ~0x1ABF;
  3942.                         esp_1004 = esp_1178 + 0x04;
  3943.                         word128 xmm0_1208;
  3944.                         if (fn004077CF(es, ds, dwArg00, dwArg04, dwArg08, out edx, out ebx_1022, out xmm0_1208) == ~0x00)
  3945.                             break;
  3946.                         Mem1218[ebp_100 + ~0x1ABB:word32] = Mem1205[ebp_100 + ~0x1ABB:word32] + 0x01;
  3947.                         ebx_1022 = ebx_1022 + 0x01;
  3948. l00403556:
  3949.                         word32 esp_1060 = esp_1004 - 0x04;
  3950.                         Mem1061[esp_1060 + 0x00:word32] = 0x00;
  3951.                         Mem1063[esp_1060 - 0x04 + 0x00:word32] = 0x00;
  3952.                         Mem1065[esp_1060 - 0x08 + 0x00:word32] = 0x05;
  3953.                         Mem1068[esp_1060 - 0x0C + 0x00:word32] = ebp_100 - 0x0C;
  3954.                         Mem1070[esp_1060 - 0x10 + 0x00:word32] = 0x01;
  3955.                         Mem1073[esp_1060 - 0x14 + 0x00:word32] = ebp_100 + ~0x1ABF;
  3956.                         Mem1075[esp_1060 - 0x18 + 0x00:word32] = 0x00;
  3957.                         Mem1077[esp_1060 - 0x1C + 0x00:word32] = Mem1075[ebp_100 + ~0x1AE3:word32];
  3958.                         Mem1082[ebp_100 + ~0x1ABB:word32] = Mem1077[ebp_100 + ~0x1ABB:word32] + 0x01;
  3959.                         word32 eax_1083 = WideCharToMultiByte(Mem1082[esp_1060 - 0x1C + 0x00:UINT], Mem1082[esp_1060 - 0x18 + 0x00:DWORD], Mem1082[esp_1060 - 0x14 + 0x00:LPCWSTR], Mem1082[esp_1060 - 0x10 + 0x00:int32], Mem1082[esp_1060 - 0x0C + 0x00:LPSTR], Mem1082[esp_1060 - 0x08 + 0x00:int32], Mem1082[esp_1060 - 0x04 + 0x00:LPCSTR], Mem1082[esp_1060 + 0x00:LPBOOL]);
  3960.                         ebx_1022 = ebx_1022 + 0x01;
  3961.                         esp_1004 = esp_1060 + 0x04;
  3962.                         esi_1025 = eax_1083;
  3963.                         if (eax_1083 == 0x00)
  3964.                             break;
  3965.                         Mem1092[esp_1060 + 0x00:word32] = 0x00;
  3966.                         Mem1095[esp_1060 - 0x04 + 0x00:word32] = ebp_100 + 4294960444;
  3967.                         Mem1097[esp_1060 - 0x08 + 0x00:word32] = eax_1083;
  3968.                         Mem1100[esp_1060 - 0x0C + 0x00:word32] = ebp_100 - 0x0C;
  3969.                         Mem1104[esp_1060 - 0x10 + 0x00:word32] = Mem1100[edi_139 + Mem1100[Mem1100[ebp_100 + 4294960424:word32] + 0x00:word32]:word32];
  3970.                         esp_1004 = esp_1060 + 0x04;
  3971.                         if (WriteFile(Mem1104[esp_1060 - 0x10 + 0x00:HANDLE], Mem1104[esp_1060 - 0x0C + 0x00:LPCVOID], Mem1104[esp_1060 - 0x08 + 0x00:DWORD], Mem1104[esp_1060 - 0x04 + 0x00:LPDWORD], Mem1104[esp_1060 + 0x00:LPOVERLAPPED]) == 0x00)
  3972.                             goto l004039D7;
  3973.                         Mem1117[ebp_100 + 4294960440:word32] = Mem1104[ebp_100 + ~0x1ABB:word32] + Mem1104[ebp_100 + ~0x1ACF:word32];
  3974.                         if (Mem1104[ebp_100 + 4294960444:word32] < eax_1083)
  3975.                             break;
  3976.                         if (Mem1117[ebp_100 + ~0x1ADF:word32] != 0x00)
  3977.                         {
  3978.                             Mem1121[esp_1060 + 0x00:word32] = 0x00;
  3979.                             Mem1124[esp_1060 - 0x04 + 0x00:word32] = ebp_100 + 4294960444;
  3980.                             Mem1126[esp_1060 - 0x08 + 0x00:word32] = 0x01;
  3981.                             Mem1129[esp_1060 - 0x0C + 0x00:word32] = ebp_100 - 0x0C;
  3982.                             word32 eax_1131 = Mem1129[Mem1129[ebp_100 + 4294960424:word32] + 0x00:word32];
  3983.                             Mem1132[ebp_100 - 0x0C + 0x00:byte] = 0x0D;
  3984.                             Mem1134[esp_1060 - 0x10 + 0x00:word32] = Mem1132[edi_139 + eax_1131:word32];
  3985.                             esp_1004 = esp_1060 + 0x04;
  3986.                             if (WriteFile(Mem1134[esp_1060 - 0x10 + 0x00:HANDLE], Mem1134[esp_1060 - 0x0C + 0x00:LPCVOID], Mem1134[esp_1060 - 0x08 + 0x00:DWORD], Mem1134[esp_1060 - 0x04 + 0x00:LPDWORD], Mem1134[esp_1060 + 0x00:LPOVERLAPPED]) == 0x00)
  3987.                                 goto l004039D7;
  3988.                             if (Mem1134[ebp_100 + 4294960444:word32] < 0x01)
  3989.                                 break;
  3990.                             Mem1144[ebp_100 + ~0x1ACF:word32] = Mem1134[ebp_100 + ~0x1ACF:word32] + 0x01;
  3991.                             Mem1146[ebp_100 + 4294960440:word32] = Mem1144[ebp_100 + 4294960440:word32] + 0x01;
  3992.                         }
  3993. l004036A8:
  3994.                         if (Mem986[ebp_100 + ~0x1ABB:word32] <u Mem986[ebp_100 + 0x10:word32])
  3995.                             goto l004034B0;
  3996.                         goto l004039E3;
  3997.                     }
  3998.                     Mem1232[esp_1178 + 0x00:word32] = 0x01;
  3999.                     Mem1234[esp_1178 - 0x04 + 0x00:word32] = ebx_1022;
  4000.                     esp_1153 = esp_1178 - 0x04;
  4001.                 }
  4002.                 word32 esp_1155 = esp_1153 - 0x04;
  4003.                 Mem1156[esp_1155 + 0x00:word32] = ebp_100 + ~0x1ABF;
  4004.                 esp_1004 = esp_1155 + 0x0C;
  4005.                 word128 xmm0_1159;
  4006.                 if (fn004077CF(es, ds, dwArg00, dwArg04, dwArg08, out edx, out ebx_1022, out xmm0_1159) == ~0x00)
  4007.                     break;
  4008.                 goto l00403556;
  4009.             }
  4010.         }
  4011.     }
  4012.     ecx_409 = 0x00;
  4013.     goto l004036D7;
  4014. }
  4015.  
  4016. word32 fn00403A73(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  4017. {
  4018.     word32 ebp_102;
  4019.     word32 eax_121;
  4020.     word32 eax_164;
  4021.     word32 ebp_10;
  4022.     fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B648, 0x10, out ebp_10);
  4023.     word32 eax_13 = Mem0[ebp_10 + 0x08:word32];
  4024.     if (eax_13 == ~0x01)
  4025.     {
  4026.         word32 edx_58;
  4027.         word32 ebx_59;
  4028.         word32 ebp_60;
  4029.         word32 esi_61;
  4030.         word32 edi_62;
  4031.         word128 xmm0_63;
  4032.         word32 eax_64 = fn00401992(ebx, ebp_10, esi, es, ds, out edx_58, out ebx_59, out ebp_60, out esi_61, out edi_62, out xmm0_63);
  4033.         Mem66[eax_64 + 0x00:word32] = Mem0[eax_64 + 0x00:word32] & 0x00;
  4034.         word32 edx_70;
  4035.         word32 ebx_71;
  4036.         word32 esi_73;
  4037.         word32 edi_74;
  4038.         word128 xmm0_75;
  4039.         fn0040197F(ebx_59, ebp_60, esi_61, es, ds, out eax_121, out edx_70, out ebx_71, out ebp_102, out esi_73, out edi_74, out xmm0_75);
  4040.         Mem77[eax_121 + 0x00:word32] = 0x09;
  4041.     }
  4042.     else
  4043.     {
  4044.         if (eax_13 >= 0x00 && eax_13 <u Mem0[4258220:word32])
  4045.         {
  4046.             ebx = (eax_13 >> 0x05) * 0x04 + 0x0040F9C0;
  4047.             esi = (eax_13 & 0x1F) << 0x06;
  4048.             if (((int32) Mem0[Mem0[ebx + 0x00:word32] + 0x04 + esi:byte] & 0x01) != 0x00)
  4049.             {
  4050.                 Mem139[fp - 0x0C + 0x00:word32] = eax_13;
  4051.                 word32 ebx_140;
  4052.                 word32 ebp_141;
  4053.                 word32 esi_142;
  4054.                 word32 edi_143;
  4055.                 word32 edx_144 = fn0040752C(ebx, esi, 0x00, es, ds, out ebx_140, out ebp_141, out esi_142, out edi_143);
  4056.                 Mem147[ebp_141 - 0x04 + 0x00:word32] = edi_143;
  4057.                 if ((Mem147[Mem147[ebx_140 + 0x00:word32] + 0x04 + esi_142:byte] & 0x01) != 0x00)
  4058.                 {
  4059.                     Mem166[fp - 0x0C + 0x00:word32] = Mem147[ebp_141 + 0x10:word32];
  4060.                     Mem168[fp - 0x10 + 0x00:word32] = Mem166[ebp_141 + 0x0C:word32];
  4061.                     Mem170[fp - 0x14 + 0x00:word32] = Mem168[ebp_141 + 0x08:word32];
  4062.                     word128 xmm0_172;
  4063.                     word32 eax_173 = fn00403340(edx_144, ebx_140, ebp_141, esi_142, edi_143, es, ds, dwArg00, dwArg04, dwArg08, out ebp_102, out xmm0_172);
  4064.                     Mem176[ebp_102 - 0x1C + 0x00:word32] = eax_173;
  4065.                 }
  4066.                 else
  4067.                 {
  4068.                     word32 eax_178;
  4069.                     word32 edx_179;
  4070.                     word32 ebx_180;
  4071.                     word32 ebp_181;
  4072.                     word32 esi_182;
  4073.                     word32 edi_183;
  4074.                     word128 xmm0_184;
  4075.                     fn0040197F(ebx_140, ebp_141, esi_142, es, ds, out eax_178, out edx_179, out ebx_180, out ebp_181, out esi_182, out edi_183, out xmm0_184);
  4076.                     Mem186[eax_178 + 0x00:word32] = 0x09;
  4077.                     word32 edx_187;
  4078.                     word32 ebx_188;
  4079.                     word32 esi_190;
  4080.                     word32 edi_191;
  4081.                     word128 xmm0_192;
  4082.                     word32 eax_193 = fn00401992(ebx_180, ebp_181, esi_182, es, ds, out edx_187, out ebx_188, out ebp_102, out esi_190, out edi_191, out xmm0_192);
  4083.                     Mem194[eax_193 + 0x00:word32] = edi_191;
  4084.                     Mem196[ebp_102 - 0x1C + 0x00:word32] = Mem194[ebp_102 - 0x1C + 0x00:word32] | ~0x00;
  4085.                 }
  4086.                 Mem163[ebp_102 - 0x04 + 0x00:word32] = ~0x01;
  4087.                 fn00403B45(ebp_102);
  4088.                 eax_164 = Mem163[ebp_102 - 0x1C + 0x00:word32];
  4089. l00403B3F:
  4090.                 word32 ebp_32;
  4091.                 word32 esi_33;
  4092.                 word32 edi_34;
  4093.                 fn00402F65(ebp_102, 0x10, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_32, out esi_33, out edi_34);
  4094.                 return eax_164;
  4095.             }
  4096.         }
  4097.         word32 edx_91;
  4098.         word32 ebx_92;
  4099.         word32 ebp_93;
  4100.         word32 esi_94;
  4101.         word32 edi_95;
  4102.         word128 xmm0_96;
  4103.         word32 eax_97 = fn00401992(ebx, ebp_10, esi, es, ds, out edx_91, out ebx_92, out ebp_93, out esi_94, out edi_95, out xmm0_96);
  4104.         Mem98[eax_97 + 0x00:word32] = edi_95;
  4105.         word32 eax_99;
  4106.         word32 edx_100;
  4107.         word32 ebx_101;
  4108.         word32 esi_103;
  4109.         word32 edi_104;
  4110.         word128 xmm0_105;
  4111.         fn0040197F(ebx_92, ebp_93, esi_94, es, ds, out eax_99, out edx_100, out ebx_101, out ebp_102, out esi_103, out edi_104, out xmm0_105);
  4112.         Mem107[eax_99 + 0x00:word32] = 0x09;
  4113.         Mem109[fp - 0x0C + 0x00:word32] = edi_104;
  4114.         Mem111[fp - 0x10 + 0x00:word32] = edi_104;
  4115.         Mem113[fp - 0x14 + 0x00:word32] = edi_104;
  4116.         Mem115[fp - 0x18 + 0x00:word32] = edi_104;
  4117.         Mem117[fp - 0x1C + 0x00:word32] = edi_104;
  4118.         word32 edx_118;
  4119.         word32 ebx_119;
  4120.         word32 esi_120;
  4121.         eax_121 = fn00401917(es, ds, xmm0_105, out edx_118, out ebx_119, out esi_120);
  4122.     }
  4123.     eax_164 = eax_121 | ~0x00;
  4124.     goto l00403B3F;
  4125. }
  4126.  
  4127. void fn00403B45(word32 ebp)
  4128. {
  4129.     fn004075CC(Mem0[ebp + 0x08:word32]);
  4130.     return;
  4131. }
  4132.  
  4133. word32 fn00403B4F(word32 ebx, selector es, selector ds, ptr32 & esiOut, ptr32 & xmm0Out)
  4134. {
  4135.     Mem10[4252544:word32] = Mem0[4252544:word32] + 0x01;
  4136.     word32 ebx_17;
  4137.     word32 ebp_18;
  4138.     word32 esi_19;
  4139.     word32 edi_20;
  4140.     word128 xmm0_21;
  4141.     word32 eax_22 = fn0040489A(ebx, fp - 0x04, es, ds, out ebx_17, out ebp_18, out esi_19, out edi_20, out xmm0_21);
  4142.     word32 ecx_25 = Mem10[ebp_18 + 0x08:word32];
  4143.     Mem26[ecx_25 + 0x08:word32] = eax_22;
  4144.     if (eax_22 != 0x00)
  4145.     {
  4146.         Mem41[ecx_25 + 0x0C:word32] = Mem26[ecx_25 + 0x0C:word32] | 0x08;
  4147.         Mem44[ecx_25 + 0x18:word32] = 0x1000;
  4148.     }
  4149.     else
  4150.     {
  4151.         Mem46[ecx_25 + 0x0C:word32] = Mem26[ecx_25 + 0x0C:word32] | 0x04;
  4152.         Mem50[ecx_25 + 0x08:word32] = ecx_25 + 0x14;
  4153.         Mem51[ecx_25 + 0x18:word32] = 0x02;
  4154.     }
  4155.     word32 eax_30 = Mem26[ecx_25 + 0x08:word32];
  4156.     Mem32[ecx_25 + 0x04:word32] = Mem26[ecx_25 + 0x04:word32] & 0x00;
  4157.     Mem35[ecx_25 + 0x00:word32] = eax_30;
  4158.     return ebx_17;
  4159. }
  4160.  
  4161. word32 fn00403B98(word32 ebx, word32 esi, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  4162. {
  4163.     *ebxOut = ebx;
  4164.     *edxOut = edx;
  4165.     *xmm0Out = xmm0;
  4166.     if (dwArg04 != ~0x01)
  4167.     {
  4168.         word32 eax_108;
  4169.         if (dwArg04 >= 0x00 && dwArg04 <u Mem0[4258220:word32])
  4170.             eax_108 = (int32) (0x0040F9C0[(dwArg04 >> 0x05) * 0x04] + 0x04)[(dwArg04 & 0x1F) * 0x40] & 0x40;
  4171.         else
  4172.         {
  4173.             word32 eax_73;
  4174.             word32 edx_74;
  4175.             word32 ebx_75;
  4176.             word32 ebp_76;
  4177.             word32 esi_77;
  4178.             word32 edi_78;
  4179.             word128 xmm0_79;
  4180.             fn0040197F(ebx, fp - 0x04, 0x00, es, ds, out eax_73, out edx_74, out ebx_75, out ebp_76, out esi_77, out edi_78, out xmm0_79);
  4181.             Mem82[fp - 0x0C + 0x00:word32] = esi_77;
  4182.             Mem84[fp - 0x10 + 0x00:word32] = esi_77;
  4183.             Mem86[fp - 0x14 + 0x00:word32] = esi_77;
  4184.             Mem88[fp - 0x18 + 0x00:word32] = esi_77;
  4185.             Mem90[fp - 0x1C + 0x00:word32] = esi_77;
  4186.             Mem91[eax_73 + 0x00:word32] = 0x09;
  4187.             word32 edx_92;
  4188.             word32 ebx_93;
  4189.             word32 esi_94;
  4190.             fn00401917(es, ds, xmm0_79, out edx_92, out ebx_93, out esi_94);
  4191.             eax_108 = 0x00;
  4192.         }
  4193.         return eax_108;
  4194.     }
  4195.     else
  4196.     {
  4197.         word32 eax_34;
  4198.         word32 edx_35;
  4199.         word32 ebx_36;
  4200.         word32 ebp_37;
  4201.         word32 esi_38;
  4202.         word32 edi_39;
  4203.         word128 xmm0_40;
  4204.         fn0040197F(ebx, fp - 0x04, esi, es, ds, out eax_34, out edx_35, out ebx_36, out ebp_37, out esi_38, out edi_39, out xmm0_40);
  4205.         Mem42[eax_34 + 0x00:word32] = 0x09;
  4206.         return 0x00;
  4207.     }
  4208. }
  4209.  
  4210. void fn00403BFC()
  4211. {
  4212.     return;
  4213. }
  4214.  
  4215. word32 fn00403DB1(word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & xmm0Out)
  4216. {
  4217.     *ebxOut = ebx;
  4218.     *xmm0Out = xmm0;
  4219.     word32 eax_21;
  4220.     if (dwArg04 == 0x00)
  4221.     {
  4222.         word32 eax_35;
  4223.         word32 edx_36;
  4224.         word32 ebx_37;
  4225.         word32 ebp_38;
  4226.         word32 esi_39;
  4227.         word32 edi_40;
  4228.         word128 xmm0_41;
  4229.         fn0040197F(ebx, fp - 0x04, 0x00, es, ds, out eax_35, out edx_36, out ebx_37, out ebp_38, out esi_39, out edi_40, out xmm0_41);
  4230.         Mem44[fp - 0x0C + 0x00:word32] = esi_39;
  4231.         Mem46[fp - 0x10 + 0x00:word32] = esi_39;
  4232.         Mem48[fp - 0x14 + 0x00:word32] = esi_39;
  4233.         Mem50[fp - 0x18 + 0x00:word32] = esi_39;
  4234.         Mem52[fp - 0x1C + 0x00:word32] = esi_39;
  4235.         Mem53[eax_35 + 0x00:word32] = 22;
  4236.         word32 edx_54;
  4237.         word32 ebx_55;
  4238.         word32 esi_56;
  4239.         eax_21 = fn00401917(es, ds, xmm0_41, out edx_54, out ebx_55, out esi_56) | ~0x00;
  4240.     }
  4241.     else
  4242.         eax_21 = Mem0[dwArg04 + 0x10:word32];
  4243.     return eax_21;
  4244. }
  4245.  
  4246. word32 fn00403DE3(word32 eax)
  4247. {
  4248.     if (eax == 0x03A4)
  4249.         return 0x0411;
  4250.     else if (eax == 0x03A8)
  4251.         return 0x0804;
  4252.     else if (eax == 949)
  4253.         return 0x0412;
  4254.     else if (eax == 0x03B6)
  4255.         return 0x0404;
  4256.     else
  4257.         return 0x00;
  4258. }
  4259.  
  4260. word32 fn00403E12(word32 eax, word128 xmm0)
  4261. {
  4262.     word32 edi_24;
  4263.     word32 edx_23;
  4264.     fn00404CA0(xmm0, dwLoc18, eax + 0x1C, 0x00, 0x0101, out edx_23, out edi_24);
  4265.     Mem29[eax + 0x04:word32] = edi_24;
  4266.     Mem30[eax + 0x08:word32] = edi_24;
  4267.     Mem31[eax + 0x0C:word32] = edi_24;
  4268.     Mem35[eax + 0x10:word32] = 0x00;
  4269.     Mem37[eax + 0x14:word32] = 0x00;
  4270.     Mem39[eax + 0x18:word32] = 0x00;
  4271.     word32 eax_42 = eax + 0x1C;
  4272.     word32 ecx_44 = 4248864 - eax;
  4273.     word32 edi_46 = 0x0101;
  4274.     do
  4275.     {
  4276.         Mem50[eax_42 + 0x00:byte] = Mem39[ecx_44 + eax_42:byte];
  4277.         eax_42 = eax_42 + 0x01;
  4278.         edi_46 = edi_46 - 0x01;
  4279.     } while (edi_46 != 0x00);
  4280.     word32 eax_56 = eax + 0x011D;
  4281.     word32 esi_58 = 0x0100;
  4282.     do
  4283.     {
  4284.         byte dl_62 = Mem50[eax_56 + ecx_44:byte];
  4285.         Mem64[eax_56 + 0x00:byte] = dl_62;
  4286.         edx_23 = DPB(edx_23, dl_62, 0);
  4287.         eax_56 = eax_56 + 0x01;
  4288.         esi_58 = esi_58 - 0x01;
  4289.     } while (esi_58 != 0x00);
  4290.     return edx_23;
  4291. }
  4292.  
  4293. word32 fn00403E76(word32 ebx, word32 ebp, word32 esi, selector es, selector ds, word128 xmm0, ptr32 & xmm0Out)
  4294. {
  4295.     *xmm0Out = xmm0;
  4296.     word32 edx_161;
  4297.     word32 eax_164;
  4298.     word32 esp_163 = fp - 0x0528;
  4299.     word32 edi_212 = 0x0100;
  4300.     if (GetCPInfo(Mem0[esi + 0x04:word32], fp + ~0x051B) != 0x00)
  4301.     {
  4302.         word32 eax_58 = 0x00;
  4303.         byte al_59 = 0x00;
  4304.         do
  4305.         {
  4306.             Mem64[fp + ~0x0107 + eax_58:byte] = al_59;
  4307.             eax_58 = eax_58 + 0x01;
  4308.             al_59 = (byte) eax_58;
  4309.         } while (eax_58 <u 0x0100);
  4310.         byte al_211 = bLoc0516;
  4311.         if (bLoc0516 != 0x00)
  4312.         {
  4313.             ebx = fp + ~0x0514;
  4314.             do
  4315.             {
  4316.                 word32 ecx_217 = (word32) al_211;
  4317.                 word32 eax_219 = (word32) Mem64[ebx + 0x00:byte];
  4318.                 if (ecx_217 <=u eax_219)
  4319.                 {
  4320.                     word32 esp_239 = esp_163 - 0x04;
  4321.                     Mem240[esp_239 + 0x00:word32] = eax_219 - ecx_217 + 0x01;
  4322.                     Mem243[esp_239 - 0x04 + 0x00:word32] = 0x20;
  4323.                     Mem245[esp_239 - 0x08 + 0x00:word32] = fp + ~0x0107 + ecx_217;
  4324.                     word32 edx_249;
  4325.                     fn00404CA0(xmm0, ebp, dwArg00, dwArg04, dwArg08, out edx_249, out edi_212);
  4326.                     esp_163 = esp_239 + 0x04;
  4327.                 }
  4328.                 word32 ebx_228 = ebx + 0x01;
  4329.                 al_211 = Mem64[ebx_228 + 0x00:byte];
  4330.                 ebx = ebx_228 + 0x01;
  4331.             } while (al_211 != 0x00);
  4332.         }
  4333.         word32 esp_86 = esp_163 - 0x04;
  4334.         Mem87[esp_86 + 0x00:word32] = 0x00;
  4335.         Mem89[esp_86 - 0x04 + 0x00:word32] = Mem87[esi + 0x0C:word32];
  4336.         Mem92[esp_86 - 0x08 + 0x00:word32] = Mem89[esi + 0x04:word32];
  4337.         Mem94[esp_86 - 0x0C + 0x00:word32] = fp + ~0x0507;
  4338.         Mem96[esp_86 - 0x10 + 0x00:word32] = edi_212;
  4339.         Mem99[esp_86 - 0x14 + 0x00:word32] = fp + ~0x0107;
  4340.         Mem101[esp_86 - 0x18 + 0x00:word32] = 0x01;
  4341.         Mem103[esp_86 - 0x1C + 0x00:word32] = 0x00;
  4342.         word32 edx_105;
  4343.         word32 esi_106;
  4344.         word128 xmm0_107;
  4345.         fn00408011(ebx, fp - 0x04, es, ds, dwArg00, out edx_105, out esi_106, out xmm0_107);
  4346.         Mem113[esp_86 - 0x20 + 0x00:word32] = 0x00;
  4347.         Mem115[esp_86 - 0x24 + 0x00:word32] = Mem113[esi_106 + 0x04:word32];
  4348.         Mem118[esp_86 - 0x28 + 0x00:word32] = edi_212;
  4349.         Mem120[esp_86 - 44 + 0x00:word32] = fp + ~0x0207;
  4350.         Mem122[esp_86 - 0x30 + 0x00:word32] = edi_212;
  4351.         Mem125[esp_86 - 0x34 + 0x00:word32] = fp + ~0x0107;
  4352.         Mem127[esp_86 - 0x38 + 0x00:word32] = edi_212;
  4353.         Mem129[esp_86 - 0x3C + 0x00:word32] = Mem127[esi_106 + 0x0C:word32];
  4354.         Mem131[esp_86 - 0x40 + 0x00:word32] = 0x00;
  4355.         word32 ebx_132;
  4356.         word32 esi_133;
  4357.         word128 xmm0_134;
  4358.         fn00407E12(0x00, fp - 0x04, es, ds, dwArg00, out ebx_132, out esi_133, out xmm0_134);
  4359.         Mem139[esp_86 + 0x00:word32] = ebx_132;
  4360.         Mem141[esp_86 - 0x04 + 0x00:word32] = Mem139[esi_133 + 0x04:word32];
  4361.         Mem144[esp_86 - 0x08 + 0x00:word32] = edi_212;
  4362.         Mem146[esp_86 - 0x0C + 0x00:word32] = fp + ~0x0307;
  4363.         Mem148[esp_86 - 0x10 + 0x00:word32] = edi_212;
  4364.         Mem151[esp_86 - 0x14 + 0x00:word32] = fp + ~0x0107;
  4365.         Mem153[esp_86 - 0x18 + 0x00:word32] = 0x0200;
  4366.         Mem155[esp_86 - 0x1C + 0x00:word32] = Mem153[esi_133 + 0x0C:word32];
  4367.         Mem157[esp_86 - 0x20 + 0x00:word32] = ebx_132;
  4368.         word32 ebx_158;
  4369.         word128 xmm0_160;
  4370.         edx_161 = fn00407E12(ebx_132, fp - 0x04, es, ds, dwArg00, out ebx_158, out esi, out xmm0_160);
  4371.         esp_163 = esp_86 + 0x04;
  4372.         eax_164 = 0x00;
  4373. l00403F61:
  4374.         byte cl_186;
  4375.         byte cl_172 = (byte) (word32) (fp + ~0x0507)[eax_164 * 0x02];
  4376.         if ((cl_172 & 0x01) != 0x00)
  4377.         {
  4378.             Mem192[esi + 0x1D + eax_164:byte] = Mem157[esi + 0x1D + eax_164:byte] | 0x10;
  4379.             cl_186 = Mem192[fp + ~0x0207 + eax_164:byte];
  4380.         }
  4381.         else
  4382.         {
  4383.             if ((cl_172 & 0x02) == 0x00)
  4384.             {
  4385.                 Mem206[esi + 0x011D + eax_164:byte] = 0x00;
  4386. l00403F9E:
  4387.                 eax_164 = eax_164 + 0x01;
  4388.                 if (eax_164 <u edi_212)
  4389.                     goto l00403F61;
  4390. l00403FFB:
  4391.                 fn00404BEF(eax_164, Mem0[fp - 0x08 + 0x00:word32] ^ fp - 0x04, edx_161, Mem0[esp_163 + 0x04:word32], fp - 0x04, esi, Mem0[esp_163 + 0x00:word32], es, ds);
  4392.                 return edx_161;
  4393.             }
  4394.             Mem201[esi + 0x1D + eax_164:byte] = Mem157[esi + 0x1D + eax_164:byte] | 0x20;
  4395.             cl_186 = Mem201[fp + ~0x0307 + eax_164:byte];
  4396.         }
  4397.         Mem190[esi + 0x011D + eax_164:byte] = cl_186;
  4398.         goto l00403F9E;
  4399.     }
  4400.     word32 ecx_256 = 0x00;
  4401.     byte cl_257 = 0x00;
  4402.     word32 v16_258 = ~0x60 - (esi + 0x011D);
  4403. l00403FBD:
  4404.     byte dl_284;
  4405.     eax_164 = esi + 0x011D + ecx_256;
  4406.     edx_161 = v16_258 + eax_164;
  4407.     if (edx_161 <=u 0x07)
  4408.     {
  4409.         Mem289[esi + 0x1D + ecx_256:byte] = Mem0[esi + 0x1D + ecx_256:byte] | 0x10;
  4410.         dl_284 = cl_257 + 0x20;
  4411.         edx_161 = DPB(edx_161, dl_284, 0);
  4412.     }
  4413.     else
  4414.     {
  4415.         if (edx_161 >u 0x19)
  4416.         {
  4417.             Mem304[eax_164 + 0x00:byte] = 0x00;
  4418. l00403FF6:
  4419.             ecx_256 = ecx_256 + 0x01;
  4420.             cl_257 = (byte) ecx_256;
  4421.             if (ecx_256 <u 0x0100)
  4422.                 goto l00403FBD;
  4423.             goto l00403FFB;
  4424.         }
  4425.         Mem298[esi + 0x1D + ecx_256:byte] = Mem0[esi + 0x1D + ecx_256:byte] | 0x20;
  4426.         dl_284 = cl_257 - 0x20;
  4427.         edx_161 = DPB(edx_161, dl_284, 0);
  4428.     }
  4429.     Mem287[eax_164 + 0x00:byte] = dl_284;
  4430.     goto l00403FF6;
  4431. }
  4432.  
  4433. word32 fn00404009(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  4434. {
  4435.     word32 esi_116;
  4436.     word32 ebp_10;
  4437.     word32 eax_11 = fn00402F20(ebx, esi, edi, dwLoc0C, 4241000, 0x0C, out ebp_10);
  4438.     word128 xmm0_16;
  4439.     word32 edx_17;
  4440.     word32 ebp_111;
  4441.     word32 ebx_113;
  4442.     *edxOut = fn00402C19(ebx, ebp_10, esi, es, ds, out ebx_113, out ebp_111, out xmm0_16);
  4443.     word32 esp_110 = fp - 0x08;
  4444.     word32 edi_112 = eax_11;
  4445.     if ((Mem0[eax_11 + 0x70:word32] & Mem0[0x0040DA44:word32]) != 0x00 && Mem0[eax_11 + 0x6C:word32] != 0x00)
  4446.         esi_116 = Mem0[eax_11 + 0x68:word32];
  4447.     else
  4448.     {
  4449.         Mem70[fp - 0x0C + 0x00:word32] = 0x0D;
  4450.         word32 edx_71;
  4451.         word128 xmm0_73;
  4452.         fn00405B56(ebx_113, eax_11, es, ds, dwArg00, out edx_71, out ebx_113, out xmm0_73);
  4453.         Mem78[ebp_111 - 0x04 + 0x00:word32] = Mem70[ebp_111 - 0x04 + 0x00:word32] & 0x00;
  4454.         esi_116 = Mem78[eax_11 + 0x68:word32];
  4455.         Mem81[ebp_111 - 0x1C + 0x00:word32] = esi_116;
  4456.         esp_110 = fp - 0x08;
  4457.         if (esi_116 != Mem81[4249928:word32])
  4458.         {
  4459.             if (esi_116 != 0x00)
  4460.             {
  4461.                 Mem123[fp - 0x0C + 0x00:word32] = esi_116;
  4462.                 esp_110 = fp - 0x08;
  4463.                 if (InterlockedDecrement(Mem123[fp - 0x0C + 0x00:(ptr LONG)]) == 0x00 && esi_116 != 4248864)
  4464.                 {
  4465.                     Mem132[fp - 0x0C + 0x00:word32] = esi_116;
  4466.                     word32 eax_133;
  4467.                     word32 edx_134;
  4468.                     word32 esi_137;
  4469.                     word128 xmm0_139;
  4470.                     fn004047EB(ebx_113, esi_116, eax_11, es, ds, out eax_133, out edx_134, out ebx_113, out ebp_111, out esi_137, out edi_112, out xmm0_139);
  4471.                     esp_110 = fp - 0x08;
  4472.                 }
  4473.             }
  4474.             Mem115[edi_112 + 0x68:word32] = Mem81[4249928:word32];
  4475.             esi_116 = Mem115[4249928:word32];
  4476.             Mem117[ebp_111 - 0x1C + 0x00:word32] = esi_116;
  4477.             word32 esp_118 = esp_110 - 0x04;
  4478.             Mem119[esp_118 + 0x00:word32] = esi_116;
  4479.             InterlockedIncrement(Mem119[esp_118 + 0x00:(ptr LONG)]);
  4480.             esp_110 = esp_118 + 0x04;
  4481.         }
  4482.         Mem98[ebp_111 - 0x04 + 0x00:word32] = ~0x01;
  4483.         fn004040A4();
  4484.     }
  4485.     if (esi_116 == 0x00)
  4486.     {
  4487.         Mem60[esp_110 - 0x04 + 0x00:word32] = 0x20;
  4488.         word32 eax_61;
  4489.         word32 edx_62;
  4490.         word32 ebx_63;
  4491.         word128 xmm0_65;
  4492.         fn00401B9C(ebx_113, ebp_111, es, ds, out eax_61, out edx_62, out ebx_63, out esi_116, out xmm0_65);
  4493.     }
  4494.     word32 ebp_49;
  4495.     word32 esi_50;
  4496.     word32 edi_51;
  4497.     word32 ebx_52;
  4498.     *ebxOut = fn00402F65(ebp_111, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_49, out esi_50, out edi_51);
  4499.     return esi_116;
  4500. }
  4501.  
  4502. void fn004040A4()
  4503. {
  4504.     fn00405A7C(0x0D);
  4505.     return;
  4506. }
  4507.  
  4508. word32 fn004040AD(selector es, selector ds, ptr32 & edxOut, ptr32 & xmm0Out)
  4509. {
  4510.     word32 eax_29;
  4511.     word32 ebx_21;
  4512.     word128 xmm0_22;
  4513.     word32 edx_23;
  4514.     *edxOut = fn00401759(fp - 0x14, 0x00, es, ds, 0x00, out ebx_21, out xmm0_22);
  4515.     Mem25[4252548:word32] = ebx_21;
  4516.     if (esi == ~0x01)
  4517.     {
  4518.         Mem49[4252548:word32] = 0x01;
  4519.         eax_29 = GetOEMCP();
  4520.     }
  4521.     else if (esi == ~0x02)
  4522.     {
  4523.         Mem53[4252548:word32] = 0x01;
  4524.         eax_29 = GetACP();
  4525.     }
  4526.     else
  4527.     {
  4528.         if (esi != ~0x03)
  4529.         {
  4530.             if (Mem25[fp - 0x08 + 0x00:byte] != 0x00)
  4531.             {
  4532.                 word32 eax_65 = Mem25[fp - 0x0C + 0x00:word32];
  4533.                 Mem67[eax_65 + 0x70:word32] = Mem25[eax_65 + 0x70:word32] & ~0x02;
  4534.             }
  4535.             eax_29 = esi;
  4536.             return eax_29;
  4537.         }
  4538.         eax_29 = Mem25[Mem25[fp - 0x14 + 0x00:word32] + 0x04:word32];
  4539.         Mem59[4252548:word32] = 0x01;
  4540.     }
  4541.     if (Mem25[fp - 0x08 + 0x00:byte] != 0x00)
  4542.     {
  4543.         word32 ecx_44 = Mem25[fp - 0x0C + 0x00:word32];
  4544.         Mem46[ecx_44 + 0x70:word32] = Mem25[ecx_44 + 0x70:word32] & ~0x02;
  4545.     }
  4546.     return eax_29;
  4547. }
  4548.  
  4549. word32 fn00404129(word32 ebp, selector es, selector ds, word32 dwArg04, word32 dwArg08)
  4550. {
  4551.     word32 eax_141;
  4552.     word128 xmm0_30;
  4553.     word32 edx_127;
  4554.     word32 eax_31 = fn004040AD(es, ds, out edx_127, out xmm0_30);
  4555.     Mem36[fp + 0x04:word32] = eax_31;
  4556.     word32 esp_121 = fp - 0x30;
  4557.     word16 di_33 = (word16) eax_31;
  4558.     if (eax_31 != 0x00)
  4559.     {
  4560.         Mem96[fp - 0x20 + 0x00:word32] = 0x00;
  4561.         word32 eax_103 = 0x0040D950;
  4562.         do
  4563.         {
  4564.             if (Mem96[eax_103 + 0x00:word32] == eax_31)
  4565.             {
  4566.                 Mem285[fp - 0x34 + 0x00:word32] = 0x0101;
  4567.                 Mem288[fp - 0x38 + 0x00:word32] = 0x00;
  4568.                 Mem290[fp - 0x3C + 0x00:word32] = dwArg08 + 0x1C;
  4569.                 word32 edx_291;
  4570.                 word32 edi_292;
  4571.                 fn00404CA0(xmm0_30, ebp, dwArg00, dwArg04, dwArg08, out edx_291, out edi_292);
  4572.                 word32 ecx_294 = Mem290[fp - 0x20 + 0x00:word32];
  4573.                 Mem299[fp - 0x24 + 0x00:word32] = 0x00;
  4574.                 word32 esi_300 = ecx_294 *s 0x30 + 4249952;
  4575.                 Mem302[fp - 0x20 + 0x00:word32] = esi_300;
  4576.                 do
  4577.                 {
  4578.                     if (Mem302[esi_300 + 0x00:byte] != 0x00)
  4579.                     {
  4580.                         byte al_357 = Mem302[esi_300 + 0x01:byte];
  4581.                         if (al_357 != 0x00)
  4582.                         {
  4583.                             word32 edi_363 = (word32) Mem302[esi_300 + 0x00:byte];
  4584.                             word32 eax_365 = (word32) al_357;
  4585.                             while (edi_363 <=u eax_365)
  4586.                             {
  4587.                                 Mem386[dwArg08 + 0x1D + edi_363:byte] = Mem302[dwArg08 + 0x1D + edi_363:byte] | Mem302[Mem302[(fp - 0x24) + 0x00:word32] + 4249932:byte];
  4588.                                 eax_365 = (word32) Mem386[esi_300 + 0x01:byte];
  4589.                                 edi_363 = edi_363 + 0x01;
  4590.                             }
  4591.                             edi_292 = Mem302[fp + 0x04:word32];
  4592.                             esi_300 = esi_300 + 0x02;
  4593.                             continue;
  4594.                         }
  4595.                     }
  4596.                     word32 esi_320 = Mem302[fp - 0x20 + 0x00:word32];
  4597.                     Mem322[fp - 0x24 + 0x00:word32] = Mem302[fp - 0x24 + 0x00:word32] + 0x01;
  4598.                     Mem327[fp - 0x20 + 0x00:word32] = esi_320 + 0x08;
  4599.                     esi_300 = esi_320 + 0x08;
  4600.                 } while (Mem322[fp - 0x24 + 0x00:word32] <u 0x04);
  4601.                 Mem329[dwArg08 + 0x04:word32] = edi_292;
  4602.                 Mem330[dwArg08 + 0x08:word32] = 0x01;
  4603.                 word32 eax_331 = fn00403DE3(edi_292);
  4604.                 Mem333[fp - 0x34 + 0x00:word32] = 0x06;
  4605.                 Mem334[dwArg08 + 0x0C:word32] = eax_331;
  4606.                 word32 eax_335 = dwArg08 + 0x10;
  4607.                 word32 ecx_338 = ecx_294 *s 0x30 + 4249940;
  4608.                 word32 edx_340 = Mem334[fp - 0x34 + 0x00:word32];
  4609.                 esp_121 = fp - 0x30;
  4610.                 do
  4611.                 {
  4612.                     Mem347[eax_335 + 0x00:word16] = Mem334[ecx_338 + 0x00:word16];
  4613.                     ecx_338 = ecx_338 + 0x02;
  4614.                     eax_335 = eax_335 + 0x02;
  4615.                     edx_340 = edx_340 - 0x01;
  4616.                 } while (edx_340 != 0x00);
  4617.                 goto l00404298;
  4618.             }
  4619.             Mem129[fp - 0x20 + 0x00:word32] = Mem96[fp - 0x20 + 0x00:word32] + 0x01;
  4620.             eax_103 = eax_103 + 0x30;
  4621.         } while (eax_103 <u ~0x0040D85F);
  4622.         if (eax_31 != 65000 && eax_31 != 65001)
  4623.         {
  4624.             Mem150[fp - 0x34 + 0x00:word32] = (word32) di_33;
  4625.             eax_103 = IsValidCodePage(Mem150[fp - 0x34 + 0x00:UINT]);
  4626.             esp_121 = fp - 0x30;
  4627.             if (eax_103 != 0x00)
  4628.             {
  4629.                 Mem160[fp - 0x34 + 0x00:word32] = fp - 0x1C;
  4630.                 Mem162[fp - 0x38 + 0x00:word32] = eax_31;
  4631.                 eax_103 = GetCPInfo(Mem162[fp - 0x38 + 0x00:UINT], Mem162[fp - 0x34 + 0x00:LPCPINFO]);
  4632.                 esp_121 = fp - 0x30;
  4633.                 if (eax_103 != 0x00)
  4634.                 {
  4635.                     Mem171[fp - 0x34 + 0x00:word32] = 0x0101;
  4636.                     Mem174[fp - 0x38 + 0x00:word32] = 0x00;
  4637.                     Mem176[fp - 0x3C + 0x00:word32] = dwArg08 + 0x1C;
  4638.                     word32 edx_178;
  4639.                     word32 edi_179;
  4640.                     fn00404CA0(xmm0_30, ebp, dwArg00, dwArg04, dwArg08, out edx_178, out edi_179);
  4641.                     Mem184[dwArg08 + 0x04:word32] = edi_179;
  4642.                     Mem185[dwArg08 + 0x0C:word32] = 0x00;
  4643.                     esp_121 = fp - 0x30;
  4644.                     if (Mem185[fp - 0x1C + 0x00:word32] >u 0x01)
  4645.                     {
  4646.                         if (Mem185[fp - 22 + 0x00:byte] != 0x00)
  4647.                         {
  4648.                             word32 esi_241 = fp - 0x15;
  4649.                             do
  4650.                             {
  4651.                                 byte cl_251 = Mem185[esi_241 + 0x00:byte];
  4652.                                 if (cl_251 == 0x00)
  4653.                                     goto l004042BA;
  4654.                                 word32 eax_256 = (word32) Mem185[esi_241 - 0x01 + 0x00:byte];
  4655.                                 word32 ecx_259 = (word32) cl_251;
  4656.                                 while (eax_256 <=u ecx_259)
  4657.                                 {
  4658.                                     Mem274[dwArg08 + 0x1D + eax_256:byte] = Mem185[dwArg08 + 0x1D + eax_256:byte] | 0x04;
  4659.                                     eax_256 = eax_256 + 0x01;
  4660.                                 }
  4661.                                 word32 esi_268 = esi_241 + 0x01;
  4662.                                 esi_241 = esi_268 + 0x01;
  4663.                             } while (Mem185[esi_268 + 0x00:byte] != 0x00);
  4664.                         }
  4665. l004042BA:
  4666.                         word32 eax_219 = dwArg08 + 0x1E;
  4667.                         word32 ecx_222 = 0xFE;
  4668.                         do
  4669.                         {
  4670.                             Mem227[eax_219 + 0x00:byte] = Mem185[eax_219 + 0x00:byte] | 0x08;
  4671.                             eax_219 = eax_219 + 0x01;
  4672.                             ecx_222 = ecx_222 - 0x01;
  4673.                         } while (ecx_222 != 0x00);
  4674.                         Mem239[dwArg08 + 0x0C:word32] = fn00403DE3(Mem227[dwArg08 + 0x04:word32]);
  4675.                         Mem240[dwArg08 + 0x08:word32] = 0x01;
  4676.                     }
  4677.                     else
  4678.                         Mem281[dwArg08 + 0x08:word32] = 0x00;
  4679.                     Mem204[dwArg08 + 0x10:word32] = 0x00;
  4680.                     Mem206[dwArg08 + 0x14:word32] = 0x00;
  4681.                     Mem208[dwArg08 + 0x18:word32] = 0x00;
  4682. l00404298:
  4683.                     word128 xmm0_123;
  4684.                     fn00403E76(dwArg08, fp - 0x04, dwArg08, es, ds, xmm0_30, out xmm0_123);
  4685.                     word128 xmm0_126;
  4686.                     edx_127 = fn00403E76(dwArg08, fp - 0x04, dwArg08, es, ds, xmm0_123, out xmm0_126);
  4687. l0040415B:
  4688.                     eax_141 = 0x00;
  4689. l004042FF:
  4690.                     word32 esp_53 = esp_121 + 0x04;
  4691.                     return fn00404BEF(eax_141, Mem36[fp - 0x08 + 0x00:word32] ^ fp - 0x04, edx_127, Mem36[esp_53 + 0x04:word32], fp - 0x04, Mem36[esp_53 + 0x00:word32], Mem36[esp_121 + 0x00:word32], es, ds);
  4692.                 }
  4693.                 if (Mem162[4252548:word32] != 0x00)
  4694.                     goto l00404154;
  4695.             }
  4696.         }
  4697.         eax_141 = eax_103 | ~0x00;
  4698.         goto l004042FF;
  4699.     }
  4700.     else
  4701.     {
  4702. l00404154:
  4703.         edx_127 = fn00403E12(dwArg08, xmm0_30);
  4704.         goto l0040415B;
  4705.     }
  4706. }
  4707.  
  4708. word32 fn0040430E(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  4709. {
  4710. fn0040430E_entry:
  4711.     def fp
  4712.     def ebx
  4713.     def esi
  4714.     def edi
  4715.     def dwLoc0C
  4716.     def Mem0
  4717.     def es
  4718.     def ds
  4719.     def dwArg00
  4720.     def dwArg04
  4721.     def dwArg08
  4722.     def dwArg0C
  4723.     dwLoc04_3 = 0x14
  4724.     esp_4 = fp - 0x08
  4725.     dwLoc08_5 = 0x0040B688
  4726.     eax_11 = fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B688, 0x14, out ebp_10)
  4727.     v4_13 = Mem0[ebp_10 - 0x20 + 0x00:word32] | ~0x00
  4728.     Mem14[ebp_10 - 0x20 + 0x00:word32] = v4_13
  4729.     fn00402C19(ebx, ebp_10, esi, es, ds, out ebx_19, out ebp_20, out xmm0_21)
  4730.     edi_23 = eax_11
  4731.     Mem24[ebp_20 - 0x24 + 0x00:word32] = eax_11
  4732.     fn00404009(ebx_19, esi, eax_11, es, ds, out edx_25, out ebx_26, out ebp_27, out esi_28, out edi_29, out xmm0_30)
  4733.     ebx_32 = Mem24[edi_29 + 0x68:word32]
  4734.     eax_36 = fn004040AD(es, ds, out edx_34, out xmm0_35)
  4735.     Mem37[ebp_27 + 0x08:word32] = eax_36
  4736.     branch eax_36 == Mem37[ebx_32 + 0x04:word32] l0040449B
  4737.     goto l00404344
  4738. l0040430E:
  4739. l00404344:
  4740.     esp_67 = fp - 0x0C
  4741.     Mem68[fp - 0x0C + 0x00:word32] = 0x0220
  4742.     eax_74 = fn0040489A(ebx_32, ebp_27, es, ds, out ebx_69, out ebp_70, out esi_71, out edi_72, out xmm0_73)
  4743.     esp_76 = fp - 0x08
  4744.     ebx_77 = eax_74
  4745.     branch eax_74 == 0x00 l0040449F
  4746. l00404359:
  4747.     ecx_85 = 0x88
  4748.     esi_88 = Mem68[edi_72 + 0x68:word32]
  4749.     edi_89 = eax_74
  4750. l00404363:
  4751.     esi_90 = PHI(esi_88, esi_97)
  4752.     edi_91 = PHI(edi_89, edi_98)
  4753.     ecx_92 = PHI(ecx_85, ecx_99)
  4754.     branch ecx_92 == 0x00 l00404365
  4755. l00404363_1:
  4756.     v14_95 = Mem68[esi_90 + 0x00:word32]
  4757.     Mem96[edi_91 + 0x00:word32] = v14_95
  4758.     esi_97 = esi_90 + 0x04
  4759.     edi_98 = edi_91 + 0x04
  4760.     ecx_99 = ecx_92 - 0x01
  4761.     goto l00404363
  4762. l00404365:
  4763.     v16_102 = Mem68[eax_74 + 0x00:word32] & 0x00
  4764.     Mem103[eax_74 + 0x00:word32] = v16_102
  4765.     esp_106 = fp - 0x0C
  4766.     Mem107[fp - 0x0C + 0x00:word32] = eax_74
  4767.     esp_108 = fp - 0x10
  4768.     Mem109[fp - 0x10 + 0x00:word32] = Mem107[ebp_70 + 0x08:word32]
  4769.     eax_110 = fn00404129(ebp_70, es, ds, dwArg00, dwArg04)
  4770.     esp_112 = fp - 0x0C
  4771.     esp_114 = fp - 0x08
  4772.     Mem115[ebp_70 - 0x20 + 0x00:word32] = eax_110
  4773.     branch eax_110 != 0x00 l0040447A
  4774. l0040437E:
  4775.     esi_119 = Mem115[ebp_70 - 0x24 + 0x00:word32]
  4776.     esp_120 = fp - 0x0C
  4777.     Mem121[fp - 0x0C + 0x00:word32] = Mem115[esi_119 + 0x68:word32]
  4778.     eax_122 = InterlockedDecrement(Mem121[fp - 0x0C + 0x00:(ptr LONG)])
  4779.     esp_123 = fp - 0x08
  4780.     branch eax_122 != 0x00 l0040439F
  4781. l0040438E:
  4782.     eax_251 = Mem121[esi_119 + 0x68:word32]
  4783.     branch eax_251 == 4248864 l0040439F
  4784. l00404398:
  4785.     esp_254 = fp - 0x0C
  4786.     Mem255[fp - 0x0C + 0x00:word32] = eax_251
  4787.     fn004047EB(eax_74, esi_119, edi_91, es, ds, out eax_256, out edx_257, out ebx_258, out ebp_259, out esi_260, out edi_261, out xmm0_262)
  4788.     esp_265 = fp - 0x08
  4789. l0040439F:
  4790.     esp_131 = PHI(esp_123, esp_123, esp_265)
  4791.     ebp_132 = PHI(ebp_70, ebp_70, ebp_259)
  4792.     ebx_133 = PHI(ebx_77, ebx_77, ebx_258)
  4793.     esi_134 = PHI(esi_119, esi_119, esi_260)
  4794.     Mem136[esi_134 + 0x68:word32] = ebx_133
  4795.     esp_137 = esp_131 - 0x04
  4796.     Mem138[esp_137 + 0x00:word32] = ebx_133
  4797.     edi_139 = InterlockedIncrement
  4798.     InterlockedIncrement(Mem138[esp_137 + 0x00:(ptr LONG)])
  4799.     esp_141 = esp_137 + 0x04
  4800.     branch (Mem138[esi_134 + 0x70:byte] & 0x02) != 0x00 || (Mem138[0x0040DA44:byte] & 0x01) != 0x00 l0040449F
  4801.     goto l004043C2
  4802. l004043B5:
  4803. l004043C2:
  4804.     esp_148 = esp_137
  4805.     Mem149[esp_137 + 0x00:word32] = 0x0D
  4806.     D_153 = fn00405B56(ebx_133, InterlockedIncrement, es, ds, dwArg00, out edx_150, out ebx_151, out xmm0_152)
  4807.     esp_155 = esp_137 + 0x04
  4808.     v17_156 = Mem149[ebp_132 - 0x04 + 0x00:word32] & 0x00
  4809.     Mem157[ebp_132 - 0x04 + 0x00:word32] = v17_156
  4810.     eax_159 = Mem157[ebx_151 + 0x04:word32]
  4811.     Mem160[4252564:word32] = eax_159
  4812.     eax_161 = Mem160[ebx_151 + 0x08:word32]
  4813.     Mem162[4252568:word32] = eax_161
  4814.     eax_163 = Mem162[ebx_151 + 0x0C:word32]
  4815.     Mem164[4252572:word32] = eax_163
  4816.     eax_165 = 0x00
  4817. l004043E8:
  4818.     eax_168 = PHI(eax_165, eax_176)
  4819.     Mem171[ebp_132 - 0x1C + 0x00:word32] = eax_168
  4820.     branch eax_168 >= 0x05 l00404400
  4821. l004043F0:
  4822.     cx_174 = (ebx_151 + 0x10)[eax_168 * 0x02]
  4823.     4252552[eax_168 * 0x02] = cx_174
  4824.     eax_176 = eax_168 + 0x01
  4825.     goto l004043E8
  4826. l00404400:
  4827.     eax_178 = 0x00
  4828. l00404402:
  4829.     eax_181 = PHI(eax_178, eax_189)
  4830.     Mem184[ebp_132 - 0x1C + 0x00:word32] = eax_181
  4831.     branch eax_181 >= 0x0101 l00404419
  4832. l0040440C:
  4833.     cl_187 = Mem184[eax_181 + 0x1C + ebx_151:byte]
  4834.     Mem188[eax_181 + 0x0040D740:byte] = cl_187
  4835.     eax_189 = eax_181 + 0x01
  4836.     goto l00404402
  4837. l00404419:
  4838.     eax_191 = 0x00
  4839. l0040441B:
  4840.     eax_194 = PHI(eax_191, eax_202)
  4841.     Mem197[ebp_132 - 0x1C + 0x00:word32] = eax_194
  4842.     branch eax_194 >= 0x0100 l00404435
  4843. l00404425:
  4844.     cl_200 = Mem197[eax_194 + 0x011D + ebx_151:byte]
  4845.     Mem201[eax_194 + 0x0040D848:byte] = cl_200
  4846.     eax_202 = eax_194 + 0x01
  4847.     goto l0040441B
  4848. l00404435:
  4849.     esp_204 = esp_137
  4850.     Mem205[esp_137 + 0x00:word32] = Mem197[4249928:word32]
  4851.     eax_206 = InterlockedDecrement(Mem205[esp_137 + 0x00:(ptr LONG)])
  4852.     esp_207 = esp_137 + 0x04
  4853.     branch eax_206 != 0x00 l00404458
  4854. l00404445:
  4855.     eax_236 = Mem205[4249928:word32]
  4856.     branch eax_236 == 4248864 l00404458
  4857. l00404451:
  4858.     esp_239 = esp_137
  4859.     Mem240[esp_137 + 0x00:word32] = eax_236
  4860.     fn004047EB(ebx_151, esi_134, InterlockedIncrement, es, ds, out eax_241, out edx_242, out ebx_243, out ebp_244, out esi_245, out edi_246, out xmm0_247)
  4861.     esp_250 = esp_137 + 0x04
  4862. l00404458:
  4863.     esp_211 = PHI(esp_207, esp_207, esp_250)
  4864.     ebx_212 = PHI(ebx_151, ebx_151, ebx_243)
  4865.     Mem213[4249928:word32] = ebx_212
  4866.     esp_214 = esp_211 - 0x04
  4867.     Mem215[esp_214 + 0x00:word32] = ebx_212
  4868.     eax_221 = InterlockedIncrement(Mem0[esp + 0x00:(ptr LONG)])
  4869.     Mem235[ebp_217 - 0x04 + 0x00:word32] = ~0x01
  4870.     fn0040446F()
  4871.     goto l0040449F
  4872. l0040447A:
  4873.     branch eax_110 != ~0x00 l0040449F
  4874. l0040447F:
  4875.     branch eax_74 == 4248864 l0040448E
  4876. l00404487:
  4877.     esp_284 = fp - 0x0C
  4878.     Mem285[fp - 0x0C + 0x00:word32] = eax_74
  4879.     fn004047EB(eax_74, esi_90, edi_91, es, ds, out eax_286, out edx_287, out ebx_288, out ebp_289, out esi_290, out edi_291, out xmm0_292)
  4880. l0040448E:
  4881.     ebp_271 = PHI(ebp_70, ebp_289)
  4882.     ebx_272 = PHI(ebx_77, ebx_288)
  4883.     esi_273 = PHI(esi_90, esi_290)
  4884.     fn0040197F(ebx_272, ebp_271, esi_273, es, ds, out eax_275, out edx_276, out ebx_277, out ebp_278, out esi_279, out edi_280, out xmm0_281)
  4885.     Mem283[eax_275 + 0x00:word32] = 22
  4886.     goto l0040449F
  4887. l0040449B:
  4888.     v15_296 = Mem37[ebp_27 - 0x20 + 0x00:word32] & 0x00
  4889.     Mem297[ebp_27 - 0x20 + 0x00:word32] = v15_296
  4890. l0040449F:
  4891.     ebp_50 = PHI(ebp_70, ebp_27, ebp_70, ebp_132, ebp_132, ebp_278, ebp_217)
  4892.     ebx_63 = fn00402F65(ebp_50, 0x14, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_60, out esi_61, out edi_62)
  4893.     return ebx_63
  4894. fn0040430E_exit:
  4895.     use ebp_60 (=> ebpOut)
  4896.     use esi_61 (=> esiOut)
  4897.     use edi_62 (=> ediOut)
  4898. }
  4899.  
  4900. void fn0040446F()
  4901. {
  4902.     fn00405A7C(0x0D);
  4903.     return;
  4904. }
  4905.  
  4906. word32 fn004044A8(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  4907. {
  4908.     *ebpOut = ebp;
  4909.     *esiOut = esi;
  4910.     *ediOut = edi;
  4911.     *ebxOut = ebx;
  4912.     if (Mem0[0x0040FACC:word32] == 0x00)
  4913.     {
  4914.         word32 ebp_29;
  4915.         word32 esi_30;
  4916.         word32 edi_31;
  4917.         word32 ebx_32;
  4918.         *ebxOut = fn0040430E(ebx, esi, edi, es, ds, out ebp_29, out esi_30, out edi_31);
  4919.         Mem35[0x0040FACC:word32] = 0x01;
  4920.     }
  4921.     return 0x00;
  4922. }
  4923.  
  4924. word32 fn004044C6(word32 ebp, word32 edi, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & ediOut, ptr32 & xmm0Out)
  4925. {
  4926.     word32 edi_256 = edi;
  4927.     word32 ebp_143 = fp - 0x04;
  4928.     word32 esi_144 = dwArg04;
  4929.     word32 eax_17 = Mem0[dwArg04 + 188:word32];
  4930.     word32 ebx_142 = 0x00;
  4931.     word32 esp_100 = fp - 0x10;
  4932.     if (eax_17 != 0x00 && eax_17 != 0x0040DD68)
  4933.     {
  4934.         word32 eax_243 = Mem0[dwArg04 + 0xB0:word32];
  4935.         if (eax_243 != 0x00 && Mem0[eax_243 + 0x00:word32] == 0x00)
  4936.         {
  4937.             word32 eax_248 = Mem0[dwArg04 + 0xB8:word32];
  4938.             if (eax_248 != 0x00 && Mem0[eax_248 + 0x00:word32] == 0x00)
  4939.             {
  4940.                 word32 eax_317;
  4941.                 word32 edx_318;
  4942.                 word32 ebx_319;
  4943.                 word32 ebp_320;
  4944.                 word128 xmm0_323;
  4945.                 fn004047EB(0x00, dwArg04, edi, es, ds, out eax_317, out edx_318, out ebx_319, out ebp_320, out esi_144, out edi_256, out xmm0_323);
  4946.                 Mem326[fp - 0x18 + 0x00:word32] = Mem0[esi_144 + 188:word32];
  4947.                 ebx_142 = fn0040822D(ebx_319, edi_256, es, ds, dwArg00);
  4948.                 esp_100 = fp - 0x10;
  4949.             }
  4950.             word32 eax_261 = Mem0[esi_144 + 0xB4:word32];
  4951.             if (eax_261 != ebx_142 && Mem0[eax_261 + 0x00:word32] == ebx_142)
  4952.             {
  4953.                 word32 esp_296 = esp_100 - 0x04;
  4954.                 Mem297[esp_296 + 0x00:word32] = eax_261;
  4955.                 word32 eax_298;
  4956.                 word32 edx_299;
  4957.                 word32 ebx_300;
  4958.                 word32 ebp_301;
  4959.                 word128 xmm0_304;
  4960.                 fn004047EB(ebx_142, esi_144, edi_256, es, ds, out eax_298, out edx_299, out ebx_300, out ebp_301, out esi_144, out edi_256, out xmm0_304);
  4961.                 Mem307[esp_296 - 0x04 + 0x00:word32] = Mem297[esi_144 + 188:word32];
  4962.                 ebx_142 = fn004081E8(ebx_300, edi_256, es, ds, dwArg00);
  4963.                 esp_100 = esp_296 + 0x04;
  4964.             }
  4965.             word32 esp_270 = esp_100 - 0x04;
  4966.             Mem271[esp_270 + 0x00:word32] = Mem0[esi_144 + 0xB0:word32];
  4967.             word32 eax_272;
  4968.             word32 edx_273;
  4969.             word32 ebx_274;
  4970.             word32 ebp_275;
  4971.             word32 esi_276;
  4972.             word32 edi_277;
  4973.             word128 xmm0_278;
  4974.             fn004047EB(ebx_142, esi_144, edi_256, es, ds, out eax_272, out edx_273, out ebx_274, out ebp_275, out esi_276, out edi_277, out xmm0_278);
  4975.             Mem281[esp_270 - 0x04 + 0x00:word32] = Mem271[esi_276 + 188:word32];
  4976.             word32 eax_282;
  4977.             word32 edx_283;
  4978.             word128 xmm0_288;
  4979.             fn004047EB(ebx_274, esi_276, edi_277, es, ds, out eax_282, out edx_283, out ebx_142, out ebp_143, out esi_144, out edi_256, out xmm0_288);
  4980.             esp_100 = esp_270 + 0x04;
  4981.         }
  4982.     }
  4983.     word32 eax_38 = Mem0[esi_144 + 0xC0:word32];
  4984.     if (eax_38 != ebx_142 && Mem0[eax_38 + 0x00:word32] == ebx_142)
  4985.     {
  4986.         word32 esp_192 = esp_100 - 0x04;
  4987.         Mem193[esp_192 + 0x00:word32] = Mem0[esi_144 + 0xC4:word32] - 0xFE;
  4988.         word32 eax_194;
  4989.         word32 edx_195;
  4990.         word32 ebx_196;
  4991.         word32 ebp_197;
  4992.         word32 esi_198;
  4993.         word32 edi_199;
  4994.         word128 xmm0_200;
  4995.         fn004047EB(ebx_142, esi_144, edi_256, es, ds, out eax_194, out edx_195, out ebx_196, out ebp_197, out esi_198, out edi_199, out xmm0_200);
  4996.         Mem207[esp_192 - 0x04 + 0x00:word32] = Mem193[esi_198 + 0xCC:word32] - 0x80;
  4997.         word32 eax_208;
  4998.         word32 edx_209;
  4999.         word32 ebx_210;
  5000.         word32 ebp_211;
  5001.         word32 esi_212;
  5002.         word32 edi_213;
  5003.         word128 xmm0_214;
  5004.         fn004047EB(ebx_196, esi_198, 0x80, es, ds, out eax_208, out edx_209, out ebx_210, out ebp_211, out esi_212, out edi_213, out xmm0_214);
  5005.         Mem220[esp_192 - 0x08 + 0x00:word32] = Mem207[esi_212 + 0xD0:word32] - edi_213;
  5006.         word32 eax_221;
  5007.         word32 edx_222;
  5008.         word32 ebx_223;
  5009.         word32 ebp_224;
  5010.         word32 esi_225;
  5011.         word32 edi_226;
  5012.         word128 xmm0_227;
  5013.         fn004047EB(ebx_210, esi_212, edi_213, es, ds, out eax_221, out edx_222, out ebx_223, out ebp_224, out esi_225, out edi_226, out xmm0_227);
  5014.         Mem230[esp_192 - 0x0C + 0x00:word32] = Mem220[esi_225 + 0xC0:word32];
  5015.         word32 eax_231;
  5016.         word32 edx_232;
  5017.         word32 edi_236;
  5018.         word128 xmm0_237;
  5019.         fn004047EB(ebx_223, esi_225, edi_226, es, ds, out eax_231, out edx_232, out ebx_142, out ebp_143, out esi_144, out edi_236, out xmm0_237);
  5020.         esp_100 = esp_192 + 0x04;
  5021.     }
  5022.     word32 edi_48 = esi_144 + 212;
  5023.     word32 eax_49 = Mem0[edi_48 + 0x00:word32];
  5024.     if (eax_49 != 0x0040DCA8 && Mem0[eax_49 + 0xB4:word32] == ebx_142)
  5025.     {
  5026.         word32 esp_169 = esp_100 - 0x04;
  5027.         Mem170[esp_169 + 0x00:word32] = eax_49;
  5028.         word32 ebx_172 = fn00408053(ebx_142, edi_48, es, ds, dwArg00);
  5029.         Mem174[esp_169 - 0x04 + 0x00:word32] = Mem170[edi_48 + 0x00:word32];
  5030.         word32 eax_175;
  5031.         word32 edx_176;
  5032.         word32 edi_180;
  5033.         word128 xmm0_181;
  5034.         fn004047EB(ebx_172, esi_144, edi_48, es, ds, out eax_175, out edx_176, out ebx_142, out ebp_143, out esi_144, out edi_180, out xmm0_181);
  5035.         esp_100 = esp_169 + 0x04;
  5036.     }
  5037.     Mem64[ebp_143 + 0x08:word32] = 0x06;
  5038.     word32 edi_101 = esi_144 + 0x50;
  5039.     do
  5040.     {
  5041.         if (Mem64[edi_101 - 0x08 + 0x00:word32] != 0x0040DA48)
  5042.         {
  5043.             word32 eax_150 = Mem64[edi_101 + 0x00:word32];
  5044.             if (eax_150 != ebx_142 && Mem64[eax_150 + 0x00:word32] == ebx_142)
  5045.             {
  5046.                 word32 esp_155 = esp_100 - 0x04;
  5047.                 Mem156[esp_155 + 0x00:word32] = eax_150;
  5048.                 word32 eax_157;
  5049.                 word32 edx_158;
  5050.                 word128 xmm0_163;
  5051.                 fn004047EB(ebx_142, esi_144, edi_101, es, ds, out eax_157, out edx_158, out ebx_142, out ebp_143, out esi_144, out edi_101, out xmm0_163);
  5052.                 esp_100 = esp_155 + 0x04;
  5053.             }
  5054.         }
  5055.         if (Mem64[edi_101 - 0x04 + 0x00:word32] != ebx_142)
  5056.         {
  5057.             word32 eax_133 = Mem64[edi_101 + 0x04:word32];
  5058.             if (eax_133 != ebx_142 && Mem64[eax_133 + 0x00:word32] == ebx_142)
  5059.             {
  5060.                 word32 esp_138 = esp_100 - 0x04;
  5061.                 Mem139[esp_138 + 0x00:word32] = eax_133;
  5062.                 word32 eax_140;
  5063.                 word32 edx_141;
  5064.                 word128 xmm0_146;
  5065.                 fn004047EB(ebx_142, esi_144, edi_101, es, ds, out eax_140, out edx_141, out ebx_142, out ebp_143, out esi_144, out edi_101, out xmm0_146);
  5066.                 esp_100 = esp_138 + 0x04;
  5067.             }
  5068.         }
  5069.         word32 v13_103 = Mem64[ebp_143 + 0x08:word32] - 0x01;
  5070.         Mem104[ebp_143 + 0x08:word32] = v13_103;
  5071.         edi_101 = edi_101 + 0x10;
  5072.     } while (v13_103 != 0x00);
  5073.     word32 esp_107 = esp_100 - 0x04;
  5074.     Mem108[esp_107 + 0x00:word32] = esi_144;
  5075.     word32 eax_111;
  5076.     word32 edx_112;
  5077.     word32 ebx_113;
  5078.     word32 ebp_114;
  5079.     word32 esi_115;
  5080.     word32 edi_116;
  5081.     word128 xmm0_117;
  5082.     fn004047EB(ebx_142, esi_144, edi_101, es, ds, out eax_111, out edx_112, out ebx_113, out ebp_114, out esi_115, out edi_116, out xmm0_117);
  5083.     word32 edi_121;
  5084.     *ediOut = Mem108[esp_107 + 0x04:word32];
  5085.     word32 ebx_125;
  5086.     *ebxOut = Mem108[esp_107 + 0x0C:word32];
  5087.     word32 ebp_127;
  5088.     *ebpOut = Mem108[esp_107 + 0x10:word32];
  5089.     return edx_112;
  5090. }
  5091.  
  5092. word32 fn0040460F(word32 dwArg04, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  5093. {
  5094. fn0040460F_entry:
  5095.     def fp
  5096.     def dwArg04
  5097.     def Mem0
  5098.     esi_14 = InterlockedIncrement
  5099.     edi_18 = dwArg04
  5100.     dwLoc14_20 = dwArg04
  5101.     InterlockedIncrement(dwArg04)
  5102.     esp_22 = fp - 0x10
  5103.     eax_24 = Mem0[dwArg04 + 0xB0:word32]
  5104.     branch eax_24 == 0x00 l00404630
  5105.     goto l0040462D
  5106. l0040460F:
  5107. l0040462D:
  5108.     dwLoc14_196 = eax_24
  5109.     InterlockedIncrement(eax_24)
  5110.     esp_198 = fp - 0x10
  5111. l00404630:
  5112.     esp_29 = PHI(esp_22, esp_198)
  5113.     eax_30 = Mem0[dwArg04 + 0xB8:word32]
  5114.     branch eax_30 == 0x00 l0040463D
  5115. l0040463A:
  5116.     eax_190 = InterlockedIncrement(Mem0[esp + 0x00:(ptr LONG)])
  5117. l0040463D:
  5118.     edi_37 = PHI(edi_18, edi_186)
  5119.     esi_38 = PHI(esi_14, esi_189)
  5120.     esp_41 = PHI(esp_29, esp_185)
  5121.     eax_42 = Mem0[edi_37 + 0xB4:word32]
  5122.     branch eax_42 == 0x00 l0040464A
  5123. l00404647:
  5124.     esp_171 = esp_41 - 0x04
  5125.     Mem172[esp_171 + 0x00:word32] = eax_42
  5126.     call esi_38 (retsize: 4; depth: 4)
  5127.         uses: C_45,dwLoc04_6,dwLoc08_10,dwLoc0C_13,dwLoc10_16,dwLoc14_35,eax_42,ebp_40,ebx_39,edi_37,esi_38,esp_171,SCZO_36,SZO_43,Z_44
  5128.         defs: C_180,eax_178,ebp_175,ebx_176,edi_174,esi_177,esp_173,SCZO_182,SZO_179,Z_181
  5129. l0040464A:
  5130.     edi_47 = PHI(edi_37, edi_174)
  5131.     esi_48 = PHI(esi_38, esi_177)
  5132.     esp_51 = PHI(esp_41, esp_173)
  5133.     eax_52 = Mem0[edi_47 + 0xC0:word32]
  5134.     branch eax_52 == 0x00 l00404657
  5135. l00404654:
  5136.     esp_159 = esp_51 - 0x04
  5137.     Mem160[esp_159 + 0x00:word32] = eax_52
  5138.     call esi_48 (retsize: 4; depth: 4)
  5139.         uses: C_55,dwLoc04_6,dwLoc08_10,dwLoc0C_13,dwLoc10_16,dwLoc14_35,eax_52,ebp_50,ebx_49,edi_47,esi_48,esp_159,SCZO_46,SZO_53,Z_54
  5140.         defs: C_168,eax_166,ebp_163,ebx_164,edi_162,esi_165,esp_161,SCZO_170,SZO_167,Z_169
  5141. l00404657:
  5142.     edi_61 = PHI(edi_47, edi_162)
  5143.     esi_62 = PHI(esi_48, esi_165)
  5144.     esp_64 = PHI(esp_51, esp_161)
  5145.     ebx_65 = edi_61 + 0x50
  5146.     dwArg04_66 = 0x06
  5147. l00404661:
  5148.     dwArg04_67 = PHI(dwArg04_66, dwArg04_98)
  5149.     edi_71 = PHI(edi_61, edi_90)
  5150.     esi_72 = PHI(esi_62, esi_91)
  5151.     ebx_73 = PHI(ebx_65, ebx_95)
  5152.     esp_75 = PHI(esp_64, esp_94)
  5153.     branch Mem0[ebx_73 - 0x08 + 0x00:word32] == 0x0040DA48 l00404673
  5154. l0040466A:
  5155.     eax_143 = Mem0[ebx_73 + 0x00:word32]
  5156.     branch eax_143 == 0x00 l00404673
  5157. l00404670:
  5158.     esp_147 = esp_75 - 0x04
  5159.     Mem148[esp_147 + 0x00:word32] = eax_143
  5160.     call esi_72 (retsize: 4; depth: 4)
  5161.         uses: C_146,dwLoc04_6,dwLoc08_10,dwLoc0C_13,dwLoc10_16,dwLoc14_35,eax_143,ebp_74,ebx_73,edi_71,esi_72,esp_147,SCZO_76,SZO_144,Z_145
  5162.         defs: C_156,eax_154,ebp_151,ebx_152,edi_150,esi_153,esp_149,SCZO_158,SZO_155,Z_157
  5163. l00404673:
  5164.     edi_81 = PHI(edi_71, edi_150, edi_71)
  5165.     esi_82 = PHI(esi_72, esi_153, esi_72)
  5166.     ebx_83 = PHI(ebx_73, ebx_152, ebx_73)
  5167.     esp_85 = PHI(esp_75, esp_149, esp_75)
  5168.     branch Mem0[ebx_83 - 0x04 + 0x00:word32] == 0x00 l00404683
  5169. l00404679:
  5170.     eax_127 = Mem0[ebx_83 + 0x04:word32]
  5171.     branch eax_127 == 0x00 l00404683
  5172. l00404680:
  5173.     esp_131 = esp_85 - 0x04
  5174.     Mem132[esp_131 + 0x00:word32] = eax_127
  5175.     call esi_82 (retsize: 4; depth: 4)
  5176.         uses: C_130,dwLoc04_6,dwLoc08_10,dwLoc0C_13,dwLoc10_16,dwLoc14_35,eax_127,ebp_84,ebx_83,edi_81,esi_82,esp_131,SCZO_86,SZO_128,Z_129
  5177.         defs: C_140,eax_138,ebp_135,ebx_136,edi_134,esi_137,esp_133,SCZO_142,SZO_139,Z_141
  5178. l00404683:
  5179.     edi_90 = PHI(edi_81, edi_81, edi_134)
  5180.     esi_91 = PHI(esi_82, esi_82, esi_137)
  5181.     ebx_92 = PHI(ebx_83, ebx_83, ebx_136)
  5182.     esp_94 = PHI(esp_85, esp_85, esp_133)
  5183.     ebx_95 = ebx_92 + 0x10
  5184.     v12_97 = dwArg04_67 - 0x01
  5185.     dwArg04_98 = v12_97
  5186.     branch v12_97 != 0x00 l00404661
  5187. l0040468B:
  5188.     eax_101 = Mem0[edi_90 + 212:word32]
  5189.     eax_102 = eax_101 + 0xB4
  5190.     esp_104 = esp_94 - 0x04
  5191.     Mem105[esp_104 + 0x00:word32] = eax_101 + 0xB4
  5192.     call esi_91 (retsize: 4; depth: 4)
  5193.         uses: C_88,dwLoc04_6,dwLoc08_10,dwLoc0C_13,dwLoc10_16,dwLoc14_35,eax_102,ebp_93,ebx_95,edi_90,esi_91,esp_104,SCZO_103,SZO_99,Z_100
  5194.         defs: C_113,eax_111,ebp_108,ebx_109,edi_107,esi_110,esp_106,SCZO_115,SZO_112,Z_114
  5195.     edi_116 = Mem105[esp_106 + 0x00:word32]
  5196.     esp_117 = esp_106 + 0x04
  5197.     esi_118 = Mem105[esp_106 + 0x04:word32]
  5198.     esp_119 = esp_106 + 0x08
  5199.     ebx_120 = Mem105[esp_106 + 0x08:word32]
  5200.     esp_121 = esp_106 + 0x0C
  5201.     ebp_122 = Mem105[esp_106 + 0x0C:word32]
  5202.     return ebx_120
  5203. fn0040460F_exit:
  5204.     use ebp_122 (=> ebpOut)
  5205.     use esi_118 (=> esiOut)
  5206.     use edi_116 (=> ediOut)
  5207. }
  5208.  
  5209. word32 fn0040469E(word32 dwArg04, ptr32 & esiOut)
  5210. {
  5211. fn0040469E_entry:
  5212.     def fp
  5213.     def dwArg04
  5214.     def esi
  5215.     def ebx
  5216.     def Mem0
  5217.     edi_11 = dwArg04
  5218.     branch dwArg04 == 0x00 l00404732
  5219.     goto l004046AF
  5220. l0040469E:
  5221. l004046AF:
  5222.     esi_44 = InterlockedDecrement
  5223.     dwLoc14_46 = dwArg04
  5224.     InterlockedDecrement(dwArg04)
  5225.     esp_48 = fp - 0x10
  5226.     eax_49 = Mem0[dwArg04 + 0xB0:word32]
  5227.     branch eax_49 == 0x00 l004046C7
  5228. l004046C4:
  5229.     dwLoc14_213 = eax_49
  5230.     InterlockedDecrement(eax_49)
  5231.     esp_215 = fp - 0x10
  5232. l004046C7:
  5233.     esp_54 = PHI(esp_48, esp_215)
  5234.     eax_55 = Mem0[dwArg04 + 0xB8:word32]
  5235.     branch eax_55 == 0x00 l004046D4
  5236. l004046D1:
  5237.     eax_210 = InterlockedDecrement(Mem0[esp + 0x00:(ptr LONG)])
  5238. l004046D4:
  5239.     esi_61 = PHI(esi_44, esi_209)
  5240.     edi_63 = PHI(edi_11, edi_203)
  5241.     esp_65 = PHI(esp_54, esp_202)
  5242.     eax_66 = Mem0[edi_63 + 0xB4:word32]
  5243.     branch eax_66 == 0x00 l004046E1
  5244. l004046DE:
  5245.     esp_188 = esp_65 - 0x04
  5246.     Mem189[esp_188 + 0x00:word32] = eax_66
  5247.     call esi_61 (retsize: 4; depth: 4)
  5248.         uses: C_69,dwLoc04_6,dwLoc08_9,dwLoc0C_41,dwLoc10_43,dwLoc14_59,eax_66,ebp_64,ebx_62,edi_63,esi_61,esp_188,SCZO_60,SZO_67,Z_68
  5249.         defs: C_194,eax_198,ebp_192,ebx_196,edi_191,esi_197,esp_190,SCZO_199,SZO_193,Z_195
  5250. l004046E1:
  5251.     esi_71 = PHI(esi_61, esi_197)
  5252.     edi_73 = PHI(edi_63, edi_191)
  5253.     esp_75 = PHI(esp_65, esp_190)
  5254.     eax_76 = Mem0[edi_73 + 0xC0:word32]
  5255.     branch eax_76 == 0x00 l004046EE
  5256. l004046EB:
  5257.     esp_176 = esp_75 - 0x04
  5258.     Mem177[esp_176 + 0x00:word32] = eax_76
  5259.     call esi_71 (retsize: 4; depth: 4)
  5260.         uses: C_79,dwLoc04_6,dwLoc08_9,dwLoc0C_41,dwLoc10_43,dwLoc14_59,eax_76,ebp_74,ebx_72,edi_73,esi_71,esp_176,SCZO_70,SZO_77,Z_78
  5261.         defs: C_182,eax_186,ebp_180,ebx_184,edi_179,esi_185,esp_178,SCZO_187,SZO_181,Z_183
  5262. l004046EE:
  5263.     esi_84 = PHI(esi_71, esi_185)
  5264.     edi_86 = PHI(edi_73, edi_179)
  5265.     esp_88 = PHI(esp_75, esp_178)
  5266.     ebx_89 = edi_86 + 0x50
  5267.     dwArg04_90 = 0x06
  5268. l004046F8:
  5269.     dwArg04_91 = PHI(dwArg04_90, dwArg04_122)
  5270.     esi_94 = PHI(esi_84, esi_113)
  5271.     ebx_95 = PHI(ebx_89, ebx_119)
  5272.     edi_97 = PHI(edi_86, edi_116)
  5273.     esp_99 = PHI(esp_88, esp_118)
  5274.     branch Mem0[ebx_95 - 0x08 + 0x00:word32] == 0x0040DA48 l0040470A
  5275. l00404701:
  5276.     eax_160 = Mem0[ebx_95 + 0x00:word32]
  5277.     branch eax_160 == 0x00 l0040470A
  5278. l00404707:
  5279.     esp_164 = esp_99 - 0x04
  5280.     Mem165[esp_164 + 0x00:word32] = eax_160
  5281.     call esi_94 (retsize: 4; depth: 4)
  5282.         uses: C_163,dwLoc04_6,dwLoc08_9,dwLoc0C_41,dwLoc10_43,dwLoc14_59,eax_160,ebp_98,ebx_95,edi_97,esi_94,esp_164,SCZO_100,SZO_161,Z_162
  5283.         defs: C_170,eax_174,ebp_168,ebx_172,edi_167,esi_173,esp_166,SCZO_175,SZO_169,Z_171
  5284. l0040470A:
  5285.     esi_104 = PHI(esi_94, esi_173, esi_94)
  5286.     ebx_105 = PHI(ebx_95, ebx_172, ebx_95)
  5287.     edi_107 = PHI(edi_97, edi_167, edi_97)
  5288.     esp_109 = PHI(esp_99, esp_166, esp_99)
  5289.     branch Mem0[ebx_105 - 0x04 + 0x00:word32] == 0x00 l0040471A
  5290. l00404710:
  5291.     eax_144 = Mem0[ebx_105 + 0x04:word32]
  5292.     branch eax_144 == 0x00 l0040471A
  5293. l00404717:
  5294.     esp_148 = esp_109 - 0x04
  5295.     Mem149[esp_148 + 0x00:word32] = eax_144
  5296.     call esi_104 (retsize: 4; depth: 4)
  5297.         uses: C_147,dwLoc04_6,dwLoc08_9,dwLoc0C_41,dwLoc10_43,dwLoc14_59,eax_144,ebp_108,ebx_105,edi_107,esi_104,esp_148,SCZO_110,SZO_145,Z_146
  5298.         defs: C_154,eax_158,ebp_152,ebx_156,edi_151,esi_157,esp_150,SCZO_159,SZO_153,Z_155
  5299. l0040471A:
  5300.     esi_113 = PHI(esi_104, esi_104, esi_157)
  5301.     ebx_114 = PHI(ebx_105, ebx_105, ebx_156)
  5302.     edi_116 = PHI(edi_107, edi_107, edi_151)
  5303.     esp_118 = PHI(esp_109, esp_109, esp_150)
  5304.     ebx_119 = ebx_114 + 0x10
  5305.     v12_121 = dwArg04_91 - 0x01
  5306.     dwArg04_122 = v12_121
  5307.     branch v12_121 != 0x00 l004046F8
  5308. l00404722:
  5309.     eax_125 = Mem0[edi_116 + 212:word32]
  5310.     eax_126 = eax_125 + 0xB4
  5311.     esp_128 = esp_118 - 0x04
  5312.     Mem129[esp_128 + 0x00:word32] = eax_125 + 0xB4
  5313.     call esi_113 (retsize: 4; depth: 4)
  5314.         uses: C_112,dwLoc04_6,dwLoc08_9,dwLoc0C_41,dwLoc10_43,dwLoc14_59,eax_126,ebp_117,ebx_119,edi_116,esi_113,esp_128,SCZO_127,SZO_123,Z_124
  5315.         defs: C_134,eax_138,ebp_132,ebx_136,edi_131,esi_137,esp_130,SCZO_139,SZO_133,Z_135
  5316.     esi_140 = Mem129[esp_130 + 0x00:word32]
  5317.     esp_141 = esp_130 + 0x04
  5318.     ebx_142 = Mem129[esp_130 + 0x04:word32]
  5319. l00404732:
  5320.     esi_29 = PHI(esi, esi_140)
  5321.     ebx_30 = PHI(ebx, ebx_142)
  5322.     return ebx_30
  5323. fn0040469E_exit:
  5324.     use esi_29 (=> esiOut)
  5325. }
  5326.  
  5327. word32 fn00404737(word32 eax, word32 esi, word32 edi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & xmm0Out)
  5328. {
  5329.     *ebxOut = ebx;
  5330.     *ebpOut = ebp;
  5331.     *xmm0Out = xmm0;
  5332.     *edxOut = edx;
  5333.     if (edi == 0x00 || eax == 0x00)
  5334.         return 0x00;
  5335.     else
  5336.     {
  5337.         if (Mem0[eax + 0x00:word32] != edi)
  5338.         {
  5339.             Mem65[eax + 0x00:word32] = edi;
  5340.             word32 ebp_66;
  5341.             word32 esi_67;
  5342.             word32 ebx_69;
  5343.             *ebxOut = fn0040460F(edi, out ebp_66, out esi_67, out edi);
  5344.             if (esi_67 != 0x00)
  5345.             {
  5346.                 Mem76[fp - 0x08 + 0x00:word32] = esi_67;
  5347.                 word32 esi_78;
  5348.                 word32 ebx_79;
  5349.                 *ebxOut = fn0040469E(dwArg00, out esi_78);
  5350.                 if (Mem76[esi_78 + 0x00:word32] == 0x00 && esi_78 != 0x0040DA50)
  5351.                 {
  5352.                     Mem87[fp - 0x08 + 0x00:word32] = esi_78;
  5353.                     word32 ebx_90;
  5354.                     word32 ebp_91;
  5355.                     word128 xmm0_93;
  5356.                     word32 edx_94;
  5357.                     *edxOut = fn004044C6(ebp_66, edi, es, ds, dwArg00, out ebx_90, out ebp_91, out edi, out xmm0_93);
  5358.                 }
  5359.             }
  5360.         }
  5361.         return edi;
  5362.     }
  5363. }
  5364.  
  5365. word32 fn00404775(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  5366. {
  5367.     word32 esi_33;
  5368.     word32 ebx_35;
  5369.     word32 ebp_32;
  5370.     word32 ebp_10;
  5371.     word32 eax_11 = fn00402F20(ebx, esi, edi, dwLoc0C, 4241064, 0x0C, out ebp_10);
  5372.     word32 ebx_14;
  5373.     word32 ebp_15;
  5374.     word128 xmm0_16;
  5375.     fn00402C19(ebx, ebp_10, esi, es, ds, out ebx_14, out ebp_15, out xmm0_16);
  5376.     word32 esp_30 = fp - 0x08;
  5377.     word32 eax_20 = Mem0[0x0040DA44:word32];
  5378.     if ((Mem0[eax_11 + 0x70:word32] & eax_20) != 0x00 && Mem0[eax_11 + 0x6C:word32] != 0x00)
  5379.     {
  5380.         word128 xmm0_97;
  5381.         word32 edx_98;
  5382.         *edxOut = fn00402C19(ebx_14, ebp_15, eax_11, es, ds, out ebx_35, out ebp_32, out xmm0_97);
  5383.         esi_33 = Mem0[eax_20 + 0x6C:word32];
  5384.     }
  5385.     else
  5386.     {
  5387.         Mem72[fp - 0x0C + 0x00:word32] = 0x0C;
  5388.         word32 edx_73;
  5389.         word32 ebx_74;
  5390.         word128 xmm0_75;
  5391.         fn00405B56(ebx_14, edi, es, ds, dwArg00, out edx_73, out ebx_74, out xmm0_75);
  5392.         Mem80[ebp_15 - 0x04 + 0x00:word32] = Mem72[ebp_15 - 0x04 + 0x00:word32] & 0x00;
  5393.         word32 edx_85;
  5394.         word128 xmm0_88;
  5395.         word32 eax_89 = fn00404737(eax_11 + 0x6C, eax_11, Mem80[4250408:word32], es, ds, out edx_85, out ebx_35, out ebp_32, out xmm0_88);
  5396.         Mem90[ebp_32 - 0x1C + 0x00:word32] = eax_89;
  5397.         Mem91[ebp_32 - 0x04 + 0x00:word32] = ~0x01;
  5398.         esp_30 = fp - 0x08;
  5399.         esi_33 = fn004047DF(ebp_32);
  5400.     }
  5401.     if (esi_33 == 0x00)
  5402.     {
  5403.         Mem60[esp_30 - 0x04 + 0x00:word32] = 0x20;
  5404.         word32 eax_61;
  5405.         word32 edx_62;
  5406.         word32 ebx_63;
  5407.         word128 xmm0_65;
  5408.         fn00401B9C(ebx_35, ebp_32, es, ds, out eax_61, out edx_62, out ebx_63, out esi_33, out xmm0_65);
  5409.     }
  5410.     word32 ebp_50;
  5411.     word32 esi_51;
  5412.     word32 edi_52;
  5413.     word32 ebx_53;
  5414.     *ebxOut = fn00402F65(ebp_32, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_50, out esi_51, out edi_52);
  5415.     return esi_33;
  5416. }
  5417.  
  5418. word32 fn004047DF(word32 ebp)
  5419. {
  5420.     fn00405A7C(0x0C);
  5421.     return Mem0[ebp - 0x1C + 0x00:word32];
  5422. }
  5423.  
  5424. bool fn004047EB(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  5425. {
  5426.     *edxOut = edx;
  5427.     *xmm0Out = xmm0;
  5428.     word32 eax_11;
  5429.     word32 ebp_10;
  5430.     *eaxOut = fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B6C8, 0x0C, out ebp_10);
  5431.     word32 esi_13 = Mem0[ebp_10 + 0x08:word32];
  5432.     if (esi_13 != 0x00)
  5433.     {
  5434.         word32 esp_115;
  5435.         if (Mem0[0x0040F9A8:word32] != 0x03)
  5436.         {
  5437.             Mem130[fp - 0x0C + 0x00:word32] = esi_13;
  5438.             esp_115 = fp - 0x0C;
  5439.             goto l0040484B;
  5440.         }
  5441.         Mem85[fp - 0x0C + 0x00:word32] = 0x04;
  5442.         word32 edx_86;
  5443.         word128 xmm0_88;
  5444.         D = fn00405B56(ebx, edi, es, ds, dwArg00, out edx_86, out ebx, out xmm0_88);
  5445.         Mem93[ebp_10 - 0x04 + 0x00:word32] = Mem85[ebp_10 - 0x04 + 0x00:word32] & 0x00;
  5446.         Mem97[fp - 0x0C + 0x00:word32] = esi_13;
  5447.         word32 edx_98;
  5448.         word32 eax_99 = fn00406815(dwArg00, out edx_98);
  5449.         Mem102[ebp_10 - 0x1C + 0x00:word32] = eax_99;
  5450.         word32 esp_101 = fp - 0x08;
  5451.         if (eax_99 != 0x00)
  5452.         {
  5453.             Mem118[fp - 0x0C + 0x00:word32] = esi_13;
  5454.             Mem120[fp - 0x10 + 0x00:word32] = eax_99;
  5455.             word32 edx_122;
  5456.             word128 xmm0_123;
  5457.             D = fn00406845(dwArg00, dwArg04, bArg07, out edx_122, out xmm0_123);
  5458.             esp_101 = fp - 0x08;
  5459.         }
  5460.         Mem111[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  5461.         word32 eax_112;
  5462.         *eaxOut = fn00404841();
  5463.         if (Mem111[ebp_10 - 0x1C + 0x00:word32] == 0x00)
  5464.         {
  5465.             esp_115 = esp_101 - 0x04;
  5466.             Mem116[esp_115 + 0x00:word32] = Mem111[ebp_10 + 0x08:word32];
  5467. l0040484B:
  5468.             word32 esp_57 = esp_115 - 0x04;
  5469.             Mem58[esp_57 + 0x00:word32] = 0x00;
  5470.             Mem60[esp_57 - 0x04 + 0x00:word32] = Mem58[4252540:word32];
  5471.             word32 eax_61 = HeapFree(Mem60[esp_57 - 0x04 + 0x00:HANDLE], Mem60[esp_57 + 0x00:DWORD], Mem60[esp_57 + 0x04:LPVOID]);
  5472.             *eaxOut = eax_61;
  5473.             if (eax_61 == 0x00)
  5474.             {
  5475.                 word32 eax_68;
  5476.                 word32 edx_69;
  5477.                 word32 ebx_70;
  5478.                 word32 esi_72;
  5479.                 word32 edi_73;
  5480.                 word128 xmm0_74;
  5481.                 D = fn0040197F(ebx, ebp_10, esi_13, es, ds, out eax_68, out edx_69, out ebx_70, out ebp_10, out esi_72, out edi_73, out xmm0_74);
  5482.                 Mem79[esp_57 + 0x04:word32] = GetLastError();
  5483.                 word32 eax_80 = fn0040193D(dwArg00);
  5484.                 *eaxOut = eax_80;
  5485.                 Mem81[eax_68 + 0x00:word32] = eax_80;
  5486.             }
  5487.             goto l00404873;
  5488.         }
  5489.     }
  5490. l00404873:
  5491.     word32 ebp_37;
  5492.     word32 esi_38;
  5493.     word32 edi_39;
  5494.     word32 ebx_40;
  5495.     *ebxOut = fn00402F65(ebp_10, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_37, out esi_38, out edi_39);
  5496.     return D;
  5497. }
  5498.  
  5499. word32 fn00404841()
  5500. {
  5501.     return fn00405A7C(0x04);
  5502. }
  5503.  
  5504. void fn00404879(word32 ebp, word32 esi)
  5505. {
  5506.     word32 esp_13 = fp - 0x08;
  5507.     word32 edi_12 = 4250424;
  5508.     do
  5509.     {
  5510.         word32 esi_14 = edi_12 + 0x00;
  5511.         word32 esp_15 = esp_13 - 0x04;
  5512.         Mem17[esp_15 + 0x00:word32] = Mem0[esi_14 + 0x00:word32];
  5513.         Mem24[esi_14 + 0x00:word32] = fn00402952(ebp, dwArg00);
  5514.         edi_12 = edi_12 + 0x04;
  5515.         esp_13 = esp_15 + 0x04;
  5516.     } while (edi_12 <u ~0x0040DB0F);
  5517.     return;
  5518. }
  5519.  
  5520. word32 fn0040489A(word32 ebx, word32 ebp, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  5521. {
  5522.     word32 esp_11 = fp - 0x0C;
  5523.     word32 esi_13 = 0x00;
  5524. l004048A3:
  5525.     word32 esp_24 = esp_11 - 0x04;
  5526.     Mem26[esp_24 + 0x00:word32] = Mem0[fp + 0x04:word32];
  5527.     word32 edx_30;
  5528.     word128 xmm0_32;
  5529.     word32 eax_33 = fn00408438(ebx, fp - 0x04, es, ds, dwArg00, out edx_30, out ebx, out xmm0_32);
  5530.     esp_11 = esp_24 + 0x04;
  5531.     if (eax_33 == 0x00 && Mem26[4252612:word32] >u eax_33)
  5532.     {
  5533.         Mem68[esp_24 + 0x00:word32] = esi_13;
  5534.         Sleep(Mem68[esp_24 + 0x00:DWORD]);
  5535.         esp_11 = esp_24 + 0x04;
  5536.         eax_33 = esi_13 + 1000;
  5537.         if (eax_33 >u Mem68[4252612:word32])
  5538.             eax_33 = eax_33 | ~0x00;
  5539.         esi_13 = eax_33;
  5540.         if (eax_33 != ~0x00)
  5541.             goto l004048A3;
  5542.     }
  5543.     word32 edi_47 = Mem26[esp_11 + 0x00:word32];
  5544.     word32 esp_48 = esp_11 + 0x04;
  5545.     return eax_33;
  5546.     word32 edi_54;
  5547.     *ediOut = Mem26[esp_48 + 0x08:word32];
  5548.     word32 esi_56;
  5549.     *esiOut = Mem26[esp_48 + 0x0C:word32];
  5550.     word32 ebp_58;
  5551.     *ebpOut = Mem26[esp_48 + 0x10:word32];
  5552.     return edi_47;
  5553. }
  5554.  
  5555. bool fn004048DF(word32 ebx, word32 edi, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  5556. {
  5557.     word32 edi_22 = edi;
  5558.     word32 ebp_24 = fp - 0x04;
  5559.     word32 esp_11 = fp - 0x0C;
  5560.     word32 esi_13 = 0x00;
  5561. l004048E8:
  5562.     word32 esp_26 = esp_11 - 0x04;
  5563.     Mem27[esp_26 + 0x00:word32] = 0x00;
  5564.     Mem29[esp_26 - 0x04 + 0x00:word32] = Mem27[ebp_24 + 0x0C:word32];
  5565.     Mem31[esp_26 - 0x08 + 0x00:word32] = Mem29[ebp_24 + 0x08:word32];
  5566.     word32 eax_34;
  5567.     word32 edx_35;
  5568.     word32 esi_38;
  5569.     word128 xmm0_39;
  5570.     bool D_40 = fn00408502(ebx, esi_13, edi_22, es, ds, out eax_34, out edx_35, out ebx, out ebp_24, out esi_38, out xmm0_39);
  5571.     edi_22 = eax_34;
  5572.     esp_11 = esp_26 + 0x04;
  5573.     if (eax_34 == 0x00 && Mem31[4252612:word32] >u eax_34)
  5574.     {
  5575.         Mem75[esp_26 + 0x00:word32] = esi_38;
  5576.         Sleep(Mem75[esp_26 + 0x00:DWORD]);
  5577.         esp_11 = esp_26 + 0x04;
  5578.         word32 eax_77 = esi_38 + 1000;
  5579.         if (esi_38 + 1000 >u Mem75[4252612:word32])
  5580.             eax_77 = esi_38 + 1000 | ~0x00;
  5581.         esi_13 = eax_77;
  5582.         if (eax_77 != ~0x00)
  5583.             goto l004048E8;
  5584.     }
  5585.     word32 edi_52 = Mem31[esp_11 + 0x00:word32];
  5586.     word32 esp_53 = esp_11 + 0x04;
  5587.     return D_40;
  5588.     word32 eax_58;
  5589.     *eaxOut = edi_52;
  5590.     word32 edi_59;
  5591.     *ediOut = Mem31[esp_53 + 0x08:word32];
  5592.     word32 esi_61;
  5593.     *esiOut = Mem31[esp_53 + 0x0C:word32];
  5594.     word32 ebp_63;
  5595.     *ebpOut = Mem31[esp_53 + 0x10:word32];
  5596.     return D_40;
  5597. }
  5598.  
  5599. word32 fn0040492B(word32 ebx, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & ediOut)
  5600. {
  5601.     word32 edi_22 = edi;
  5602.     word32 ebp_24 = fp - 0x04;
  5603.     word32 esp_11 = fp - 0x0C;
  5604.     word32 esi_13 = 0x00;
  5605. l00404934:
  5606.     word32 esp_26 = esp_11 - 0x04;
  5607.     Mem28[esp_26 + 0x00:word32] = Mem0[ebp_24 + 0x0C:word32];
  5608.     Mem30[esp_26 - 0x04 + 0x00:word32] = Mem28[ebp_24 + 0x08:word32];
  5609.     word32 esi_35;
  5610.     word32 eax_36 = fn00408620(ebx, esi_13, edi_22, es, ds, out ebx, out ebp_24, out esi_35);
  5611.     edi_22 = eax_36;
  5612.     esp_11 = esp_26 + 0x04;
  5613.     if (eax_36 == 0x00 && (Mem30[ebp_24 + 0x0C:word32] != eax_36 && Mem30[4252612:word32] >u eax_36))
  5614.     {
  5615.         Mem73[esp_26 + 0x00:word32] = esi_35;
  5616.         Sleep(Mem73[esp_26 + 0x00:DWORD]);
  5617.         esp_11 = esp_26 + 0x04;
  5618.         eax_36 = esi_35 + 1000;
  5619.         if (esi_35 + 1000 >u Mem73[4252612:word32])
  5620.             eax_36 = esi_35 + 1000 | ~0x00;
  5621.         esi_13 = eax_36;
  5622.         if (eax_36 != ~0x00)
  5623.             goto l00404934;
  5624.     }
  5625.     word32 edi_52 = Mem30[esp_11 + 0x00:word32];
  5626.     word32 esp_53 = esp_11 + 0x04;
  5627.     return eax_36;
  5628.     word32 edi_59;
  5629.     *ediOut = Mem30[esp_53 + 0x08:word32];
  5630.     word32 ebp_63;
  5631.     *ebpOut = Mem30[esp_53 + 0x10:word32];
  5632.     return edi_52;
  5633. }
  5634.  
  5635. word32 fn00404990(word32 dwArg04, ptr32 & edxOut)
  5636. {
  5637.     *edxOut = edx;
  5638.     word32 ecx_27 = dwArg04;
  5639.     if ((dwArg04 & 0x03) != 0x00)
  5640.         while (true)
  5641.         {
  5642.             ecx_27 = ecx_27 + 0x01;
  5643.             if (Mem0[ecx_27 + 0x00:byte] == 0x00)
  5644.                 break;
  5645.             if ((ecx_27 & 0x03) == 0x00)
  5646.                 goto l004049C0;
  5647.         }
  5648.     else
  5649.     {
  5650. l004049C0:
  5651.         do
  5652.         {
  5653.             word32 eax_40 = Mem0[ecx_27 + 0x00:word32];
  5654.             word32 edx_42 = eax_40 + 0x7EFEFEFF;
  5655.             *edxOut = edx_42;
  5656.             ecx_27 = ecx_27 + 0x04;
  5657.         } while (((eax_40 ^ ~0x00 ^ eax_40 + 0x7EFEFEFF) & 0x81010100) == 0x00);
  5658.         word32 eax_49 = Mem0[ecx_27 - 0x04 + 0x00:word32];
  5659.         byte ah_51 = SLICE(eax_49, byte, 8);
  5660.         if ((byte) eax_49 == 0x00)
  5661.             return ecx_27 - 0x04 - dwArg04;
  5662.         if (ah_51 == 0x00)
  5663.             return ecx_27 - 0x03 - dwArg04;
  5664.         if ((eax_49 & 0x00FF0000) == 0x00)
  5665.             return ecx_27 - 0x02 - dwArg04;
  5666.         if ((eax_49 & 0xFF000000) != 0x00)
  5667.             goto l004049C0;
  5668.     }
  5669.     return ecx_27 - 0x01 - dwArg04;
  5670. }
  5671.  
  5672. word32 fn00404BA4(word32 ebx, selector es, selector ds, word32 dwArg08, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  5673. {
  5674.     *esiOut = esi;
  5675.     word32 ebx_17;
  5676.     word128 xmm0_18;
  5677.     word32 edx_19;
  5678.     *edxOut = fn00401759(fp - 0x14, ebx, es, ds, dwArg08, out ebx_17, out xmm0_18);
  5679.     word32 eax_25 = (word32) Mem0[Mem0[fp - 0x14 + 0x00:word32] + 200:word32][(word32) Mem0[fp + 0x04:byte] * 0x02];
  5680.     if (Mem0[fp - 0x08 + 0x00:byte] != 0x00)
  5681.     {
  5682.         word32 ecx_42 = Mem0[fp - 0x0C + 0x00:word32];
  5683.         Mem44[ecx_42 + 0x70:word32] = Mem0[ecx_42 + 0x70:word32] & ~0x02;
  5684.     }
  5685.     return eax_25 & 0x8000;
  5686. }
  5687.  
  5688. word32 fn00404BDC(word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  5689. {
  5690.     word32 edx_16;
  5691.     word32 ebx_17;
  5692.     word32 esi_18;
  5693.     word128 xmm0_19;
  5694.     return fn00404BA4(ebx, es, ds, 0x00, out edx_16, out ebx_17, out esi_18, out xmm0_19);
  5695. }
  5696.  
  5697. word32 fn00404BEF(word32 eax, word32 ecx, word32 edx, word32 ebx, word32 ebp, word32 esi, word32 edi, selector es, selector ds)
  5698. {
  5699.     if (ecx != Mem0[0x0040DB60:word32])
  5700.         return fn0040883B(eax, ecx, edx, ebx, ebp, esi, edi, es, ds, dwLoc04);
  5701.     else
  5702.         return eax;
  5703. }
  5704.  
  5705. void fn00404C95()
  5706. {
  5707.     Mem4[0x0040E97C:word32] = Mem0[0x0040E97C:word32] & 0x00;
  5708.     return;
  5709. }
  5710.  
  5711. word32 fn00404CA0(word128 xmm0, word32 dwArg00, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & edxOut, ptr32 & ediOut)
  5712. {
  5713. fn00404CA0_entry:
  5714.     def fp
  5715.     def dwArg0C
  5716.     def dwArg04
  5717.     def edxOut
  5718.     def ediOut
  5719.     def bArg08
  5720.     def edi
  5721.     def dwArg08
  5722.     def dwArg00
  5723.     def Mem0
  5724.     def xmm0
  5725.     def dwLoc04
  5726.     def SCZO
  5727.     esp_1 = fp
  5728.     edx_3 = dwArg0C
  5729.     ecx_5 = dwArg04
  5730.     SZO_6 = cond(edx_3 & edx_3)
  5731.     Z_7 = SZO_6 (alias)
  5732.     C_8 = false
  5733.     branch (edx_3 & edx_3) == 0x00 l00404D15
  5734.     goto l00404CAC
  5735. l00404CA0:
  5736. l00404CAC:
  5737.     eax_22 = 0x00
  5738.     al_24 = bArg08
  5739.     eax_25 = DPB(eax_22, al_24, 0) (alias)
  5740.     SZO_26 = cond(al_24 & al_24)
  5741.     Z_27 = SZO_26 (alias)
  5742.     C_28 = false
  5743.     branch (al_24 & al_24) != 0x00 l00404CCC
  5744. l00404CB6:
  5745.     SCZO_104 = cond(edx_3 - 0x0100)
  5746.     C_105 = SCZO_104 (alias)
  5747.     branch edx_3 <u 0x0100 l00404CCC
  5748. l00404CBE:
  5749.     SCZO_107 = cond(Mem0[0x0040E960:word32] - 0x00)
  5750.     Z_108 = SCZO_107 (alias)
  5751.     branch Mem0[0x0040E960:word32] == 0x00 l00404CCC
  5752. l00404CC7:
  5753. l00404CC7_thunk_fn00408998:
  5754.     fn00408998(xmm0, dwArg00, dwArg08)
  5755.     return eax_25
  5756. l00404CC7_thunk_fn00408998:
  5757.     fn00408998(xmm0, dwArg00, dwArg08)
  5758.     return eax_25
  5759. l00404CCC:
  5760.     Z_29 = PHI(Z_27, Z_27, Z_108)
  5761.     esp_30 = fp - 0x04
  5762.     dwLoc04_32 = edi
  5763.     edi_33 = ecx_5
  5764.     SCZO_34 = cond(edx_3 - 0x04)
  5765.     C_35 = SCZO_34 (alias)
  5766.     branch edx_3 <u 0x04 l00404D05
  5767. l00404CD4:
  5768.     ecx_68 = -ecx_5
  5769.     ecx_69 = ecx_68 & 0x03
  5770.     SZO_70 = cond(ecx_69)
  5771.     Z_71 = SZO_70 (alias)
  5772.     C_72 = false
  5773.     branch ecx_69 == 0x00 l00404CE7
  5774. l00404CDB:
  5775.     edx_95 = edx_3 - ecx_69
  5776.     SCZO_96 = cond(edx_95)
  5777. l00404CDD:
  5778.     edi_97 = PHI(edi_33, edi_100)
  5779.     ecx_98 = PHI(ecx_69, ecx_101)
  5780.     Mem99[edi_97 + 0x00:byte] = al_24
  5781.     edi_100 = edi_97 + 0x01
  5782.     ecx_101 = ecx_98 - 0x01
  5783.     SCZO_102 = cond(ecx_101)
  5784.     Z_103 = SCZO_102 (alias)
  5785.     branch ecx_101 != 0x00 l00404CDD
  5786. l00404CE7:
  5787.     edx_73 = PHI(edx_3, edx_95)
  5788.     edi_74 = PHI(edi_33, edi_100)
  5789.     ecx_75 = eax_25
  5790.     eax_76 = eax_25 << 0x08
  5791.     eax_77 = eax_76 + ecx_75
  5792.     ecx_78 = eax_77
  5793.     eax_79 = eax_77 << 0x10
  5794.     eax_80 = eax_79 + ecx_78
  5795.     al_81 = (byte) eax_80 (alias)
  5796.     ecx_82 = edx_73
  5797.     edx_83 = edx_73 & 0x03
  5798.     ecx_84 = ecx_82 >>u 0x02
  5799.     SCZO_85 = cond(ecx_84)
  5800.     Z_86 = SCZO_85 (alias)
  5801.     branch ecx_84 == 0x00 l00404D05
  5802. l00404CFF:
  5803.     edi_87 = PHI(edi_74, edi_90)
  5804.     ecx_88 = PHI(ecx_84, ecx_91)
  5805.     branch ecx_88 == 0x00 l00404D01
  5806. l00404CFF_1:
  5807.     Mem89[edi_87 + 0x00:word32] = eax_80
  5808.     edi_90 = edi_87 + 0x04
  5809.     ecx_91 = ecx_88 - 0x01
  5810.     goto l00404CFF
  5811. l00404D01:
  5812.     SZO_92 = cond(edx_83 & edx_83)
  5813.     Z_93 = SZO_92 (alias)
  5814.     C_94 = false
  5815.     branch (edx_83 & edx_83) == 0x00 l00404D0F
  5816. l00404D05:
  5817.     SZO_51 = PHI(SZO_26, SZO_70, SZO_51, SZO_92)
  5818.     C_52 = PHI(C_35, C_72, C_52, C_94)
  5819.     edx_53 = PHI(edx_3, edx_83, edx_65, edx_83)
  5820.     eax_54 = PHI(eax_25, eax_80, eax_54, eax_80)
  5821.     al_55 = PHI(al_24, al_81, al_55, al_81)
  5822.     edi_56 = PHI(edi_33, edi_74, edi_64, edi_87)
  5823.     ecx_57 = PHI(ecx_5, ecx_84, ecx_57, ecx_88)
  5824.     Mem58[edi_56 + 0x00:byte] = al_55
  5825.     edi_59 = edi_56 + 0x01
  5826.     edx_60 = edx_53 - 0x01
  5827.     SCZO_61 = cond(edx_60)
  5828.     Z_62 = SCZO_61 (alias)
  5829.     branch edx_60 != 0x00 l00404D05
  5830.     Mem63[edi_59 + 0x00:byte] = al_55
  5831.     edi_64 = edi_59 + 0x01
  5832.     edx_65 = edx_60 - 0x01
  5833.     SCZO_66 = cond(edx_65)
  5834.     Z_67 = SCZO_66 (alias)
  5835.     branch edx_65 != 0x00 l00404D05
  5836. l00404D0F:
  5837.     SZO_36 = PHI(SZO_51, SZO_92)
  5838.     C_37 = PHI(C_52, C_94)
  5839.     edx_38 = PHI(edx_65, edx_83)
  5840.     SCZO_39 = PHI(SCZO_66, SCZO_85)
  5841.     Z_40 = PHI(Z_67, Z_93)
  5842.     ecx_41 = PHI(ecx_57, ecx_88)
  5843.     eax_42 = dwArg04
  5844.     edi_43 = dwLoc04_32
  5845.     esp_44 = fp
  5846.     return eax_42
  5847.     eax_46 = dwArg08
  5848.     al_47 = (byte) eax_46 (alias)
  5849.     edi_49 = dwArg00
  5850.     esp_50 = fp + 0x04
  5851.     return eax_46
  5852. l00404D15:
  5853.     eax_111 = dwArg04
  5854.     al_112 = (byte) eax_111 (alias)
  5855.     return eax_111
  5856. fn00404CA0_exit:
  5857.     dwLoc04_9 = PHI(dwLoc04, dwLoc04, dwLoc04, dwLoc04_32, dwLoc04)
  5858.     SZO_10 = PHI(SZO_26, SZO_6, SZO_26, SZO_36, SZO)
  5859.     C_11 = PHI(C_105, C_8, C_105, C_37, C)
  5860.     edx_12 = PHI(edx_3, edx_3, edx_3, edx_38, edx)
  5861.     SCZO_13 = PHI(SCZO_107, SCZO, SCZO_107, SCZO_39, SCZO)
  5862.     Z_14 = PHI(Z_108, Z_7, Z_108, Z_40, Z)
  5863.     eax_15 = PHI(eax_25, eax_111, eax_25, eax_46, eax)
  5864.     al_16 = PHI(al_24, al_112, al_24, al_47, al)
  5865.     esp_17 = PHI(esp_1, esp_1, esp_1, esp_50, esp)
  5866.     edi_18 = PHI(edi, edi, edi, edi_49, edi)
  5867.     ecx_19 = PHI(ecx_5, ecx_5, ecx_5, ecx_41, ecx)
  5868.     use edx_12 (=> edxOut)
  5869.     use edi_18 (=> ediOut)
  5870. }
  5871.  
  5872. word32 fn004059C9(word32 ebp)
  5873. {
  5874.     Mem9[4252620:word32] = fn00402952(ebp, 0x00405990);
  5875.     return ebp;
  5876. }
  5877.  
  5878. word32 fn004059DA(word32 ebx, ptr32 & ebxOut, ptr32 & ebpOut)
  5879. {
  5880.     *ebxOut = ebx;
  5881.     *ebpOut = ebp;
  5882.     word32 esp_27 = fp - 0x08;
  5883.     word32 esi_26 = 0x00;
  5884.     word32 edi_12 = 4252624;
  5885.     do
  5886.     {
  5887.         word32 eax_38;
  5888.         if (4250484[esi_26 * 0x08] == 0x01)
  5889.         {
  5890.             word32 eax_64 = esi_26 * 0x08 + 0x0040DB70;
  5891.             Mem65[eax_64 + 0x00:word32] = edi_12;
  5892.             word32 esp_66 = esp_27 - 0x04;
  5893.             Mem67[esp_66 + 0x00:word32] = 4000;
  5894.             Mem69[esp_66 - 0x04 + 0x00:word32] = Mem67[eax_64 + 0x00:word32];
  5895.             esp_27 = esp_66 + 0x04;
  5896.             word32 ebp_73;
  5897.             if (fn0040605C(ebx, esi_26, edi_12 + 0x18, out ebx, out ebp_73, out esi_26, out edi_12) == 0x00)
  5898.             {
  5899.                 0x0040DB70[esi_26 * 0x08] = 0x0040DB70[esi_26 * 0x08] & 0x00;
  5900.                 eax_38 = 0x00;
  5901.                 return eax_38;
  5902.             }
  5903.         }
  5904.         esi_26 = esi_26 + 0x01;
  5905.     } while (esi_26 < 0x24);
  5906.     eax_38 = 0x01;
  5907.     return eax_38;
  5908. }
  5909.  
  5910. word32 fn00405A7C(word32 dwArg04)
  5911. {
  5912.     LeaveCriticalSection(0x0040DB70[dwArg04 * 0x08]);
  5913.     return dwArg04;
  5914. }
  5915.  
  5916. bool fn00405A93(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & xmm0Out)
  5917. {
  5918.     *edxOut = edx;
  5919.     *xmm0Out = xmm0;
  5920.     word32 ebp_10;
  5921.     fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B708, 0x0C, out ebp_10);
  5922.     Mem14[ebp_10 - 0x1C + 0x00:word32] = 0x01;
  5923.     word32 esp_178 = fp - 0x08;
  5924.     if (Mem14[4252540:word32] == 0x00)
  5925.     {
  5926.         ebp_10 = fn0040204F(0x00, es, ds);
  5927.         Mem168[fp - 0x0C + 0x00:word32] = 0x1E;
  5928.         word32 edx_169;
  5929.         byte bl_170;
  5930.         word128 xmm0_171;
  5931.         D = fn00401EA4(ebp_10, es, ds, dwArg00, out edx_169, out bl_170, out xmm0_171);
  5932.         Mem174[fp - 0x10 + 0x00:word32] = 0xFF;
  5933.         fn00401BF0(dwArg00);
  5934.         esp_178 = fp - 0x08;
  5935.     }
  5936.     if (0x0040DB70[Mem14[ebp_10 + 0x08:word32] * 0x08] != 0x00)
  5937.     {
  5938.         word32 eax_60;
  5939.         *eaxOut = 0x01;
  5940.     }
  5941.     else
  5942.     {
  5943.         word32 esp_63 = esp_178 - 0x04;
  5944.         Mem64[esp_63 + 0x00:word32] = 0x18;
  5945.         word32 ebx_67;
  5946.         word32 ebp_68;
  5947.         word32 esi_69;
  5948.         word32 edi_70;
  5949.         word128 xmm0_71;
  5950.         word32 eax_72 = fn0040489A(0x00, ebp_10, es, ds, out ebx_67, out ebp_68, out esi_69, out edi_70, out xmm0_71);
  5951.         if (eax_72 == ebx_67)
  5952.         {
  5953.             word32 eax_78;
  5954.             word32 edx_79;
  5955.             word32 ebx_80;
  5956.             word32 esi_82;
  5957.             word32 edi_83;
  5958.             word128 xmm0_84;
  5959.             D = fn0040197F(ebx_67, ebp_68, esi_69, es, ds, out eax_78, out edx_79, out ebx_80, out ebp_10, out esi_82, out edi_83, out xmm0_84);
  5960.             Mem86[eax_78 + 0x00:word32] = 0x0C;
  5961.             word32 eax_87;
  5962.             *eaxOut = 0x00;
  5963.         }
  5964.         else
  5965.         {
  5966.             Mem91[esp_63 + 0x00:word32] = 0x0A;
  5967.             word32 edx_92;
  5968.             word32 ebx_93;
  5969.             word128 xmm0_94;
  5970.             D = fn00405B56(ebx_67, eax_72, es, ds, dwArg00, out edx_92, out ebx_93, out xmm0_94);
  5971.             Mem98[ebp_68 - 0x04 + 0x00:word32] = ebx_93;
  5972.             if (Mem98[esi_69 + 0x00:word32] == ebx_93)
  5973.             {
  5974.                 Mem116[esp_63 + 0x00:word32] = 4000;
  5975.                 Mem118[esp_63 - 0x04 + 0x00:word32] = eax_72;
  5976.                 word32 ebx_119;
  5977.                 word32 esi_121;
  5978.                 word32 edi_122;
  5979.                 if (fn0040605C(ebx_93, esi_69, eax_72, out ebx_119, out ebp_10, out esi_121, out edi_122) == 0x00)
  5980.                 {
  5981.                     Mem132[esp_63 + 0x00:word32] = edi_122;
  5982.                     word32 eax_133;
  5983.                     word32 edx_134;
  5984.                     word32 ebx_135;
  5985.                     word32 ebp_136;
  5986.                     word32 esi_137;
  5987.                     word32 edi_138;
  5988.                     word128 xmm0_139;
  5989.                     fn004047EB(ebx_119, esi_121, edi_122, es, ds, out eax_133, out edx_134, out ebx_135, out ebp_136, out esi_137, out edi_138, out xmm0_139);
  5990.                     word32 eax_143;
  5991.                     word32 edx_144;
  5992.                     word32 ebx_145;
  5993.                     word32 esi_147;
  5994.                     word32 edi_148;
  5995.                     word128 xmm0_149;
  5996.                     D = fn0040197F(ebx_135, ebp_136, esi_137, es, ds, out eax_143, out edx_144, out ebx_145, out ebp_10, out esi_147, out edi_148, out xmm0_149);
  5997.                     Mem151[eax_143 + 0x00:word32] = 0x0C;
  5998.                     Mem152[ebp_10 - 0x1C + 0x00:word32] = ebx_145;
  5999.                 }
  6000.                 else
  6001.                     Mem153[esi_121 + 0x00:word32] = edi_122;
  6002.             }
  6003.             else
  6004.             {
  6005.                 Mem155[esp_63 + 0x00:word32] = eax_72;
  6006.                 word32 eax_156;
  6007.                 word32 edx_157;
  6008.                 word32 ebx_158;
  6009.                 word32 esi_160;
  6010.                 word32 edi_161;
  6011.                 word128 xmm0_162;
  6012.                 D = fn004047EB(ebx_93, esi_69, eax_72, es, ds, out eax_156, out edx_157, out ebx_158, out ebp_10, out esi_160, out edi_161, out xmm0_162);
  6013.             }
  6014.             Mem113[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  6015.             fn00405B4D();
  6016.             word32 eax_114;
  6017.             *eaxOut = Mem113[ebp_10 - 0x1C + 0x00:word32];
  6018.         }
  6019.     }
  6020.     word32 ebp_49;
  6021.     word32 esi_50;
  6022.     word32 edi_51;
  6023.     word32 ebx_52;
  6024.     *ebxOut = fn00402F65(ebp_10, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_49, out esi_50, out edi_51);
  6025.     return D;
  6026. }
  6027.  
  6028. void fn00405B4D()
  6029. {
  6030.     fn00405A7C(0x0A);
  6031.     return;
  6032. }
  6033.  
  6034. bool fn00405B56(word32 ebx, word32 edi, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  6035. {
  6036.     *edxOut = edx;
  6037.     *ebxOut = ebx;
  6038.     *xmm0Out = xmm0;
  6039.     word32 esp_10 = fp - 0x08;
  6040.     word32 esi_13 = dwArg04 * 0x08 + 0x0040DB70;
  6041.     if (Mem0[esi_13 + 0x00:word32] == 0x00)
  6042.     {
  6043.         word32 eax_51;
  6044.         word32 edx_52;
  6045.         word32 ebx_53;
  6046.         word32 ebp_54;
  6047.         word128 xmm0_56;
  6048.         D = fn00405A93(ebx, esi_13, edi, es, ds, out eax_51, out edx_52, out ebx_53, out ebp_54, out esi_13, out xmm0_56);
  6049.         esp_10 = fp - 0x08;
  6050.         if (eax_51 == 0x00)
  6051.         {
  6052.             Mem64[fp - 0x0C + 0x00:word32] = 0x11;
  6053.             word32 eax_65;
  6054.             word32 edx_66;
  6055.             word32 ebx_67;
  6056.             word128 xmm0_69;
  6057.             D = fn00401B9C(ebx_53, ebp_54, es, ds, out eax_65, out edx_66, out ebx_67, out esi_13, out xmm0_69);
  6058.             esp_10 = fp - 0x08;
  6059.         }
  6060.     }
  6061.     word32 esp_37 = esp_10 - 0x04;
  6062.     Mem38[esp_37 + 0x00:word32] = Mem0[esi_13 + 0x00:word32];
  6063.     EnterCriticalSection(Mem38[esp_37 + 0x00:LPCRITICAL_SECTION]);
  6064.     return D;
  6065. }
  6066.  
  6067. word32 fn00405B89(word32 ebp, selector es, selector ds)
  6068. {
  6069.     word32 eax_102;
  6070.     word32 eax_22 = fn004029CD(fp - 0x04, Mem0[4258504:word32]);
  6071.     Mem24[fp - 0x1C + 0x00:word32] = Mem0[0x0040FAC4:word32];
  6072.     Mem26[fp - 0x08 + 0x00:word32] = eax_22;
  6073.     word32 eax_28 = fn004029CD(fp - 0x04, dwArg00);
  6074.     word32 esi_124 = eax_28;
  6075.     if (eax_28 >=u eax_22)
  6076.     {
  6077.         word32 ebx_64 = eax_28 - eax_22;
  6078.         if (ebx_64 >=u 0x00)
  6079.         {
  6080.             Mem69[fp - 0x18 + 0x00:word32] = eax_22;
  6081.             word32 ebx_117;
  6082.             word32 ebp_118;
  6083.             word32 eax_74 = fn00408E57(ebx_64, eax_28, eax_22, es, ds, out ebx_117, out ebp_118);
  6084.             word32 edi_132 = eax_74;
  6085.             word32 esp_119 = fp - 0x14;
  6086.             if (eax_74 >=u ebx_117 + 0x04)
  6087.             {
  6088. l00405C1D:
  6089.                 word32 esp_90 = esp_119 - 0x04;
  6090.                 Mem91[esp_90 + 0x00:word32] = Mem69[ebp_118 + 0x08:word32];
  6091.                 Mem93[esi_124 + 0x00:word32] = fn00402952(ebp_118, dwArg00);
  6092.                 Mem97[esp_90 - 0x04 + 0x00:word32] = esi_124 + 0x04;
  6093.                 Mem101[0x0040FAC4:word32] = fn00402952(ebp_118, dwArg00);
  6094.                 eax_102 = Mem101[ebp_118 + 0x08:word32];
  6095.                 return eax_102;
  6096.             }
  6097.             word32 eax_105 = 0x0800;
  6098.             if (eax_74 <u 0x0800)
  6099.                 eax_105 = eax_74;
  6100.             word32 eax_115;
  6101.             word32 eax_109 = eax_105 + eax_74;
  6102.             if (eax_109 >=u eax_74)
  6103.             {
  6104.                 Mem155[fp - 0x18 + 0x00:word32] = eax_109;
  6105.                 Mem157[fp - 0x1C + 0x00:word32] = Mem155[ebp_118 - 0x04 + 0x00:word32];
  6106.                 eax_115 = fn0040492B(ebx_117, eax_74, es, ds, out ebx_117, out ebp_118, out edi_132);
  6107.                 esp_119 = fp - 0x14;
  6108.                 if (eax_115 != 0x00)
  6109.                     goto l00405C0B;
  6110.             }
  6111.             word32 eax_136 = edi_132 + 0x10;
  6112.             if (eax_136 >=u edi_132)
  6113.             {
  6114.                 word32 esp_139 = esp_119 - 0x04;
  6115.                 Mem140[esp_139 + 0x00:word32] = eax_136;
  6116.                 Mem142[esp_139 - 0x04 + 0x00:word32] = Mem140[ebp_118 - 0x04 + 0x00:word32];
  6117.                 word32 edi_145;
  6118.                 eax_115 = fn0040492B(ebx_117, edi_132, es, ds, out ebx_117, out ebp_118, out edi_145);
  6119.                 esp_119 = esp_139 + 0x04;
  6120.                 if (eax_115 != 0x00)
  6121.                 {
  6122. l00405C0B:
  6123.                     word32 esp_122 = esp_119 - 0x04;
  6124.                     Mem123[esp_122 + 0x00:word32] = eax_115;
  6125.                     Mem128[4258504:word32] = fn00402952(ebp_118, dwArg00);
  6126.                     esi_124 = eax_115 + (ebx_117 >> 0x02) * 0x04;
  6127.                     esp_119 = esp_122 + 0x04;
  6128.                     goto l00405C1D;
  6129.                 }
  6130.             }
  6131.         }
  6132.     }
  6133.     eax_102 = 0x00;
  6134.     return eax_102;
  6135. }
  6136.  
  6137. word32 fn00405C74(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & esiOut)
  6138. {
  6139.     word32 ebp_10;
  6140.     fn00402F20(ebx, esi, edi, dwLoc0C, 4241192, 0x0C, out ebp_10);
  6141.     word32 ebp_14 = fn00401C08(ebx, edi, es, ds);
  6142.     Mem17[ebp_14 - 0x04 + 0x00:word32] = Mem0[ebp_14 - 0x04 + 0x00:word32] & 0x00;
  6143.     Mem21[fp - 0x0C + 0x00:word32] = Mem17[ebp_14 + 0x08:word32];
  6144.     Mem25[ebp_14 - 0x1C + 0x00:word32] = fn00405B89(ebp_14, es, ds);
  6145.     Mem26[ebp_14 - 0x04 + 0x00:word32] = ~0x01;
  6146.     fn00405CAA();
  6147.     word32 eax_27 = Mem26[ebp_14 - 0x1C + 0x00:word32];
  6148.     word32 ebp_32;
  6149.     word32 esi_33;
  6150.     word32 edi_34;
  6151.     word32 ebx_35;
  6152.     *ebxOut = fn00402F65(ebp_14, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_32, out esi_33, out edi_34);
  6153.     return eax_27;
  6154. }
  6155.  
  6156. void fn00405CAA()
  6157. {
  6158.     fn00401C11();
  6159.     return;
  6160. }
  6161.  
  6162. word32 fn00405CB0(word32 ebx, word32 esi, word32 edi, selector es, selector ds, word32 dwArg04, ptr32 & esiOut)
  6163. {
  6164.     word32 ebx_15;
  6165.     word32 esi_16;
  6166.     fn00405C74(ebx, esi, edi, es, ds, out ebx_15, out esi_16);
  6167.     return ebx_15;
  6168. }
  6169.  
  6170. word32 fn00405CD0(word32 dwArg04)
  6171. {
  6172.     if (Mem0[dwArg04 + 0x00:word16] == 23117)
  6173.     {
  6174.         word32 eax_39 = Mem0[dwArg04 + 0x3C:word32] + dwArg04;
  6175.         if (Mem0[eax_39 + 0x00:word32] == 0x4550)
  6176.             return (word32) (Mem0[eax_39 + 0x18:word16] == 0x010B);
  6177.     }
  6178.     return 0x00;
  6179. }
  6180.  
  6181. word32 fn00405D10(word32 dwArg04, word32 dwArg08)
  6182. {
  6183.     word32 ecx_12 = Mem0[dwArg04 + 0x3C:word32] + dwArg04;
  6184.     word32 esi_20 = (word32) Mem0[ecx_12 + 0x06:word16];
  6185.     word32 edx_21 = 0x00;
  6186.     word32 eax_24 = (word32) Mem0[ecx_12 + 0x14:word16] + 0x18 + ecx_12 + 0x0C;
  6187.     if (true)
  6188.         do
  6189.         {
  6190.             word32 ecx_56 = Mem0[eax_24 + 0x00:word32];
  6191.             if (dwArg08 >=u ecx_56 && dwArg08 <u Mem0[eax_24 + 0x08:word32] + ecx_56)
  6192.                 return eax_24;
  6193.             edx_21 = edx_21 + 0x01;
  6194.             eax_24 = eax_24 + 0x28;
  6195.         } while (edx_21 <u esi_20);
  6196.     eax_24 = 0x00;
  6197.     return eax_24;
  6198. }
  6199.  
  6200. word32 fn00405D60(word32 dwArg04)
  6201. {
  6202.     word32 eax_16 = Mem0[fs:0x00:word32];
  6203.     Mem38[fs:0x00:word32] = fp - 0x14;
  6204.     if (fn00405CD0(0x00400000) != 0x00)
  6205.     {
  6206.         word32 eax_92 = fn00405D10(0x00400000, dwArg04 - 0x00400000);
  6207.         if (eax_92 != 0x00)
  6208.         {
  6209.             word32 eax_99 = ~(Mem38[eax_92 + 0x24:word32] >>u 0x1F);
  6210.             Mem105[fs:0x00:word32] = eax_16;
  6211.             return eax_99 & 0x01;
  6212.         }
  6213.     }
  6214.     Mem73[fs:0x00:word32] = eax_16;
  6215.     return 0x00;
  6216. }
  6217.  
  6218. void fn00405E1D(word32 dwArg04)
  6219. {
  6220.     Mem10[0x0040E520:word32] = dwArg04;
  6221.     Mem11[0x0040E524:word32] = dwArg04;
  6222.     Mem12[0x0040E528:word32] = dwArg04;
  6223.     Mem13[4252972:word32] = dwArg04;
  6224.     return;
  6225. }
  6226.  
  6227. void fn0040602F(word32 dwArg04)
  6228. {
  6229.     Mem10[0x0040E534:word32] = dwArg04;
  6230.     return;
  6231. }
  6232.  
  6233. void fn0040603E(word32 dwArg04)
  6234. {
  6235.     Mem10[0x0040E540:word32] = dwArg04;
  6236.     return;
  6237. }
  6238.  
  6239. void fn0040604D(word32 dwArg04)
  6240. {
  6241.     Mem10[0x0040E544:word32] = dwArg04;
  6242.     return;
  6243. }
  6244.  
  6245. word32 fn0040605C(word32 ebx, word32 esi, word32 edi, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  6246. {
  6247.     word32 ebp_10;
  6248.     fn00402F20(ebx, esi, edi, dwLoc0C, 4241288, 0x10, out ebp_10);
  6249.     Mem14[ebp_10 - 0x04 + 0x00:word32] = Mem0[ebp_10 - 0x04 + 0x00:word32] & 0x00;
  6250.     Mem18[fp - 0x0C + 0x00:word32] = Mem14[ebp_10 + 0x0C:word32];
  6251.     Mem20[fp - 0x10 + 0x00:word32] = Mem18[ebp_10 + 0x08:word32];
  6252.     Mem23[ebp_10 - 0x1C + 0x00:word32] = InitializeCriticalSectionAndSpinCount(Mem20[fp - 0x10 + 0x00:LPCRITICAL_SECTION], Mem20[fp - 0x0C + 0x00:DWORD]);
  6253.     Mem24[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  6254.     word32 eax_25 = Mem24[ebp_10 - 0x1C + 0x00:word32];
  6255.     word32 ebp_30;
  6256.     word32 esi_31;
  6257.     word32 edi_32;
  6258.     word32 ebx_33;
  6259.     *ebxOut = fn00402F65(ebp_10, 0x10, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_30, out esi_31, out edi_32);
  6260.     return eax_25;
  6261. }
  6262.  
  6263. void fn004060BC(word32 dwArg04)
  6264. {
  6265.     Mem10[4253000:word32] = dwArg04;
  6266.     return;
  6267. }
  6268.  
  6269. word32 fn004060CB(ptr32 & esiOut)
  6270. {
  6271.     *esiOut = esi;
  6272.     word32 dwLoc08_10 = Mem0[4253000:word32];
  6273.     word32 eax_11 = fn004029CD(fp - 0x04, dwLoc08_10);
  6274.     if (eax_11 != 0x00)
  6275.     {
  6276.         Mem39[fp - 0x08 + 0x00:word32] = Mem0[fp + 0x04:word32];
  6277.         word32 esp_40;
  6278.         word32 edi_41;
  6279.         word32 ebp_42;
  6280.         word32 ecx_43;
  6281.         word32 eax_44;
  6282.         byte SZO_45;
  6283.         byte C_46;
  6284.         byte Z_47;
  6285.         word32 esi_48;
  6286.         eax_11();
  6287.         if (eax_44 != 0x00)
  6288.             return 0x01;
  6289.     }
  6290.     return 0x00;
  6291. }
  6292.  
  6293. void fn004060F3(word32 ebp)
  6294. {
  6295.     word32 esi_19;
  6296.     word32 ebp_106;
  6297.     word32 eax_20 = fn004029C4(fp - 0x04, out ebp_106, out esi_19);
  6298.     Mem23[ebp_106 - 0x04 + 0x00:word32] = Mem0[ebp_106 - 0x04 + 0x00:word32] & 0x00;
  6299.     word32 esp_107 = fp - 0x24;
  6300.     word32 ebx_105 = eax_20;
  6301.     if (Mem23[0x0040E54C:word32] == 0x00)
  6302.     {
  6303.         Mem236[fp - 0x28 + 0x00:word32] = 0x0040AA20;
  6304.         word32 eax_237 = LoadLibraryA(Mem236[fp - 0x28 + 0x00:LPCSTR]);
  6305.         if (eax_237 == 0x00)
  6306.             return;
  6307.         Mem245[fp - 0x28 + 0x00:word32] = 0x0040AA14;
  6308.         Mem247[fp - 44 + 0x00:word32] = eax_237;
  6309.         word32 eax_248 = GetProcAddress(Mem247[fp - 44 + 0x00:HMODULE], Mem247[fp - 0x28 + 0x00:LPCSTR]);
  6310.         if (eax_248 == 0x00)
  6311.             return;
  6312.         Mem254[fp - 0x28 + 0x00:word32] = eax_248;
  6313.         word32 eax_255 = fn00402952(ebp_106, dwArg00);
  6314.         Mem256[fp - 0x28 + 0x00:word32] = 0x0040AA04;
  6315.         Mem258[fp - 44 + 0x00:word32] = eax_237;
  6316.         Mem259[0x0040E54C:word32] = eax_255;
  6317.         Mem263[fp - 0x28 + 0x00:word32] = GetProcAddress(Mem259[fp - 44 + 0x00:HMODULE], Mem259[fp - 0x28 + 0x00:LPCSTR]);
  6318.         word32 eax_264 = fn00402952(ebp_106, dwArg00);
  6319.         Mem265[fp - 0x28 + 0x00:word32] = 0x0040A9F0;
  6320.         Mem267[fp - 44 + 0x00:word32] = eax_237;
  6321.         Mem268[0x0040E550:word32] = eax_264;
  6322.         Mem272[fp - 0x28 + 0x00:word32] = GetProcAddress(Mem268[fp - 44 + 0x00:HMODULE], Mem268[fp - 0x28 + 0x00:LPCSTR]);
  6323.         word32 eax_273 = fn00402952(ebp_106, dwArg00);
  6324.         Mem274[fp - 0x28 + 0x00:word32] = 0x0040A9D4;
  6325.         Mem276[fp - 44 + 0x00:word32] = eax_237;
  6326.         Mem277[0x0040E554:word32] = eax_273;
  6327.         Mem281[fp - 0x28 + 0x00:word32] = GetProcAddress(Mem277[fp - 44 + 0x00:HMODULE], Mem277[fp - 0x28 + 0x00:LPCSTR]);
  6328.         word32 eax_282 = fn00402952(ebp_106, dwArg00);
  6329.         Mem285[0x0040E55C:word32] = eax_282;
  6330.         esp_107 = fp - 0x24;
  6331.         if (eax_282 != 0x00)
  6332.         {
  6333.             Mem290[fp - 0x28 + 0x00:word32] = 0x0040A9BC;
  6334.             Mem292[fp - 44 + 0x00:word32] = eax_237;
  6335.             Mem296[fp - 0x28 + 0x00:word32] = GetProcAddress(Mem292[fp - 44 + 0x00:HMODULE], Mem292[fp - 0x28 + 0x00:LPCSTR]);
  6336.             Mem300[0x0040E558:word32] = fn00402952(ebp_106, dwArg00);
  6337.             esp_107 = fp - 0x24;
  6338.         }
  6339.     }
  6340.     word32 eax_63 = Mem23[0x0040E558:word32];
  6341.     if (eax_63 == eax_20 || Mem23[0x0040E55C:word32] == eax_20)
  6342.     {
  6343. l004061FC:
  6344.         word32 eax_108 = Mem23[0x0040E550:word32];
  6345.         if (eax_108 != ebx_105)
  6346.         {
  6347.             word32 esp_111 = esp_107 - 0x04;
  6348.             Mem112[esp_111 + 0x00:word32] = eax_108;
  6349.             word32 eax_113 = fn004029CD(ebp_106, dwArg00);
  6350.             esp_107 = esp_111 + 0x04;
  6351.             if (eax_113 != 0x00)
  6352.             {
  6353.                 word32 edi_120;
  6354.                 byte SCZO_122;
  6355.                 word32 ebx_123;
  6356.                 word32 esi_124;
  6357.                 byte SZO_125;
  6358.                 byte C_126;
  6359.                 word32 eax_127;
  6360.                 byte Z_128;
  6361.                 word32 ecx_129;
  6362.                 eax_113();
  6363.                 Mem130[ebp_106 - 0x04 + 0x00:word32] = eax_127;
  6364.                 if (eax_127 != 0x00)
  6365.                 {
  6366.                     word32 eax_134 = Mem130[0x0040E554:word32];
  6367.                     if (eax_134 != ebx_123)
  6368.                     {
  6369.                         Mem138[esp_107 - 0x04 + 0x00:word32] = eax_134;
  6370.                         word32 eax_139 = fn004029CD(ebp_106, dwArg00);
  6371.                         if (eax_139 != 0x00)
  6372.                         {
  6373.                             Mem146[esp_107 - 0x04 + 0x00:word32] = Mem138[ebp_106 - 0x04 + 0x00:word32];
  6374.                             word32 edi_148;
  6375.                             byte SCZO_150;
  6376.                             word32 ebx_151;
  6377.                             word32 esi_152;
  6378.                             byte SZO_153;
  6379.                             byte C_154;
  6380.                             word32 eax_155;
  6381.                             byte Z_156;
  6382.                             word32 ecx_157;
  6383.                             eax_139();
  6384.                             Mem158[ebp_106 - 0x04 + 0x00:word32] = eax_155;
  6385.                         }
  6386.                     }
  6387.                 }
  6388.             }
  6389.         }
  6390.         goto l00406235;
  6391.     }
  6392.     else
  6393.     {
  6394.         word32 esp_161 = esp_107 - 0x04;
  6395.         Mem162[esp_161 + 0x00:word32] = eax_63;
  6396.         word32 eax_163 = fn004029CD(ebp_106, dwArg00);
  6397.         Mem165[esp_161 - 0x04 + 0x00:word32] = Mem162[0x0040E55C:word32];
  6398.         word32 eax_167 = fn004029CD(ebp_106, dwArg00);
  6399.         esp_107 = esp_161 + 0x04;
  6400.         if (eax_163 == 0x00 || eax_167 == 0x00)
  6401.             goto l004061FC;
  6402.         word32 edi_180;
  6403.         byte SCZO_182;
  6404.         word32 ebx_183;
  6405.         word32 esi_184;
  6406.         byte SZO_185;
  6407.         byte C_186;
  6408.         word32 eax_187;
  6409.         byte Z_188;
  6410.         word32 ecx_189;
  6411.         eax_163();
  6412.         if (eax_187 != 0x00)
  6413.         {
  6414.             Mem208[esp_107 - 0x04 + 0x00:word32] = ebp_106 - 0x08;
  6415.             Mem210[esp_107 - 0x08 + 0x00:word32] = 0x0C;
  6416.             Mem213[esp_107 - 0x0C + 0x00:word32] = ebp_106 - 0x14;
  6417.             Mem215[esp_107 - 0x10 + 0x00:word32] = 0x01;
  6418.             Mem217[esp_107 - 0x14 + 0x00:word32] = eax_187;
  6419.             word32 edi_219;
  6420.             byte SCZO_221;
  6421.             word32 esi_223;
  6422.             byte SZO_224;
  6423.             byte C_225;
  6424.             word32 eax_226;
  6425.             byte Z_227;
  6426.             word32 ecx_228;
  6427.             edi_180();
  6428.             if (eax_226 != 0x00 && (Mem217[(ebp_106 - 0x0C) + 0x00:byte] & 0x01) != 0x00)
  6429.                 goto l004061FC;
  6430.         }
  6431.         Mem203[ebp_106 + 0x10:word32] = Mem165[ebp_106 + 0x10:word32] | 0x00200000;
  6432. l00406235:
  6433.         word32 esp_72 = esp_107 - 0x04;
  6434.         Mem73[esp_72 + 0x00:word32] = Mem23[0x0040E54C:word32];
  6435.         word32 eax_75 = fn004029CD(ebp_106, dwArg00);
  6436.         if (eax_75 != 0x00)
  6437.         {
  6438.             Mem82[esp_72 + 0x00:word32] = Mem73[ebp_106 + 0x10:word32];
  6439.             Mem84[esp_72 - 0x04 + 0x00:word32] = Mem82[ebp_106 + 0x0C:word32];
  6440.             Mem86[esp_72 - 0x08 + 0x00:word32] = Mem84[ebp_106 + 0x08:word32];
  6441.             Mem88[esp_72 - 0x0C + 0x00:word32] = Mem86[ebp_106 - 0x04 + 0x00:word32];
  6442.             word32 esp_89;
  6443.             word32 edi_90;
  6444.             word32 ebp_91;
  6445.             byte SCZO_92;
  6446.             word32 ebx_93;
  6447.             word32 esi_94;
  6448.             byte SZO_95;
  6449.             byte C_96;
  6450.             word32 eax_97;
  6451.             byte Z_98;
  6452.             word32 ecx_99;
  6453.             eax_75();
  6454.             return;
  6455.         }
  6456.         return;
  6457.     }
  6458. }
  6459.  
  6460. bool fn0040625C(word32 esi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & xmm0Out)
  6461. {
  6462.     *xmm0Out = xmm0;
  6463.     word32 esp_151;
  6464.     word32 ebx_142;
  6465.     word128 xmm0_146;
  6466.     if (dwArg04 != 0x00)
  6467.     {
  6468.         word32 edi_100 = dwArg08;
  6469.         if (dwArg08 >u 0x00)
  6470.         {
  6471.             esi = dwArg0C;
  6472.             if (dwArg0C != 0x00)
  6473.             {
  6474.                 word32 edx_114 = dwArg04;
  6475.                 if (Mem0[edx_114 + 0x00:byte] != 0x00)
  6476.                 {
  6477.                     edx_114 = edx_114 + 0x01;
  6478.                     edi_100 = edi_100 - 0x01;
  6479.                     if (edi_100 != 0x00)
  6480.                         goto l0040629C;
  6481.                 }
  6482.                 if (edi_100 != 0x00)
  6483.                 {
  6484. l004062A8:
  6485.                     byte cl_129 = Mem0[esi + 0x00:byte];
  6486.                     Mem130[edx_114 + 0x00:byte] = cl_129;
  6487.                     edx_114 = edx_114 + 0x01;
  6488.                     *edxOut = edx_114;
  6489.                     esi = esi + 0x01;
  6490.                     if (cl_129 != 0x00)
  6491.                     {
  6492.                         edi_100 = edi_100 - 0x01;
  6493.                         if (edi_100 != 0x00)
  6494.                             goto l004062A8;
  6495.                     }
  6496.                     if (edi_100 != 0x00)
  6497.                     {
  6498.                         word32 eax_154;
  6499.                         *eaxOut = 0x00;
  6500.                         return D;
  6501.                     }
  6502.                     Mem139[dwArg04 + 0x00:byte] = 0x00;
  6503.                     word32 eax_140;
  6504.                     word32 edx_141;
  6505.                     word32 ebp_143;
  6506.                     word32 esi_144;
  6507.                     word32 edi_145;
  6508.                     D = fn0040197F(0x00, fp - 0x04, esi, es, ds, out eax_140, out edx_141, out ebx_142, out ebp_143, out esi_144, out edi_145, out xmm0_146);
  6509.                     Mem149[fp - 0x14 + 0x00:word32] = 0x22;
  6510.                     Mem152[eax_140 + 0x00:word32] = Mem149[fp - 0x14 + 0x00:word32];
  6511.                     esp_151 = fp - 0x10;
  6512. l0040627E:
  6513.                     word32 esp_59 = esp_151 - 0x04;
  6514.                     Mem60[esp_59 + 0x00:word32] = ebx_142;
  6515.                     Mem62[esp_59 - 0x04 + 0x00:word32] = ebx_142;
  6516.                     Mem64[esp_59 - 0x08 + 0x00:word32] = ebx_142;
  6517.                     Mem66[esp_59 - 0x0C + 0x00:word32] = ebx_142;
  6518.                     Mem68[esp_59 - 0x10 + 0x00:word32] = ebx_142;
  6519.                     word32 edx_71;
  6520.                     word32 ebx_72;
  6521.                     word32 esi_73;
  6522.                     fn00401917(es, ds, xmm0_146, out edx_71, out ebx_72, out esi_73);
  6523.                     word32 eax_77;
  6524.                     *eaxOut = esi_73;
  6525.                     return D;
  6526.                 }
  6527.             }
  6528.             Mem113[dwArg04 + 0x00:byte] = 0x00;
  6529.         }
  6530.     }
  6531.     word32 eax_84;
  6532.     word32 edx_85;
  6533.     word32 ebp_87;
  6534.     word32 esi_88;
  6535.     word32 edi_89;
  6536.     D = fn0040197F(0x00, fp - 0x04, esi, es, ds, out eax_84, out edx_85, out ebx_142, out ebp_87, out esi_88, out edi_89, out xmm0_146);
  6537.     Mem93[fp - 0x14 + 0x00:word32] = 22;
  6538.     Mem96[eax_84 + 0x00:word32] = Mem93[fp - 0x14 + 0x00:word32];
  6539.     esp_151 = fp - 0x10;
  6540.     goto l0040627E;
  6541. }
  6542.  
  6543. bool fn004062D0(selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, word32 dwArg10, ptr32 & eaxOut, ptr32 & xmm0Out)
  6544. {
  6545.     *xmm0Out = xmm0;
  6546.     word32 esp_108;
  6547.     word32 ebx_148;
  6548.     word128 xmm0_103;
  6549.     if (dwArg10 == 0x00)
  6550.         if (dwArg04 == 0x00)
  6551.         {
  6552.             if (dwArg08 == 0x00)
  6553.                 goto l004062EB;
  6554.             goto l004062FD;
  6555.         }
  6556.     else if (dwArg04 == 0x00)
  6557.         goto l004062FD;
  6558.     word32 edi_114 = dwArg08;
  6559.     if (dwArg08 <=u 0x00)
  6560.         goto l004062FD;
  6561.     if (dwArg10 == 0x00)
  6562.         Mem119[dwArg04 + 0x00:byte] = 0x00;
  6563.     else
  6564.     {
  6565.         word32 edx_122 = dwArg0C;
  6566.         if (dwArg0C == 0x00)
  6567.         {
  6568.             Mem125[dwArg04 + 0x00:byte] = 0x00;
  6569. l004062FD:
  6570.             word32 eax_97;
  6571.             word32 edx_98;
  6572.             word32 ebp_100;
  6573.             word32 esi_101;
  6574.             word32 edi_102;
  6575.             D = fn0040197F(0x00, fp - 0x04, dwArg04, es, ds, out eax_97, out edx_98, out ebx_148, out ebp_100, out esi_101, out edi_102, out xmm0_103);
  6576.             Mem106[fp - 0x14 + 0x00:word32] = 22;
  6577.             Mem109[eax_97 + 0x00:word32] = Mem106[fp - 0x14 + 0x00:word32];
  6578.             esp_108 = fp - 0x10;
  6579.             goto l00406307;
  6580.         }
  6581.         word32 eax_128 = dwArg04;
  6582.         if (dwArg10 == ~0x00)
  6583.             do
  6584.             {
  6585.                 byte cl_164 = Mem0[edx_122 + 0x00:byte];
  6586.                 Mem165[eax_128 + 0x00:byte] = cl_164;
  6587.                 eax_128 = eax_128 + 0x01;
  6588.                 edx_122 = edx_122 + 0x01;
  6589.                 if (cl_164 == 0x00)
  6590.                     goto l0040635C;
  6591.                 edi_114 = edi_114 - 0x01;
  6592.             } while (edi_114 != 0x00);
  6593.         else
  6594.         {
  6595. l00406343:
  6596.             byte cl_178 = Mem0[edx_122 + 0x00:byte];
  6597.             Mem179[eax_128 + 0x00:byte] = cl_178;
  6598.             eax_128 = eax_128 + 0x01;
  6599.             edx_122 = edx_122 + 0x01;
  6600.             if (cl_178 != 0x00)
  6601.             {
  6602.                 edi_114 = edi_114 - 0x01;
  6603.                 if (edi_114 == 0x00)
  6604.                     break;
  6605.                 word32 v16_193 = dwArg10 - 0x01;
  6606.                 dwArg10 = v16_193;
  6607.                 if (v16_193 != 0x00)
  6608.                     goto l00406343;
  6609.             }
  6610.             if (dwArg10 == 0x00)
  6611.                 Mem189[eax_128 + 0x00:byte] = 0x00;
  6612.         }
  6613.         if (edi_114 == 0x00)
  6614.         {
  6615.             if (dwArg10 == ~0x00)
  6616.             {
  6617.                 Mem142[dwArg04 - 0x01 + dwArg08:byte] = 0x00;
  6618.                 word32 eax_143;
  6619.                 *eaxOut = 0x50;
  6620.                 return D;
  6621.             }
  6622.             Mem145[dwArg04 + 0x00:byte] = 0x00;
  6623.             word32 eax_146;
  6624.             word32 edx_147;
  6625.             word32 ebp_149;
  6626.             word32 esi_150;
  6627.             word32 edi_151;
  6628.             D = fn0040197F(0x00, fp - 0x04, dwArg04, es, ds, out eax_146, out edx_147, out ebx_148, out ebp_149, out esi_150, out edi_151, out xmm0_103);
  6629.             Mem155[fp - 0x14 + 0x00:word32] = 0x22;
  6630.             Mem158[eax_146 + 0x00:word32] = Mem155[fp - 0x14 + 0x00:word32];
  6631.             esp_108 = fp - 0x10;
  6632. l00406307:
  6633.             word32 esp_74 = esp_108 - 0x04;
  6634.             Mem75[esp_74 + 0x00:word32] = ebx_148;
  6635.             Mem77[esp_74 - 0x04 + 0x00:word32] = ebx_148;
  6636.             Mem79[esp_74 - 0x08 + 0x00:word32] = ebx_148;
  6637.             Mem81[esp_74 - 0x0C + 0x00:word32] = ebx_148;
  6638.             Mem83[esp_74 - 0x10 + 0x00:word32] = ebx_148;
  6639.             word32 edx_86;
  6640.             word32 ebx_87;
  6641.             word32 esi_88;
  6642.             fn00401917(es, ds, xmm0_103, out edx_86, out ebx_87, out esi_88);
  6643.             word32 eax_92;
  6644.             *eaxOut = esi_88;
  6645.             return D;
  6646.         }
  6647.     }
  6648. l004062EB:
  6649.     word32 eax_55;
  6650.     *eaxOut = 0x00;
  6651.     return D;
  6652. }
  6653.  
  6654. bool fn00406385(word32 esi, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & eaxOut, ptr32 & xmm0Out)
  6655. {
  6656.     *xmm0Out = xmm0;
  6657.     word32 esp_131;
  6658.     word32 ebx_122;
  6659.     word128 xmm0_126;
  6660.     if (dwArg04 != 0x00)
  6661.     {
  6662.         word32 edi_107 = dwArg08;
  6663.         if (dwArg08 >u 0x00)
  6664.         {
  6665.             esi = dwArg0C;
  6666.             if (dwArg0C != 0x00)
  6667.             {
  6668.                 word32 edx_104 = dwArg04;
  6669. l004063C5:
  6670.                 byte al_109 = Mem0[esi + 0x00:byte];
  6671.                 Mem110[edx_104 + 0x00:byte] = al_109;
  6672.                 edx_104 = edx_104 + 0x01;
  6673.                 esi = esi + 0x01;
  6674.                 if (al_109 != 0x00)
  6675.                 {
  6676.                     edi_107 = edi_107 - 0x01;
  6677.                     if (edi_107 != 0x00)
  6678.                         goto l004063C5;
  6679.                 }
  6680.                 if (edi_107 != 0x00)
  6681.                 {
  6682.                     word32 eax_134;
  6683.                     *eaxOut = 0x00;
  6684.                     return D;
  6685.                 }
  6686.                 Mem119[dwArg04 + 0x00:byte] = 0x00;
  6687.                 word32 eax_120;
  6688.                 word32 edx_121;
  6689.                 word32 ebp_123;
  6690.                 word32 esi_124;
  6691.                 word32 edi_125;
  6692.                 D = fn0040197F(0x00, fp - 0x04, esi, es, ds, out eax_120, out edx_121, out ebx_122, out ebp_123, out esi_124, out edi_125, out xmm0_126);
  6693.                 Mem129[fp - 0x14 + 0x00:word32] = 0x22;
  6694.                 Mem132[eax_120 + 0x00:word32] = Mem129[fp - 0x14 + 0x00:word32];
  6695.                 esp_131 = fp - 0x10;
  6696. l004063A7:
  6697.                 word32 esp_56 = esp_131 - 0x04;
  6698.                 Mem57[esp_56 + 0x00:word32] = ebx_122;
  6699.                 Mem59[esp_56 - 0x04 + 0x00:word32] = ebx_122;
  6700.                 Mem61[esp_56 - 0x08 + 0x00:word32] = ebx_122;
  6701.                 Mem63[esp_56 - 0x0C + 0x00:word32] = ebx_122;
  6702.                 Mem65[esp_56 - 0x10 + 0x00:word32] = ebx_122;
  6703.                 word32 edx_68;
  6704.                 word32 ebx_69;
  6705.                 word32 esi_70;
  6706.                 fn00401917(es, ds, xmm0_126, out edx_68, out ebx_69, out esi_70);
  6707.                 word32 eax_74;
  6708.                 *eaxOut = esi_70;
  6709.                 return D;
  6710.             }
  6711.             Mem103[dwArg04 + 0x00:byte] = 0x00;
  6712.         }
  6713.     }
  6714.     word32 eax_81;
  6715.     word32 edx_82;
  6716.     word32 ebp_84;
  6717.     word32 esi_85;
  6718.     word32 edi_86;
  6719.     D = fn0040197F(0x00, fp - 0x04, esi, es, ds, out eax_81, out edx_82, out ebx_122, out ebp_84, out esi_85, out edi_86, out xmm0_126);
  6720.     Mem90[fp - 0x14 + 0x00:word32] = 22;
  6721.     Mem93[eax_81 + 0x00:word32] = Mem90[fp - 0x14 + 0x00:word32];
  6722.     esp_131 = fp - 0x10;
  6723.     goto l004063A7;
  6724. }
  6725.  
  6726. bool fn004063ED(word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  6727. {
  6728.     *ebxOut = ebx;
  6729.     *xmm0Out = xmm0;
  6730.     *edxOut = edx;
  6731.     if (dwArg04 >= 0x00)
  6732.     {
  6733.         if (dwArg04 <= 0x02)
  6734.         {
  6735.             word32 eax_78;
  6736.             *eaxOut = Mem0[0x0040DF08:word32];
  6737.             Mem79[0x0040DF08:word32] = dwArg04;
  6738.             return D;
  6739.         }
  6740.         if (dwArg04 == 0x03)
  6741.         {
  6742.             word32 eax_73;
  6743.             *eaxOut = Mem0[0x0040DF08:word32];
  6744.             return D;
  6745.         }
  6746.     }
  6747.     word32 eax_42;
  6748.     word32 edx_43;
  6749.     word32 ebx_44;
  6750.     word32 ebp_45;
  6751.     word32 esi_46;
  6752.     word32 edi_47;
  6753.     word128 xmm0_48;
  6754.     D = fn0040197F(ebx, fp - 0x04, 0x00, es, ds, out eax_42, out edx_43, out ebx_44, out ebp_45, out esi_46, out edi_47, out xmm0_48);
  6755.     Mem51[fp - 0x0C + 0x00:word32] = esi_46;
  6756.     Mem53[fp - 0x10 + 0x00:word32] = esi_46;
  6757.     Mem55[fp - 0x14 + 0x00:word32] = esi_46;
  6758.     Mem57[fp - 0x18 + 0x00:word32] = esi_46;
  6759.     Mem59[fp - 0x1C + 0x00:word32] = esi_46;
  6760.     Mem60[eax_42 + 0x00:word32] = 22;
  6761.     word32 edx_61;
  6762.     word32 ebx_62;
  6763.     word32 esi_63;
  6764.     word32 eax_66;
  6765.     *eaxOut = fn00401917(es, ds, xmm0_48, out edx_61, out ebx_62, out esi_63) | ~0x00;
  6766.     return D;
  6767. }
  6768.  
  6769. word32 fn00406438(word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & esiOut)
  6770. {
  6771.     *esiOut = esi;
  6772.     word32 eax_28;
  6773.     word32 ebx_17;
  6774.     word128 xmm0_18;
  6775.     fn00401759(fp - 0x14, ebx, es, ds, dwArg04, out ebx_17, out xmm0_18);
  6776.     word32 eax_22 = (word32) Mem0[fp + 0x08:byte];
  6777.     if ((Mem0[Mem0[fp - 0x10 + 0x00:word32] + 0x1D + eax_22:byte] & Mem0[fp + 0x10:byte]) == 0x00)
  6778.     {
  6779.         if (Mem0[fp + 0x0C:word32] != 0x00)
  6780.             eax_28 = (word32) Mem0[Mem0[fp - 0x14 + 0x00:word32] + 200:word32][eax_22 * 0x02] & Mem0[fp + 0x0C:word32];
  6781.         else
  6782.             eax_28 = 0x00;
  6783.         if (eax_28 == 0x00)
  6784.         {
  6785. l0040647C:
  6786.             if (Mem0[fp - 0x08 + 0x00:byte] != 0x00)
  6787.             {
  6788.                 word32 ecx_43 = Mem0[fp - 0x0C + 0x00:word32];
  6789.                 Mem45[ecx_43 + 0x70:word32] = Mem0[ecx_43 + 0x70:word32] & ~0x02;
  6790.             }
  6791.             return eax_28;
  6792.         }
  6793.     }
  6794.     eax_28 = 0x01;
  6795.     goto l0040647C;
  6796. }
  6797.  
  6798. word32 fn0040648B(word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & esiOut)
  6799. {
  6800.     word32 ebx_20;
  6801.     word32 esi_21;
  6802.     return fn00406438(ebx, es, ds, 0x00, out ebx_20, out esi_21);
  6803. }
  6804.  
  6805. word32 fn004064B0(word32 ebp, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & esiOut, ptr32 & ediOut)
  6806. {
  6807.     word32 esi_13 = dwArg08;
  6808.     word32 edi_17 = dwArg04;
  6809.     word32 eax_20 = dwArg0C + dwArg08;
  6810.     if (dwArg04 <=u dwArg08 || dwArg04 >=u eax_20)
  6811.     {
  6812.         if (dwArg0C >=u 0x0100 && Mem0[0x0040E960:word32] != 0x00)
  6813.         {
  6814.             esi_13 = dwArg08;
  6815.             edi_17 = dwArg04;
  6816.             if ((dwArg04 & 0x0F) == (dwArg08 & 0x0F))
  6817.             {
  6818.                 word32 esi_99;
  6819.                 *esiOut = esi;
  6820.                 word32 edi_101;
  6821.                 *ediOut = edi;
  6822.                 word128 xmm0_106;
  6823.                 fn00408F81(dwArg00, dwArg04, dwArg08, out xmm0_106);
  6824.                 return ebp;
  6825.             }
  6826.         }
  6827.         if ((edi_17 & 0x03) != 0x00)
  6828.             if (dwArg0C <u 0x04)
  6829.                 ;
  6830.         else
  6831.         {
  6832.             word32 ecx_54 = dwArg0C >>u 0x02;
  6833.             if (dwArg0C >>u 0x02 <u 0x08)
  6834.                 switch (dwArg0C & 0x03)
  6835.                     ;
  6836.             else
  6837.             {
  6838.                 while (ecx_54 != 0x00)
  6839.                 {
  6840.                     Mem73[edi_17 + 0x00:word32] = Mem0[esi_13 + 0x00:word32];
  6841.                     esi_13 = esi_13 + 0x04;
  6842.                     edi_17 = edi_17 + 0x04;
  6843.                     ecx_54 = ecx_54 - 0x01;
  6844.                 }
  6845.                 switch (dwArg0C & 0x03)
  6846.                 {
  6847.                 case 0x00:
  6848.                     word32 esi_60;
  6849.                     *esiOut = esi;
  6850.                     word32 edi_62;
  6851.                     *ediOut = edi;
  6852.                     return ebp;
  6853.                 }
  6854.             }
  6855.         }
  6856.     }
  6857.     else
  6858.     {
  6859.         word32 esi_111 = dwArg0C - 0x04 + dwArg08;
  6860.         word32 edi_112 = dwArg0C - 0x04 + dwArg04;
  6861.         if ((edi_112 & 0x03) != 0x00)
  6862.             if (dwArg0C <u 0x04)
  6863.                 switch (dwArg0C)
  6864.                     ;
  6865.         else
  6866.         {
  6867.             word32 ecx_128 = dwArg0C >>u 0x02;
  6868.             if (dwArg0C >>u 0x02 <u 0x08)
  6869.             {
  6870.                 word32 ecx_142 = -(dwArg0C >>u 0x02);
  6871.                 word32 esp_145;
  6872.                 word32 ebp_146;
  6873.                 word32 edi_147;
  6874.                 word32 esi_148;
  6875.                 word32 ecx_149;
  6876.                 word32 eax_150;
  6877.                 word32 edx_151;
  6878.                 byte SCZO_152;
  6879.                 byte CZ_153;
  6880.                 byte C_154;
  6881.                 byte Z_155;
  6882.                 byte SZO_156;
  6883.                 byte D_157;
  6884.                 word128 xmm0_158;
  6885.                 0x00406770[ecx_142 * 0x04]();
  6886.                 return ebp_146;
  6887.             }
  6888.             else
  6889.             {
  6890.                 while (ecx_128 != 0x00)
  6891.                 {
  6892.                     Mem137[edi_112 + 0x00:word32] = Mem0[esi_111 + 0x00:word32];
  6893.                     esi_111 = esi_111 - 0x04;
  6894.                     edi_112 = edi_112 - 0x04;
  6895.                     ecx_128 = ecx_128 - 0x01;
  6896.                 }
  6897.                 switch (dwArg0C & 0x03)
  6898.                 {
  6899.                 case 0x00:
  6900.                     word32 esi_122;
  6901.                     *esiOut = esi;
  6902.                     word32 edi_124;
  6903.                     *ediOut = edi;
  6904.                     return ebp;
  6905.                 }
  6906.             }
  6907.         }
  6908.     }
  6909. }
  6910.  
  6911. word32 fn00406815(word32 dwArg04, ptr32 & edxOut)
  6912. {
  6913.     *edxOut = edx;
  6914.     word32 eax_10 = Mem0[4254056:word32] + 0x0C;
  6915.     word32 ecx_12 = Mem0[4254052:word32] *s 0x14 + eax_10;
  6916.     while (eax_10 <u ecx_12)
  6917.     {
  6918.         word32 edx_32 = dwArg04 - Mem0[eax_10 + 0x00:word32];
  6919.         *edxOut = edx_32;
  6920.         if (edx_32 <u 0x00100000)
  6921.             return eax_10;
  6922.         eax_10 = eax_10 + 0x14;
  6923.     }
  6924.     eax_10 = 0x00;
  6925.     return eax_10;
  6926. }
  6927.  
  6928. bool fn00406845(word32 dwArg04, word32 dwArg08, byte bArg0B, ptr32 & edxOut, ptr32 & xmm0Out)
  6929. {
  6930. fn00406845_entry:
  6931.     def fp
  6932.     def dwArg04
  6933.     def Mem0
  6934.     def dwArg08
  6935.     def edx
  6936.     def xmm0
  6937.     def D
  6938.     ebp_7 = fp - 0x04
  6939.     ecx_10 = dwArg04
  6940.     eax_12 = Mem0[dwArg04 + 0x10:word32]
  6941.     esi_17 = dwArg08
  6942.     edi_20 = dwArg08
  6943.     edi_21 = dwArg08 - Mem0[dwArg04 + 0x0C:word32]
  6944.     esi_22 = dwArg08 + ~0x03
  6945.     edi_23 = edi_21 >>u 0x0F
  6946.     ecx_24 = edi_21 >>u 0x0F
  6947.     ecx_25 = (edi_21 >>u 0x0F) *s 0x0204
  6948.     ecx_26 = ecx_25 + 0x0144 + eax_12
  6949.     dwLoc14_27 = ecx_26
  6950.     ecx_28 = Mem0[dwArg08 + ~0x03:word32]
  6951.     ecx_29 = ecx_28 - 0x01
  6952.     cl_30 = (byte) (ecx_28 - 0x01) (alias)
  6953.     dwLoc08_31 = ecx_28 - 0x01
  6954.     branch (cl_30 & 0x01) != 0x00 l00406B57
  6955.     goto l00406884
  6956. l00406845:
  6957. l00406884:
  6958.     ebx_89 = ecx_28 - 0x01 + (dwArg08 + ~0x03)
  6959.     edx_90 = Mem0[ebx_89 + 0x00:word32]
  6960.     dwLoc10_91 = edx_90
  6961.     edx_92 = Mem0[dwArg08 + ~0x07:word32]
  6962.     dwLoc0C_93 = edx_92
  6963.     edx_94 = edx_90
  6964.     dl_95 = (byte) edx_90 (alias)
  6965.     dwArg08_96 = ebx_89
  6966.     branch (dl_95 & 0x01) != 0x00 l00406912
  6967. l0040689E:
  6968.     edx_474 = edx_90 >> 0x04
  6969.     edx_475 = (edx_90 >> 0x04) - 0x01
  6970.     branch edx_475 <=u 0x3F l004068AA
  6971. l004068A7:
  6972.     edx_549 = 0x3F
  6973. l004068AA:
  6974.     edx_481 = PHI(edx_475, edx_549)
  6975.     ecx_483 = Mem0[ebx_89 + 0x04:word32]
  6976.     branch ecx_483 != Mem0[ebx_89 + 0x08:word32] l004068F4
  6977. l004068B2:
  6978.     branch edx_481 >=u 0x20 l004068D5
  6979. l004068BC:
  6980.     ecx_511 = edx_481
  6981.     cl_512 = (byte) edx_481 (alias)
  6982.     ebx_513 = 0x80000000 >>u cl_512
  6983.     ecx_514 = edx_481 + 0x04 + eax_12
  6984.     ebx_515 = ~ebx_513
  6985.     v17_516 = (eax_12 + 0x44)[(edi_21 >>u 0x0F) * 0x04] & ebx_515
  6986.     (eax_12 + 0x44)[(edi_21 >>u 0x0F) * 0x04] = v17_516
  6987.     v18_520 = Mem517[ecx_514 + 0x00:byte] - 0x01
  6988.     Mem521[ecx_514 + 0x00:byte] = v18_520
  6989.     branch v18_520 != 0x00 l004068F1
  6990. l004068CE:
  6991.     ecx_524 = dwArg04
  6992.     v19_525 = Mem521[dwArg04 + 0x00:word32] & ebx_515
  6993.     Mem526[dwArg04 + 0x00:word32] = v19_525
  6994.     goto l004068F1
  6995. l004068D5:
  6996.     ecx_529 = edx_481 - 0x20
  6997.     cl_530 = (byte) ecx_529 (alias)
  6998.     ebx_531 = 0x80000000 >>u cl_530
  6999.     ecx_532 = edx_481 + 0x04 + eax_12
  7000.     ebx_533 = ~ebx_531
  7001.     v20_534 = (eax_12 + 0xC4)[(edi_21 >>u 0x0F) * 0x04] & ebx_533
  7002.     (eax_12 + 0xC4)[(edi_21 >>u 0x0F) * 0x04] = v20_534
  7003.     v21_538 = Mem535[ecx_532 + 0x00:byte] - 0x01
  7004.     Mem539[ecx_532 + 0x00:byte] = v21_538
  7005.     branch v21_538 != 0x00 l004068F1
  7006. l004068EB:
  7007.     ecx_542 = dwArg04
  7008.     v22_543 = Mem539[dwArg04 + 0x04:word32] & ebx_533
  7009.     Mem544[dwArg04 + 0x04:word32] = v22_543
  7010. l004068F1:
  7011.     ebx_510 = ebx_89
  7012. l004068F4:
  7013.     ebx_489 = PHI(ebx_89, ebx_510)
  7014.     edx_490 = Mem0[ebx_489 + 0x08:word32]
  7015.     ebx_491 = Mem0[ebx_489 + 0x04:word32]
  7016.     ecx_492 = ecx_28 - 0x01
  7017.     ecx_493 = ecx_28 - 0x01 + edx_90
  7018.     Mem496[edx_490 + 0x04:word32] = ebx_491
  7019.     edx_497 = ebx_89
  7020.     ebx_498 = Mem496[ebx_89 + 0x04:word32]
  7021.     edx_499 = Mem496[ebx_89 + 0x08:word32]
  7022.     Mem500[ebx_498 + 0x08:word32] = edx_499
  7023.     dwLoc08_501 = ecx_493
  7024. l00406912:
  7025.     dwLoc08_100 = PHI(dwLoc08_31, dwLoc08_501)
  7026.     ecx_106 = PHI(ecx_29, ecx_493)
  7027.     edx_109 = ecx_106
  7028.     edx_110 = ecx_106 >> 0x04
  7029.     edx_111 = edx_110 - 0x01
  7030.     branch edx_110 <=u 0x40 l00406920
  7031. l0040691D:
  7032.     edx_471 = 0x3F
  7033. l00406920:
  7034.     edx_117 = PHI(edx_111, edx_471)
  7035.     ebx_119 = edx_92
  7036.     ebx_120 = edx_92 & 0x01
  7037.     dwLoc10_124 = edx_92 & 0x01
  7038.     branch (edx_92 & 0x01) != 0x00 l004069BE
  7039. l0040692F:
  7040.     esi_380 = dwArg08 + ~0x03 - edx_92
  7041.     ebx_381 = edx_92
  7042.     ebx_382 = edx_92 >> 0x04
  7043.     dwArg08_385 = esi_380
  7044.     ebx_386 = (edx_92 >> 0x04) - 0x01
  7045.     branch ebx_386 <=u 0x3F l00406945
  7046. l00406943:
  7047.     ebx_467 = 0x3F
  7048. l00406945:
  7049.     ebx_391 = PHI(ebx_386, ebx_467)
  7050.     ecx_392 = ecx_106 + edx_92
  7051.     edx_393 = ecx_392
  7052.     edx_394 = ecx_392 >> 0x04
  7053.     edx_395 = (ecx_392 >> 0x04) - 0x01
  7054.     dwLoc08_397 = ecx_392
  7055.     branch edx_395 <=u 0x3F l00406957
  7056. l00406955:
  7057.     edx_465 = 0x3F
  7058. l00406957:
  7059.     edx_401 = PHI(edx_395, edx_465)
  7060.     branch ebx_391 == edx_401 l004069B9
  7061. l0040695B:
  7062.     ecx_411 = esi_380
  7063.     esi_412 = Mem0[esi_380 + 0x04:word32]
  7064.     branch esi_412 != Mem0[esi_380 + 0x08:word32] l004069A1
  7065. l00406966:
  7066.     branch ebx_391 >=u 0x20 l00406987
  7067. l00406970:
  7068.     ecx_431 = ebx_391
  7069.     cl_432 = (byte) ebx_391 (alias)
  7070.     esi_433 = 0x80000000 >>u cl_432
  7071.     esi_434 = ~esi_433
  7072.     v24_435 = (eax_12 + 0x44)[(edi_21 >>u 0x0F) * 0x04] & esi_434
  7073.     (eax_12 + 0x44)[(edi_21 >>u 0x0F) * 0x04] = v24_435
  7074.     v25_439 = Mem436[ebx_391 + 0x04 + eax_12:byte] - 0x01
  7075.     Mem440[ebx_391 + 0x04 + eax_12:byte] = v25_439
  7076.     branch v25_439 != 0x00 l004069A1
  7077. l00406980:
  7078.     ecx_443 = dwArg04
  7079.     v26_444 = Mem440[dwArg04 + 0x00:word32] & esi_434
  7080.     Mem445[dwArg04 + 0x00:word32] = v26_444
  7081.     goto l004069A1
  7082. l00406987:
  7083.     ecx_448 = ebx_391 - 0x20
  7084.     cl_449 = (byte) ecx_448 (alias)
  7085.     esi_450 = 0x80000000 >>u cl_449
  7086.     esi_451 = ~esi_450
  7087.     v28_452 = (eax_12 + 0xC4)[(edi_21 >>u 0x0F) * 0x04] & esi_451
  7088.     (eax_12 + 0xC4)[(edi_21 >>u 0x0F) * 0x04] = v28_452
  7089.     v29_456 = Mem453[ebx_391 + 0x04 + eax_12:byte] - 0x01
  7090.     Mem457[ebx_391 + 0x04 + eax_12:byte] = v29_456
  7091.     branch v29_456 != 0x00 l004069A1
  7092. l0040699B:
  7093.     ecx_460 = dwArg04
  7094.     v30_461 = Mem457[dwArg04 + 0x04:word32] & esi_451
  7095.     Mem462[dwArg04 + 0x04:word32] = v30_461
  7096. l004069A1:
  7097.     ecx_420 = esi_380
  7098.     esi_421 = Mem0[esi_380 + 0x08:word32]
  7099.     ecx_422 = Mem0[esi_380 + 0x04:word32]
  7100.     Mem423[esi_421 + 0x04:word32] = ecx_422
  7101.     ecx_424 = esi_380
  7102.     esi_425 = Mem423[esi_380 + 0x04:word32]
  7103.     ecx_426 = Mem423[esi_380 + 0x08:word32]
  7104.     Mem427[esi_425 + 0x08:word32] = ecx_426
  7105. l004069B9:
  7106.     esi_410 = esi_380
  7107.     goto l004069C1
  7108. l004069BE:
  7109.     ebx_468 = dwArg04
  7110. l004069C1:
  7111.     dwLoc08_126 = PHI(dwLoc08_100, dwLoc08_397)
  7112.     edx_133 = PHI(edx_117, edx_401)
  7113.     ebx_135 = PHI(ebx_468, ebx_391)
  7114.     esi_136 = PHI(esi_22, esi_410)
  7115.     branch (edx_92 & 0x01) != 0x00 || ebx_135 != edx_133 l004069CF
  7116.     goto l00406A4F
  7117. l004069C7:
  7118. l004069CF:
  7119.     ecx_319 = ecx_26
  7120.     ecx_320 = ecx_26 + edx_133 * 0x08
  7121.     ebx_321 = Mem0[ecx_320 + 0x04:word32]
  7122.     Mem322[esi_136 + 0x08:word32] = ecx_320
  7123.     Mem323[esi_136 + 0x04:word32] = ebx_321
  7124.     Mem324[ecx_320 + 0x04:word32] = esi_136
  7125.     ecx_325 = Mem324[esi_136 + 0x04:word32]
  7126.     Mem326[ecx_325 + 0x08:word32] = esi_136
  7127.     ecx_327 = Mem326[esi_136 + 0x04:word32]
  7128.     branch ecx_327 != Mem326[esi_136 + 0x08:word32] l00406A4F
  7129. l004069EF:
  7130.     cl_330 = Mem326[edx_133 + 0x04 + eax_12:byte]
  7131.     bArg0B_331 = cl_330
  7132.     cl_332 = cl_330 + 0x01
  7133.     Mem333[edx_133 + 0x04 + eax_12:byte] = cl_330 + 0x01
  7134.     branch edx_133 >=u 0x20 l00406A26
  7135. l00406A01:
  7136.     branch cl_330 != 0x00 l00406A15
  7137. l00406A07:
  7138.     ecx_347 = edx_133
  7139.     cl_348 = (byte) edx_133 (alias)
  7140.     ebx_350 = 0x80000000 >>u cl_348
  7141.     ecx_351 = dwArg04
  7142.     v23_352 = Mem333[dwArg04 + 0x00:word32] | ebx_350
  7143.     Mem353[dwArg04 + 0x00:word32] = v23_352
  7144. l00406A15:
  7145.     ecx_339 = edx_133
  7146.     cl_340 = (byte) edx_133 (alias)
  7147.     ebx_341 = 0x80000000 >>u cl_340
  7148.     eax_342 = eax_12 + 0x44 + (edi_21 >>u 0x0F) * 0x04
  7149.     v32_343 = Mem333[eax_342 + 0x00:word32] | ebx_341
  7150.     Mem344[eax_342 + 0x00:word32] = v32_343
  7151.     goto l00406A4F
  7152. l00406A26:
  7153.     branch cl_330 != 0x00 l00406A3C
  7154. l00406A2C:
  7155.     ecx_369 = edx_133 - 0x20
  7156.     cl_370 = (byte) ecx_369 (alias)
  7157.     ebx_372 = 0x80000000 >>u cl_370
  7158.     ecx_373 = dwArg04
  7159.     v27_374 = Mem333[dwArg04 + 0x04:word32] | ebx_372
  7160.     Mem375[dwArg04 + 0x04:word32] = v27_374
  7161. l00406A3C:
  7162.     ecx_359 = edx_133 - 0x20
  7163.     cl_360 = (byte) ecx_359 (alias)
  7164.     edx_362 = 0x80000000 >>u cl_360
  7165.     eax_364 = eax_12 + 0xC4 + (edi_21 >>u 0x0F) * 0x04
  7166.     v31_365 = Mem333[eax_364 + 0x00:word32] | edx_362
  7167.     Mem366[eax_364 + 0x00:word32] = v31_365
  7168. l00406A4F:
  7169.     edx_145 = PHI(edx_133, edx_133, edx_362, edx_133)
  7170.     eax_148 = dwLoc08_126
  7171.     Mem149[esi_136 + 0x00:word32] = dwLoc08_126
  7172.     Mem150[dwLoc08_126 - 0x04 + esi_136:word32] = dwLoc08_126
  7173.     eax_151 = ecx_26
  7174.     v33_152 = Mem150[ecx_26 + 0x00:word32] - 0x01
  7175.     Mem153[ecx_26 + 0x00:word32] = v33_152
  7176.     branch v33_152 != 0x00 l00406B56
  7177. l00406A63:
  7178.     eax_180 = Mem153[0x0040E560:word32]
  7179.     branch eax_180 == 0x00 l00406B48
  7180. l00406A70:
  7181.     ecx_209 = Mem153[4254072:word32]
  7182.     esi_210 = VirtualFree
  7183.     ecx_213 = ecx_209 << 0x0F
  7184.     ecx_214 = (ecx_209 << 0x0F) + Mem153[eax_180 + 0x0C:word32]
  7185.     dwLoc2C_219 = ecx_214
  7186.     VirtualFree(ecx_214, 0x8000, 0x4000)
  7187.     ecx_222 = Mem153[4254072:word32]
  7188.     cl_223 = (byte) ecx_222 (alias)
  7189.     eax_224 = Mem153[0x0040E560:word32]
  7190.     edx_226 = 0x80000000 >>u cl_223
  7191.     v34_228 = Mem153[eax_224 + 0x08:word32] | edx_226
  7192.     Mem229[eax_224 + 0x08:word32] = v34_228
  7193.     eax_231 = Mem229[0x0040E560:word32]
  7194.     eax_232 = Mem229[eax_231 + 0x10:word32]
  7195.     ecx_233 = Mem229[4254072:word32]
  7196.     v35_234 = (eax_232 + 0xC4)[ecx_233 * 0x04] & 0x00
  7197.     (eax_232 + 0xC4)[ecx_233 * 0x04] = v35_234
  7198.     eax_237 = Mem235[0x0040E560:word32]
  7199.     eax_238 = Mem235[eax_237 + 0x10:word32]
  7200.     v36_239 = Mem235[eax_238 + 0x43:byte] - 0x01
  7201.     Mem240[eax_238 + 0x43:byte] = v36_239
  7202.     eax_241 = Mem240[0x0040E560:word32]
  7203.     ecx_242 = Mem240[eax_241 + 0x10:word32]
  7204.     branch Mem240[ecx_242 + 0x43:byte] != 0x00 l00406ADD
  7205. l00406AD4:
  7206.     v37_314 = Mem240[eax_241 + 0x04:word32] & ~0x01
  7207.     Mem315[eax_241 + 0x04:word32] = v37_314
  7208.     eax_318 = Mem315[0x0040E560:word32]
  7209. l00406ADD:
  7210.     eax_247 = PHI(eax_241, eax_318)
  7211.     branch Mem240[eax_247 + 0x08:word32] != ~0x00 l00406B48
  7212. l00406AE3:
  7213.     eax_261 = VirtualFree(Mem0[esp + 0x00:LPVOID], Mem0[esp + 0x04:SIZE_T], Mem0[esp + 0x08:DWORD])
  7214.     eax_273 = Mem240[0x0040E560:word32]
  7215.     dwLoc30_275 = Mem240[eax_273 + 0x10:word32]
  7216.     dwLoc38_279 = Mem240[4252540:word32]
  7217.     HeapFree(dwLoc38_279, 0x00, dwLoc30_275)
  7218.     ecx_282 = Mem240[4254052:word32]
  7219.     eax_283 = Mem240[0x0040E560:word32]
  7220.     ecx_284 = ecx_282 *s 0x14
  7221.     edx_285 = Mem240[4254056:word32]
  7222.     ecx_287 = ecx_282 *s 0x14 - eax_283
  7223.     ecx_289 = ecx_287 - 0x14 + edx_285
  7224.     dwLoc30_291 = ecx_289
  7225.     ecx_292 = eax_283 + 0x14
  7226.     dwLoc34_294 = eax_283 + 0x14
  7227.     dwLoc38_296 = eax_283
  7228.     D_301 = fn00409070(ebp_258, eax_283, eax_283 + 0x14, ecx_289, out edx_297, out ebp_298, out edi_299, out xmm0_300)
  7229.     eax_302 = Mem240[ebp_298 + 0x08:word32]
  7230.     v38_304 = Mem240[4254052:word32] - 0x01
  7231.     Mem305[4254052:word32] = v38_304
  7232.     branch eax_302 <=u Mem305[0x0040E560:word32] l00406B3E
  7233. l00406B3A:
  7234.     v39_311 = Mem305[ebp_298 + 0x08:word32] - 0x14
  7235.     Mem312[ebp_298 + 0x08:word32] = v39_311
  7236. l00406B3E:
  7237.     eax_309 = Mem305[4254056:word32]
  7238.     Mem310[0x0040E970:word32] = eax_309
  7239. l00406B48:
  7240.     edx_196 = PHI(edx_145, edx_226, edx_297)
  7241.     xmm0_197 = PHI(xmm0, xmm0, xmm0_300)
  7242.     D_198 = PHI(D, D, D_301)
  7243.     edi_202 = PHI(edi_23, edi_23, edi_299)
  7244.     ebp_204 = PHI(ebp_7, ebp_7, ebp_298)
  7245.     eax_206 = Mem153[ebp_204 + 0x08:word32]
  7246.     Mem207[0x0040E560:word32] = eax_206
  7247.     Mem208[4254072:word32] = edi_202
  7248. l00406B56:
  7249.     edx_168 = PHI(edx_145, edx_196)
  7250.     xmm0_169 = PHI(xmm0, xmm0_197)
  7251.     D_170 = PHI(D, D_198)
  7252. l00406B57:
  7253.     edx_70 = PHI(edx, edx_168)
  7254.     xmm0_71 = PHI(xmm0, xmm0_169)
  7255.     D_72 = PHI(D, D_170)
  7256.     return D_72
  7257. fn00406845_exit:
  7258.     use edx_70 (=> edxOut)
  7259.     use xmm0_71 (=> xmm0Out)
  7260. }
  7261.  
  7262. word32 fn00406B5B()
  7263. {
  7264.     word32 eax_21;
  7265.     word32 eax_3 = Mem0[0x0040E974:word32];
  7266.     word32 esi_105 = Mem0[4254052:word32];
  7267.     if (esi_105 == eax_3)
  7268.     {
  7269.         word32 eax_98 = HeapReAlloc(Mem0[4252540:word32], 0x00, Mem0[4254056:word32], (eax_3 + 0x10) *s 0x14);
  7270.         if (eax_98 == 0x00)
  7271.         {
  7272. l00406B8C:
  7273.             eax_21 = 0x00;
  7274.             return eax_21;
  7275.         }
  7276.         Mem103[0x0040E974:word32] = Mem0[0x0040E974:word32] + 0x10;
  7277.         esi_105 = Mem103[4254052:word32];
  7278.         Mem106[4254056:word32] = eax_98;
  7279.     }
  7280.     word32 esi_42 = esi_105 *s 0x14 + Mem0[4254056:word32];
  7281.     word32 eax_49 = HeapAlloc(Mem0[4252540:word32], 0x08, 0x41C4);
  7282.     Mem51[esi_42 + 0x10:word32] = eax_49;
  7283.     if (eax_49 != 0x00)
  7284.     {
  7285.         word32 eax_62 = VirtualAlloc(0x00, 0x00100000, 0x2000, 0x04);
  7286.         Mem64[esi_42 + 0x0C:word32] = eax_62;
  7287.         if (eax_62 != 0x00)
  7288.         {
  7289.             Mem76[esi_42 + 0x08:word32] = Mem64[esi_42 + 0x08:word32] | ~0x00;
  7290.             Mem78[esi_42 + 0x00:word32] = 0x00;
  7291.             Mem79[esi_42 + 0x04:word32] = 0x00;
  7292.             Mem81[4254052:word32] = Mem79[4254052:word32] + 0x01;
  7293.             word32 eax_82 = Mem81[esi_42 + 0x10:word32];
  7294.             Mem84[eax_82 + 0x00:word32] = Mem81[eax_82 + 0x00:word32] | ~0x00;
  7295.             eax_21 = esi_42;
  7296.             return eax_21;
  7297.         }
  7298.         HeapFree(Mem64[4252540:word32], 0x00, Mem64[esi_42 + 0x10:word32]);
  7299.     }
  7300.     goto l00406B8C;
  7301. }
  7302.  
  7303. word32 fn00406C0B(word32 dwArg04, ptr32 & edxOut)
  7304. {
  7305.     word32 eax_17 = Mem0[dwArg04 + 0x08:word32];
  7306.     word32 esi_25 = Mem0[dwArg04 + 0x10:word32];
  7307.     word32 ebx_179 = 0x00;
  7308.     while (eax_17 >= 0x00)
  7309.     {
  7310.         eax_17 = eax_17 * 0x02;
  7311.         ebx_179 = ebx_179 + 0x01;
  7312.     }
  7313.     word32 eax_42 = ebx_179 *s 0x0204 + 0x0144 + esi_25;
  7314.     word32 edx_47 = 0x3F;
  7315.     eax_50 = eax_42;
  7316.     do
  7317.     {
  7318.         word32 eax_50;
  7319.         Mem51[eax_50 + 0x08:word32] = eax_50;
  7320.         Mem52[eax_50 + 0x04:word32] = eax_50;
  7321.         eax_50 = eax_50 + 0x08;
  7322.         edx_47 = edx_47 - 0x01;
  7323.         *edxOut = edx_47;
  7324.     } while (edx_47 != 0x00);
  7325.     word32 eax_139;
  7326.     word32 edi_65 = (ebx_179 << 0x0F) + Mem52[dwArg04 + 0x0C:word32];
  7327.     word32 eax_70 = VirtualAlloc(edi_65, 0x8000, 0x1000, 0x04);
  7328.     if (eax_70 == 0x00)
  7329.         eax_139 = eax_70 | ~0x00;
  7330.     else
  7331.     {
  7332.         word32 edx_101 = edi_65 + 0x7000;
  7333.         if (edi_65 <=u edi_65 + 0x7000)
  7334.         {
  7335.             word32 eax_149 = edi_65 + 0x10;
  7336.             word32 ecx_151 = (edi_65 + 0x7000 - edi_65 >>u 0x0C) + 0x01;
  7337.             do
  7338.             {
  7339.                 Mem157[eax_149 - 0x08 + 0x00:word32] = Mem52[eax_149 - 0x08 + 0x00:word32] | ~0x00;
  7340.                 Mem160[eax_149 + 0x0FEC:word32] = Mem157[eax_149 + 0x0FEC:word32] | ~0x00;
  7341.                 Mem163[eax_149 + 0x00:word32] = eax_149 + 0x0FFC;
  7342.                 Mem165[eax_149 - 0x04 + 0x00:word32] = 0x0FF0;
  7343.                 Mem166[eax_149 + 0x04:word32] = eax_149 + ~0x1003;
  7344.                 Mem167[eax_149 + 0x0FE8:word32] = 0x0FF0;
  7345.                 eax_149 = eax_149 + 0x1000;
  7346.                 ecx_151 = ecx_151 - 0x01;
  7347.             } while (ecx_151 != 0x00);
  7348.             edx_101 = edi_65 + 0x7000;
  7349.         }
  7350.         Mem110[eax_42 + 0x01FC:word32] = edi_65 + 0x0C;
  7351.         Mem111[edi_65 + 0x14:word32] = eax_42 + 0x01F8;
  7352.         word32 ecx_112 = edx_101 + 0x0C;
  7353.         Mem113[eax_42 + 0x0200:word32] = ecx_112;
  7354.         Mem114[ecx_112 + 0x04:word32] = eax_42 + 0x01F8;
  7355.         (esi_25 + 0x44)[ebx_179 * 0x04] = (esi_25 + 0x44)[ebx_179 * 0x04] & 0x00;
  7356.         (esi_25 + 0xC4)[ebx_179 * 0x04] = 0x01;
  7357.         byte al_121 = Mem120[esi_25 + 0x43:byte];
  7358.         Mem129[esi_25 + 0x43:byte] = al_121 + 0x01;
  7359.         if (al_121 == 0x00)
  7360.             Mem142[dwArg04 + 0x04:word32] = Mem129[dwArg04 + 0x04:word32] | 0x01;
  7361.         word32 edx_134 = ~(0x80000000 >>u (byte) ebx_179);
  7362.         *edxOut = edx_134;
  7363.         Mem136[dwArg04 + 0x08:word32] = Mem129[dwArg04 + 0x08:word32] & edx_134;
  7364.         eax_139 = ebx_179;
  7365.     }
  7366.     return eax_139;
  7367. }
  7368.  
  7369. word32 fn00406D13(word32 dwArg04, word32 dwArg08, byte bArg0B, word32 dwArg0C, byte bArg0F, ptr32 & edxOut)
  7370. {
  7371.     word32 eax_101;
  7372.     word32 ecx_33 = Mem0[dwArg08 - 0x04 + 0x00:word32];
  7373.     word32 edi_43 = ecx_33 - 0x05 + dwArg08;
  7374.     word32 edx_26 = dwArg08 - Mem0[dwArg04 + 0x0C:word32];
  7375.     word32 eax_12 = Mem0[dwArg04 + 0x10:word32];
  7376.     word32 ebx_44 = Mem0[edi_43 + 0x00:word32];
  7377.     word32 edx_28 = edx_26 >>u 0x0F;
  7378.     *edxOut = edx_28;
  7379.     word32 ecx_31 = (edx_26 >>u 0x0F) *s 0x0204 + 0x0144 + eax_12;
  7380.     word32 esi_34 = dwArg0C + 0x17 & ~0x0F;
  7381.     byte bl_45 = (byte) ebx_44;
  7382.     if (esi_34 > ecx_33 - 0x01)
  7383.     {
  7384.         if ((bl_45 & 0x01) != 0x00 || esi_34 > ebx_44 + (ecx_33 - 0x01))
  7385.         {
  7386.             eax_101 = 0x00;
  7387.             return eax_101;
  7388.         }
  7389.         word32 ecx_113 = (ebx_44 >> 0x04) - 0x01;
  7390.         byte cl_114 = (byte) ecx_113;
  7391.         word32 dwLoc0C_115 = ecx_113;
  7392.         if (ecx_113 >u 0x3F)
  7393.         {
  7394.             ecx_113 = 0x3F;
  7395.             cl_114 = 0x3F;
  7396.             dwLoc0C_115 = 0x3F;
  7397.         }
  7398.         if (Mem0[edi_43 + 0x04:word32] == Mem0[edi_43 + 0x08:word32])
  7399.             if (ecx_113 <u 0x20)
  7400.             {
  7401.                 word32 ebx_258 = ~(0x80000000 >>u cl_114);
  7402.                 (eax_12 + 0x44)[(edx_26 >>u 0x0F) * 0x04] = (eax_12 + 0x44)[(edx_26 >>u 0x0F) * 0x04] & ebx_258;
  7403.                 word32 ecx_257 = dwLoc0C_115 + 0x04 + eax_12;
  7404.                 byte v20_264 = Mem261[ecx_257 + 0x00:byte] - 0x01;
  7405.                 Mem265[ecx_257 + 0x00:byte] = v20_264;
  7406.                 if (v20_264 == 0x00)
  7407.                     Mem270[dwArg04 + 0x00:word32] = Mem265[dwArg04 + 0x00:word32] & ebx_258;
  7408.             }
  7409.             else
  7410.             {
  7411.                 word32 ebx_278 = ~(0x80000000 >>u (byte) (ecx_113 + ~0x1F));
  7412.                 (eax_12 + 0xC4)[(edx_26 >>u 0x0F) * 0x04] = (eax_12 + 0xC4)[(edx_26 >>u 0x0F) * 0x04] & ebx_278;
  7413.                 word32 ecx_277 = dwLoc0C_115 + 0x04 + eax_12;
  7414.                 byte v26_284 = Mem281[ecx_277 + 0x00:byte] - 0x01;
  7415.                 Mem285[ecx_277 + 0x00:byte] = v26_284;
  7416.                 if (v26_284 == 0x00)
  7417.                     Mem290[dwArg04 + 0x04:word32] = Mem285[dwArg04 + 0x04:word32] & ebx_278;
  7418.             }
  7419.         word32 edx_149;
  7420.         Mem132[Mem0[edi_43 + 0x08:word32] + 0x04:word32] = Mem0[edi_43 + 0x04:word32];
  7421.         Mem135[Mem132[edi_43 + 0x04:word32] + 0x08:word32] = Mem132[edi_43 + 0x08:word32];
  7422.         word32 v31_138 = ebx_44 + ((ecx_33 - 0x01) - esi_34);
  7423.         if (v31_138 > 0x00)
  7424.         {
  7425.             word32 edi_162 = (v31_138 >> 0x04) - 0x01;
  7426.             word32 ecx_163 = dwArg08 - 0x04 + esi_34;
  7427.             if (edi_162 >u 0x3F)
  7428.                 edi_162 = 0x3F;
  7429.             word32 ebx_171 = ecx_31 + edi_162 * 0x08;
  7430.             Mem174[ecx_163 + 0x04:word32] = Mem135[ebx_171 + 0x04:word32];
  7431.             Mem176[ecx_163 + 0x08:word32] = ebx_171;
  7432.             Mem177[ebx_171 + 0x04:word32] = ecx_163;
  7433.             Mem179[Mem177[ecx_163 + 0x04:word32] + 0x08:word32] = ecx_163;
  7434.             if (Mem179[ecx_163 + 0x04:word32] == Mem179[ecx_163 + 0x08:word32])
  7435.             {
  7436.                 word32 eax_205;
  7437.                 byte cl_203;
  7438.                 byte cl_195 = Mem179[edi_162 + 0x04 + eax_12:byte];
  7439.                 Mem198[edi_162 + 0x04 + eax_12:byte] = cl_195 + 0x01;
  7440.                 if (edi_162 <u 0x20)
  7441.                 {
  7442.                     if (cl_195 == 0x00)
  7443.                         Mem227[dwArg04 + 0x00:word32] = Mem198[dwArg04 + 0x00:word32] | 0x80000000 >>u (byte) edi_162;
  7444.                     eax_205 = eax_12 + 0x44 + (edx_26 >>u 0x0F) * 0x04;
  7445.                     cl_203 = (byte) edi_162;
  7446.                 }
  7447.                 else
  7448.                 {
  7449.                     if (cl_195 == 0x00)
  7450.                         Mem244[dwArg04 + 0x04:word32] = Mem198[dwArg04 + 0x04:word32] | 0x80000000 >>u (byte) (edi_162 - 0x20);
  7451.                     eax_205 = eax_12 + 0xC4 + (edx_26 >>u 0x0F) * 0x04;
  7452.                     cl_203 = (byte) (edi_162 - 0x20);
  7453.                 }
  7454.                 Mem210[eax_205 + 0x00:word32] = Mem198[eax_205 + 0x00:word32] | 0x80000000 >>u cl_203;
  7455.             }
  7456.             word32 eax_192 = dwArg08 - 0x04 + esi_34;
  7457.             Mem193[eax_192 + 0x00:word32] = v31_138;
  7458.             Mem194[v31_138 - 0x04 + eax_192:word32] = v31_138;
  7459.             *edxOut = dwArg08;
  7460.         }
  7461.         else
  7462.             *edxOut = dwArg08;
  7463.         Mem157[edx_149 - 0x04 + 0x00:word32] = esi_34 + 0x01;
  7464.         Mem158[edx_149 - 0x08 + esi_34:word32] = esi_34 + 0x01;
  7465.     }
  7466.     else if (esi_34 < ecx_33 - 0x01)
  7467.     {
  7468.         word32 v17_300 = ecx_33 - 0x01 - esi_34;
  7469.         Mem303[dwArg08 - 0x04 + 0x00:word32] = esi_34 + 0x01;
  7470.         word32 ebx_304 = dwArg08 - 0x04 + esi_34;
  7471.         Mem310[ebx_304 - 0x04 + 0x00:word32] = esi_34 + 0x01;
  7472.         word32 dwArg0C_301 = v17_300;
  7473.         word32 esi_308 = (v17_300 >> 0x04) - 0x01;
  7474.         if (esi_308 >u 0x3F)
  7475.             esi_308 = 0x3F;
  7476.         if ((bLoc08 & 0x01) == 0x00)
  7477.         {
  7478.             word32 esi_407 = (ebx_44 >> 0x04) - 0x01;
  7479.             if (esi_407 >u 0x3F)
  7480.                 esi_407 = 0x3F;
  7481.             if (Mem310[edi_43 + 0x04:word32] == Mem310[edi_43 + 0x08:word32])
  7482.                 if (esi_407 <u 0x20)
  7483.                 {
  7484.                     word32 ebx_454 = ~(0x80000000 >>u (byte) esi_407);
  7485.                     (eax_12 + 0x44)[(edx_26 >>u 0x0F) * 0x04] = (eax_12 + 0x44)[(edx_26 >>u 0x0F) * 0x04] & ebx_454;
  7486.                     word32 esi_453 = esi_407 + 0x04 + eax_12;
  7487.                     byte v23_460 = Mem457[esi_453 + 0x00:byte] - 0x01;
  7488.                     Mem461[esi_453 + 0x00:byte] = v23_460;
  7489.                     if (v23_460 == 0x00)
  7490.                         Mem466[dwArg04 + 0x00:word32] = Mem461[dwArg04 + 0x00:word32] & ebx_454;
  7491.                 }
  7492.                 else
  7493.                 {
  7494.                     word32 ebx_473 = ~(0x80000000 >>u (byte) (esi_407 - 0x20));
  7495.                     (eax_12 + 0xC4)[(edx_26 >>u 0x0F) * 0x04] = (eax_12 + 0xC4)[(edx_26 >>u 0x0F) * 0x04] & ebx_473;
  7496.                     word32 ecx_472 = esi_407 + 0x04 + eax_12;
  7497.                     byte v29_479 = Mem476[ecx_472 + 0x00:byte] - 0x01;
  7498.                     Mem480[ecx_472 + 0x00:byte] = v29_479;
  7499.                     if (v29_479 == 0x00)
  7500.                         Mem485[dwArg04 + 0x04:word32] = Mem480[dwArg04 + 0x04:word32] & ebx_473;
  7501.                 }
  7502.             Mem424[Mem310[edi_43 + 0x08:word32] + 0x04:word32] = Mem310[edi_43 + 0x04:word32];
  7503.             Mem427[Mem424[edi_43 + 0x04:word32] + 0x08:word32] = Mem424[edi_43 + 0x08:word32];
  7504.             word32 esi_429 = v17_300 + ebx_44;
  7505.             dwArg0C_301 = esi_429;
  7506.             esi_308 = (esi_429 >> 0x04) - 0x01;
  7507.             if (esi_308 >u 0x3F)
  7508.                 esi_308 = 0x3F;
  7509.         }
  7510.         word32 ecx_331 = ecx_31 + esi_308 * 0x08;
  7511.         word32 edi_332 = Mem310[ecx_331 + 0x04:word32];
  7512.         Mem333[ebx_304 + 0x08:word32] = ecx_331;
  7513.         Mem334[ebx_304 + 0x04:word32] = edi_332;
  7514.         Mem335[ecx_331 + 0x04:word32] = ebx_304;
  7515.         Mem337[Mem335[ebx_304 + 0x04:word32] + 0x08:word32] = ebx_304;
  7516.         if (Mem337[ebx_304 + 0x04:word32] == Mem337[ebx_304 + 0x08:word32])
  7517.         {
  7518.             word32 eax_363;
  7519.             byte cl_361;
  7520.             byte cl_353 = Mem337[esi_308 + 0x04 + eax_12:byte];
  7521.             Mem356[esi_308 + 0x04 + eax_12:byte] = cl_353 + 0x01;
  7522.             if (esi_308 <u 0x20)
  7523.             {
  7524.                 if (cl_353 == 0x00)
  7525.                     Mem385[dwArg04 + 0x00:word32] = Mem356[dwArg04 + 0x00:word32] | 0x80000000 >>u (byte) esi_308;
  7526.                 eax_363 = eax_12 + 0x44 + (edx_26 >>u 0x0F) * 0x04;
  7527.                 cl_361 = (byte) esi_308;
  7528.             }
  7529.             else
  7530.             {
  7531.                 if (cl_353 == 0x00)
  7532.                     Mem402[dwArg04 + 0x04:word32] = Mem356[dwArg04 + 0x04:word32] | 0x80000000 >>u (byte) (esi_308 - 0x20);
  7533.                 eax_363 = eax_12 + 0xC4 + (edx_26 >>u 0x0F) * 0x04;
  7534.                 cl_361 = (byte) (esi_308 - 0x20);
  7535.             }
  7536.             word32 edx_366 = 0x80000000 >>u cl_361;
  7537.             *edxOut = edx_366;
  7538.             Mem368[eax_363 + 0x00:word32] = Mem356[eax_363 + 0x00:word32] | edx_366;
  7539.         }
  7540.         Mem351[ebx_304 + 0x00:word32] = dwArg0C_301;
  7541.         Mem352[dwArg0C_301 - 0x04 + ebx_304:word32] = dwArg0C_301;
  7542.     }
  7543.     eax_101 = 0x01;
  7544.     return eax_101;
  7545. }
  7546.  
  7547. word32 fn00406FF7(word32 edx, word32 esi, word32 dwArg04, byte bArg07, ptr32 & edxOut)
  7548. {
  7549.     *edxOut = edx;
  7550.     word32 esi_36;
  7551.     word32 dwLoc0C_31;
  7552.     word32 ecx_16 = dwArg04 + 0x17 & ~0x0F;
  7553.     word32 ecx_22 = (ecx_16 >> 0x04) - 0x01;
  7554.     word32 eax_14 = Mem0[4254052:word32] *s 0x14 + Mem0[4254056:word32];
  7555.     byte cl_23 = (byte) ecx_22;
  7556.     if (ecx_22 < 0x20)
  7557.     {
  7558.         esi_36 = (esi | ~0x00) >>u cl_23;
  7559.         dwLoc0C_31 = dwLoc0C | ~0x00;
  7560.     }
  7561.     else
  7562.     {
  7563.         word32 edx_499 = (edx | ~0x00) >>u (byte) (ecx_22 + ~0x1F);
  7564.         *edxOut = edx_499;
  7565.         esi_36 = 0x00;
  7566.         dwLoc0C_31 = edx_499;
  7567.     }
  7568.     word32 ecx_37 = Mem0[0x0040E970:word32];
  7569.     word32 ebx_148 = ecx_37;
  7570.     while (true)
  7571.     {
  7572.         word32 dwArg04_400 = ebx_148;
  7573.         if (ebx_148 >=u eax_14)
  7574.             break;
  7575.         word32 edx_481 = Mem0[ebx_148 + 0x04:word32] & dwLoc0C_31 | Mem0[ebx_148 + 0x00:word32] & esi_36;
  7576.         *edxOut = edx_481;
  7577.         if (edx_481 != 0x00)
  7578.             break;
  7579.         ebx_148 = ebx_148 + 0x14;
  7580.     }
  7581.     word32 eax_167;
  7582.     if (ebx_148 == eax_14)
  7583.     {
  7584.         ebx_148 = Mem0[4254056:word32];
  7585.         while (true)
  7586.         {
  7587.             dwArg04_400 = ebx_148;
  7588.             if (ebx_148 >=u ecx_37)
  7589.                 break;
  7590.             word32 edx_471 = Mem0[ebx_148 + 0x04:word32] & dwLoc0C_31 | Mem0[ebx_148 + 0x00:word32] & esi_36;
  7591.             *edxOut = edx_471;
  7592.             if (edx_471 != 0x00)
  7593.                 break;
  7594.             ebx_148 = ebx_148 + 0x14;
  7595.         }
  7596.         if (ebx_148 == ecx_37)
  7597.         {
  7598.             while (ebx_148 <u eax_14 && Mem0[ebx_148 + 0x08:word32] == 0x00)
  7599.             {
  7600.                 ebx_148 = ebx_148 + 0x14;
  7601.                 dwArg04_400 = ebx_148;
  7602.             }
  7603.             if (ebx_148 == eax_14)
  7604.             {
  7605.                 ebx_148 = Mem0[4254056:word32] + 0x08;
  7606.                 while (true)
  7607.                 {
  7608.                     dwArg04_400 = ebx_148;
  7609.                     if (ebx_148 >=u ecx_37 || Mem0[ebx_148 + 0x00:word32] != 0x00)
  7610.                         break;
  7611.                     ebx_148 = ebx_148 + 0x14;
  7612.                 }
  7613.                 if (ebx_148 == ecx_37)
  7614.                 {
  7615.                     word32 eax_452 = fn00406B5B();
  7616.                     ebx_148 = eax_452;
  7617.                     dwArg04_400 = eax_452;
  7618.                     if (eax_452 == 0x00)
  7619.                     {
  7620. l004070C7:
  7621.                         eax_167 = 0x00;
  7622.                         return eax_167;
  7623.                     }
  7624.                 }
  7625.             }
  7626.             word32 edx_435;
  7627.             Mem440[Mem0[ebx_148 + 0x10:word32] + 0x00:word32] = fn00406C0B(ebx_148, out edx_435);
  7628.             if (Mem440[Mem440[ebx_148 + 0x10:word32] + 0x00:word32] == ~0x00)
  7629.                 goto l004070C7;
  7630.         }
  7631.     }
  7632.     Mem89[0x0040E970:word32] = ebx_148;
  7633.     Mem95[0x0040E970:word32] = ebx_148;
  7634.     word32 eax_96 = Mem95[ebx_148 + 0x10:word32];
  7635.     word32 edx_102 = Mem95[eax_96 + 0x00:word32];
  7636.     word32 dwLoc08_101 = edx_102;
  7637.     if (edx_102 != ~0x00)
  7638.         if (((eax_96 + 0xC4)[edx_102 * 0x04] & dwLoc0C_31 | (eax_96 + 0x44)[edx_102 * 0x04] & esi_36) != 0x00)
  7639.             goto l00407132;
  7640.     dwLoc08_101 = edx_102 & 0x00 & 0x00;
  7641.     word32 edx_357 = Mem95[eax_96 + 0xC4:word32];
  7642.     word32 ecx_358 = eax_96 + 0x44 + 0x84;
  7643.     while ((edx_357 & dwLoc0C_31 | Mem95[ecx_358 + 0x00:word32] & esi_36) == 0x00)
  7644.     {
  7645.         dwLoc08_101 = dwLoc08_101 + 0x01;
  7646.         edx_357 = Mem95[ecx_358 + 0x00:word32];
  7647.         ecx_358 = ecx_358 + 0x04;
  7648.     }
  7649.     edx_102 = dwLoc08_101;
  7650. l00407132:
  7651.     word32 ecx_106 = edx_102 *s 0x0204 + 0x0144 + eax_96;
  7652.     word32 edi_109 = 0x00;
  7653.     word32 ecx_110 = (eax_96 + 0x44)[edx_102 * 0x04] & esi_36;
  7654.     if (ecx_110 == 0x00)
  7655.     {
  7656.         ecx_110 = (eax_96 + 0xC4)[edx_102 * 0x04] & dwLoc0C_31;
  7657.         edi_109 = 0x20;
  7658.     }
  7659.     while (ecx_110 >= 0x00)
  7660.     {
  7661.         ecx_110 = ecx_110 * 0x02;
  7662.         edi_109 = edi_109 + 0x01;
  7663.     }
  7664.     word32 edx_125 = (ecx_106 + 0x04)[edi_109 * 0x08];
  7665.     word32 ecx_127 = Mem95[edx_125 + 0x00:word32] - ecx_16;
  7666.     word32 esi_131 = (ecx_127 >> 0x04) - 0x01;
  7667.     if (esi_131 > 0x3F)
  7668.         esi_131 = 0x3F;
  7669.     if (esi_131 == edi_109)
  7670.     {
  7671. l0040728A:
  7672.         if (ecx_127 != 0x00)
  7673.         {
  7674.             Mem189[edx_125 + 0x00:word32] = ecx_127;
  7675.             Mem190[ecx_127 - 0x04 + edx_125:word32] = ecx_127;
  7676.         }
  7677.         goto l00407299;
  7678.     }
  7679.     if (Mem95[edx_125 + 0x04:word32] == Mem95[edx_125 + 0x08:word32])
  7680.     {
  7681.         if (edi_109 < 0x20)
  7682.         {
  7683.             word32 ebx_292 = ~(0x80000000 >>u (byte) edi_109);
  7684.             (eax_96 + 0x44)[dwLoc08_101 * 0x04] = ebx_292 & (eax_96 + 0x44)[dwLoc08_101 * 0x04];
  7685.             word32 edi_291 = eax_96 + 0x04 + edi_109;
  7686.             byte v20_297 = Mem296[edi_291 + 0x00:byte] - 0x01;
  7687.             Mem298[edi_291 + 0x00:byte] = v20_297;
  7688.             if (v20_297 == 0x00)
  7689.             {
  7690.                 Mem304[dwArg04_400 + 0x00:word32] = Mem298[dwArg04_400 + 0x00:word32] & ebx_292;
  7691.                 ebx_148 = dwArg04_400;
  7692.                 goto l004071ED;
  7693.             }
  7694. l004071EA:
  7695.             ebx_148 = dwArg04_400;
  7696.             goto l004071ED;
  7697.         }
  7698.         word32 ecx_311 = eax_96 + 0xC4 + dwLoc08_101 * 0x04;
  7699.         word32 ebx_313 = ~(0x80000000 >>u (byte) (edi_109 - 0x20));
  7700.         Mem315[ecx_311 + 0x00:word32] = Mem95[ecx_311 + 0x00:word32] & ebx_313;
  7701.         word32 edi_312 = eax_96 + 0x04 + edi_109;
  7702.         byte v23_318 = Mem315[edi_312 + 0x00:byte] - 0x01;
  7703.         Mem319[edi_312 + 0x00:byte] = v23_318;
  7704.         if (v23_318 != 0x00)
  7705.             goto l004071EA;
  7706.         Mem326[dwArg04_400 + 0x04:word32] = Mem319[dwArg04_400 + 0x04:word32] & ebx_313;
  7707.         ebx_148 = dwArg04_400;
  7708.     }
  7709. l004071ED:
  7710.     Mem204[Mem95[edx_125 + 0x08:word32] + 0x04:word32] = Mem95[edx_125 + 0x04:word32];
  7711.     Mem207[Mem204[edx_125 + 0x04:word32] + 0x08:word32] = Mem204[edx_125 + 0x08:word32];
  7712.     if (ecx_127 == 0x00)
  7713.     {
  7714. l00407299:
  7715.         word32 edx_150 = edx_125 + ecx_127;
  7716.         *edxOut = edx_150;
  7717.         Mem152[edx_150 + 0x00:word32] = ecx_16 + 0x01;
  7718.         Mem153[edx_150 - 0x04 + ecx_16:word32] = ecx_16 + 0x01;
  7719.         word32 ecx_155 = Mem153[ecx_106 + 0x00:word32];
  7720.         Mem157[ecx_106 + 0x00:word32] = ecx_155 + 0x01;
  7721.         if (ecx_155 == 0x00 && (ebx_148 == Mem157[0x0040E560:word32] && dwLoc08_101 == Mem157[4254072:word32]))
  7722.             Mem174[0x0040E560:word32] = Mem157[0x0040E560:word32] & 0x00;
  7723.         Mem166[eax_96 + 0x00:word32] = dwLoc08_101;
  7724.         eax_167 = edx_150 + 0x04;
  7725.         return eax_167;
  7726.     }
  7727.     word32 ecx_209 = ecx_106 + esi_131 * 0x08;
  7728.     word32 edi_210 = Mem207[ecx_209 + 0x04:word32];
  7729.     Mem211[edx_125 + 0x08:word32] = ecx_209;
  7730.     Mem212[edx_125 + 0x04:word32] = edi_210;
  7731.     Mem213[ecx_209 + 0x04:word32] = edx_125;
  7732.     Mem215[Mem213[edx_125 + 0x04:word32] + 0x08:word32] = edx_125;
  7733.     if (Mem215[edx_125 + 0x04:word32] == Mem215[edx_125 + 0x08:word32])
  7734.     {
  7735.         byte cl_229 = Mem215[esi_131 + 0x04 + eax_96:byte];
  7736.         Mem234[esi_131 + 0x04 + eax_96:byte] = cl_229 + 0x01;
  7737.         if (esi_131 < 0x20)
  7738.         {
  7739.             if (cl_229 == 0x00)
  7740.                 Mem251[ebx_148 + 0x00:word32] = Mem234[ebx_148 + 0x00:word32] | 0x80000000 >>u (byte) esi_131;
  7741.             (eax_96 + 0x44)[dwLoc08_101 * 0x04] = (eax_96 + 0x44)[dwLoc08_101 * 0x04] | 0x80000000 >>u (byte) esi_131;
  7742.         }
  7743.         else
  7744.         {
  7745.             if (cl_229 == 0x00)
  7746.                 Mem271[ebx_148 + 0x04:word32] = Mem234[ebx_148 + 0x04:word32] | 0x80000000 >>u (byte) (esi_131 - 0x20);
  7747.             word32 edi_257 = eax_96 + 0xC4 + dwLoc08_101 * 0x04;
  7748.             Mem263[edi_257 + 0x00:word32] = Mem234[edi_257 + 0x00:word32] | 0x80000000 >>u (byte) (esi_131 - 0x20);
  7749.         }
  7750.     }
  7751.     goto l0040728A;
  7752. }
  7753.  
  7754. word32 fn004074B5(word32 ebx, word32 esi, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & xmm0Out)
  7755. {
  7756.     *ebxOut = ebx;
  7757.     *xmm0Out = xmm0;
  7758.     if (dwArg04 == ~0x01)
  7759.     {
  7760.         word32 edx_34;
  7761.         word32 ebx_35;
  7762.         word32 ebp_36;
  7763.         word32 esi_37;
  7764.         word32 edi_38;
  7765.         word128 xmm0_39;
  7766.         word32 eax_40 = fn00401992(ebx, fp - 0x04, esi, es, ds, out edx_34, out ebx_35, out ebp_36, out esi_37, out edi_38, out xmm0_39);
  7767.         Mem43[eax_40 + 0x00:word32] = Mem0[eax_40 + 0x00:word32] & 0x00;
  7768.         word32 eax_46;
  7769.         word32 edx_47;
  7770.         word32 ebx_48;
  7771.         word32 ebp_49;
  7772.         word32 esi_50;
  7773.         word32 edi_51;
  7774.         word128 xmm0_52;
  7775.         fn0040197F(ebx_35, ebp_36, esi_37, es, ds, out eax_46, out edx_47, out ebx_48, out ebp_49, out esi_50, out edi_51, out xmm0_52);
  7776.         Mem54[eax_46 + 0x00:word32] = 0x09;
  7777.         return eax_46 | ~0x00;
  7778.     }
  7779.     word32 eax_119;
  7780.     if (dwArg04 >= 0x00 && dwArg04 <u Mem0[4258220:word32])
  7781.     {
  7782.         word32 eax_129 = ((dwArg04 & 0x1F) << 0x06) + 0x0040F9C0[(dwArg04 >> 0x05) * 0x04];
  7783.         if ((Mem0[eax_129 + 0x04:byte] & 0x01) != 0x00)
  7784.         {
  7785.             eax_119 = Mem0[eax_129 + 0x00:word32];
  7786.             return eax_119;
  7787.         }
  7788.     }
  7789.     word32 edx_87;
  7790.     word32 ebx_88;
  7791.     word32 ebp_89;
  7792.     word32 esi_90;
  7793.     word32 edi_91;
  7794.     word128 xmm0_92;
  7795.     word32 eax_93 = fn00401992(ebx, fp - 0x04, 0x00, es, ds, out edx_87, out ebx_88, out ebp_89, out esi_90, out edi_91, out xmm0_92);
  7796.     Mem94[eax_93 + 0x00:word32] = esi_90;
  7797.     word32 eax_95;
  7798.     word32 edx_96;
  7799.     word32 ebx_97;
  7800.     word32 ebp_98;
  7801.     word32 esi_99;
  7802.     word32 edi_100;
  7803.     word128 xmm0_101;
  7804.     fn0040197F(ebx_88, ebp_89, esi_90, es, ds, out eax_95, out edx_96, out ebx_97, out ebp_98, out esi_99, out edi_100, out xmm0_101);
  7805.     Mem104[fp - 0x0C + 0x00:word32] = esi_99;
  7806.     Mem106[fp - 0x10 + 0x00:word32] = esi_99;
  7807.     Mem108[fp - 0x14 + 0x00:word32] = esi_99;
  7808.     Mem110[fp - 0x18 + 0x00:word32] = esi_99;
  7809.     Mem112[fp - 0x1C + 0x00:word32] = esi_99;
  7810.     Mem113[eax_95 + 0x00:word32] = 0x09;
  7811.     word32 edx_114;
  7812.     word32 ebx_115;
  7813.     word32 esi_116;
  7814.     eax_119 = fn00401917(es, ds, xmm0_101, out edx_114, out ebx_115, out esi_116) | ~0x00;
  7815.     return eax_119;
  7816. }
  7817.  
  7818. word32 fn0040752C(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut)
  7819. {
  7820.     word32 ebp_10;
  7821.     fn00402F20(ebx, esi, edi, dwLoc0C, 4241320, 0x0C, out ebp_10);
  7822.     word32 edi_101 = Mem0[ebp_10 + 0x08:word32];
  7823.     word32 esi_19 = ((edi_101 & 0x1F) << 0x06) + 0x0040F9C0[(edi_101 >> 0x05) * 0x04];
  7824.     Mem20[ebp_10 - 0x1C + 0x00:word32] = 0x01;
  7825.     word32 esp_106 = fp - 0x08;
  7826.     word32 ebx_21 = 0x00;
  7827.     if (Mem20[esi_19 + 0x08:word32] == 0x00)
  7828.     {
  7829.         Mem70[fp - 0x0C + 0x00:word32] = 0x0A;
  7830.         word128 xmm0_75;
  7831.         fn00405B56(0x00, edi_101, es, ds, dwArg00, out edx, out ebx_21, out xmm0_75);
  7832.         Mem79[ebp_10 - 0x04 + 0x00:word32] = ebx_21;
  7833.         esp_106 = fp - 0x08;
  7834.         if (Mem79[esi_19 + 0x08:word32] == ebx_21)
  7835.         {
  7836.             Mem94[fp - 0x0C + 0x00:word32] = 4000;
  7837.             Mem97[fp - 0x10 + 0x00:word32] = esi_19 + 0x0C;
  7838.             esp_106 = fp - 0x08;
  7839.             word32 esi_100;
  7840.             if (fn0040605C(ebx_21, esi_19, edi_101, out ebx_21, out ebp_10, out esi_100, out edi_101) == 0x00)
  7841.                 Mem113[ebp_10 - 0x1C + 0x00:word32] = ebx_21;
  7842.             Mem111[esi_100 + 0x08:word32] = Mem97[esi_100 + 0x08:word32] + 0x01;
  7843.         }
  7844.         Mem92[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  7845.         fn004075C3();
  7846.     }
  7847.     if (Mem20[ebp_10 - 0x1C + 0x00:word32] != ebx_21)
  7848.     {
  7849.         word32 esp_66 = esp_106 - 0x04;
  7850.         Mem67[esp_66 + 0x00:word32] = 0x0040F9C0[(edi_101 >> 0x05) * 0x04] + 0x0C + ((edi_101 & 0x1F) << 0x06);
  7851.         EnterCriticalSection(Mem67[esp_66 + 0x00:LPCRITICAL_SECTION]);
  7852.     }
  7853.     word32 ebp_51;
  7854.     word32 esi_52;
  7855.     word32 edi_53;
  7856.     word32 ebx_54;
  7857.     *ebxOut = fn00402F65(ebp_10, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_51, out esi_52, out edi_53);
  7858.     return edx;
  7859. }
  7860.  
  7861. void fn004075C3()
  7862. {
  7863.     fn00405A7C(0x0A);
  7864.     return;
  7865. }
  7866.  
  7867. void fn004075CC(word32 dwArg04)
  7868. {
  7869.     LeaveCriticalSection(0x0040F9C0[(dwArg04 >> 0x05) * 0x04] + 0x0C + ((dwArg04 & 0x1F) << 0x06));
  7870.     return;
  7871. }
  7872.  
  7873. word16 fn004075F3(word32 edx, word32 ebx, word32 esi, word32 edi, selector es, selector ds, word16 wArg04, ptr32 & ebpOut, ptr32 & esiOut)
  7874. {
  7875.     word32 eax_123;
  7876.     word32 eax_32;
  7877.     word32 ebp_7;
  7878.     *ebpOut = fp - 0x04;
  7879.     word32 eax_11 = Mem0[0x0040DB60:word32] ^ fp - 0x04;
  7880.     word32 esi_16;
  7881.     *esiOut = 0x00;
  7882.     if (Mem0[0x0040DC90:word32] != 0x00)
  7883.     {
  7884.         if (Mem0[0x0040DDD4:word32] == ~0x01)
  7885.             fn0040950F();
  7886.         word32 eax_130 = Mem0[0x0040DDD4:word32];
  7887.         if (eax_130 == ~0x00)
  7888.             goto l00407628;
  7889.         eax_123 = WriteConsoleW(eax_130, fp + 0x04, 0x01, fp - 0x14, 0x00);
  7890.         if (eax_123 != 0x00)
  7891.         {
  7892.             Mem167[0x0040DC90:word32] = 0x01;
  7893.             goto l0040769B;
  7894.         }
  7895.         if (Mem0[0x0040DC90:word32] != 0x02 || GetLastError() != 0x78)
  7896.             goto l00407628;
  7897.         Mem166[0x0040DC90:word32] = 0x00;
  7898.     }
  7899.     word32 eax_104 = WideCharToMultiByte(GetConsoleOutputCP(), 0x00, fp + 0x04, 0x01, fp - 0x10, 0x05, 0x00, 0x00);
  7900.     word32 ecx_107 = Mem0[0x0040DDD4:word32];
  7901.     if (ecx_107 == ~0x00)
  7902.         goto l00407628;
  7903.     edx = fp - 0x14;
  7904.     eax_123 = WriteConsoleA(ecx_107, fp - 0x10, eax_104, fp - 0x14, 0x00);
  7905.     if (eax_123 == 0x00)
  7906.     {
  7907. l00407628:
  7908.         eax_32 = 0xFFFF;
  7909.         return (word16) fn00404BEF(eax_32, eax_11 ^ fp - 0x04, edx, ebx, fp - 0x04, esi, edi, es, ds);
  7910.     }
  7911. l0040769B:
  7912.     eax_32 = DPB(eax_123, wArg04, 0);
  7913.     return (word16) fn00404BEF(eax_32, eax_11 ^ fp - 0x04, edx, ebx, fp - 0x04, esi, edi, es, ds);
  7914. }
  7915.  
  7916. word32 fn004076B8(word32 ebp, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, word32 dwArg10, ptr32 & edxOut, ptr32 & xmm0Out)
  7917. {
  7918.     *edxOut = edx;
  7919.     *xmm0Out = xmm0;
  7920.     word32 eax_107;
  7921.     if (dwArg08 == 0x00 || dwArg0C == 0x00)
  7922.     {
  7923. l004076E0:
  7924.         eax_107 = 0x00;
  7925.         return eax_107;
  7926.     }
  7927.     if (Mem0[dwArg08 + 0x00:byte] == 0x00)
  7928.     {
  7929.         if (dwArg04 != 0x00)
  7930.             Mem77[dwArg04 + 0x00:word16] = 0x00;
  7931.         goto l004076E0;
  7932.     }
  7933.     word32 ebx_84;
  7934.     word128 xmm0_85;
  7935.     word32 edx_86;
  7936.     *edxOut = fn00401759(fp - 0x14, 0x00, es, ds, dwArg10, out ebx_84, out xmm0_85);
  7937.     if (Mem0[Mem0[fp - 0x14 + 0x00:word32] + 0x14:word32] == ebx_84)
  7938.     {
  7939.         word32 eax_115 = Mem0[fp + 0x04:word32];
  7940.         if (eax_115 != ebx_84)
  7941.             Mem122[eax_115 + 0x00:word16] = (word16) Mem0[dwArg08 + 0x00:byte];
  7942.         goto l00407707;
  7943.     }
  7944.     Mem125[fp - 0x20 + 0x00:word32] = fp - 0x14;
  7945.     Mem128[fp - 0x24 + 0x00:word32] = (word32) Mem125[dwArg08 + 0x00:byte];
  7946.     word32 edx_129;
  7947.     word32 ebx_130;
  7948.     word32 esi_131;
  7949.     word128 xmm0_132;
  7950.     if (fn00404BA4(ebx_84, es, ds, dwArg04, out edx_129, out ebx_130, out esi_131, out xmm0_132) != 0x00)
  7951.     {
  7952.         word32 eax_171 = Mem128[fp - 0x14 + 0x00:word32];
  7953.         word32 ecx_173 = Mem128[eax_171 + 0xAC:word32];
  7954.         if (ecx_173 > 0x01 && Mem128[fp + 0x0C:word32] >= ecx_173)
  7955.         {
  7956.             word32 edx_213 = (word32) (Mem128[fp + 0x04:word32] != ebx_130);
  7957.             *edxOut = edx_213;
  7958.             Mem215[fp - 0x20 + 0x00:word32] = edx_213;
  7959.             Mem217[fp - 0x24 + 0x00:word32] = Mem215[fp + 0x04:word32];
  7960.             Mem219[fp - 0x28 + 0x00:word32] = ecx_173;
  7961.             Mem221[fp - 44 + 0x00:word32] = esi_131;
  7962.             Mem223[fp - 0x30 + 0x00:word32] = 0x09;
  7963.             Mem225[fp - 0x34 + 0x00:word32] = Mem223[eax_171 + 0x04:word32];
  7964.             word32 eax_226 = MultiByteToWideChar(Mem225[fp - 0x34 + 0x00:UINT], Mem225[fp - 0x30 + 0x00:DWORD], Mem225[fp - 44 + 0x00:LPCSTR], Mem225[fp - 0x28 + 0x00:int32], Mem225[fp - 0x24 + 0x00:LPWSTR], Mem225[fp - 0x20 + 0x00:int32]);
  7965.             eax_171 = Mem225[fp - 0x14 + 0x00:word32];
  7966.             if (eax_226 != 0x00)
  7967.             {
  7968. l0040776E:
  7969.                 eax_107 = Mem128[eax_171 + 0xAC:word32];
  7970.                 if (Mem128[fp - 0x08 + 0x00:byte] != 0x00)
  7971.                 {
  7972.                     word32 ecx_189 = Mem128[fp - 0x0C + 0x00:word32];
  7973.                     Mem191[ecx_189 + 0x70:word32] = Mem128[ecx_189 + 0x70:word32] & ~0x02;
  7974.                 }
  7975.                 return eax_107;
  7976.             }
  7977.         }
  7978.         if (Mem128[fp + 0x0C:word32] >=u Mem128[eax_171 + 0xAC:word32] && Mem128[esi_131 + 0x01:byte] != 0x00)
  7979.             goto l0040776E;
  7980.     }
  7981.     else
  7982.     {
  7983.         Mem239[fp - 0x20 + 0x00:word32] = (word32) (Mem128[fp + 0x04:word32] != ebx_130);
  7984.         Mem241[fp - 0x24 + 0x00:word32] = Mem239[fp + 0x04:word32];
  7985.         word32 eax_242 = Mem241[fp - 0x14 + 0x00:word32];
  7986.         Mem244[fp - 0x28 + 0x00:word32] = 0x01;
  7987.         Mem246[fp - 44 + 0x00:word32] = esi_131;
  7988.         Mem248[fp - 0x30 + 0x00:word32] = 0x09;
  7989.         Mem250[fp - 0x34 + 0x00:word32] = Mem248[eax_242 + 0x04:word32];
  7990.         if (MultiByteToWideChar(Mem250[fp - 0x34 + 0x00:UINT], Mem250[fp - 0x30 + 0x00:DWORD], Mem250[fp - 44 + 0x00:LPCSTR], Mem250[fp - 0x28 + 0x00:int32], Mem250[fp - 0x24 + 0x00:LPWSTR], Mem250[fp - 0x20 + 0x00:int32]) != 0x00)
  7991.         {
  7992. l00407707:
  7993.             if (Mem0[fp - 0x08 + 0x00:byte] != 0x00)
  7994.             {
  7995.                 word32 eax_110 = Mem0[fp - 0x0C + 0x00:word32];
  7996.                 Mem112[eax_110 + 0x70:word32] = Mem0[eax_110 + 0x70:word32] & ~0x02;
  7997.             }
  7998.             eax_107 = 0x01;
  7999.             return eax_107;
  8000.         }
  8001.     }
  8002.     word32 edx_150;
  8003.     word32 ebx_151;
  8004.     word32 ebp_152;
  8005.     word32 esi_153;
  8006.     word32 edi_154;
  8007.     word128 xmm0_155;
  8008.     word32 eax_149;
  8009.     fn0040197F(ebx_130, fp - 0x04, esi_131, es, ds, out eax_149, out edx_150, out ebx_151, out ebp_152, out esi_153, out edi_154, out xmm0_155);
  8010.     Mem157[eax_149 + 0x00:word32] = 0x2A;
  8011.     if (Mem157[ebp_152 - 0x04 + 0x00:byte] != 0x00)
  8012.     {
  8013.         eax_149 = Mem157[ebp_152 - 0x08 + 0x00:word32];
  8014.         Mem168[eax_149 + 0x70:word32] = Mem157[eax_149 + 0x70:word32] & ~0x02;
  8015.     }
  8016.     eax_107 = eax_149 | ~0x00;
  8017.     return eax_107;
  8018. }
  8019.  
  8020. word32 fn004077CF(selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  8021. {
  8022.     *ebxOut = ebx;
  8023.     word32 edx_21;
  8024.     word128 xmm0_22;
  8025.     return fn004076B8(fp - 0x04, es, ds, dwArg04, dwArg08, dwArg0C, 0x00, out edx_21, out xmm0_22);
  8026. }
  8027.  
  8028. void fn004077F0(word32 eax, word32 dwArg00)
  8029. {
  8030.     word32 ecx_7 = fp - eax;
  8031.     word32 ecx_12 = ecx_7 & ~(0x00 - (ecx_7 <u 0x00));
  8032.     word32 eax_14 = fp - 0x04 & ~0x0FFF;
  8033.     while (ecx_12 <u eax_14)
  8034.         eax_14 = eax_14 - 0x1000;
  8035.     Mem29[ecx_12 + 0x00:word32] = dwArg00;
  8036.     return;
  8037. }
  8038.  
  8039. word32 fn00407A4D(word32 ebx, word32 esi, word32 edi, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  8040. {
  8041.     *ebxOut = ebx;
  8042.     *esiOut = esi;
  8043.     *xmm0Out = xmm0;
  8044.     if (dwArg04 != 0x00 && Mem0[(dwArg04 - 0x08) + 0x00:word32] == 0xDDDD)
  8045.     {
  8046.         word32 eax_46;
  8047.         word32 ebx_48;
  8048.         word32 ebp_49;
  8049.         word32 esi_50;
  8050.         word32 edi_51;
  8051.         word128 xmm0_52;
  8052.         fn004047EB(ebx, esi, edi, es, ds, out eax_46, out edx, out ebx_48, out ebp_49, out esi_50, out edi_51, out xmm0_52);
  8053.     }
  8054.     return edx;
  8055. }
  8056.  
  8057. word32 fn00407A6D(word32 ecx, word32 edx, word32 ebp, word32 edi, selector es, selector ds, word32 dwArg04, word32 dwArg0C, word32 dwArg10, word32 dwArg1C, word32 dwArg20, ptr32 & xmm0Out)
  8058. {
  8059. fn00407A6D_entry:
  8060.     def fp
  8061.     def edi
  8062.     def ebp
  8063.     def Mem0
  8064.     def edx
  8065.     def ecx
  8066.     def dwArg10
  8067.     def ds
  8068.     def es
  8069.     def dwArg04
  8070.     def dwArg1C
  8071.     def dwArg00
  8072.     def dwArg08
  8073.     def dwArg0C
  8074.     def xmm0
  8075.     def dwArg20
  8076.     edi_3 = edi
  8077.     dwLoc04_6 = ebp
  8078.     ebp_7 = fp - 0x04
  8079.     ebx_21 = 0x00
  8080.     bl_22 = 0x00 (alias)
  8081.     esi_26 = ecx
  8082.     branch Mem0[0x0040E564:word32] != 0x00 l00407AC6
  8083.     goto l00407A8E
  8084. l00407A6D:
  8085. l00407A8E:
  8086.     edi_837 = 0x01
  8087.     eax_846 = LCMapStringW(0x00, 0x0100, 0x0040AA2C, 0x01, 0x00, 0x00)
  8088.     branch eax_846 == 0x00 l00407AB1
  8089. l00407AA9:
  8090.     Mem852[0x0040E564:word32] = 0x01
  8091.     goto l00407AC6
  8092. l00407AB1:
  8093.     eax_853 = GetLastError()
  8094.     branch eax_853 != 0x78 l00407AC6
  8095. l00407ABC:
  8096.     Mem857[0x0040E564:word32] = 0x02
  8097. l00407AC6:
  8098.     edi_43 = PHI(edi_3, edi_837, edi_837, edi_837)
  8099.     branch dwArg10 <= 0x00 l00407AED
  8100. l00407ACB:
  8101.     ecx_793 = dwArg10
  8102.     eax_794 = dwArg0C
  8103. l00407AD1:
  8104.     ecx_798 = PHI(ecx_793, ecx_801)
  8105.     eax_799 = PHI(eax_794, eax_824)
  8106.     ecx_801 = ecx_798 - 0x01
  8107.     branch Mem0[eax_799 + 0x00:byte] == 0x00 l00407ADE
  8108. l00407AD6:
  8109.     eax_824 = eax_799 + 0x01
  8110.     branch ecx_801 != 0x00 l00407AD1
  8111. l00407ADB:
  8112.     ecx_829 = ecx_801 | ~0x00
  8113. l00407ADE:
  8114.     ecx_805 = PHI(ecx_801, ecx_829)
  8115.     eax_808 = dwArg10
  8116.     eax_809 = dwArg10 - ecx_805
  8117.     eax_810 = eax_809 - 0x01
  8118.     branch eax_809 - 0x01 >= dwArg10 l00407AEA
  8119. l00407AE9:
  8120.     eax_820 = eax_809
  8121. l00407AEA:
  8122.     eax_817 = PHI(eax_810, eax_820)
  8123.     dwArg10_819 = eax_817
  8124. l00407AED:
  8125.     dwArg10_52 = PHI(dwArg10, dwArg10_819)
  8126.     eax_57 = Mem0[0x0040E564:word32]
  8127.     branch eax_57 == 0x02 || eax_57 == 0x00 l00407CA7
  8128.     goto l00407B03
  8129. l00407AFB:
  8130. l00407B03:
  8131.     branch eax_57 != 0x01 l00407CD8
  8132. l00407B0C:
  8133.     branch dwArg1C != 0x00 l00407B1C
  8134. l00407B14:
  8135.     eax_789 = Mem0[ecx + 0x00:word32]
  8136.     eax_790 = Mem0[eax_789 + 0x04:word32]
  8137.     dwArg1C_792 = eax_790
  8138. l00407B1C:
  8139.     dwArg1C_456 = PHI(dwArg1C, dwArg1C_792)
  8140.     esi_457 = MultiByteToWideChar
  8141.     eax_458 = 0x00
  8142.     dwLoc30_467 = dwArg10_52
  8143.     al_468 = dwArg20 != 0x00
  8144.     eax_469 = (word32) (dwArg20 != 0x00) (alias)
  8145.     dwLoc34_471 = dwArg0C
  8146.     eax_472 = eax_469 * 0x08 + 0x01
  8147.     dwLoc38_474 = eax_472
  8148.     dwLoc3C_476 = dwArg1C_456
  8149.     eax_477 = MultiByteToWideChar(dwArg1C_456, eax_472, dwArg0C, dwArg10_52, 0x00, 0x00)
  8150.     esp_480 = fp - 0x24
  8151.     edi_481 = eax_477
  8152.     branch eax_477 == 0x00 l00407CD8
  8153. l00407B49:
  8154.     branch eax_477 <= 0x00 l00407B8E
  8155. l00407B4B:
  8156.     edx_730 = 0x00
  8157.     eax_731 = ~0x1F
  8158.     edx_eax_732 = ~0x1F (alias)
  8159.     esp_733 = fp - 0x24
  8160.     edx_734 = ~0x1F % eax_477
  8161.     edx_eax_735 = SEQ(edx_734, ~0x1F) (alias)
  8162.     eax_736 = edx_eax_735 /u eax_477
  8163.     branch eax_736 <u 0x02 l00407B8E
  8164. l00407B57:
  8165.     eax_741 = eax_477 + 0x08 + eax_477
  8166.     branch eax_741 >u 0x0400 l00407B75
  8167. l00407B62:
  8168.     fn00409930(eax_741)
  8169.     eax_770 = fp - 0x24
  8170.     branch fp == 0x24 l00407B89
  8171. l00407B6D:
  8172.     Mem775[fp - 0x24 + 0x00:word32] = 0xCCCC
  8173.     goto l00407B86
  8174. l00407B75:
  8175.     esp_776 = fp - 0x28
  8176.     dwLoc28_777 = eax_741
  8177.     eax_781 = fn00408438(0x00, fp - 0x04, es, ds, eax_741, out edx_778, out ebx_779, out xmm0_780)
  8178.     esp_785 = fp - 0x24
  8179.     branch eax_781 == ebx_779 l00407B89
  8180. l00407B80:
  8181.     Mem788[eax_781 + 0x00:word32] = 0xDDDD
  8182. l00407B86:
  8183.     xmm0_760 = PHI(xmm0, xmm0_780)
  8184.     edx_761 = PHI(edx_734, edx_778)
  8185.     ebx_762 = PHI(ebx_21, ebx_779)
  8186.     eax_764 = PHI(eax_770, eax_781)
  8187.     esp_765 = PHI(esp_733, esp_785)
  8188.     eax_766 = eax_764 + 0x08
  8189. l00407B89:
  8190.     xmm0_749 = PHI(xmm0, xmm0_760, xmm0_780)
  8191.     edx_750 = PHI(edx_734, edx_761, edx_778)
  8192.     ebx_752 = PHI(ebx_21, ebx_762, ebx_779)
  8193.     eax_754 = PHI(eax_770, eax_766, eax_781)
  8194.     esp_756 = PHI(esp_733, esp_765, esp_785)
  8195.     Mem757[fp - 0x10 + 0x00:word32] = eax_754
  8196.     goto l00407B91
  8197. l00407B8E:
  8198.     edx_721 = PHI(edx, edx_734)
  8199.     esp_726 = PHI(esp_480, esp_733)
  8200. l00407B91:
  8201.     xmm0_491 = PHI(xmm0_749, xmm0)
  8202.     edx_492 = PHI(edx_750, edx_721)
  8203.     ebx_494 = PHI(ebx_752, ebx_21)
  8204.     esp_499 = PHI(esp_756, esp_726)
  8205.     branch Mem0[fp - 0x10 + 0x00:word32] == ebx_494 l00407CD8
  8206. l00407B9A:
  8207.     esp_502 = esp_499 - 0x04
  8208.     Mem503[esp_502 + 0x00:word32] = eax_477
  8209.     esp_504 = esp_502 - 0x04
  8210.     Mem505[esp_502 - 0x04 + 0x00:word32] = Mem503[fp - 0x10 + 0x00:word32]
  8211.     esp_506 = esp_502 - 0x08
  8212.     Mem507[esp_502 - 0x08 + 0x00:word32] = Mem505[fp + 0x10:word32]
  8213.     esp_508 = esp_502 - 0x0C
  8214.     Mem509[esp_502 - 0x0C + 0x00:word32] = Mem507[fp + 0x0C:word32]
  8215.     esp_510 = esp_502 - 0x10
  8216.     Mem511[esp_502 - 0x10 + 0x00:word32] = 0x01
  8217.     esp_512 = esp_502 - 0x14
  8218.     Mem513[esp_502 - 0x14 + 0x00:word32] = Mem511[fp + 0x1C:word32]
  8219.     eax_518 = MultiByteToWideChar(Mem0[esp + 0x00:UINT], Mem0[esp + 0x04:DWORD], Mem0[esp + 0x08:LPCSTR], Mem0[esp + 0x0C:int32], Mem0[esp + 0x0010:LPWSTR], Mem0[esp + 0x0014:int32])
  8220.     branch eax_518 == 0x00 l00407C96
  8221. l00407BB3:
  8222.     esi_556 = LCMapStringW
  8223.     esp_557 = esp_514 - 0x04
  8224.     Mem558[esp_514 - 0x04 + 0x00:word32] = ebx_521
  8225.     esp_559 = esp_514 - 0x08
  8226.     Mem560[esp_514 - 0x08 + 0x00:word32] = ebx_521
  8227.     esp_561 = esp_514 - 0x0C
  8228.     Mem562[esp_514 - 0x0C + 0x00:word32] = edi_515
  8229.     esp_563 = esp_514 - 0x10
  8230.     Mem564[esp_514 - 0x10 + 0x00:word32] = Mem562[ebp_516 - 0x0C + 0x00:word32]
  8231.     esp_565 = esp_514 - 0x14
  8232.     Mem566[esp_514 - 0x14 + 0x00:word32] = Mem564[ebp_516 + 0x0C:word32]
  8233.     esp_567 = esp_514 - 0x18
  8234.     Mem568[esp_514 - 0x18 + 0x00:word32] = Mem566[ebp_516 + 0x08:word32]
  8235.     eax_569 = LCMapStringW(Mem568[esp_514 - 0x18 + 0x00:LCID], Mem568[esp_514 - 0x14 + 0x00:DWORD], Mem568[esp_514 - 0x10 + 0x00:LPCWSTR], Mem568[esp_514 - 0x0C + 0x00:int32], Mem568[esp_514 - 0x08 + 0x00:LPWSTR], Mem568[esp_514 - 0x04 + 0x00:int32])
  8236.     esp_570 = esp_514
  8237.     ecx_571 = eax_569
  8238.     Mem572[ebp_516 - 0x08 + 0x00:word32] = eax_569
  8239.     branch eax_569 == ebx_521 l00407C96
  8240. l00407BD4:
  8241.     branch (Mem572[ebp_516 + 0x0C:word32] & 0x0400) == 0x00 l00407C06
  8242. l00407BDD:
  8243.     branch Mem572[ebp_516 + 0x1C:word32] == ebx_521 || eax_569 > Mem572[ebp_516 + 0x1C:word32] l00407C96
  8244.     goto l00407BEF
  8245. l00407BE6:
  8246. l00407BEF:
  8247.     esp_582 = esp_514 - 0x04
  8248.     Mem583[esp_514 - 0x04 + 0x00:word32] = Mem572[ebp_516 + 0x1C:word32]
  8249.     esp_584 = esp_514 - 0x08
  8250.     Mem585[esp_514 - 0x08 + 0x00:word32] = Mem583[ebp_516 + 0x18:word32]
  8251.     esp_586 = esp_514 - 0x0C
  8252.     Mem587[esp_514 - 0x0C + 0x00:word32] = edi_515
  8253.     esp_588 = esp_514 - 0x10
  8254.     Mem589[esp_514 - 0x10 + 0x00:word32] = Mem587[ebp_516 - 0x0C + 0x00:word32]
  8255.     esp_590 = esp_514 - 0x14
  8256.     Mem591[esp_514 - 0x14 + 0x00:word32] = Mem589[ebp_516 + 0x0C:word32]
  8257.     esp_592 = esp_514 - 0x18
  8258.     Mem593[esp_514 - 0x18 + 0x00:word32] = Mem591[ebp_516 + 0x08:word32]
  8259.     LCMapStringW(Mem593[esp_514 - 0x18 + 0x00:LCID], Mem593[esp_514 - 0x14 + 0x00:DWORD], Mem593[esp_514 - 0x10 + 0x00:LPCWSTR], Mem593[esp_514 - 0x0C + 0x00:int32], Mem593[esp_514 - 0x08 + 0x00:LPWSTR], Mem593[esp_514 - 0x04 + 0x00:int32])
  8260.     esp_595 = esp_514
  8261.     goto l00407C96
  8262. l00407C06:
  8263.     branch eax_569 <= ebx_521 l00407C4F
  8264. l00407C0A:
  8265.     esp_675 = esp_514 - 0x04
  8266.     Mem676[esp_514 - 0x04 + 0x00:word32] = ~0x1F
  8267.     edx_677 = 0x00
  8268.     eax_678 = Mem676[esp_514 - 0x04 + 0x00:word32]
  8269.     edx_eax_679 = SEQ(0x00, eax_678) (alias)
  8270.     esp_680 = esp_514
  8271.     edx_681 = edx_eax_679 % eax_569
  8272.     edx_eax_682 = SEQ(edx_681, eax_678) (alias)
  8273.     eax_683 = edx_eax_682 /u eax_569
  8274.     branch eax_683 <u 0x02 l00407C4F
  8275. l00407C16:
  8276.     eax_686 = eax_569 + 0x08 + eax_569
  8277.     branch eax_686 >u 0x0400 l00407C37
  8278. l00407C21:
  8279.     fn00409930(eax_686)
  8280.     esi_691 = esp_514
  8281.     branch esp_514 == ebx_521 l00407C96
  8282. l00407C2C:
  8283.     Mem694[esp_514 + 0x00:word32] = 0xCCCC
  8284.     esi_695 = esp_514 + 0x08
  8285.     goto l00407C51
  8286. l00407C37:
  8287.     esp_697 = esp_514 - 0x04
  8288.     Mem698[esp_514 - 0x04 + 0x00:word32] = eax_686
  8289.     eax_702 = fn00408438(ebx_521, ebp_516, es_530, ds_531, dwArg00, out edx_699, out ebx_700, out xmm0_701)
  8290.     esp_706 = esp_514
  8291.     branch eax_702 == ebx_700 l00407C4B
  8292. l00407C42:
  8293.     Mem714[eax_702 + 0x00:word32] = 0xDDDD
  8294.     eax_715 = eax_702 + 0x08
  8295. l00407C4B:
  8296.     eax_711 = PHI(eax_702, eax_715)
  8297.     esi_713 = eax_711
  8298.     goto l00407C51
  8299. l00407C4F:
  8300.     esp_671 = PHI(esp_570, esp_680)
  8301.     esi_672 = 0x00
  8302. l00407C51:
  8303.     esi_602 = PHI(esi_695, esi_713, esi_672)
  8304.     ebx_603 = PHI(ebx_521, ebx_700, ebx_521)
  8305.     esp_609 = PHI(esp_680, esp_706, esp_671)
  8306.     branch esi_602 == ebx_603 l00407C96
  8307. l00407C55:
  8308.     esp_612 = esp_609 - 0x04
  8309.     Mem613[esp_612 + 0x00:word32] = Mem572[ebp_516 - 0x08 + 0x00:word32]
  8310.     esp_614 = esp_612 - 0x04
  8311.     Mem615[esp_612 - 0x04 + 0x00:word32] = esi_602
  8312.     esp_616 = esp_612 - 0x08
  8313.     Mem617[esp_612 - 0x08 + 0x00:word32] = edi_515
  8314.     esp_618 = esp_612 - 0x0C
  8315.     Mem619[esp_612 - 0x0C + 0x00:word32] = Mem617[ebp_516 - 0x0C + 0x00:word32]
  8316.     esp_620 = esp_612 - 0x10
  8317.     Mem621[esp_612 - 0x10 + 0x00:word32] = Mem619[ebp_516 + 0x0C:word32]
  8318.     esp_622 = esp_612 - 0x14
  8319.     Mem623[esp_612 - 0x14 + 0x00:word32] = Mem621[ebp_516 + 0x08:word32]
  8320.     eax_624 = LCMapStringW(Mem623[esp_612 - 0x14 + 0x00:LCID], Mem623[esp_612 - 0x10 + 0x00:DWORD], Mem623[esp_612 - 0x0C + 0x00:LPCWSTR], Mem623[esp_612 - 0x08 + 0x00:int32], Mem623[esp_612 - 0x04 + 0x00:LPWSTR], Mem623[esp_612 + 0x00:int32])
  8321.     esp_625 = esp_612 + 0x04
  8322.     branch eax_624 == 0x00 l00407C8F
  8323. l00407C6D:
  8324.     esp_641 = esp_612
  8325.     Mem642[esp_612 + 0x00:word32] = ebx_603
  8326.     esp_643 = esp_612 - 0x04
  8327.     Mem644[esp_612 - 0x04 + 0x00:word32] = ebx_603
  8328.     branch Mem644[ebp_516 + 0x1C:word32] != ebx_603 l00407C78
  8329. l00407C74:
  8330.     esp_659 = esp_612 - 0x08
  8331.     Mem660[esp_612 - 0x08 + 0x00:word32] = ebx_603
  8332.     esp_661 = esp_612 - 0x0C
  8333.     Mem662[esp_612 - 0x0C + 0x00:word32] = ebx_603
  8334.     goto l00407C7E
  8335. l00407C78:
  8336.     esp_663 = esp_612 - 0x08
  8337.     Mem664[esp_612 - 0x08 + 0x00:word32] = Mem644[ebp_516 + 0x1C:word32]
  8338.     esp_665 = esp_612 - 0x0C
  8339.     Mem666[esp_612 - 0x0C + 0x00:word32] = Mem664[ebp_516 + 0x18:word32]
  8340. l00407C7E:
  8341.     esp_647 = PHI(esp_661, esp_665)
  8342.     esp_648 = esp_647 - 0x04
  8343.     Mem649[esp_648 + 0x00:word32] = Mem644[ebp_516 - 0x08 + 0x00:word32]
  8344.     esp_650 = esp_648 - 0x04
  8345.     Mem651[esp_648 - 0x04 + 0x00:word32] = esi_602
  8346.     esp_652 = esp_648 - 0x08
  8347.     Mem653[esp_648 - 0x08 + 0x00:word32] = ebx_603
  8348.     esp_654 = esp_648 - 0x0C
  8349.     Mem655[esp_648 - 0x0C + 0x00:word32] = Mem653[ebp_516 + 0x20:word32]
  8350.     eax_656 = WideCharToMultiByte(Mem655[esp_648 - 0x0C + 0x00:UINT], Mem655[esp_648 - 0x08 + 0x00:DWORD], Mem655[esp_648 - 0x04 + 0x00:LPCWSTR], Mem655[esp_648 + 0x00:int32], Mem655[esp_648 + 0x04:LPSTR], Mem655[esp_648 + 0x08:int32], Mem655[esp_648 + 0x0C:LPCSTR], Mem655[esp_648 + 0x10:LPBOOL])
  8351.     esp_657 = esp_648 + 0x14
  8352.     Mem658[ebp_516 - 0x08 + 0x00:word32] = eax_656
  8353. l00407C8F:
  8354.     esp_632 = PHI(esp_625, esp_657)
  8355.     esp_633 = esp_632 - 0x04
  8356.     Mem634[esp_633 + 0x00:word32] = esi_602
  8357.     fn00407A4D(ebx_603, esi_602, edi_515, es_530, ds_531, dwArg00, out ebx_635, out esi_636, out xmm0_637)
  8358.     esp_640 = esp_633 + 0x04
  8359. l00407C96:
  8360.     esi_540 = PHI(esi_522, esi_556, esi_556, esi_556, esi_556, esi_691, esi_602, esi_636)
  8361.     ebx_541 = PHI(ebx_521, ebx_521, ebx_521, ebx_521, ebx_521, ebx_521, ebx_603, ebx_635)
  8362.     esp_544 = PHI(esp_514, esp_570, esp_570, esp_570, esp_595, esp_680, esp_609, esp_640)
  8363.     esp_545 = esp_544 - 0x04
  8364.     Mem546[esp_545 + 0x00:word32] = Mem513[ebp_516 - 0x0C + 0x00:word32]
  8365.     edx_550 = fn00407A4D(ebx_541, esi_540, edi_515, es_530, ds_531, dwArg00, out ebx_547, out esi_548, out xmm0_549)
  8366.     eax_551 = Mem546[ebp_516 - 0x08 + 0x00:word32]
  8367.     goto l00407E00
  8368. l00407CA7:
  8369.     branch dwArg04 != 0x00 l00407CBA
  8370. l00407CB2:
  8371.     eax_442 = Mem0[ecx + 0x00:word32]
  8372.     eax_443 = Mem0[eax_442 + 0x14:word32]
  8373.     dwArg04_445 = eax_443
  8374. l00407CBA:
  8375.     dwArg04_139 = PHI(dwArg04, dwArg04_445)
  8376.     esp_146 = fp - 0x28
  8377.     dwLoc28_147 = dwArg04_139
  8378.     eax_152 = fn0040972F(edx, 0x00, ecx, edi_43, es, ds, dwArg04_139, out edx_148, out ebx_149, out esi_150, out xmm0_151)
  8379.     esp_156 = fp - 0x24
  8380.     Mem157[fp - 0x18 + 0x00:word32] = eax_152
  8381.     branch eax_152 != ~0x00 l00407CDF
  8382.     goto l00407CD8
  8383. l00407CC7:
  8384. l00407CD8:
  8385.     xmm0_118 = PHI(xmm0, xmm0, xmm0_491, xmm0_151, xmm0_251)
  8386.     edx_119 = PHI(edx, edx, edx_492, edx_148, edx_250)
  8387.     eax_126 = 0x00
  8388.     goto l00407E00
  8389. l00407CDF:
  8390.     branch eax_152 == Mem157[fp + 0x1C:word32] l00407DC3
  8391. l00407CE8:
  8392.     esp_234 = fp - 0x28
  8393.     Mem235[fp - 0x28 + 0x00:word32] = ebx_149
  8394.     esp_236 = fp - 44
  8395.     Mem237[fp - 44 + 0x00:word32] = ebx_149
  8396.     ecx_238 = fp + 0x10
  8397.     esp_239 = fp - 0x30
  8398.     Mem240[fp - 0x30 + 0x00:word32] = fp + 0x10
  8399.     esp_241 = fp - 0x34
  8400.     Mem242[fp - 0x34 + 0x00:word32] = Mem240[fp + 0x0C:word32]
  8401.     esp_243 = fp - 0x38
  8402.     Mem244[fp - 0x38 + 0x00:word32] = eax_152
  8403.     esp_245 = fp - 0x3C
  8404.     Mem246[fp - 0x3C + 0x00:word32] = Mem244[fp + 0x1C:word32]
  8405.     eax_252 = fn00409778(edx_148, fp - 0x04, es, ds, xmm0_151, dwArg00, dwArg04_139, dwArg08, dwArg0C, dwArg10_52, out edx_250, out xmm0_251)
  8406.     esp_255 = fp - 0x24
  8407.     Mem256[fp - 0x10 + 0x00:word32] = eax_252
  8408.     branch eax_252 == ebx_149 l00407CD8
  8409. l00407D04:
  8410.     esp_260 = fp - 0x28
  8411.     Mem261[fp - 0x28 + 0x00:word32] = ebx_149
  8412.     esp_262 = fp - 44
  8413.     Mem263[fp - 44 + 0x00:word32] = ebx_149
  8414.     esp_264 = fp - 0x30
  8415.     Mem265[fp - 0x30 + 0x00:word32] = Mem263[fp + 0x10:word32]
  8416.     esp_266 = fp - 0x34
  8417.     Mem267[fp - 0x34 + 0x00:word32] = eax_252
  8418.     esp_268 = fp - 0x38
  8419.     Mem269[fp - 0x38 + 0x00:word32] = Mem267[fp + 0x08:word32]
  8420.     esp_270 = fp - 0x3C
  8421.     Mem271[fp - 0x3C + 0x00:word32] = Mem269[fp + 0x04:word32]
  8422.     eax_272 = LCMapStringA(Mem271[fp - 0x3C + 0x00:LCID], Mem271[fp - 0x38 + 0x00:DWORD], Mem271[fp - 0x34 + 0x00:LPCSTR], Mem271[fp - 0x30 + 0x00:int32], Mem271[fp - 44 + 0x00:LPSTR], Mem271[fp - 0x28 + 0x00:int32])
  8423.     esp_275 = fp - 0x24
  8424.     Mem276[fp - 0x0C + 0x00:word32] = eax_272
  8425.     branch eax_272 != ebx_149 l00407D26
  8426. l00407D1F:
  8427.     xmm0_286 = PHI(xmm0_251, xmm0_251, xmm0_299)
  8428.     edx_287 = PHI(edx_250, edx_250, edx_300)
  8429.     edi_289 = PHI(edi_43, edi_394, edi_302)
  8430.     ebx_290 = PHI(ebx_149, ebx_149, ebx_303)
  8431.     esp_294 = PHI(esp_275, esp_275, esp_309)
  8432.     esi_295 = 0x00
  8433.     goto l00407DDD
  8434. l00407D26:
  8435.     branch eax_272 <= ebx_149 || eax_272 >u ~0x1F l00407D65
  8436.     goto l00407D2D
  8437. l00407D28:
  8438. l00407D2D:
  8439.     eax_389 = eax_272 + 0x08
  8440.     branch eax_272 >u ~0x03F7 l00407D4D
  8441. l00407D37:
  8442.     fn00409930(eax_272 + 0x08)
  8443.     edi_394 = fp - 0x24
  8444.     branch fp - 0x24 == ebx_149 l00407D1F
  8445. l00407D42:
  8446.     Mem397[fp - 0x24 + 0x00:word32] = 0xCCCC
  8447.     edi_398 = fp - 0x1C
  8448.     goto l00407D67
  8449. l00407D4D:
  8450.     esp_400 = fp - 0x28
  8451.     Mem401[fp - 0x28 + 0x00:word32] = eax_272 + 0x08
  8452.     eax_405 = fn00408438(ebx_149, fp - 0x04, es, ds, dwArg00, out edx_402, out ebx_403, out xmm0_404)
  8453.     esp_409 = fp - 0x24
  8454.     branch eax_405 == ebx_403 l00407D61
  8455. l00407D58:
  8456.     Mem417[eax_405 + 0x00:word32] = 0xDDDD
  8457.     eax_418 = eax_405 + 0x08
  8458. l00407D61:
  8459.     eax_414 = PHI(eax_405, eax_418)
  8460.     edi_416 = eax_414
  8461.     goto l00407D67
  8462. l00407D65:
  8463.     edi_384 = 0x00
  8464. l00407D67:
  8465.     xmm0_299 = PHI(xmm0_251, xmm0_251, xmm0_404)
  8466.     edx_300 = PHI(edx_250, edx_250, edx_402)
  8467.     edi_302 = PHI(edi_398, edi_384, edi_416)
  8468.     ebx_303 = PHI(ebx_149, ebx_149, ebx_403)
  8469.     esp_309 = PHI(esp_275, esp_275, esp_409)
  8470.     branch edi_302 == ebx_303 l00407D1F
  8471. l00407D6B:
  8472.     esp_312 = esp_309 - 0x04
  8473.     Mem313[esp_312 + 0x00:word32] = Mem276[fp - 0x0C + 0x00:word32]
  8474.     esp_314 = esp_312 - 0x04
  8475.     Mem315[esp_312 - 0x04 + 0x00:word32] = ebx_303
  8476.     esp_316 = esp_312 - 0x08
  8477.     Mem317[esp_312 - 0x08 + 0x00:word32] = edi_302
  8478.     fn00404CA0(xmm0_299, ebp, dwArg00, dwArg04_139, dwArg08, out edx_318, out edi_319)
  8479.     esp_321 = esp_312 + 0x04
  8480.     esp_322 = esp_312
  8481.     Mem323[esp_312 + 0x00:word32] = Mem317[fp - 0x0C + 0x00:word32]
  8482.     esp_324 = esp_312 - 0x04
  8483.     Mem325[esp_312 - 0x04 + 0x00:word32] = edi_319
  8484.     esp_326 = esp_312 - 0x08
  8485.     Mem327[esp_312 - 0x08 + 0x00:word32] = Mem325[fp + 0x10:word32]
  8486.     esp_328 = esp_312 - 0x0C
  8487.     Mem329[esp_312 - 0x0C + 0x00:word32] = Mem327[fp - 0x10 + 0x00:word32]
  8488.     esp_330 = esp_312 - 0x10
  8489.     Mem331[esp_312 - 0x10 + 0x00:word32] = Mem329[fp + 0x08:word32]
  8490.     esp_332 = esp_312 - 0x14
  8491.     Mem333[esp_312 - 0x14 + 0x00:word32] = Mem331[fp + 0x04:word32]
  8492.     eax_334 = LCMapStringA(Mem333[esp_312 - 0x14 + 0x00:LCID], Mem333[esp_312 - 0x10 + 0x00:DWORD], Mem333[esp_312 - 0x0C + 0x00:LPCSTR], Mem333[esp_312 - 0x08 + 0x00:int32], Mem333[esp_312 - 0x04 + 0x00:LPSTR], Mem333[esp_312 + 0x00:int32])
  8493.     esp_336 = esp_312 + 0x04
  8494.     Mem337[fp - 0x0C + 0x00:word32] = eax_334
  8495.     branch eax_334 != ebx_303 l00407D95
  8496. l00407D91:
  8497.     esi_354 = 0x00
  8498.     goto l00407DBA
  8499. l00407D95:
  8500.     esp_357 = esp_312
  8501.     Mem358[esp_312 + 0x00:word32] = Mem337[fp + 0x18:word32]
  8502.     eax_359 = fp - 0x0C
  8503.     esp_360 = esp_312 - 0x04
  8504.     Mem361[esp_312 - 0x04 + 0x00:word32] = Mem358[fp + 0x14:word32]
  8505.     esp_362 = esp_312 - 0x08
  8506.     Mem363[esp_312 - 0x08 + 0x00:word32] = fp - 0x0C
  8507.     esp_364 = esp_312 - 0x0C
  8508.     Mem365[esp_312 - 0x0C + 0x00:word32] = edi_319
  8509.     esp_366 = esp_312 - 0x10
  8510.     Mem367[esp_312 - 0x10 + 0x00:word32] = Mem365[fp + 0x1C:word32]
  8511.     esp_368 = esp_312 - 0x14
  8512.     Mem369[esp_312 - 0x14 + 0x00:word32] = Mem367[fp - 0x18 + 0x00:word32]
  8513.     eax_372 = fn00409778(edx_318, fp - 0x04, es, ds, xmm0_299, dwArg00, dwArg04_139, dwArg08, dwArg0C, dwArg10_52, out edx_370, out xmm0_371)
  8514.     esi_373 = eax_372
  8515.     Mem374[fp - 0x14 + 0x00:word32] = eax_372
  8516.     esp_375 = esp_312 + 0x04
  8517.     esi_376 = -eax_372
  8518.     esi_378 = 0x00 - (esi_376 == 0x00)
  8519.     esi_379 = esi_378 & Mem374[(fp - 0x0C) + 0x00:word32]
  8520. l00407DBA:
  8521.     esi_340 = PHI(esi_354, esi_379)
  8522.     esp_344 = PHI(esp_336, esp_375)
  8523.     esp_345 = esp_344 - 0x04
  8524.     Mem346[esp_345 + 0x00:word32] = edi_319
  8525.     edx_350 = fn00407A4D(ebx_303, esi_340, edi_319, es, ds, dwArg00, out ebx_347, out esi_348, out xmm0_349)
  8526.     esp_353 = esp_345 + 0x04
  8527.     goto l00407DDD
  8528. l00407DC3:
  8529.     esp_422 = fp - 0x28
  8530.     Mem423[fp - 0x28 + 0x00:word32] = Mem157[fp + 0x18:word32]
  8531.     esp_424 = fp - 44
  8532.     Mem425[fp - 44 + 0x00:word32] = Mem423[fp + 0x14:word32]
  8533.     esp_426 = fp - 0x30
  8534.     Mem427[fp - 0x30 + 0x00:word32] = Mem425[fp + 0x10:word32]
  8535.     esp_428 = fp - 0x34
  8536.     Mem429[fp - 0x34 + 0x00:word32] = Mem427[fp + 0x0C:word32]
  8537.     esp_430 = fp - 0x38
  8538.     Mem431[fp - 0x38 + 0x00:word32] = Mem429[fp + 0x08:word32]
  8539.     esp_432 = fp - 0x3C
  8540.     Mem433[fp - 0x3C + 0x00:word32] = Mem431[fp + 0x04:word32]
  8541.     eax_434 = LCMapStringA(Mem433[fp - 0x3C + 0x00:LCID], Mem433[fp - 0x38 + 0x00:DWORD], Mem433[fp - 0x34 + 0x00:LPCSTR], Mem433[fp - 0x30 + 0x00:int32], Mem433[fp - 44 + 0x00:LPSTR], Mem433[fp - 0x28 + 0x00:int32])
  8542.     esp_436 = fp - 0x24
  8543.     esi_437 = eax_434
  8544. l00407DDD:
  8545.     xmm0_166 = PHI(xmm0_286, xmm0_151, xmm0_349)
  8546.     edx_167 = PHI(edx_287, edx_148, edx_350)
  8547.     edi_169 = PHI(edi_289, edi_43, edi_319)
  8548.     esi_170 = PHI(esi_295, esi_437, esi_348)
  8549.     ebx_171 = PHI(ebx_290, ebx_149, ebx_347)
  8550.     esp_177 = PHI(esp_294, esp_436, esp_353)
  8551.     branch Mem157[fp - 0x10 + 0x00:word32] == ebx_171 l00407DEB
  8552. l00407DE2:
  8553.     esp_222 = esp_177 - 0x04
  8554.     Mem223[esp_222 + 0x00:word32] = Mem157[fp - 0x10 + 0x00:word32]
  8555.     fn004047EB(ebx_171, esi_170, edi_169, es, ds, out eax_224, out edx_225, out ebx_226, out ebp_227, out esi_228, out edi_229, out xmm0_230)
  8556.     esp_233 = esp_222 + 0x04
  8557. l00407DEB:
  8558.     xmm0_181 = PHI(xmm0_166, xmm0_230)
  8559.     edx_182 = PHI(edx_167, edx_225)
  8560.     edi_183 = PHI(edi_169, edi_229)
  8561.     esi_184 = PHI(esi_170, esi_228)
  8562.     ebx_185 = PHI(ebx_171, ebx_226)
  8563.     ebp_187 = PHI(ebp_7, ebp_227)
  8564.     esp_188 = PHI(esp_177, esp_233)
  8565.     eax_189 = Mem157[ebp_187 - 0x10 + 0x00:word32]
  8566.     branch eax_189 == ebx_185 || Mem157[ebp_187 + 0x18:word32] == eax_189 l00407DFE
  8567.     goto l00407DF7
  8568. l00407DF2:
  8569. l00407DF7:
  8570.     esp_210 = esp_188 - 0x04
  8571.     Mem211[esp_210 + 0x00:word32] = eax_189
  8572.     fn004047EB(ebx_185, esi_184, edi_183, es, ds, out eax_212, out edx_213, out ebx_214, out ebp_215, out esi_216, out edi_217, out xmm0_218)
  8573. l00407DFE:
  8574.     xmm0_197 = PHI(xmm0_181, xmm0_181, xmm0_218)
  8575.     edx_198 = PHI(edx_182, edx_182, edx_213)
  8576.     esi_200 = PHI(esi_184, esi_184, esi_216)
  8577.     ebp_203 = PHI(ebp_187, ebp_187, ebp_215)
  8578.     eax_205 = esi_200
  8579. l00407E00:
  8580.     ds_74 = PHI(ds, ds_531, ds)
  8581.     es_75 = PHI(es, es_530, es)
  8582.     xmm0_81 = PHI(xmm0_118, xmm0_549, xmm0_197)
  8583.     edx_82 = PHI(edx_119, edx_550, edx_198)
  8584.     eax_84 = PHI(eax_126, eax_551, eax_205)
  8585.     ebp_85 = PHI(ebp_7, ebp_516, ebp_203)
  8586.     esp_86 = ebp_85 - 0x20
  8587.     edi_87 = Mem0[esp_86 + 0x00:word32]
  8588.     esp_88 = esp_86 + 0x04
  8589.     esi_89 = Mem0[esp_86 + 0x04:word32]
  8590.     esp_90 = esp_86 + 0x08
  8591.     ebx_91 = Mem0[esp_86 + 0x08:word32]
  8592.     ecx_93 = Mem0[ebp_85 - 0x04 + 0x00:word32]
  8593.     ecx_94 = ecx_93 ^ ebp_85
  8594.     fn00404BEF(eax_84, ecx_94, edx_82, ebx_91, ebp_85, esi_89, edi_87, es_75, ds_74)
  8595.     return edx_82
  8596. fn00407A6D_exit:
  8597.     use xmm0_81 (=> xmm0Out)
  8598. }
  8599.  
  8600. word32 fn00407E12(word32 ebx, word32 ebp, selector es, selector ds, word32 dwArg04, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  8601. {
  8602.     *esiOut = esi;
  8603.     word32 ebx_17;
  8604.     word128 xmm0_18;
  8605.     word32 edx_19 = fn00401759(fp - 0x14, ebx, es, ds, dwArg04, out ebx_17, out xmm0_18);
  8606.     Mem23[fp - 0x18 + 0x00:word32] = Mem0[fp + 0x24:word32];
  8607.     Mem26[fp - 0x1C + 0x00:word32] = Mem23[fp + 0x20:word32];
  8608.     Mem28[fp - 0x20 + 0x00:word32] = Mem26[fp + 0x1C:word32];
  8609.     Mem30[fp - 0x24 + 0x00:word32] = Mem28[fp + 0x18:word32];
  8610.     Mem32[fp - 0x28 + 0x00:word32] = Mem30[fp + 0x14:word32];
  8611.     Mem34[fp - 44 + 0x00:word32] = Mem32[fp + 0x10:word32];
  8612.     Mem36[fp - 0x30 + 0x00:word32] = Mem34[fp + 0x0C:word32];
  8613.     Mem38[fp - 0x34 + 0x00:word32] = Mem36[fp + 0x08:word32];
  8614.     word128 xmm0_44;
  8615.     word32 edx_45 = fn00407A6D(fp - 0x14, edx_19, fp - 0x04, edi, es, ds, dwArg00, dwArg08, dwArg0C, dwArg18, dwArg1C, out xmm0_44);
  8616.     if (Mem38[fp - 0x08 + 0x00:byte] != 0x00)
  8617.     {
  8618.         word32 ecx_61 = Mem38[fp - 0x0C + 0x00:word32];
  8619.         Mem63[ecx_61 + 0x70:word32] = Mem38[ecx_61 + 0x70:word32] & ~0x02;
  8620.     }
  8621.     return edx_45;
  8622. }
  8623.  
  8624. word32 fn00407E57(word32 ecx, word32 edx, word32 ebp, selector es, selector ds, word128 xmm0, word32 dwArg08, word32 dwArg0C, word32 dwArg14, word32 dwArg18, word32 dwArg1C, ptr32 & edxOut, ptr32 & xmm0Out)
  8625. {
  8626. fn00407E57_entry:
  8627.     def fp
  8628.     def ebp
  8629.     def ecx
  8630.     def Mem0
  8631.     def ds
  8632.     def es
  8633.     def dwArg14
  8634.     def dwArg1C
  8635.     def dwArg0C
  8636.     def dwArg08
  8637.     def dwArg18
  8638.     def xmm0
  8639.     def edx
  8640.     def dwArg00
  8641.     def dwArg04
  8642.     def dwArg10
  8643.     dwLoc04_6 = ebp
  8644.     ebp_7 = fp - 0x04
  8645.     eax_17 = Mem0[4253032:word32]
  8646.     ebx_25 = 0x00
  8647.     edi_28 = ecx
  8648.     branch eax_17 != 0x00 l00407EB2
  8649.     goto l00407E78
  8650. l00407E57:
  8651. l00407E78:
  8652.     dwLoc1C_393 = fp - 0x0C
  8653.     eax_402 = GetStringTypeW(0x01, 0x0040AA2C, 0x01, fp - 0x0C)
  8654.     branch eax_402 == 0x00 l00407E98
  8655. l00407E90:
  8656.     Mem407[4253032:word32] = 0x01
  8657.     goto l00407ECC
  8658. l00407E98:
  8659.     eax_408 = GetLastError()
  8660.     branch eax_408 != 0x78 l00407EAD
  8661. l00407EA3:
  8662.     eax_413 = 0x02
  8663.     Mem416[4253032:word32] = 0x02
  8664.     goto l00407EB2
  8665. l00407EAD:
  8666.     eax_417 = Mem0[4253032:word32]
  8667. l00407EB2:
  8668.     eax_286 = PHI(eax_17, eax_413, eax_417)
  8669.     branch eax_286 == 0x02 || eax_286 == 0x00 l00407F8A
  8670.     goto l00407EC3
  8671. l00407EBB:
  8672. l00407EC3:
  8673.     branch eax_286 != 0x01 l00407FB4
  8674. l00407ECC:
  8675.     branch dwArg14 != 0x00 l00407EDC
  8676. l00407ED4:
  8677.     eax_276 = Mem0[ecx + 0x00:word32]
  8678.     eax_277 = Mem0[eax_276 + 0x04:word32]
  8679.     dwArg14_278 = eax_277
  8680. l00407EDC:
  8681.     dwArg14_115 = PHI(dwArg14, dwArg14_278)
  8682.     esi_116 = MultiByteToWideChar
  8683.     eax_117 = 0x00
  8684.     dwLoc24_127 = dwArg0C
  8685.     al_128 = dwArg1C != 0x00
  8686.     eax_129 = (word32) (dwArg1C != 0x00) (alias)
  8687.     dwLoc28_132 = dwArg08
  8688.     eax_133 = eax_129 * 0x08 + 0x01
  8689.     dwLoc2C_135 = eax_133
  8690.     dwLoc30_137 = dwArg14_115
  8691.     eax_138 = MultiByteToWideChar(dwArg14_115, eax_133, dwArg08, dwArg0C, 0x00, 0x00)
  8692.     esp_139 = fp - 0x18
  8693.     edi_140 = eax_138
  8694.     branch eax_138 == 0x00 l00407FB4
  8695. l00407F09:
  8696.     branch eax_138 <= 0x00 || eax_138 >u 0x7FFFFFF0 l00407F47
  8697.     goto l00407F13
  8698. l00407F0B:
  8699. l00407F13:
  8700.     eax_234 = eax_138 + 0x08 + eax_138
  8701.     branch eax_234 >u 0x0400 l00407F31
  8702. l00407F1E:
  8703.     fn00409930(eax_234)
  8704.     eax_259 = fp - 0x18
  8705.     branch fp == 0x18 l00407F45
  8706. l00407F29:
  8707.     Mem263[fp - 0x18 + 0x00:word32] = 0xCCCC
  8708.     goto l00407F42
  8709. l00407F31:
  8710.     esp_264 = fp - 0x1C
  8711.     dwLoc1C_265 = eax_234
  8712.     eax_269 = fn00408438(0x00, fp - 0x04, es, ds, eax_234, out edx_266, out ebx_267, out xmm0_268)
  8713.     esp_272 = fp - 0x18
  8714.     branch eax_269 == ebx_267 l00407F45
  8715. l00407F3C:
  8716.     Mem275[eax_269 + 0x00:word32] = 0xDDDD
  8717. l00407F42:
  8718.     xmm0_250 = PHI(xmm0, xmm0_268)
  8719.     edx_251 = PHI(edx, edx_266)
  8720.     eax_254 = PHI(eax_259, eax_269)
  8721.     esp_255 = PHI(esp_139, esp_272)
  8722.     eax_256 = eax_254 + 0x08
  8723. l00407F45:
  8724.     xmm0_241 = PHI(xmm0, xmm0_250, xmm0_268)
  8725.     edx_242 = PHI(edx, edx_251, edx_266)
  8726.     eax_244 = PHI(eax_259, eax_256, eax_269)
  8727.     esp_246 = PHI(esp_139, esp_255, esp_272)
  8728.     ebx_247 = eax_244
  8729. l00407F47:
  8730.     xmm0_152 = PHI(xmm0, xmm0, xmm0_241)
  8731.     edx_153 = PHI(edx, edx, edx_242)
  8732.     ebx_154 = PHI(ebx_25, ebx_25, ebx_247)
  8733.     esp_158 = PHI(esp_139, esp_139, esp_246)
  8734.     branch ebx_154 == 0x00 l00407FB4
  8735. l00407F4B:
  8736.     eax_162 = eax_138 * 0x02
  8737.     esp_163 = esp_158 - 0x04
  8738.     Mem164[esp_163 + 0x00:word32] = eax_138 * 0x02
  8739.     esp_165 = esp_163 - 0x04
  8740.     Mem166[esp_163 - 0x04 + 0x00:word32] = 0x00
  8741.     esp_167 = esp_163 - 0x08
  8742.     Mem168[esp_163 - 0x08 + 0x00:word32] = ebx_154
  8743.     eax_173 = fn00404CA0(xmm0_152, ebp, dwArg00, dwArg04, dwArg08, out edx_171, out edi_172)
  8744.     esp_175 = esp_163 + 0x04
  8745.     esp_177 = esp_163
  8746.     Mem178[esp_163 + 0x00:word32] = edi_172
  8747.     esp_179 = esp_163 - 0x04
  8748.     Mem180[esp_163 - 0x04 + 0x00:word32] = ebx_154
  8749.     esp_181 = esp_163 - 0x08
  8750.     Mem182[esp_163 - 0x08 + 0x00:word32] = Mem180[fp + 0x0C:word32]
  8751.     esp_183 = esp_163 - 0x0C
  8752.     Mem184[esp_163 - 0x0C + 0x00:word32] = Mem182[fp + 0x08:word32]
  8753.     esp_185 = esp_163 - 0x10
  8754.     Mem186[esp_163 - 0x10 + 0x00:word32] = 0x01
  8755.     esp_187 = esp_163 - 0x14
  8756.     Mem188[esp_163 - 0x14 + 0x00:word32] = Mem186[fp + 0x14:word32]
  8757.     eax_193 = MultiByteToWideChar(Mem0[esp + 0x00:UINT], Mem0[esp + 0x04:DWORD], Mem0[esp + 0x08:LPCSTR], Mem0[esp + 0x0C:int32], Mem0[esp + 0x0010:LPWSTR], Mem0[esp + 0x0014:int32])
  8758.     branch eax_193 == 0x00 l00407F7E
  8759. l00407F6D:
  8760.     esp_221 = esp_189 - 0x04
  8761.     Mem222[esp_189 - 0x04 + 0x00:word32] = Mem188[ebp_191 + 0x14:word32]
  8762.     esp_223 = esp_189 - 0x08
  8763.     Mem224[esp_189 - 0x08 + 0x00:word32] = eax_193
  8764.     esp_225 = esp_189 - 0x0C
  8765.     Mem226[esp_189 - 0x0C + 0x00:word32] = ebx_196
  8766.     esp_227 = esp_189 - 0x10
  8767.     Mem228[esp_189 - 0x10 + 0x00:word32] = Mem226[ebp_191 + 0x08:word32]
  8768.     eax_229 = GetStringTypeW(Mem228[esp_189 - 0x10 + 0x00:DWORD], Mem228[esp_189 - 0x0C + 0x00:LPCWSTR], Mem228[esp_189 - 0x08 + 0x00:int32], Mem228[esp_189 - 0x04 + 0x00:LPWORD])
  8769.     esp_230 = esp_189
  8770.     Mem231[ebp_191 - 0x08 + 0x00:word32] = eax_229
  8771. l00407F7E:
  8772.     esp_210 = PHI(esp_189, esp_230)
  8773.     esp_211 = esp_210 - 0x04
  8774.     Mem212[esp_211 + 0x00:word32] = ebx_196
  8775.     edx_216 = fn00407A4D(ebx_196, esi_197, edi_190, es_203, ds_204, dwArg00, out ebx_213, out esi_214, out xmm0_215)
  8776.     eax_217 = Mem212[ebp_191 - 0x08 + 0x00:word32]
  8777.     goto l00407FFF
  8778. l00407F8A:
  8779.     esi_291 = 0x00
  8780.     branch dwArg18 != 0x00 l00407F99
  8781. l00407F91:
  8782.     eax_384 = Mem0[ecx + 0x00:word32]
  8783.     eax_385 = Mem0[eax_384 + 0x14:word32]
  8784.     dwArg18_386 = eax_385
  8785. l00407F99:
  8786.     dwArg18_294 = PHI(dwArg18, dwArg18_386)
  8787.     esp_299 = fp - 0x1C
  8788.     dwLoc1C_300 = dwArg18_294
  8789.     eax_305 = fn0040972F(edx, 0x00, 0x00, ecx, es, ds, dwArg18_294, out edx_301, out ebx_302, out esi_303, out xmm0_304)
  8790.     esp_308 = fp - 0x18
  8791.     branch eax_305 != ~0x00 l00407FB8
  8792.     goto l00407FB4
  8793. l00407FA6:
  8794. l00407FB4:
  8795.     xmm0_86 = PHI(xmm0, xmm0, xmm0_152, xmm0_304, xmm0_374)
  8796.     edx_87 = PHI(edx, edx, edx_153, edx_301, edx_373)
  8797.     eax_94 = 0x00
  8798.     goto l00407FFF
  8799. l00407FB8:
  8800.     branch eax_305 == Mem0[fp + 0x14:word32] l00407FDB
  8801. l00407FBD:
  8802.     esp_359 = fp - 0x1C
  8803.     Mem360[fp - 0x1C + 0x00:word32] = ebx_302
  8804.     esp_361 = fp - 0x20
  8805.     Mem362[fp - 0x20 + 0x00:word32] = ebx_302
  8806.     ecx_363 = fp + 0x0C
  8807.     esp_364 = fp - 0x24
  8808.     Mem365[fp - 0x24 + 0x00:word32] = fp + 0x0C
  8809.     esp_366 = fp - 0x28
  8810.     Mem367[fp - 0x28 + 0x00:word32] = Mem365[fp + 0x08:word32]
  8811.     esp_368 = fp - 44
  8812.     Mem369[fp - 44 + 0x00:word32] = eax_305
  8813.     esp_370 = fp - 0x30
  8814.     Mem371[fp - 0x30 + 0x00:word32] = Mem369[fp + 0x14:word32]
  8815.     eax_375 = fn00409778(edx_301, fp - 0x04, es, ds, xmm0_304, dwArg00, dwArg04, dwArg08, dwArg0C, dwArg10, out edx_373, out xmm0_374)
  8816.     esi_376 = eax_375
  8817.     esp_377 = fp - 0x18
  8818.     branch eax_375 == ebx_302 l00407FB4
  8819. l00407FD8:
  8820.     Mem380[fp + 0x08:word32] = eax_375
  8821. l00407FDB:
  8822.     xmm0_316 = PHI(xmm0_304, xmm0_374)
  8823.     edx_317 = PHI(edx_301, edx_373)
  8824.     esi_318 = PHI(esi_303, esi_376)
  8825.     esp_320 = PHI(esp_308, esp_377)
  8826.     esp_321 = esp_320 - 0x04
  8827.     Mem322[esp_321 + 0x00:word32] = Mem0[fp + 0x10:word32]
  8828.     esp_323 = esp_321 - 0x04
  8829.     Mem324[esp_321 - 0x04 + 0x00:word32] = Mem322[fp + 0x0C:word32]
  8830.     esp_325 = esp_321 - 0x08
  8831.     Mem326[esp_321 - 0x08 + 0x00:word32] = Mem324[fp + 0x08:word32]
  8832.     esp_327 = esp_321 - 0x0C
  8833.     Mem328[esp_321 - 0x0C + 0x00:word32] = Mem326[fp + 0x04:word32]
  8834.     esp_329 = esp_321 - 0x10
  8835.     Mem330[esp_321 - 0x10 + 0x00:word32] = Mem328[fp + 0x18:word32]
  8836.     eax_331 = GetStringTypeA(Mem330[esp_321 - 0x10 + 0x00:LCID], Mem330[esp_321 - 0x0C + 0x00:DWORD], Mem330[esp_321 - 0x08 + 0x00:LPCSTR], Mem330[esp_321 - 0x04 + 0x00:int32], Mem330[esp_321 + 0x00:LPWORD])
  8837.     esp_332 = esp_321 + 0x04
  8838.     edi_333 = eax_331
  8839.     branch esi_318 == ebx_302 l00407FFD
  8840. l00407FF6:
  8841.     esp_347 = esp_321
  8842.     Mem348[esp_321 + 0x00:word32] = esi_318
  8843.     fn004047EB(ebx_302, esi_318, eax_331, es, ds, out eax_349, out edx_350, out ebx_351, out ebp_352, out esi_353, out edi_354, out xmm0_355)
  8844. l00407FFD:
  8845.     xmm0_337 = PHI(xmm0_316, xmm0_355)
  8846.     edx_338 = PHI(edx_317, edx_350)
  8847.     edi_339 = PHI(edi_333, edi_354)
  8848.     ebp_343 = PHI(ebp_7, ebp_352)
  8849.     eax_345 = edi_339
  8850. l00407FFF:
  8851.     ds_47 = PHI(ds, ds_204, ds)
  8852.     es_48 = PHI(es, es_203, es)
  8853.     xmm0_52 = PHI(xmm0_86, xmm0_215, xmm0_337)
  8854.     edx_53 = PHI(edx_87, edx_216, edx_338)
  8855.     eax_54 = PHI(eax_94, eax_217, eax_345)
  8856.     ebp_55 = PHI(ebp_7, ebp_191, ebp_343)
  8857.     esp_56 = ebp_55 - 0x14
  8858.     edi_57 = Mem0[esp_56 + 0x00:word32]
  8859.     esp_58 = esp_56 + 0x04
  8860.     esi_59 = Mem0[esp_56 + 0x04:word32]
  8861.     esp_60 = esp_56 + 0x08
  8862.     ebx_61 = Mem0[esp_56 + 0x08:word32]
  8863.     ecx_63 = Mem0[ebp_55 - 0x04 + 0x00:word32]
  8864.     ecx_64 = ecx_63 ^ ebp_55
  8865.     eax_67 = fn00404BEF(eax_54, ecx_64, edx_53, ebx_61, ebp_55, esi_59, edi_57, es_48, ds_47)
  8866.     return eax_67
  8867. fn00407E57_exit:
  8868.     use edx_53 (=> edxOut)
  8869.     use xmm0_52 (=> xmm0Out)
  8870. }
  8871.  
  8872. word32 fn00408011(word32 ebx, word32 ebp, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  8873. {
  8874.     *esiOut = esi;
  8875.     word32 ebx_17;
  8876.     word128 xmm0_18;
  8877.     word32 edx_19 = fn00401759(fp - 0x14, ebx, es, ds, dwArg04, out ebx_17, out xmm0_18);
  8878.     Mem23[fp - 0x18 + 0x00:word32] = Mem0[fp + 0x20:word32];
  8879.     Mem26[fp - 0x1C + 0x00:word32] = Mem23[fp + 0x1C:word32];
  8880.     Mem28[fp - 0x20 + 0x00:word32] = Mem26[fp + 0x18:word32];
  8881.     Mem30[fp - 0x24 + 0x00:word32] = Mem28[fp + 0x14:word32];
  8882.     Mem32[fp - 0x28 + 0x00:word32] = Mem30[fp + 0x10:word32];
  8883.     Mem34[fp - 44 + 0x00:word32] = Mem32[fp + 0x0C:word32];
  8884.     Mem36[fp - 0x30 + 0x00:word32] = Mem34[fp + 0x08:word32];
  8885.     word32 edx_41;
  8886.     word128 xmm0_42;
  8887.     word32 eax_43 = fn00407E57(fp - 0x14, edx_19, fp - 0x04, es, ds, xmm0_18, dwArg04, dwArg08, dwArg10, dwArg14, dwArg18, out edx_41, out xmm0_42);
  8888.     if (Mem36[fp - 0x08 + 0x00:byte] != 0x00)
  8889.     {
  8890.         word32 ecx_59 = Mem36[fp - 0x0C + 0x00:word32];
  8891.         Mem61[ecx_59 + 0x70:word32] = Mem36[ecx_59 + 0x70:word32] & ~0x02;
  8892.     }
  8893.     return eax_43;
  8894. }
  8895.  
  8896. word32 fn00408053(word32 ebx, word32 edi, selector es, selector ds, word32 dwArg04)
  8897. {
  8898.     if (dwArg04 != 0x00)
  8899.     {
  8900.         word32 eax_41;
  8901.         word32 edx_42;
  8902.         word32 ebx_43;
  8903.         word32 ebp_44;
  8904.         word32 esi_45;
  8905.         word32 edi_46;
  8906.         word128 xmm0_47;
  8907.         fn004047EB(ebx, dwArg04, edi, es, ds, out eax_41, out edx_42, out ebx_43, out ebp_44, out esi_45, out edi_46, out xmm0_47);
  8908.         Mem50[fp - 0x10 + 0x00:word32] = Mem0[esi_45 + 0x08:word32];
  8909.         word32 eax_51;
  8910.         word32 edx_52;
  8911.         word32 ebx_53;
  8912.         word32 ebp_54;
  8913.         word32 esi_55;
  8914.         word32 edi_56;
  8915.         word128 xmm0_57;
  8916.         fn004047EB(ebx_43, esi_45, edi_46, es, ds, out eax_51, out edx_52, out ebx_53, out ebp_54, out esi_55, out edi_56, out xmm0_57);
  8917.         Mem60[fp - 0x14 + 0x00:word32] = Mem50[esi_55 + 0x0C:word32];
  8918.         word32 eax_61;
  8919.         word32 edx_62;
  8920.         word32 ebx_63;
  8921.         word32 ebp_64;
  8922.         word32 esi_65;
  8923.         word32 edi_66;
  8924.         word128 xmm0_67;
  8925.         fn004047EB(ebx_53, esi_55, edi_56, es, ds, out eax_61, out edx_62, out ebx_63, out ebp_64, out esi_65, out edi_66, out xmm0_67);
  8926.         Mem70[fp - 0x18 + 0x00:word32] = Mem60[esi_65 + 0x10:word32];
  8927.         word32 eax_71;
  8928.         word32 edx_72;
  8929.         word32 ebx_73;
  8930.         word32 ebp_74;
  8931.         word32 esi_75;
  8932.         word32 edi_76;
  8933.         word128 xmm0_77;
  8934.         fn004047EB(ebx_63, esi_65, edi_66, es, ds, out eax_71, out edx_72, out ebx_73, out ebp_74, out esi_75, out edi_76, out xmm0_77);
  8935.         Mem80[fp - 0x1C + 0x00:word32] = Mem70[esi_75 + 0x14:word32];
  8936.         word32 eax_81;
  8937.         word32 edx_82;
  8938.         word32 ebx_83;
  8939.         word32 ebp_84;
  8940.         word32 esi_85;
  8941.         word32 edi_86;
  8942.         word128 xmm0_87;
  8943.         fn004047EB(ebx_73, esi_75, edi_76, es, ds, out eax_81, out edx_82, out ebx_83, out ebp_84, out esi_85, out edi_86, out xmm0_87);
  8944.         Mem90[fp - 0x20 + 0x00:word32] = Mem80[esi_85 + 0x18:word32];
  8945.         word32 eax_91;
  8946.         word32 edx_92;
  8947.         word32 ebx_93;
  8948.         word32 ebp_94;
  8949.         word32 esi_95;
  8950.         word32 edi_96;
  8951.         word128 xmm0_97;
  8952.         fn004047EB(ebx_83, esi_85, edi_86, es, ds, out eax_91, out edx_92, out ebx_93, out ebp_94, out esi_95, out edi_96, out xmm0_97);
  8953.         Mem100[fp - 0x24 + 0x00:word32] = Mem90[esi_95 + 0x00:word32];
  8954.         word32 eax_101;
  8955.         word32 edx_102;
  8956.         word32 ebx_103;
  8957.         word32 ebp_104;
  8958.         word32 esi_105;
  8959.         word32 edi_106;
  8960.         word128 xmm0_107;
  8961.         fn004047EB(ebx_93, esi_95, edi_96, es, ds, out eax_101, out edx_102, out ebx_103, out ebp_104, out esi_105, out edi_106, out xmm0_107);
  8962.         Mem110[fp - 0x28 + 0x00:word32] = Mem100[esi_105 + 0x20:word32];
  8963.         word32 eax_111;
  8964.         word32 edx_112;
  8965.         word32 ebx_113;
  8966.         word32 ebp_114;
  8967.         word32 esi_115;
  8968.         word32 edi_116;
  8969.         word128 xmm0_117;
  8970.         fn004047EB(ebx_103, esi_105, edi_106, es, ds, out eax_111, out edx_112, out ebx_113, out ebp_114, out esi_115, out edi_116, out xmm0_117);
  8971.         Mem120[fp - 44 + 0x00:word32] = Mem110[esi_115 + 0x24:word32];
  8972.         word32 eax_121;
  8973.         word32 edx_122;
  8974.         word32 ebx_123;
  8975.         word32 ebp_124;
  8976.         word32 esi_125;
  8977.         word32 edi_126;
  8978.         word128 xmm0_127;
  8979.         fn004047EB(ebx_113, esi_115, edi_116, es, ds, out eax_121, out edx_122, out ebx_123, out ebp_124, out esi_125, out edi_126, out xmm0_127);
  8980.         Mem130[fp - 0x30 + 0x00:word32] = Mem120[esi_125 + 0x28:word32];
  8981.         word32 eax_131;
  8982.         word32 edx_132;
  8983.         word32 ebx_133;
  8984.         word32 ebp_134;
  8985.         word32 esi_135;
  8986.         word32 edi_136;
  8987.         word128 xmm0_137;
  8988.         fn004047EB(ebx_123, esi_125, edi_126, es, ds, out eax_131, out edx_132, out ebx_133, out ebp_134, out esi_135, out edi_136, out xmm0_137);
  8989.         Mem140[fp - 0x34 + 0x00:word32] = Mem130[esi_135 + 44:word32];
  8990.         word32 eax_141;
  8991.         word32 edx_142;
  8992.         word32 ebx_143;
  8993.         word32 ebp_144;
  8994.         word32 esi_145;
  8995.         word32 edi_146;
  8996.         word128 xmm0_147;
  8997.         fn004047EB(ebx_133, esi_135, edi_136, es, ds, out eax_141, out edx_142, out ebx_143, out ebp_144, out esi_145, out edi_146, out xmm0_147);
  8998.         Mem150[fp - 0x38 + 0x00:word32] = Mem140[esi_145 + 0x30:word32];
  8999.         word32 eax_151;
  9000.         word32 edx_152;
  9001.         word32 ebx_153;
  9002.         word32 ebp_154;
  9003.         word32 esi_155;
  9004.         word32 edi_156;
  9005.         word128 xmm0_157;
  9006.         fn004047EB(ebx_143, esi_145, edi_146, es, ds, out eax_151, out edx_152, out ebx_153, out ebp_154, out esi_155, out edi_156, out xmm0_157);
  9007.         Mem160[fp - 0x3C + 0x00:word32] = Mem150[esi_155 + 0x34:word32];
  9008.         word32 eax_161;
  9009.         word32 edx_162;
  9010.         word32 ebx_163;
  9011.         word32 ebp_164;
  9012.         word32 esi_165;
  9013.         word32 edi_166;
  9014.         word128 xmm0_167;
  9015.         fn004047EB(ebx_153, esi_155, edi_156, es, ds, out eax_161, out edx_162, out ebx_163, out ebp_164, out esi_165, out edi_166, out xmm0_167);
  9016.         Mem170[fp - 0x40 + 0x00:word32] = Mem160[esi_165 + 0x1C:word32];
  9017.         word32 eax_171;
  9018.         word32 edx_172;
  9019.         word32 ebx_173;
  9020.         word32 ebp_174;
  9021.         word32 esi_175;
  9022.         word32 edi_176;
  9023.         word128 xmm0_177;
  9024.         fn004047EB(ebx_163, esi_165, edi_166, es, ds, out eax_171, out edx_172, out ebx_173, out ebp_174, out esi_175, out edi_176, out xmm0_177);
  9025.         Mem180[fp - 0x44 + 0x00:word32] = Mem170[esi_175 + 0x38:word32];
  9026.         word32 eax_181;
  9027.         word32 edx_182;
  9028.         word32 ebx_183;
  9029.         word32 ebp_184;
  9030.         word32 esi_185;
  9031.         word32 edi_186;
  9032.         word128 xmm0_187;
  9033.         fn004047EB(ebx_173, esi_175, edi_176, es, ds, out eax_181, out edx_182, out ebx_183, out ebp_184, out esi_185, out edi_186, out xmm0_187);
  9034.         Mem190[fp - 0x48 + 0x00:word32] = Mem180[esi_185 + 0x3C:word32];
  9035.         word32 eax_191;
  9036.         word32 edx_192;
  9037.         word32 ebx_193;
  9038.         word32 ebp_194;
  9039.         word32 esi_195;
  9040.         word32 edi_196;
  9041.         word128 xmm0_197;
  9042.         fn004047EB(ebx_183, esi_185, edi_186, es, ds, out eax_191, out edx_192, out ebx_193, out ebp_194, out esi_195, out edi_196, out xmm0_197);
  9043.         Mem202[fp - 0x0C + 0x00:word32] = Mem190[esi_195 + 0x40:word32];
  9044.         word32 eax_203;
  9045.         word32 edx_204;
  9046.         word32 ebx_205;
  9047.         word32 ebp_206;
  9048.         word32 esi_207;
  9049.         word32 edi_208;
  9050.         word128 xmm0_209;
  9051.         fn004047EB(ebx_193, esi_195, edi_196, es, ds, out eax_203, out edx_204, out ebx_205, out ebp_206, out esi_207, out edi_208, out xmm0_209);
  9052.         Mem212[fp - 0x10 + 0x00:word32] = Mem202[esi_207 + 0x44:word32];
  9053.         word32 eax_213;
  9054.         word32 edx_214;
  9055.         word32 ebx_215;
  9056.         word32 ebp_216;
  9057.         word32 esi_217;
  9058.         word32 edi_218;
  9059.         word128 xmm0_219;
  9060.         fn004047EB(ebx_205, esi_207, edi_208, es, ds, out eax_213, out edx_214, out ebx_215, out ebp_216, out esi_217, out edi_218, out xmm0_219);
  9061.         Mem222[fp - 0x14 + 0x00:word32] = Mem212[esi_217 + 0x48:word32];
  9062.         word32 eax_223;
  9063.         word32 edx_224;
  9064.         word32 ebx_225;
  9065.         word32 ebp_226;
  9066.         word32 esi_227;
  9067.         word32 edi_228;
  9068.         word128 xmm0_229;
  9069.         fn004047EB(ebx_215, esi_217, edi_218, es, ds, out eax_223, out edx_224, out ebx_225, out ebp_226, out esi_227, out edi_228, out xmm0_229);
  9070.         Mem232[fp - 0x18 + 0x00:word32] = Mem222[esi_227 + 0x4C:word32];
  9071.         word32 eax_233;
  9072.         word32 edx_234;
  9073.         word32 ebx_235;
  9074.         word32 ebp_236;
  9075.         word32 esi_237;
  9076.         word32 edi_238;
  9077.         word128 xmm0_239;
  9078.         fn004047EB(ebx_225, esi_227, edi_228, es, ds, out eax_233, out edx_234, out ebx_235, out ebp_236, out esi_237, out edi_238, out xmm0_239);
  9079.         Mem242[fp - 0x1C + 0x00:word32] = Mem232[esi_237 + 0x50:word32];
  9080.         word32 eax_243;
  9081.         word32 edx_244;
  9082.         word32 ebx_245;
  9083.         word32 ebp_246;
  9084.         word32 esi_247;
  9085.         word32 edi_248;
  9086.         word128 xmm0_249;
  9087.         fn004047EB(ebx_235, esi_237, edi_238, es, ds, out eax_243, out edx_244, out ebx_245, out ebp_246, out esi_247, out edi_248, out xmm0_249);
  9088.         Mem252[fp - 0x20 + 0x00:word32] = Mem242[esi_247 + 0x54:word32];
  9089.         word32 eax_253;
  9090.         word32 edx_254;
  9091.         word32 ebx_255;
  9092.         word32 ebp_256;
  9093.         word32 esi_257;
  9094.         word32 edi_258;
  9095.         word128 xmm0_259;
  9096.         fn004047EB(ebx_245, esi_247, edi_248, es, ds, out eax_253, out edx_254, out ebx_255, out ebp_256, out esi_257, out edi_258, out xmm0_259);
  9097.         Mem262[fp - 0x24 + 0x00:word32] = Mem252[esi_257 + 88:word32];
  9098.         word32 eax_263;
  9099.         word32 edx_264;
  9100.         word32 ebx_265;
  9101.         word32 ebp_266;
  9102.         word32 esi_267;
  9103.         word32 edi_268;
  9104.         word128 xmm0_269;
  9105.         fn004047EB(ebx_255, esi_257, edi_258, es, ds, out eax_263, out edx_264, out ebx_265, out ebp_266, out esi_267, out edi_268, out xmm0_269);
  9106.         Mem272[fp - 0x28 + 0x00:word32] = Mem262[esi_267 + 0x5C:word32];
  9107.         word32 eax_273;
  9108.         word32 edx_274;
  9109.         word32 ebx_275;
  9110.         word32 ebp_276;
  9111.         word32 esi_277;
  9112.         word32 edi_278;
  9113.         word128 xmm0_279;
  9114.         fn004047EB(ebx_265, esi_267, edi_268, es, ds, out eax_273, out edx_274, out ebx_275, out ebp_276, out esi_277, out edi_278, out xmm0_279);
  9115.         Mem282[fp - 44 + 0x00:word32] = Mem272[esi_277 + 0x60:word32];
  9116.         word32 eax_283;
  9117.         word32 edx_284;
  9118.         word32 ebx_285;
  9119.         word32 ebp_286;
  9120.         word32 esi_287;
  9121.         word32 edi_288;
  9122.         word128 xmm0_289;
  9123.         fn004047EB(ebx_275, esi_277, edi_278, es, ds, out eax_283, out edx_284, out ebx_285, out ebp_286, out esi_287, out edi_288, out xmm0_289);
  9124.         Mem292[fp - 0x30 + 0x00:word32] = Mem282[esi_287 + 100:word32];
  9125.         word32 eax_293;
  9126.         word32 edx_294;
  9127.         word32 ebx_295;
  9128.         word32 ebp_296;
  9129.         word32 esi_297;
  9130.         word32 edi_298;
  9131.         word128 xmm0_299;
  9132.         fn004047EB(ebx_285, esi_287, edi_288, es, ds, out eax_293, out edx_294, out ebx_295, out ebp_296, out esi_297, out edi_298, out xmm0_299);
  9133.         Mem302[fp - 0x34 + 0x00:word32] = Mem292[esi_297 + 0x68:word32];
  9134.         word32 eax_303;
  9135.         word32 edx_304;
  9136.         word32 ebx_305;
  9137.         word32 ebp_306;
  9138.         word32 esi_307;
  9139.         word32 edi_308;
  9140.         word128 xmm0_309;
  9141.         fn004047EB(ebx_295, esi_297, edi_298, es, ds, out eax_303, out edx_304, out ebx_305, out ebp_306, out esi_307, out edi_308, out xmm0_309);
  9142.         Mem312[fp - 0x38 + 0x00:word32] = Mem302[esi_307 + 0x6C:word32];
  9143.         word32 eax_313;
  9144.         word32 edx_314;
  9145.         word32 ebx_315;
  9146.         word32 ebp_316;
  9147.         word32 esi_317;
  9148.         word32 edi_318;
  9149.         word128 xmm0_319;
  9150.         fn004047EB(ebx_305, esi_307, edi_308, es, ds, out eax_313, out edx_314, out ebx_315, out ebp_316, out esi_317, out edi_318, out xmm0_319);
  9151.         Mem322[fp - 0x3C + 0x00:word32] = Mem312[esi_317 + 0x70:word32];
  9152.         word32 eax_323;
  9153.         word32 edx_324;
  9154.         word32 ebx_325;
  9155.         word32 ebp_326;
  9156.         word32 esi_327;
  9157.         word32 edi_328;
  9158.         word128 xmm0_329;
  9159.         fn004047EB(ebx_315, esi_317, edi_318, es, ds, out eax_323, out edx_324, out ebx_325, out ebp_326, out esi_327, out edi_328, out xmm0_329);
  9160.         Mem332[fp - 0x40 + 0x00:word32] = Mem322[esi_327 + 116:word32];
  9161.         word32 eax_333;
  9162.         word32 edx_334;
  9163.         word32 ebx_335;
  9164.         word32 ebp_336;
  9165.         word32 esi_337;
  9166.         word32 edi_338;
  9167.         word128 xmm0_339;
  9168.         fn004047EB(ebx_325, esi_327, edi_328, es, ds, out eax_333, out edx_334, out ebx_335, out ebp_336, out esi_337, out edi_338, out xmm0_339);
  9169.         Mem342[fp - 0x44 + 0x00:word32] = Mem332[esi_337 + 0x78:word32];
  9170.         word32 eax_343;
  9171.         word32 edx_344;
  9172.         word32 ebx_345;
  9173.         word32 ebp_346;
  9174.         word32 esi_347;
  9175.         word32 edi_348;
  9176.         word128 xmm0_349;
  9177.         fn004047EB(ebx_335, esi_337, edi_338, es, ds, out eax_343, out edx_344, out ebx_345, out ebp_346, out esi_347, out edi_348, out xmm0_349);
  9178.         Mem352[fp - 0x48 + 0x00:word32] = Mem342[esi_347 + 0x7C:word32];
  9179.         word32 eax_353;
  9180.         word32 edx_354;
  9181.         word32 ebx_355;
  9182.         word32 ebp_356;
  9183.         word32 esi_357;
  9184.         word32 edi_358;
  9185.         word128 xmm0_359;
  9186.         fn004047EB(ebx_345, esi_347, edi_348, es, ds, out eax_353, out edx_354, out ebx_355, out ebp_356, out esi_357, out edi_358, out xmm0_359);
  9187.         Mem364[fp - 0x0C + 0x00:word32] = Mem352[esi_357 + 0x80:word32];
  9188.         word32 eax_365;
  9189.         word32 edx_366;
  9190.         word32 ebx_367;
  9191.         word32 ebp_368;
  9192.         word32 esi_369;
  9193.         word32 edi_370;
  9194.         word128 xmm0_371;
  9195.         fn004047EB(ebx_355, esi_357, edi_358, es, ds, out eax_365, out edx_366, out ebx_367, out ebp_368, out esi_369, out edi_370, out xmm0_371);
  9196.         Mem374[fp - 0x10 + 0x00:word32] = Mem364[esi_369 + 0x84:word32];
  9197.         word32 eax_375;
  9198.         word32 edx_376;
  9199.         word32 ebx_377;
  9200.         word32 ebp_378;
  9201.         word32 esi_379;
  9202.         word32 edi_380;
  9203.         word128 xmm0_381;
  9204.         fn004047EB(ebx_367, esi_369, edi_370, es, ds, out eax_375, out edx_376, out ebx_377, out ebp_378, out esi_379, out edi_380, out xmm0_381);
  9205.         Mem384[fp - 0x14 + 0x00:word32] = Mem374[esi_379 + 0x88:word32];
  9206.         word32 eax_385;
  9207.         word32 edx_386;
  9208.         word32 ebx_387;
  9209.         word32 ebp_388;
  9210.         word32 esi_389;
  9211.         word32 edi_390;
  9212.         word128 xmm0_391;
  9213.         fn004047EB(ebx_377, esi_379, edi_380, es, ds, out eax_385, out edx_386, out ebx_387, out ebp_388, out esi_389, out edi_390, out xmm0_391);
  9214.         Mem394[fp - 0x18 + 0x00:word32] = Mem384[esi_389 + 0x8C:word32];
  9215.         word32 eax_395;
  9216.         word32 edx_396;
  9217.         word32 ebx_397;
  9218.         word32 ebp_398;
  9219.         word32 esi_399;
  9220.         word32 edi_400;
  9221.         word128 xmm0_401;
  9222.         fn004047EB(ebx_387, esi_389, edi_390, es, ds, out eax_395, out edx_396, out ebx_397, out ebp_398, out esi_399, out edi_400, out xmm0_401);
  9223.         Mem404[fp - 0x1C + 0x00:word32] = Mem394[esi_399 + 0x90:word32];
  9224.         word32 eax_405;
  9225.         word32 edx_406;
  9226.         word32 ebx_407;
  9227.         word32 ebp_408;
  9228.         word32 esi_409;
  9229.         word32 edi_410;
  9230.         word128 xmm0_411;
  9231.         fn004047EB(ebx_397, esi_399, edi_400, es, ds, out eax_405, out edx_406, out ebx_407, out ebp_408, out esi_409, out edi_410, out xmm0_411);
  9232.         Mem414[fp - 0x20 + 0x00:word32] = Mem404[esi_409 + 0x94:word32];
  9233.         word32 eax_415;
  9234.         word32 edx_416;
  9235.         word32 ebx_417;
  9236.         word32 ebp_418;
  9237.         word32 esi_419;
  9238.         word32 edi_420;
  9239.         word128 xmm0_421;
  9240.         fn004047EB(ebx_407, esi_409, edi_410, es, ds, out eax_415, out edx_416, out ebx_417, out ebp_418, out esi_419, out edi_420, out xmm0_421);
  9241.         Mem424[fp - 0x24 + 0x00:word32] = Mem414[esi_419 + 0x98:word32];
  9242.         word32 eax_425;
  9243.         word32 edx_426;
  9244.         word32 ebx_427;
  9245.         word32 ebp_428;
  9246.         word32 esi_429;
  9247.         word32 edi_430;
  9248.         word128 xmm0_431;
  9249.         fn004047EB(ebx_417, esi_419, edi_420, es, ds, out eax_425, out edx_426, out ebx_427, out ebp_428, out esi_429, out edi_430, out xmm0_431);
  9250.         Mem434[fp - 0x28 + 0x00:word32] = Mem424[esi_429 + 0x9C:word32];
  9251.         word32 eax_435;
  9252.         word32 edx_436;
  9253.         word32 ebx_437;
  9254.         word32 ebp_438;
  9255.         word32 esi_439;
  9256.         word32 edi_440;
  9257.         word128 xmm0_441;
  9258.         fn004047EB(ebx_427, esi_429, edi_430, es, ds, out eax_435, out edx_436, out ebx_437, out ebp_438, out esi_439, out edi_440, out xmm0_441);
  9259.         Mem444[fp - 44 + 0x00:word32] = Mem434[esi_439 + 0xA0:word32];
  9260.         word32 eax_445;
  9261.         word32 edx_446;
  9262.         word32 ebx_447;
  9263.         word32 ebp_448;
  9264.         word32 esi_449;
  9265.         word32 edi_450;
  9266.         word128 xmm0_451;
  9267.         fn004047EB(ebx_437, esi_439, edi_440, es, ds, out eax_445, out edx_446, out ebx_447, out ebp_448, out esi_449, out edi_450, out xmm0_451);
  9268.         Mem454[fp - 0x30 + 0x00:word32] = Mem444[esi_449 + 0xA4:word32];
  9269.         word32 eax_455;
  9270.         word32 edx_456;
  9271.         word32 ebx_457;
  9272.         word32 ebp_458;
  9273.         word32 esi_459;
  9274.         word32 edi_460;
  9275.         word128 xmm0_461;
  9276.         fn004047EB(ebx_447, esi_449, edi_450, es, ds, out eax_455, out edx_456, out ebx_457, out ebp_458, out esi_459, out edi_460, out xmm0_461);
  9277.         Mem464[fp - 0x34 + 0x00:word32] = Mem454[esi_459 + 0xA8:word32];
  9278.         word32 eax_465;
  9279.         word32 edx_466;
  9280.         word32 ebp_468;
  9281.         word32 esi_469;
  9282.         word32 edi_470;
  9283.         word128 xmm0_471;
  9284.         fn004047EB(ebx_457, esi_459, edi_460, es, ds, out eax_465, out edx_466, out ebx, out ebp_468, out esi_469, out edi_470, out xmm0_471);
  9285.     }
  9286.     return ebx;
  9287. }
  9288.  
  9289. word32 fn004081E8(word32 ebx, word32 edi, selector es, selector ds, word32 dwArg04)
  9290. {
  9291.     word32 edi_102 = edi;
  9292.     word32 esp_106 = fp - 0x08;
  9293.     word32 esi_101 = dwArg04;
  9294.     if (dwArg04 != 0x00)
  9295.     {
  9296.         if (Mem0[dwArg04 + 0x00:word32] != Mem0[0x0040DD68:word32])
  9297.         {
  9298.             word32 eax_97;
  9299.             word32 edx_98;
  9300.             word32 ebp_100;
  9301.             word128 xmm0_103;
  9302.             fn004047EB(ebx, dwArg04, edi, es, ds, out eax_97, out edx_98, out ebx, out ebp_100, out esi_101, out edi_102, out xmm0_103);
  9303.             esp_106 = fp - 0x08;
  9304.         }
  9305.         word32 eax_53 = Mem0[esi_101 + 0x04:word32];
  9306.         if (eax_53 != Mem0[0x0040DD6C:word32])
  9307.         {
  9308.             word32 esp_83 = esp_106 - 0x04;
  9309.             Mem84[esp_83 + 0x00:word32] = eax_53;
  9310.             word32 eax_85;
  9311.             word32 edx_86;
  9312.             word32 ebp_88;
  9313.             word128 xmm0_91;
  9314.             fn004047EB(ebx, esi_101, edi_102, es, ds, out eax_85, out edx_86, out ebx, out ebp_88, out esi_101, out edi_102, out xmm0_91);
  9315.             esp_106 = esp_83 + 0x04;
  9316.         }
  9317.         word32 esi_66 = Mem0[esi_101 + 0x08:word32];
  9318.         if (esi_66 != Mem0[0x0040DD70:word32])
  9319.         {
  9320.             Mem70[esp_106 - 0x04 + 0x00:word32] = esi_66;
  9321.             word32 eax_73;
  9322.             word32 edx_74;
  9323.             word32 ebp_76;
  9324.             word32 esi_77;
  9325.             word32 edi_78;
  9326.             word128 xmm0_79;
  9327.             fn004047EB(ebx, esi_66, edi_102, es, ds, out eax_73, out edx_74, out ebx, out ebp_76, out esi_77, out edi_78, out xmm0_79);
  9328.         }
  9329.     }
  9330.     return ebx;
  9331. }
  9332.  
  9333. word32 fn0040822D(word32 ebx, word32 edi, selector es, selector ds, word32 dwArg04)
  9334. {
  9335.     word32 edi_107 = edi;
  9336.     word32 esp_100 = fp - 0x08;
  9337.     word32 esi_111 = dwArg04;
  9338.     if (dwArg04 != 0x00)
  9339.     {
  9340.         if (Mem0[dwArg04 + 0x0C:word32] != Mem0[0x0040DD74:word32])
  9341.         {
  9342.             word32 eax_193;
  9343.             word32 edx_194;
  9344.             word32 ebp_196;
  9345.             word128 xmm0_199;
  9346.             fn004047EB(ebx, dwArg04, edi, es, ds, out eax_193, out edx_194, out ebx, out ebp_196, out esi_111, out edi_107, out xmm0_199);
  9347.             esp_100 = fp - 0x08;
  9348.         }
  9349.         word32 eax_53 = Mem0[esi_111 + 0x10:word32];
  9350.         if (eax_53 != Mem0[4251000:word32])
  9351.         {
  9352.             word32 esp_179 = esp_100 - 0x04;
  9353.             Mem180[esp_179 + 0x00:word32] = eax_53;
  9354.             word32 eax_181;
  9355.             word32 edx_182;
  9356.             word32 ebp_184;
  9357.             word128 xmm0_187;
  9358.             fn004047EB(ebx, esi_111, edi_107, es, ds, out eax_181, out edx_182, out ebx, out ebp_184, out esi_111, out edi_107, out xmm0_187);
  9359.             esp_100 = esp_179 + 0x04;
  9360.         }
  9361.         word32 eax_65 = Mem0[esi_111 + 0x14:word32];
  9362.         if (eax_65 != Mem0[0x0040DD7C:word32])
  9363.         {
  9364.             word32 esp_167 = esp_100 - 0x04;
  9365.             Mem168[esp_167 + 0x00:word32] = eax_65;
  9366.             word32 eax_169;
  9367.             word32 edx_170;
  9368.             word32 ebp_172;
  9369.             word128 xmm0_175;
  9370.             fn004047EB(ebx, esi_111, edi_107, es, ds, out eax_169, out edx_170, out ebx, out ebp_172, out esi_111, out edi_107, out xmm0_175);
  9371.             esp_100 = esp_167 + 0x04;
  9372.         }
  9373.         word32 eax_77 = Mem0[esi_111 + 0x18:word32];
  9374.         if (eax_77 != Mem0[0x0040DD80:word32])
  9375.         {
  9376.             word32 esp_155 = esp_100 - 0x04;
  9377.             Mem156[esp_155 + 0x00:word32] = eax_77;
  9378.             word32 eax_157;
  9379.             word32 edx_158;
  9380.             word32 ebp_160;
  9381.             word128 xmm0_163;
  9382.             fn004047EB(ebx, esi_111, edi_107, es, ds, out eax_157, out edx_158, out ebx, out ebp_160, out esi_111, out edi_107, out xmm0_163);
  9383.             esp_100 = esp_155 + 0x04;
  9384.         }
  9385.         word32 eax_89 = Mem0[esi_111 + 0x1C:word32];
  9386.         if (eax_89 != Mem0[0x0040DD84:word32])
  9387.         {
  9388.             word32 esp_143 = esp_100 - 0x04;
  9389.             Mem144[esp_143 + 0x00:word32] = eax_89;
  9390.             word32 eax_145;
  9391.             word32 edx_146;
  9392.             word32 ebp_148;
  9393.             word128 xmm0_151;
  9394.             fn004047EB(ebx, esi_111, edi_107, es, ds, out eax_145, out edx_146, out ebx, out ebp_148, out esi_111, out edi_107, out xmm0_151);
  9395.             esp_100 = esp_143 + 0x04;
  9396.         }
  9397.         word32 eax_101 = Mem0[esi_111 + 0x20:word32];
  9398.         if (eax_101 != Mem0[0x0040DD88:word32])
  9399.         {
  9400.             word32 esp_131 = esp_100 - 0x04;
  9401.             Mem132[esp_131 + 0x00:word32] = eax_101;
  9402.             word32 eax_133;
  9403.             word32 edx_134;
  9404.             word32 ebp_136;
  9405.             word128 xmm0_139;
  9406.             fn004047EB(ebx, esi_111, edi_107, es, ds, out eax_133, out edx_134, out ebx, out ebp_136, out esi_111, out edi_107, out xmm0_139);
  9407.             esp_100 = esp_131 + 0x04;
  9408.         }
  9409.         word32 esi_114 = Mem0[esi_111 + 0x24:word32];
  9410.         if (esi_114 != Mem0[0x0040DD8C:word32])
  9411.         {
  9412.             Mem118[esp_100 - 0x04 + 0x00:word32] = esi_114;
  9413.             word32 eax_121;
  9414.             word32 edx_122;
  9415.             word32 ebp_124;
  9416.             word32 esi_125;
  9417.             word32 edi_126;
  9418.             word128 xmm0_127;
  9419.             fn004047EB(ebx, esi_114, edi_107, es, ds, out eax_121, out edx_122, out ebx, out ebp_124, out esi_125, out edi_126, out xmm0_127);
  9420.         }
  9421.     }
  9422.     return ebx;
  9423. }
  9424.  
  9425. word32 fn004083E9(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & edxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & ediOut, ptr32 & xmm0Out)
  9426. {
  9427.     *xmm0Out = xmm0;
  9428.     *edxOut = edx;
  9429.     word32 ebp_10;
  9430.     fn00402F20(ebx, esi, edi, dwLoc0C, 4241424, 0x0C, out ebp_10);
  9431.     Mem14[ebp_10 - 0x1C + 0x00:word32] = Mem0[ebp_10 - 0x1C + 0x00:word32] & 0x00;
  9432.     word32 esi_16 = Mem14[ebp_10 + 0x08:word32];
  9433.     if (esi_16 <=u Mem14[4254060:word32])
  9434.     {
  9435.         Mem46[fp - 0x0C + 0x00:word32] = 0x04;
  9436.         word32 edx_49;
  9437.         word32 ebx_50;
  9438.         word128 xmm0_51;
  9439.         fn00405B56(ebx, edi, es, ds, dwArg00, out edx_49, out ebx_50, out xmm0_51);
  9440.         Mem56[ebp_10 - 0x04 + 0x00:word32] = Mem46[ebp_10 - 0x04 + 0x00:word32] & 0x00;
  9441.         Mem60[fp - 0x0C + 0x00:word32] = esi_16;
  9442.         word32 edx_62;
  9443.         Mem66[ebp_10 - 0x1C + 0x00:word32] = fn00406FF7(edx_49, esi_16, dwArg00, bArg03, out edx_62);
  9444.         Mem67[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  9445.         fn0040842F();
  9446.     }
  9447.     word32 eax_31 = Mem14[ebp_10 - 0x1C + 0x00:word32];
  9448.     word32 ebp_36;
  9449.     word32 esi_37;
  9450.     word32 edi_38;
  9451.     fn00402F65(ebp_10, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_36, out esi_37, out edi_38);
  9452.     return eax_31;
  9453. }
  9454.  
  9455. void fn0040842F()
  9456. {
  9457.     fn00405A7C(0x04);
  9458.     return;
  9459. }
  9460.  
  9461. word32 fn00408438(word32 ebx, word32 ebp, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  9462. {
  9463. fn00408438_entry:
  9464.     word32 eax_117
  9465.     word32 esi_12 = dwArg04
  9466.     branch dwArg04 >u ~0x1F l004084EB
  9467.     goto l0040844A
  9468. l00408438:
  9469. l0040844A:
  9470.     word32 esp_113 = fp - 0x10
  9471.     word32 edi_169 = HeapAlloc
  9472. l00408452:
  9473.     branch Mem0[4252540:word32] != 0x00 l00408473
  9474. l0040845B:
  9475.     word32 ebp_234 = fn0040204F(ebx, es, ds)
  9476.     word32 esp_235 = esp_113 - 0x04
  9477.     Mem236[esp_235 + 0x00:word32] = 0x1E
  9478.     word32 edx_238
  9479.     byte bl_239
  9480.     word128 xmm0_240
  9481.     fn00401EA4(ebp_234, es, ds, dwArg00, out edx_238, out bl_239, out xmm0_240)
  9482.     Mem243[esp_235 - 0x04 + 0x00:word32] = 0xFF
  9483.     fn00401BF0(dwArg00)
  9484.     esp_113 = esp_235 + 0x04
  9485. l00408473:
  9486.     word32 esp_163
  9487.     word32 ebp_132
  9488.     word32 eax_177
  9489.     word32 eax_82 = Mem0[0x0040F9A8:word32]
  9490.     branch eax_82 != 0x01 l0040848B
  9491. l0040847D:
  9492.     word32 eax_191
  9493.     branch esi_12 == 0x00 l00408485
  9494. l00408481:
  9495.     eax_191 = esi_12
  9496.     goto l00408488
  9497. l00408485:
  9498.     eax_191 = 0x01
  9499. l00408488:
  9500.     esp_163 = esp_113 - 0x04
  9501.     Mem193[esp_163 + 0x00:word32] = eax_191
  9502.     goto l004084A7
  9503. l0040848B:
  9504.     word32 esi_208
  9505.     esi_208 = esi_12
  9506.     branch eax_82 != 0x03 l0040849B
  9507. l00408490:
  9508.     word32 esp_221 = esp_113 - 0x04
  9509.     Mem222[esp_221 + 0x00:word32] = esi_12
  9510.     word32 edx_223
  9511.     word128 xmm0_227
  9512.     eax_177 = fn004083E9(ebx, esi_12, edi_169, es, ds, out edx_223, out ebp_132, out esi_208, out edi_169, out xmm0_227)
  9513.     esp_113 = esp_221 + 0x04
  9514.     branch eax_177 != 0x00 l004084B1
  9515. l0040849B:
  9516.     branch esi_208 != 0x00 l004084A0
  9517. l0040849F:
  9518.     esi_208 = esi_208 + 0x01
  9519. l004084A0:
  9520.     esp_163 = esp_113 - 0x04
  9521.     Mem218[esp_163 + 0x00:word32] = esi_208 + 0x0F & ~0x0F
  9522. l004084A7:
  9523.     word32 esp_164 = esp_163 - 0x04
  9524.     Mem165[esp_164 + 0x00:word32] = 0x00
  9525.     Mem167[esp_164 - 0x04 + 0x00:word32] = Mem165[4252540:word32]
  9526.     word32 esi_171
  9527.     byte SCZO_172
  9528.     byte CZ_173
  9529.     word32 ebx_174
  9530.     byte Z_175
  9531.     word32 ecx_176
  9532.     byte SZO_178
  9533.     byte C_179
  9534.     word32 edx_182
  9535.     word128 xmm0_183
  9536.     bool D_184
  9537.     byte bl_185
  9538.     call edi_169 (retsize: 4; depth: 4)
  9539.         uses: bl_79,C_62,CZ_59,D_78,ds_57,dwLoc04_6,dwLoc08_10,dwLoc0C_43,dwLoc10_45,eax_82,ebp_80,ebx_68,ecx_75,edi_66,edx_76,es_58,esi_72,esp_166,SCZO_83,SZO_61,xmm0_77,Z_84
  9540.         defs: bl_185,C_179,CZ_173,D_184,ds_181,eax_177,ebp_170,ebx_174,ecx_176,edi_169,edx_182,es_180,esi_171,esp_168,SCZO_172,SZO_178,xmm0_183,Z_175
  9541. l004084B1:
  9542.     ebx = eax_177
  9543.     branch eax_177 != 0x00 l004084E5
  9544. l004084B7:
  9545.     word32 esi_134
  9546.     word32 esp_121 = esp_113 - 0x04
  9547.     Mem122[esp_121 + 0x00:word32] = 0x0C
  9548.     word32 esi_123 = Mem122[esp_121 + 0x00:word32]
  9549.     esp_113 = esp_121 + 0x04
  9550.     branch Mem122[4254040:word32] == eax_177 l004084D7
  9551. l004084C2:
  9552.     Mem145[esp_121 + 0x00:word32] = Mem122[ebp_132 + 0x08:word32]
  9553.     esp_113 = esp_121 + 0x04
  9554.     branch fn004060CB(out esi_134) == 0x00 l004084DE
  9555. l004084CF:
  9556.     esi_12 = Mem145[ebp_132 + 0x08:word32]
  9557.     goto l00408452
  9558. l004084D7:
  9559.     word32 eax_154
  9560.     word32 edx_155
  9561.     word32 edi_159
  9562.     word128 xmm0_160
  9563.     fn0040197F(eax_177, ebp_132, esi_123, es, ds, out eax_154, out edx_155, out ebx, out ebp_132, out esi_134, out edi_159, out xmm0_160)
  9564.     Mem162[eax_154 + 0x00:word32] = esi_134
  9565. l004084DE:
  9566.     word32 eax_135
  9567.     word32 edx_136
  9568.     word32 ebp_138
  9569.     word32 esi_139
  9570.     word32 edi_140
  9571.     word128 xmm0_141
  9572.     fn0040197F(ebx, ebp_132, esi_134, es, ds, out eax_135, out edx_136, out ebx, out ebp_138, out esi_139, out edi_140, out xmm0_141)
  9573.     Mem143[eax_135 + 0x00:word32] = esi_139
  9574. l004084E5:
  9575.     eax_117 = ebx
  9576.     word32 ebx_118
  9577.     *ebxOut = Mem0[esp_113 + 0x04:word32]
  9578.     goto l004084FF
  9579. l004084EB:
  9580.     word32 esi_250
  9581.     fn004060CB(out esi_250)
  9582.     word32 eax_254
  9583.     word32 edx_255
  9584.     word32 ebx_256
  9585.     word32 ebp_257
  9586.     word32 esi_258
  9587.     word32 edi_259
  9588.     word128 xmm0_260
  9589.     fn0040197F(ebx, fp - 0x04, esi_250, es, ds, out eax_254, out edx_255, out ebx_256, out ebp_257, out esi_258, out edi_259, out xmm0_260)
  9590.     Mem262[eax_254 + 0x00:word32] = 0x0C
  9591.     eax_117 = 0x00
  9592. l004084FF:
  9593.     return eax_117
  9594. fn00408438_exit:
  9595. }
  9596.  
  9597. bool fn00408502(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & eaxOut, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut, ptr32 & xmm0Out)
  9598. {
  9599.     *edxOut = edx;
  9600.     *xmm0Out = xmm0;
  9601.     word32 ebp_10;
  9602.     fn00402F20(ebx, esi, edi, dwLoc0C, 0x0040B830, 0x0C, out ebp_10);
  9603.     word32 esp_111 = fp - 0x08;
  9604.     word32 ecx_15 = Mem0[ebp_10 + 0x08:word32];
  9605.     word32 edi_115 = 0x00;
  9606.     if (ecx_15 >u 0x00)
  9607.     {
  9608.         Mem234[fp - 0x0C + 0x00:word32] = ~0x1F;
  9609.         word32 eax_235 = Mem234[fp - 0x0C + 0x00:word32];
  9610.         word32 edx_239 = SEQ(0x00, eax_235) % ecx_15;
  9611.         *edxOut = edx_239;
  9612.         esp_111 = fp - 0x08;
  9613.         if (0x00 - (SEQ(edx_239, eax_235) /u ecx_15 <u Mem234[ebp_10 + 0x0C:word32]) == 0x01)
  9614.         {
  9615.             word32 eax_250;
  9616.             word32 edx_251;
  9617.             word32 ebx_252;
  9618.             word32 esi_254;
  9619.             word32 edi_255;
  9620.             word128 xmm0_256;
  9621.             D = fn0040197F(ebx, ebp_10, esi, es, ds, out eax_250, out edx_251, out ebx_252, out ebp_10, out esi_254, out edi_255, out xmm0_256);
  9622.             Mem258[eax_250 + 0x00:word32] = 0x0C;
  9623.             Mem260[fp - 0x0C + 0x00:word32] = edi_255;
  9624.             Mem262[fp - 0x10 + 0x00:word32] = edi_255;
  9625.             Mem264[fp - 0x14 + 0x00:word32] = edi_255;
  9626.             Mem266[fp - 0x18 + 0x00:word32] = edi_255;
  9627.             Mem268[fp - 0x1C + 0x00:word32] = edi_255;
  9628.             word32 edx_269;
  9629.             word32 ebx_270;
  9630.             word32 esi_271;
  9631.             fn00401917(es, ds, xmm0_256, out edx_269, out ebx_270, out esi_271);
  9632.             goto l0040853E;
  9633.         }
  9634.     }
  9635.     word32 ecx_70 = ecx_15 *s Mem0[ebp_10 + 0x0C:word32];
  9636.     Mem72[ebp_10 + 0x08:word32] = ecx_70;
  9637.     word32 esi_114 = ecx_70;
  9638.     if (ecx_70 == 0x00)
  9639.         esi_114 = 0x01;
  9640. l00408555:
  9641.     Mem90[ebp_10 - 0x1C + 0x00:word32] = 0x00;
  9642.     word32 ebx_103 = 0x00;
  9643.     if (esi_114 >u ~0x1F)
  9644.     {
  9645. l004085C8:
  9646.         if (ebx_103 == edi_115)
  9647.         {
  9648.             if (Mem90[4254040:word32] != edi_115)
  9649.             {
  9650.                 word32 esp_121 = esp_111 - 0x04;
  9651.                 Mem122[esp_121 + 0x00:word32] = esi_114;
  9652.                 esp_111 = esp_121 + 0x04;
  9653.                 if (fn004060CB(out esi_114) != 0x00)
  9654.                     goto l00408555;
  9655.                 word32 eax_131 = Mem122[ebp_10 + 0x10:word32];
  9656.                 if (eax_131 != edi_115)
  9657.                     Mem135[eax_131 + 0x00:word32] = 0x0C;
  9658. l0040853E:
  9659.                 word32 eax_60;
  9660.                 *eaxOut = 0x00;
  9661. l0040861A:
  9662.                 word32 ebp_38;
  9663.                 word32 esi_39;
  9664.                 word32 edi_40;
  9665.                 word32 ebx_41;
  9666.                 *ebxOut = fn00402F65(ebp_10, 0x0C, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_38, out esi_39, out edi_40);
  9667.                 return D;
  9668.             }
  9669.             if (ebx_103 == edi_115)
  9670.             {
  9671.                 word32 eax_138 = Mem90[ebp_10 + 0x10:word32];
  9672.                 if (eax_138 != edi_115)
  9673.                     Mem142[eax_138 + 0x00:word32] = 0x0C;
  9674.             }
  9675.         }
  9676.         goto l00408618;
  9677.     }
  9678.     if (Mem90[0x0040F9A8:word32] == 0x03)
  9679.     {
  9680.         word32 esi_186 = esi_114 + 0x0F;
  9681.         Mem188[ebp_10 + 0x0C:word32] = esi_186 & ~0x0F;
  9682.         esi_114 = esi_186 & ~0x0F;
  9683.         if (Mem188[ebp_10 + 0x08:word32] <=u Mem188[4254060:word32])
  9684.         {
  9685.             word32 esp_193 = esp_111 - 0x04;
  9686.             Mem194[esp_193 + 0x00:word32] = 0x04;
  9687.             word32 edx_197;
  9688.             word32 ebx_198;
  9689.             word128 xmm0_199;
  9690.             D = fn00405B56(0x00, edi_115, es, ds, dwArg00, out edx_197, out ebx_198, out xmm0_199);
  9691.             Mem203[ebp_10 - 0x04 + 0x00:word32] = edi_115;
  9692.             Mem205[esp_193 + 0x00:word32] = Mem203[ebp_10 + 0x08:word32];
  9693.             word32 edx_207;
  9694.             Mem212[ebp_10 - 0x1C + 0x00:word32] = fn00406FF7(edx_197, esi_186 & ~0x0F, dwArg00, bArg03, out edx_207);
  9695.             Mem213[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  9696.             fn004085FE();
  9697.             esp_111 = esp_193 + 0x04;
  9698.             ebx_103 = Mem213[ebp_10 - 0x1C + 0x00:word32];
  9699.             if (ebx_103 == edi_115)
  9700.             {
  9701. l004085B7:
  9702.                 word32 esp_155 = esp_111 - 0x04;
  9703.                 Mem156[esp_155 + 0x00:word32] = esi_114;
  9704.                 Mem158[esp_155 - 0x04 + 0x00:word32] = 0x08;
  9705.                 Mem160[esp_155 - 0x08 + 0x00:word32] = Mem158[4252540:word32];
  9706.                 HeapAlloc(Mem160[esp_155 - 0x08 + 0x00:HANDLE], Mem160[esp_155 - 0x04 + 0x00:DWORD], Mem160[esp_155 + 0x00:SIZE_T]);
  9707.                 Mem164[esp_155 + 0x00:word32] = esi_114;
  9708.                 Mem166[esp_155 - 0x04 + 0x00:word32] = 0x08;
  9709.                 Mem168[esp_155 - 0x08 + 0x00:word32] = Mem166[4252540:word32];
  9710.                 esp_111 = esp_155 + 0x04;
  9711.                 ebx_103 = HeapAlloc(Mem168[esp_155 - 0x08 + 0x00:HANDLE], Mem168[esp_155 - 0x04 + 0x00:DWORD], Mem168[esp_155 + 0x00:SIZE_T]);
  9712.                 goto l004085C8;
  9713.             }
  9714.             Mem218[esp_193 + 0x00:word32] = Mem213[ebp_10 + 0x08:word32];
  9715.             Mem220[esp_193 - 0x04 + 0x00:word32] = edi_115;
  9716.             Mem222[esp_193 - 0x08 + 0x00:word32] = ebx_103;
  9717.             word32 edx_223;
  9718.             fn00404CA0(xmm0_199, 0x0C, dwArg00, dwArg04, dwArg08, out edx_223, out edi_115);
  9719.             esp_111 = esp_193 + 0x04;
  9720.         }
  9721.     }
  9722.     if (ebx_103 != edi_115)
  9723.     {
  9724. l00408618:
  9725.         word32 eax_104;
  9726.         *eaxOut = ebx_103;
  9727.         goto l0040861A;
  9728.     }
  9729.     goto l004085B7;
  9730. }
  9731.  
  9732. void fn004085FE()
  9733. {
  9734.     fn00405A7C(0x04);
  9735.     return;
  9736. }
  9737.  
  9738. word32 fn00408620(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut, ptr32 & esiOut)
  9739. {
  9740.     word32 eax_149;
  9741.     word32 ebp_10;
  9742.     fn00402F20(ebx, esi, edi, dwLoc0C, 4241488, 0x10, out ebp_10);
  9743.     word32 esp_176 = fp - 0x08;
  9744.     word32 ebx_13 = Mem0[ebp_10 + 0x08:word32];
  9745.     if (ebx_13 == 0x00)
  9746.     {
  9747.         Mem41[fp - 0x0C + 0x00:word32] = Mem0[ebp_10 + 0x0C:word32];
  9748.         word32 edx_44;
  9749.         word32 ebx_45;
  9750.         word128 xmm0_46;
  9751.         eax_149 = fn00408438(ebx_13, ebp_10, es, ds, dwArg00, out edx_44, out ebx_45, out xmm0_46);
  9752.         goto l0040880D;
  9753.     }
  9754.     word32 esi_178 = Mem0[ebp_10 + 0x0C:word32];
  9755.     if (esi_178 == 0x00)
  9756.     {
  9757.         Mem73[fp - 0x0C + 0x00:word32] = ebx_13;
  9758.         word32 eax_74;
  9759.         word32 edx_75;
  9760.         word32 ebx_76;
  9761.         word32 esi_78;
  9762.         word32 edi_79;
  9763.         word128 xmm0_80;
  9764.         fn004047EB(ebx_13, esi_178, edi, es, ds, out eax_74, out edx_75, out ebx_76, out ebp_10, out esi_78, out edi_79, out xmm0_80);
  9765.         goto l0040880B;
  9766.     }
  9767.     word32 esp_159;
  9768.     word32 edi_147;
  9769.     word32 eax_158;
  9770.     word32 eax_126;
  9771.     if (Mem0[0x0040F9A8:word32] != 0x03)
  9772.     {
  9773. l004087F4:
  9774.         if (esi_178 >u ~0x1F)
  9775.         {
  9776. l004087F9:
  9777.             word32 esp_180 = esp_176 - 0x04;
  9778.             Mem181[esp_180 + 0x00:word32] = esi_178;
  9779.             word32 esi_182;
  9780.             fn004060CB(out esi_182);
  9781.             word32 eax_186;
  9782.             word32 edx_187;
  9783.             word32 ebx_188;
  9784.             word32 ebp_189;
  9785.             word32 esi_190;
  9786.             word32 edi_191;
  9787.             word128 xmm0_192;
  9788.             fn0040197F(ebx_13, ebp_10, esi_182, es, ds, out eax_186, out edx_187, out ebx_188, out ebp_189, out esi_190, out edi_191, out xmm0_192);
  9789.             Mem195[esp_180 + 0x00:word32] = esi_190;
  9790.             word32 esi_196;
  9791.             fn004060CB(out esi_196);
  9792.             word32 edx_201;
  9793.             word32 ebx_202;
  9794.             word32 esi_204;
  9795.             word32 edi_205;
  9796.             word128 xmm0_206;
  9797.             fn0040197F(ebx_188, ebp_189, esi_196, es, ds, out eax_126, out edx_201, out ebx_202, out ebp_10, out esi_204, out edi_205, out xmm0_206);
  9798.             goto l00408805;
  9799.         }
  9800.         if (esi_178 == 0x00)
  9801.             esi_178 = esi_178 + 0x01;
  9802.         word32 esp_455 = esp_176 - 0x04;
  9803.         Mem456[esp_455 + 0x00:word32] = esi_178;
  9804.         Mem458[esp_455 - 0x04 + 0x00:word32] = ebx_13;
  9805.         Mem460[esp_455 - 0x08 + 0x00:word32] = 0x00;
  9806.         Mem462[esp_455 - 0x0C + 0x00:word32] = Mem460[4252540:word32];
  9807.         word32 eax_463 = HeapReAlloc(Mem462[esp_455 - 0x0C + 0x00:HANDLE], Mem462[esp_455 - 0x08 + 0x00:DWORD], Mem462[esp_455 - 0x04 + 0x00:LPVOID], Mem462[esp_455 + 0x00:SIZE_T]);
  9808.         esp_159 = esp_455 + 0x04;
  9809.         edi_147 = eax_463;
  9810.         if (eax_463 == 0x00)
  9811.         {
  9812.             if (Mem462[4254040:word32] != eax_463)
  9813.             {
  9814.                 Mem472[esp_455 + 0x00:word32] = esi_178;
  9815.                 esp_176 = esp_455 + 0x04;
  9816.                 if (fn004060CB(out esi_178) != 0x00)
  9817.                     goto l004087F4;
  9818.                 word32 edx_481;
  9819.                 word32 ebx_482;
  9820.                 word32 esi_484;
  9821.                 word32 edi_485;
  9822.                 word128 xmm0_486;
  9823.                 fn0040197F(ebx_13, ebp_10, esi_178, es, ds, out eax_126, out edx_481, out ebx_482, out ebp_10, out esi_484, out edi_485, out xmm0_486);
  9824.                 goto l00408799;
  9825.             }
  9826.             if (eax_463 == 0x00)
  9827.             {
  9828.                 word32 edx_492;
  9829.                 word32 ebx_493;
  9830.                 word32 esi_495;
  9831.                 word128 xmm0_497;
  9832.                 fn0040197F(ebx_13, ebp_10, esi_178, es, ds, out eax_158, out edx_492, out ebx_493, out ebp_10, out esi_495, out edi_147, out xmm0_497);
  9833. l00408826:
  9834.                 Mem166[esp_159 - 0x04 + 0x00:word32] = GetLastError();
  9835.                 Mem168[eax_158 + 0x00:word32] = fn0040193D(dwArg00);
  9836.             }
  9837.         }
  9838. l00408837:
  9839.         eax_149 = edi_147;
  9840.         goto l0040880D;
  9841.     }
  9842.     else
  9843.     {
  9844. l00408661:
  9845.         Mem221[ebp_10 - 0x1C + 0x00:word32] = 0x00;
  9846.         word32 edi_220 = 0x00;
  9847.         if (esi_178 >u ~0x1F)
  9848.             goto l004087F9;
  9849.         word32 esp_224 = esp_176 - 0x04;
  9850.         Mem225[esp_224 + 0x00:word32] = 0x04;
  9851.         word32 edx_226;
  9852.         word128 xmm0_228;
  9853.         fn00405B56(ebx_13, 0x00, es, ds, dwArg00, out edx_226, out ebx_13, out xmm0_228);
  9854.         Mem232[ebp_10 - 0x04 + 0x00:word32] = 0x00;
  9855.         Mem234[esp_224 + 0x00:word32] = ebx_13;
  9856.         word32 edx_235;
  9857.         word32 eax_236 = fn00406815(dwArg00, out edx_235);
  9858.         Mem239[ebp_10 - 0x20 + 0x00:word32] = eax_236;
  9859.         esp_159 = esp_224 + 0x04;
  9860.         if (eax_236 != 0x00)
  9861.         {
  9862.             if (esi_178 <=u Mem239[4254060:word32])
  9863.             {
  9864.                 Mem387[esp_224 + 0x00:word32] = esi_178;
  9865.                 Mem389[esp_224 - 0x04 + 0x00:word32] = ebx_13;
  9866.                 Mem391[esp_224 - 0x08 + 0x00:word32] = eax_236;
  9867.                 esp_159 = esp_224 + 0x04;
  9868.                 word32 edx_393;
  9869.                 if (fn00406D13(dwArg00, dwArg04, bArg07, dwArg08, bArg0B, out edx_393) != 0x00)
  9870.                     Mem399[ebp_10 - 0x1C + 0x00:word32] = ebx_13;
  9871.                 else
  9872.                 {
  9873.                     Mem401[esp_224 + 0x00:word32] = esi_178;
  9874.                     word32 edx_403;
  9875.                     word32 eax_404 = fn00406FF7(edx_393, esi_178, dwArg00, bArg03, out edx_403);
  9876.                     Mem407[ebp_10 - 0x1C + 0x00:word32] = eax_404;
  9877.                     esp_159 = esp_224 + 0x04;
  9878.                     if (eax_404 != 0x00)
  9879.                     {
  9880.                         word32 eax_410 = Mem407[ebx_13 - 0x04 + 0x00:word32];
  9881.                         word32 eax_411 = eax_410 - 0x01;
  9882.                         if (eax_410 - 0x01 >=u esi_178)
  9883.                             eax_411 = esi_178;
  9884.                         Mem416[esp_224 + 0x00:word32] = eax_411;
  9885.                         Mem418[esp_224 - 0x04 + 0x00:word32] = ebx_13;
  9886.                         Mem420[esp_224 - 0x08 + 0x00:word32] = Mem418[ebp_10 - 0x1C + 0x00:word32];
  9887.                         ebp_10 = fn004064B0(ebp_10, dwArg00, dwArg04, dwArg08, out esi_178, out edi_220);
  9888.                         Mem425[esp_224 - 0x0C + 0x00:word32] = ebx_13;
  9889.                         word32 edx_426;
  9890.                         word32 eax_427 = fn00406815(dwArg00, out edx_426);
  9891.                         Mem428[ebp_10 - 0x20 + 0x00:word32] = eax_427;
  9892.                         Mem430[esp_224 - 0x10 + 0x00:word32] = ebx_13;
  9893.                         Mem432[esp_224 - 0x14 + 0x00:word32] = eax_427;
  9894.                         word32 edx_433;
  9895.                         word128 xmm0_434;
  9896.                         fn00406845(dwArg00, dwArg04, bArg07, out edx_433, out xmm0_434);
  9897.                         esp_159 = esp_224 + 0x04;
  9898.                     }
  9899.                 }
  9900.             }
  9901.             if (Mem239[ebp_10 - 0x1C + 0x00:word32] == edi_220)
  9902.             {
  9903.                 if (esi_178 == edi_220)
  9904.                 {
  9905.                     Mem385[ebp_10 + 0x0C:word32] = 0x01;
  9906.                     esi_178 = 0x01;
  9907.                 }
  9908.                 word32 esi_342 = esi_178 + 0x0F;
  9909.                 Mem344[ebp_10 + 0x0C:word32] = esi_342 & ~0x0F;
  9910.                 word32 esp_345 = esp_159 - 0x04;
  9911.                 Mem346[esp_345 + 0x00:word32] = esi_342 & ~0x0F;
  9912.                 Mem348[esp_345 - 0x04 + 0x00:word32] = edi_220;
  9913.                 Mem350[esp_345 - 0x08 + 0x00:word32] = Mem348[4252540:word32];
  9914.                 word32 eax_351 = HeapAlloc(Mem350[esp_345 - 0x08 + 0x00:HANDLE], Mem350[esp_345 - 0x04 + 0x00:DWORD], Mem350[esp_345 + 0x00:SIZE_T]);
  9915.                 Mem353[ebp_10 - 0x1C + 0x00:word32] = eax_351;
  9916.                 esi_178 = esi_342 & ~0x0F;
  9917.                 esp_159 = esp_345 + 0x04;
  9918.                 if (eax_351 != edi_220)
  9919.                 {
  9920.                     word32 eax_356 = Mem353[ebx_13 - 0x04 + 0x00:word32];
  9921.                     word32 eax_357 = eax_356 - 0x01;
  9922.                     if (eax_356 - 0x01 >=u (esi_342 & ~0x0F))
  9923.                         eax_357 = esi_342 & ~0x0F;
  9924.                     Mem362[esp_345 + 0x00:word32] = eax_357;
  9925.                     Mem364[esp_345 - 0x04 + 0x00:word32] = ebx_13;
  9926.                     Mem366[esp_345 - 0x08 + 0x00:word32] = Mem364[ebp_10 - 0x1C + 0x00:word32];
  9927.                     word32 edi_368;
  9928.                     ebp_10 = fn004064B0(ebp_10, dwArg00, dwArg04, dwArg08, out esi_178, out edi_368);
  9929.                     Mem371[esp_345 - 0x0C + 0x00:word32] = ebx_13;
  9930.                     Mem373[esp_345 - 0x10 + 0x00:word32] = Mem371[ebp_10 - 0x20 + 0x00:word32];
  9931.                     word32 edx_375;
  9932.                     word128 xmm0_376;
  9933.                     fn00406845(dwArg00, dwArg04, bArg07, out edx_375, out xmm0_376);
  9934.                     esp_159 = esp_345 + 0x04;
  9935.                 }
  9936.             }
  9937.         }
  9938.         Mem254[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  9939.         fn00408764();
  9940.         if (Mem254[ebp_10 - 0x20 + 0x00:word32] == 0x00)
  9941.         {
  9942.             if (esi_178 == 0x00)
  9943.                 esi_178 = esi_178 + 0x01;
  9944.             word32 esi_303 = esi_178 + 0x0F;
  9945.             Mem307[ebp_10 + 0x0C:word32] = esi_303 & ~0x0F;
  9946.             word32 esp_308 = esp_159 - 0x04;
  9947.             Mem309[esp_308 + 0x00:word32] = esi_303 & ~0x0F;
  9948.             Mem311[esp_308 - 0x04 + 0x00:word32] = ebx_13;
  9949.             Mem313[esp_308 - 0x08 + 0x00:word32] = 0x00;
  9950.             Mem315[esp_308 - 0x0C + 0x00:word32] = Mem313[4252540:word32];
  9951.             esi_178 = esi_303 & ~0x0F;
  9952.             esp_159 = esp_308 + 0x04;
  9953.             edi_147 = HeapReAlloc(Mem315[esp_308 - 0x0C + 0x00:HANDLE], Mem315[esp_308 - 0x08 + 0x00:DWORD], Mem315[esp_308 - 0x04 + 0x00:LPVOID], Mem315[esp_308 + 0x00:SIZE_T]);
  9954.         }
  9955.         else
  9956.             edi_147 = Mem254[ebp_10 - 0x1C + 0x00:word32];
  9957.         if (edi_147 != 0x00)
  9958.             goto l00408837;
  9959.         if (Mem254[4254040:word32] == edi_147)
  9960.         {
  9961.             if (edi_147 != 0x00)
  9962.                 goto l00408837;
  9963.             word32 edx_289;
  9964.             word32 ebx_290;
  9965.             word32 esi_292;
  9966.             word128 xmm0_294;
  9967.             fn0040197F(ebx_13, ebp_10, esi_178, es, ds, out eax_158, out edx_289, out ebx_290, out ebp_10, out esi_292, out edi_147, out xmm0_294);
  9968.             if (Mem254[ebp_10 - 0x20 + 0x00:word32] == edi_147)
  9969.                 goto l00408826;
  9970.             Mem298[eax_158 + 0x00:word32] = 0x0C;
  9971.             goto l00408837;
  9972.         }
  9973.         word32 esp_266 = esp_159 - 0x04;
  9974.         Mem267[esp_266 + 0x00:word32] = esi_178;
  9975.         esp_176 = esp_266 + 0x04;
  9976.         if (fn004060CB(out esi_178) != 0x00)
  9977.             goto l00408661;
  9978.         word32 edx_276;
  9979.         word32 ebx_277;
  9980.         word32 esi_279;
  9981.         word32 edi_280;
  9982.         word128 xmm0_281;
  9983.         fn0040197F(ebx_13, ebp_10, esi_178, es, ds, out eax_126, out edx_276, out ebx_277, out ebp_10, out esi_279, out edi_280, out xmm0_281);
  9984.         if (Mem267[ebp_10 - 0x20 + 0x00:word32] != edi_280)
  9985.         {
  9986. l00408805:
  9987.             Mem133[eax_126 + 0x00:word32] = 0x0C;
  9988.             Mem134[eax_126 + 0x00:word32] = 0x0C;
  9989. l0040880B:
  9990.             eax_149 = 0x00;
  9991. l0040880D:
  9992.             word32 ebp_33;
  9993.             word32 esi_34;
  9994.             word32 edi_35;
  9995.             word32 ebx_36;
  9996.             *ebxOut = fn00402F65(ebp_10, 0x10, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_33, out esi_34, out edi_35);
  9997.             return eax_149;
  9998.         }
  9999. l00408799:
  10000.         word32 esp_104 = esp_176 - 0x04;
  10001.         Mem105[esp_104 + 0x00:word32] = GetLastError();
  10002.         word32 eax_106 = fn0040193D(dwArg00);
  10003.         Mem109[eax_126 + 0x00:word32] = eax_106;
  10004.         Mem113[esp_104 + 0x00:word32] = GetLastError();
  10005.         Mem117[eax_106 + 0x00:word32] = fn0040193D(dwArg00);
  10006.         goto l0040880B;
  10007.     }
  10008. }
  10009.  
  10010. void fn00408764()
  10011. {
  10012.     fn00405A7C(0x04);
  10013.     return;
  10014. }
  10015.  
  10016. word32 fn0040883B(word32 eax, word32 ecx, word32 edx, word32 ebx, word32 ebp, word32 esi, word32 edi, selector es, selector ds, word32 dwArg00)
  10017. {
  10018.     Mem12[0x0040E680:word32] = eax;
  10019.     Mem14[0x0040E67C:word32] = ecx;
  10020.     Mem16[4253304:word32] = edx;
  10021.     Mem18[0x0040E674:word32] = ebx;
  10022.     Mem20[0x0040E670:word32] = esi;
  10023.     Mem21[4253292:word32] = edi;
  10024.     Mem23[4253336:word16] = ss;
  10025.     Mem25[4253324:word16] = cs;
  10026.     Mem27[0x0040E668:word16] = ds;
  10027.     Mem29[0x0040E664:word16] = es;
  10028.     Mem31[0x0040E660:word16] = fs;
  10029.     Mem33[0x0040E65C:word16] = gs;
  10030.     Mem36[0x0040E690:word32] = cond(fp - 0x032C);
  10031.     Mem39[0x0040E684:word32] = ebp;
  10032.     Mem42[0x0040E688:word32] = dwArg00;
  10033.     Mem44[4253332:word32] = fp + 0x04;
  10034.     Mem47[0x0040E5D0:word32] = 0x00010001;
  10035.     Mem49[0x0040E584:word32] = Mem47[0x0040E688:word32];
  10036.     Mem50[0x0040E578:word32] = 0xC0000409;
  10037.     Mem51[4253052:word32] = 0x01;
  10038.     Mem57[0x0040E5C8:word32] = IsDebuggerPresent();
  10039.     fn00404C95();
  10040.     SetUnhandledExceptionFilter(0x00);
  10041.     UnhandledExceptionFilter(4240228);
  10042.     if (Mem57[0x0040E5C8:word32] == 0x00)
  10043.         fn00404C95();
  10044.     return TerminateProcess(GetCurrentProcess(), 0xC0000409);
  10045. }
  10046.  
  10047. void fn00408941(word128 xmm0, word32 dwArg04, word32 dwArg08)
  10048. {
  10049.     word32 edi_10 = dwArg04;
  10050.     word32 ecx_13 = dwArg08 >>u 0x07;
  10051.     do
  10052.     {
  10053.         Mem19[edi_10 + 0x00:word128] = xmm0;
  10054.         Mem20[edi_10 + 0x10:word128] = xmm0;
  10055.         Mem21[edi_10 + 0x20:word128] = xmm0;
  10056.         Mem22[edi_10 + 0x30:word128] = xmm0;
  10057.         Mem23[edi_10 + 0x40:word128] = xmm0;
  10058.         Mem24[edi_10 + 0x50:word128] = xmm0;
  10059.         Mem25[edi_10 + 0x60:word128] = xmm0;
  10060.         Mem26[edi_10 + 0x70:word128] = xmm0;
  10061.         edi_10 = edi_10 + 0x80;
  10062.         ecx_13 = ecx_13 - 0x01;
  10063.     } while (ecx_13 != 0x00);
  10064.     return;
  10065. }
  10066.  
  10067. void fn00408998(word128 xmm0, word32 dwArg04, word32 dwArg0C)
  10068. {
  10069.     int64 edx_eax_11 = (int64) dwArg04;
  10070.     word32 eax_12 = (word32) edx_eax_11;
  10071.     word32 edx_13 = SLICE(edx_eax_11, word32, 32);
  10072.     word32 edi_20 = ((eax_12 ^ edx_13) - edx_13 & 0x0F ^ edx_13) - edx_13;
  10073.     if (edi_20 == 0x00)
  10074.     {
  10075.         word32 edx_46 = dwArg0C & 0x7F;
  10076.         if (dwArg0C != (dwArg0C & 0x7F))
  10077.         {
  10078.             fn00408941(xmm0, eax_12, dwArg0C - (dwArg0C & 0x7F));
  10079.             eax_12 = dwArg04;
  10080.             edx_46 = dwArg0C & 0x7F;
  10081.         }
  10082.         if (edx_46 != 0x00)
  10083.         {
  10084.             word32 edi_76 = eax_12 + dwArg0C - edx_46;
  10085.             word32 ecx_77 = dwArg0C & 0x7F;
  10086.             while (ecx_77 != 0x00)
  10087.             {
  10088.                 Mem80[edi_76 + 0x00:byte] = 0x00;
  10089.                 edi_76 = edi_76 + 0x01;
  10090.                 ecx_77 = ecx_77 - 0x01;
  10091.             }
  10092.         }
  10093.     }
  10094.     else
  10095.     {
  10096.         word32 edi_97 = -edi_20;
  10097.         word32 edi_105 = dwArg04;
  10098.         word32 ecx_106 = edi_97 + 0x10;
  10099.         while (ecx_106 != 0x00)
  10100.         {
  10101.             Mem109[edi_105 + 0x00:byte] = 0x00;
  10102.             edi_105 = edi_105 + 0x01;
  10103.             ecx_106 = ecx_106 - 0x01;
  10104.         }
  10105.         fn00408998(xmm0, dwArg04 + (edi_97 + 0x10), dwArg0C - (edi_97 + 0x10));
  10106.     }
  10107.     return;
  10108. }
  10109.  
  10110. word32 fn00408AE6(word32 ebx, word32 ebp, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & xmm0Out)
  10111. {
  10112. fn00408AE6_entry:
  10113.     word32 ebx_22
  10114.     word128 xmm0_23
  10115.     fn00401759(fp - 0x18, ebx, es, ds, dwArg04, out ebx_22, out xmm0_23)
  10116.     word32 ebp_266 = fp - 0x04
  10117.     word32 eax_27 = Mem0[fp + 0x0C:word32]
  10118.     word32 esi_134 = Mem0[fp + 0x08:word32]
  10119.     branch eax_27 == 0x00 l00408B09
  10120.     goto l00408B07
  10121. l00408AE6:
  10122. l00408B07:
  10123.     Mem505[eax_27 + 0x00:word32] = esi_134
  10124. l00408B09:
  10125.     word32 eax_178
  10126.     branch esi_134 != 0x00 && (Mem0[fp + 0x10:word32] == 0x00 || Mem0[fp + 0x10:word32] >= 0x02 && Mem0[fp + 0x10:word32] <= 0x24) l00408B39
  10127. l00408B0D:
  10128.     word32 eax_67
  10129.     word32 edx_68
  10130.     word32 ebx_69
  10131.     word32 ebp_70
  10132.     word32 esi_71
  10133.     word32 edi_72
  10134.     word128 xmm0_73
  10135.     fn0040197F(ebx_22, fp - 0x04, esi_134, es, ds, out eax_67, out edx_68, out ebx_69, out ebp_70, out esi_71, out edi_72, out xmm0_73)
  10136.     Mem76[fp - 0x24 + 0x00:word32] = edi_72
  10137.     Mem78[fp - 0x28 + 0x00:word32] = edi_72
  10138.     Mem80[fp - 44 + 0x00:word32] = edi_72
  10139.     Mem82[fp - 0x30 + 0x00:word32] = edi_72
  10140.     Mem84[fp - 0x34 + 0x00:word32] = edi_72
  10141.     Mem85[eax_67 + 0x00:word32] = 22
  10142.     word32 edx_86
  10143.     word32 ebx_87
  10144.     word32 esi_88
  10145.     fn00401917(es, ds, xmm0_73, out edx_86, out ebx_87, out esi_88)
  10146.     branch Mem85[ebp_70 - 0x08 + 0x00:byte] == 0x00 l00408B32
  10147. l00408B2B:
  10148.     word32 eax_102 = Mem85[ebp_70 - 0x0C + 0x00:word32]
  10149.     Mem105[eax_102 + 0x70:word32] = Mem85[eax_102 + 0x70:word32] & ~0x02
  10150. l00408B32:
  10151.     eax_178 = 0x00
  10152.     goto l00408D11
  10153. l00408B39:
  10154. l00408B3E:
  10155. l00408B44:
  10156. l00408B4A:
  10157.     word32 ecx_113 = Mem0[fp - 0x18 + 0x00:word32]
  10158.     Mem116[fp - 0x24 + 0x00:word32] = ebx_22
  10159.     byte bl_117 = Mem116[esi_134 + 0x00:byte]
  10160.     Mem119[fp - 0x08 + 0x00:word32] = 0x00
  10161.     word32 esp_115 = fp - 0x24
  10162.     word32 ebx_118 = DPB(ebx_22, bl_117, 0)
  10163.     word32 edi_120 = esi_134 + 0x01 + 0x01
  10164. l00408B56:
  10165.     word32 eax_144
  10166.     branch Mem119[ecx_113 + 0xAC:word32] <= 0x01 l00408B76
  10167. l00408B5F:
  10168.     word32 esp_474 = esp_115 - 0x04
  10169.     Mem475[esp_474 + 0x00:word32] = fp - 0x18
  10170.     Mem478[esp_474 - 0x04 + 0x00:word32] = 0x08
  10171.     Mem480[esp_474 - 0x08 + 0x00:word32] = (word32) bl_117
  10172.     word32 edx_482
  10173.     word128 xmm0_485
  10174.     eax_144 = fn00409972(ebx_118, fp - 0x04, es, ds, dwArg08, out edx_482, out bl_117, out esi_134, out xmm0_485)
  10175.     ecx_113 = Mem480[fp - 0x18 + 0x00:word32]
  10176.     esp_115 = esp_474 + 0x04
  10177.     goto l00408B86
  10178. l00408B76:
  10179.     word32 edx_493 = Mem119[ecx_113 + 200:word32]
  10180.     *edxOut = edx_493
  10181.     eax_144 = (word32) edx_493[(word32) bl_117 * 0x02] & 0x08
  10182. l00408B86:
  10183.     branch eax_144 == 0x00 l00408B8F
  10184. l00408B8A:
  10185.     bl_117 = Mem119[edi_120 + 0x00:byte]
  10186.     ebx_118 = DPB(ebx_118, bl_117, 0) (alias)
  10187.     edi_120 = edi_120 + 0x01
  10188.     goto l00408B56
  10189. l00408B8F:
  10190.     branch bl_117 != 0x2D l00408B9A
  10191. l00408B94:
  10192.     Mem468[fp + 0x14:word32] = Mem119[fp + 0x14:word32] | 0x02
  10193.     goto l00408B9F
  10194. l00408B9A:
  10195.     branch bl_117 != 0x2B l00408BA2
  10196. l00408B9F:
  10197.     word32 edi_462 = edi_120 + 0x00
  10198.     bl_117 = Mem119[edi_462 + 0x00:byte]
  10199.     ebx_118 = DPB(ebx_118, bl_117, 0) (alias)
  10200.     edi_120 = edi_462 + 0x01
  10201. l00408BA2:
  10202.     word32 eax_163 = Mem119[fp + 0x10:word32]
  10203.     branch eax_163 < 0x00 || (eax_163 == 0x01 || eax_163 > 0x24) l00408CF8
  10204.     goto l00408BBF
  10205. l00408BAD:
  10206. l00408BB6:
  10207. l00408BBF:
  10208.     branch eax_163 != 0x00 l00408BED
  10209. l00408BC3:
  10210.     branch bl_117 == 0x30 l00408BD1
  10211. l00408BC8:
  10212.     Mem442[fp + 0x10:word32] = 0x0A
  10213.     goto l00408C05
  10214. l00408BD1:
  10215.     byte al_443 = Mem119[edi_120 + 0x00:byte]
  10216.     branch al_443 == 0x78 || al_443 == 88 l00408BE4
  10217.     goto l00408BDB
  10218. l00408BD7:
  10219. l00408BDB:
  10220.     Mem453[fp + 0x10:word32] = 0x08
  10221.     goto l00408C05
  10222. l00408BE4:
  10223.     Mem450[fp + 0x10:word32] = 0x10
  10224.     goto l00408BF7
  10225. l00408BED:
  10226.     branch eax_163 != 0x10 || bl_117 != 0x30 l00408C05
  10227.     goto l00408BF7
  10228. l00408BF2:
  10229. l00408BF7:
  10230.     branch Mem119[edi_120 + 0x00:byte] == 0x78 l00408C01
  10231.     byte al_421 = Mem119[edi_120 + 0x00:byte]
  10232.     branch al_421 == 0x78 l00408C01
  10233. l00408BFD:
  10234.     branch al_421 != 88 l00408C05
  10235.     branch al_421 != 88 l00408C05
  10236. l00408C01:
  10237.     word32 edi_428 = edi_120 + 0x01
  10238.     bl_117 = Mem119[edi_428 + 0x02:byte]
  10239.     ebx_118 = DPB(ebx_118, bl_117, 0) (alias)
  10240.     edi_120 = edi_428 + 0x03
  10241. l00408C05:
  10242.     word32 edx_228 = ~0x00 % Mem119[fp + 0x10:word32]
  10243.     *edxOut = edx_228
  10244.     word32 esi_224 = Mem119[ecx_113 + 200:word32]
  10245.     word32 eax_230 = SEQ(edx_228, ~0x00) /u Mem119[fp + 0x10:word32]
  10246. l00408C15:
  10247.     word32 ecx_358
  10248.     word32 ecx_241 = (word32) esi_224[(word32) bl_117 * 0x02]
  10249.     branch ((byte) ecx_241 & 0x04) == 0x00 l00408C29
  10250. l00408C21:
  10251.     ecx_358 = (int32) bl_117 - 0x30
  10252.     goto l00408C44
  10253. l00408C29:
  10254.     branch (ecx_241 & 0x0103) == 0x00 l00408C62
  10255. l00408C31:
  10256.     word32 ecx_407 = (int32) bl_117
  10257.     branch bl_117 >u 122 l00408C41
  10258. l00408C3E:
  10259.     ecx_407 = ecx_407 - 0x20
  10260. l00408C41:
  10261.     ecx_358 = ecx_407 + ~0x36
  10262. l00408C44:
  10263.     branch ecx_358 >=u Mem119[fp + 0x10:word32] l00408C62
  10264. l00408C49:
  10265.     Mem366[fp + 0x14:word32] = Mem119[fp + 0x14:word32] | 0x08
  10266.     branch Mem366[fp - 0x08 + 0x00:word32] <u eax_230 || Mem366[(fp - 0x08) + 0x00:word32] == eax_230 && ecx_358 <=u edx_228 l00408C79
  10267.     goto l00408C58
  10268. l00408C52:
  10269. l00408C54:
  10270. l00408C58:
  10271.     Mem390[fp + 0x14:word32] = Mem366[fp + 0x14:word32] | 0x04
  10272.     branch Mem390[fp + 0x0C:word32] != 0x00 l00408C85
  10273. l00408C62:
  10274.     word32 eax_251 = Mem119[fp + 0x14:word32]
  10275.     byte al_253 = (byte) eax_251
  10276.     word32 edi_254 = edi_120 - 0x01
  10277.     branch (al_253 & 0x08) != 0x00 l00408C8A
  10278. l00408C6A:
  10279.     branch Mem119[fp + 0x0C:word32] == 0x00 l00408C73
  10280. l00408C70:
  10281.     edi_254 = Mem119[fp + 0x08:word32]
  10282. l00408C73:
  10283.     Mem300[fp - 0x08 + 0x00:word32] = Mem119[fp - 0x08 + 0x00:word32] & 0x00
  10284.     goto l00408CD4
  10285. l00408C79:
  10286.     ebx_118 = Mem366[fp - 0x08 + 0x00:word32] *s Mem366[fp + 0x10:word32] + ecx_358
  10287.     Mem387[fp - 0x08 + 0x00:word32] = ebx_118
  10288. l00408C85:
  10289.     bl_117 = Mem366[edi_120 + 0x00:byte]
  10290.     ebx_118 = DPB(ebx_118, bl_117, 0) (alias)
  10291.     edi_120 = edi_120 + 0x01
  10292.     goto l00408C15
  10293. l00408C8A:
  10294.     branch (al_253 & 0x04) != 0x00 || (al_253 & 0x01) == 0x00 && ((eax_251 & 0x02) != 0x00 && Mem119[(fp - 0x08) + 0x00:word32] >u 0x80000000 || (eax_251 & 0x02) == 0x00 && Mem119[(fp - 0x08) + 0x00:word32] >u 0x7FFFFFFF) l00408CAE
  10295.     goto l00408CD4
  10296. l00408C93:
  10297. l00408C97:
  10298. l00408C9C:
  10299. l00408CA5:
  10300. l00408CA9:
  10301. l00408CAE:
  10302.     word32 eax_312
  10303.     word32 edx_313
  10304.     word32 ebx_314
  10305.     word32 esi_316
  10306.     word128 xmm0_318
  10307.     fn0040197F(ebx_118, fp - 0x04, 0x7FFFFFFF, es, ds, out eax_312, out edx_313, out ebx_314, out ebp_266, out esi_316, out edi_254, out xmm0_318)
  10308.     Mem323[eax_312 + 0x00:word32] = 0x22
  10309.     branch (Mem119[ebp_266 + 0x18:byte] & 0x01) == 0x00 l00408CC5
  10310. l00408CBF:
  10311.     Mem325[ebp_266 - 0x04 + 0x00:word32] = Mem323[ebp_266 - 0x04 + 0x00:word32] | ~0x00
  10312.     goto l00408CD4
  10313. l00408CC5:
  10314.     word32 esp_330 = esp_115 - 0x04
  10315.     Mem331[esp_330 + 0x00:word32] = 0x00
  10316.     Mem339[ebp_266 - 0x04 + 0x00:word32] = DPB(Mem331[esp_330 + 0x00:word32], (Mem323[ebp_266 + 0x18:byte] & 0x02) != 0x00, 0) + esi_316
  10317.     esp_115 = esp_330 + 0x04
  10318. l00408CD4:
  10319.     word32 eax_268 = Mem119[ebp_266 + 0x10:word32]
  10320.     branch eax_268 == 0x00 l00408CDD
  10321. l00408CDB:
  10322.     Mem295[eax_268 + 0x00:word32] = edi_254
  10323. l00408CDD:
  10324.     branch (Mem119[ebp_266 + 0x18:byte] & 0x02) == 0x00 l00408CE6
  10325. l00408CE3:
  10326.     Mem292[ebp_266 - 0x04 + 0x00:word32] = -Mem119[ebp_266 - 0x04 + 0x00:word32]
  10327. l00408CE6:
  10328.     branch Mem119[ebp_266 - 0x08 + 0x00:byte] == 0x00 l00408CF3
  10329. l00408CEC:
  10330.     word32 eax_285 = Mem119[ebp_266 - 0x0C + 0x00:word32]
  10331.     Mem288[eax_285 + 0x70:word32] = Mem119[eax_285 + 0x70:word32] & ~0x02
  10332. l00408CF3:
  10333.     eax_178 = Mem119[ebp_266 - 0x04 + 0x00:word32]
  10334.     goto l00408D10
  10335. l00408CF8:
  10336.     word32 eax_191 = Mem119[fp + 0x0C:word32]
  10337.     branch eax_191 == 0x00 l00408D01
  10338. l00408CFF:
  10339.     Mem211[eax_191 + 0x00:word32] = esi_134
  10340. l00408D01:
  10341.     branch Mem119[fp - 0x0C + 0x00:byte] == 0x00 l00408D0E
  10342. l00408D07:
  10343.     word32 eax_205 = Mem119[fp - 0x10 + 0x00:word32]
  10344.     Mem208[eax_205 + 0x70:word32] = Mem119[eax_205 + 0x70:word32] & ~0x02
  10345. l00408D0E:
  10346.     eax_178 = 0x00
  10347. l00408D10:
  10348.     word32 ebx_187
  10349.     *ebxOut = Mem119[esp_115 + 0x00:word32]
  10350. l00408D11:
  10351.     return eax_178
  10352. fn00408AE6_exit:
  10353. }
  10354.  
  10355. word32 fn00408D15(word32 ebx, selector es, selector ds, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  10356. {
  10357.     *esiOut = esi;
  10358.     word32 dwLoc18_23;
  10359.     if (Mem0[0x0040E3A0:word32] == 0x00)
  10360.         dwLoc18_23 = 0x0040DB30;
  10361.     else
  10362.         dwLoc18_23 = 0x00;
  10363.     word32 edx_28;
  10364.     word32 ebx_29;
  10365.     word128 xmm0_30;
  10366.     return fn00408AE6(ebx, fp - 0x04, es, ds, dwLoc18_23, out edx_28, out ebx_29, out xmm0_30);
  10367. }
  10368.  
  10369. word32 fn00408E57(word32 ebx, word32 esi, word32 edi, selector es, selector ds, ptr32 & ebxOut, ptr32 & ebpOut)
  10370. {
  10371.     word32 eax_29;
  10372.     word32 ebp_10;
  10373.     fn00402F20(ebx, esi, edi, dwLoc0C, 4241552, 0x10, out ebp_10);
  10374.     word32 ebx_100 = Mem0[ebp_10 + 0x08:word32];
  10375.     word32 esp_124 = fp - 0x08;
  10376.     if ((word32) (ebx_100 != 0x00) == 0x00)
  10377.     {
  10378.         word32 eax_46;
  10379.         word32 edx_47;
  10380.         word32 ebx_48;
  10381.         word32 esi_50;
  10382.         word32 edi_51;
  10383.         word128 xmm0_52;
  10384.         fn0040197F(ebx_100, ebp_10, esi, es, ds, out eax_46, out edx_47, out ebx_48, out ebp_10, out esi_50, out edi_51, out xmm0_52);
  10385.         Mem54[eax_46 + 0x00:word32] = 22;
  10386.         Mem56[fp - 0x0C + 0x00:word32] = edi_51;
  10387.         Mem58[fp - 0x10 + 0x00:word32] = edi_51;
  10388.         Mem60[fp - 0x14 + 0x00:word32] = edi_51;
  10389.         Mem62[fp - 0x18 + 0x00:word32] = edi_51;
  10390.         Mem64[fp - 0x1C + 0x00:word32] = edi_51;
  10391.         word32 edx_65;
  10392.         word32 ebx_66;
  10393.         word32 esi_67;
  10394.         eax_29 = fn00401917(es, ds, xmm0_52, out edx_65, out ebx_66, out esi_67) | ~0x00;
  10395.         goto l00408EE3;
  10396.     }
  10397.     word32 esi_109;
  10398.     if (Mem0[0x0040F9A8:word32] == 0x03)
  10399.     {
  10400.         Mem111[fp - 0x0C + 0x00:word32] = 0x04;
  10401.         word32 edx_112;
  10402.         word128 xmm0_114;
  10403.         fn00405B56(ebx_100, 0x00, es, ds, dwArg00, out edx_112, out ebx_100, out xmm0_114);
  10404.         Mem118[ebp_10 - 0x04 + 0x00:word32] = 0x00;
  10405.         Mem120[fp - 0x0C + 0x00:word32] = ebx_100;
  10406.         word32 edx_121;
  10407.         word32 eax_122 = fn00406815(dwArg00, out edx_121);
  10408.         Mem125[ebp_10 - 0x20 + 0x00:word32] = eax_122;
  10409.         esp_124 = fp - 0x08;
  10410.         if (eax_122 != 0x00)
  10411.         {
  10412.             word32 esi_132 = Mem125[ebx_100 - 0x04 + 0x00:word32];
  10413.             Mem135[ebp_10 - 0x1C + 0x00:word32] = esi_132 - 0x09;
  10414.             esi_109 = esi_132 - 0x09;
  10415.         }
  10416.         else
  10417.             esi_109 = Mem125[ebp_10 - 0x1C + 0x00:word32];
  10418.         Mem129[ebp_10 - 0x04 + 0x00:word32] = ~0x01;
  10419.         fn00408EF1();
  10420.         if (Mem129[ebp_10 - 0x20 + 0x00:word32] != 0x00)
  10421.         {
  10422. l00408EE1:
  10423.             eax_29 = esi_109;
  10424. l00408EE3:
  10425.             word32 ebp_38;
  10426.             word32 esi_39;
  10427.             word32 edi_40;
  10428.             word32 ebx_41;
  10429.             *ebxOut = fn00402F65(ebp_10, 0x10, dwArg00, dwArg04, dwArg08, dwArg0C, out ebp_38, out esi_39, out edi_40);
  10430.             return eax_29;
  10431.         }
  10432.     }
  10433.     word32 esp_101 = esp_124 - 0x04;
  10434.     Mem102[esp_101 + 0x00:word32] = ebx_100;
  10435.     Mem104[esp_101 - 0x04 + 0x00:word32] = 0x00;
  10436.     Mem106[esp_101 - 0x08 + 0x00:word32] = Mem104[4252540:word32];
  10437.     esi_109 = HeapSize(Mem106[esp_101 - 0x08 + 0x00:HANDLE], Mem106[esp_101 - 0x04 + 0x00:DWORD], Mem106[esp_101 + 0x00:LPCVOID]);
  10438.     goto l00408EE1;
  10439. }
  10440.  
  10441. void fn00408EF1()
  10442. {
  10443.     fn00405A7C(0x04);
  10444.     return;
  10445. }
  10446.  
  10447. word128 fn00408EFA(word32 dwArg04, word32 dwArg08, word32 dwArg0C)
  10448. {
  10449.     word32 esi_12 = dwArg08;
  10450.     word32 edi_14 = dwArg04;
  10451.     word32 ecx_17 = dwArg0C >>u 0x07;
  10452.     do
  10453.     {
  10454.         word128 xmm0_23 = Mem0[esi_12 + 0x00:word128];
  10455.         word128 xmm1_24 = Mem0[esi_12 + 0x10:word128];
  10456.         word128 xmm2_25 = Mem0[esi_12 + 0x20:word128];
  10457.         word128 xmm3_26 = Mem0[esi_12 + 0x30:word128];
  10458.         Mem27[edi_14 + 0x00:word128] = xmm0_23;
  10459.         Mem28[edi_14 + 0x10:word128] = xmm1_24;
  10460.         Mem29[edi_14 + 0x20:word128] = xmm2_25;
  10461.         Mem30[edi_14 + 0x30:word128] = xmm3_26;
  10462.         word128 xmm5_32 = Mem30[esi_12 + 0x50:word128];
  10463.         word128 xmm6_33 = Mem30[esi_12 + 0x60:word128];
  10464.         word128 xmm7_34 = Mem30[esi_12 + 0x70:word128];
  10465.         Mem35[edi_14 + 0x40:word128] = Mem30[esi_12 + 0x40:word128];
  10466.         Mem36[edi_14 + 0x50:word128] = xmm5_32;
  10467.         Mem37[edi_14 + 0x60:word128] = xmm6_33;
  10468.         Mem38[edi_14 + 0x70:word128] = xmm7_34;
  10469.         esi_12 = esi_12 + 0x80;
  10470.         edi_14 = edi_14 + 0x80;
  10471.         ecx_17 = ecx_17 - 0x01;
  10472.     } while (ecx_17 != 0x00);
  10473.     return xmm0_23;
  10474. }
  10475.  
  10476. word32 fn00408F81(word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & xmm0Out)
  10477. {
  10478.     *xmm0Out = xmm0;
  10479.     int64 edx_eax_16 = (int64) dwArg08;
  10480.     int64 edx_eax_27 = (int64) dwArg04;
  10481.     word32 edx_18 = SLICE(edx_eax_16, word32, 32);
  10482.     word32 eax_127 = (word32) edx_eax_27;
  10483.     word32 edx_29 = SLICE(edx_eax_27, word32, 32);
  10484.     word32 ecx_26 = (((word32) edx_eax_16 ^ edx_18) - edx_18 & 0x0F ^ edx_18) - edx_18;
  10485.     word32 edi_35 = ((eax_127 ^ edx_29) - edx_29 & 0x0F ^ edx_29) - edx_29;
  10486.     word32 edx_161 = ecx_26 | edi_35;
  10487.     if (edx_161 == 0x00)
  10488.     {
  10489.         word32 ecx_129 = dwArg0C & 0x7F;
  10490.         if (dwArg0C != (dwArg0C & 0x7F))
  10491.         {
  10492.             word128 xmm0_124;
  10493.             *xmm0Out = fn00408EFA(eax_127, dwArg08, dwArg0C - (dwArg0C & 0x7F));
  10494.             eax_127 = dwArg04;
  10495.             ecx_129 = dwArg0C & 0x7F;
  10496.         }
  10497.         if (ecx_129 != 0x00)
  10498.         {
  10499.             edx_161 = dwArg08 + dwArg0C - ecx_129;
  10500.             word32 esi_102 = edx_161;
  10501.             word32 edi_103 = dwArg0C + eax_127 - ecx_129;
  10502.             word32 ecx_104 = dwArg0C & 0x7F;
  10503.             while (ecx_104 != 0x00)
  10504.             {
  10505.                 Mem110[edi_103 + 0x00:byte] = Mem0[esi_102 + 0x00:byte];
  10506.                 esi_102 = esi_102 + 0x01;
  10507.                 edi_103 = edi_103 + 0x01;
  10508.                 ecx_104 = ecx_104 - 0x01;
  10509.             }
  10510.         }
  10511.     }
  10512.     else if (ecx_26 == edi_35)
  10513.     {
  10514.         word32 ecx_132 = -ecx_26;
  10515.         word32 esi_136 = dwArg08;
  10516.         word32 edi_137 = dwArg04;
  10517.         word32 ecx_138 = ecx_132 + 0x10;
  10518.         while (ecx_138 != 0x00)
  10519.         {
  10520.             Mem143[edi_137 + 0x00:byte] = Mem0[esi_136 + 0x00:byte];
  10521.             esi_136 = esi_136 + 0x01;
  10522.             edi_137 = edi_137 + 0x01;
  10523.             ecx_138 = ecx_138 - 0x01;
  10524.         }
  10525.         word128 xmm0_160;
  10526.         edx_161 = fn00408F81(dwArg04 + (ecx_132 + 0x10), dwArg08 + (ecx_132 + 0x10), dwArg0C - (ecx_132 + 0x10), out xmm0_160);
  10527.     }
  10528.     else
  10529.     {
  10530.         word32 esi_167 = dwArg08;
  10531.         word32 edi_168 = dwArg04;
  10532.         edx_161 = dwArg0C;
  10533.         word32 ecx_172 = dwArg0C >>u 0x02;
  10534.         while (ecx_172 != 0x00)
  10535.         {
  10536.             Mem178[edi_168 + 0x00:word32] = Mem0[esi_167 + 0x00:word32];
  10537.             esi_167 = esi_167 + 0x04;
  10538.             edi_168 = edi_168 + 0x04;
  10539.             ecx_172 = ecx_172 - 0x01;
  10540.         }
  10541.         word32 ecx_183 = dwArg0C & 0x03;
  10542.         while (ecx_183 != 0x00)
  10543.         {
  10544.             Mem190[edi_168 + 0x00:byte] = Mem0[esi_167 + 0x00:byte];
  10545.             esi_167 = esi_167 + 0x01;
  10546.             edi_168 = edi_168 + 0x01;
  10547.             ecx_183 = ecx_183 - 0x01;
  10548.         }
  10549.     }
  10550.     return edx_161;
  10551. }
  10552.  
  10553. byte fn00409070(word32 ebp, word32 dwArg04, word32 dwArg08, word32 dwArg0C, ptr32 & edxOut, ptr32 & ebpOut, ptr32 & ediOut, ptr32 & xmm0Out)
  10554. {
  10555.     *xmm0Out = xmm0;
  10556.     word32 esi_13 = dwArg08;
  10557.     word32 edi_17 = dwArg04;
  10558.     word32 eax_20 = dwArg0C + dwArg08;
  10559.     if (dwArg04 <=u dwArg08 || dwArg04 >=u eax_20)
  10560.     {
  10561.         if (dwArg0C >=u 0x0100 && Mem0[0x0040E960:word32] != 0x00)
  10562.         {
  10563.             esi_13 = dwArg08;
  10564.             edi_17 = dwArg04;
  10565.             if ((dwArg04 & 0x0F) == (dwArg08 & 0x0F))
  10566.             {
  10567.                 word32 edi_103;
  10568.                 *ediOut = edi;
  10569.                 word32 ebp_105;
  10570.                 *ebpOut = ebp;
  10571.                 word128 xmm0_108;
  10572.                 word32 edx_109;
  10573.                 *edxOut = fn00408F81(dwArg00, dwArg04, dwArg08, out xmm0_108);
  10574.                 return D;
  10575.             }
  10576.         }
  10577.         if ((edi_17 & 0x03) != 0x00)
  10578.             if (dwArg0C <u 0x04)
  10579.                 ;
  10580.         else
  10581.         {
  10582.             word32 ecx_56 = dwArg0C >>u 0x02;
  10583.             word32 edx_57;
  10584.             *edxOut = dwArg0C & 0x03;
  10585.             if (dwArg0C >>u 0x02 <u 0x08)
  10586.                 switch (dwArg0C & 0x03)
  10587.                     ;
  10588.             else
  10589.             {
  10590.                 while (ecx_56 != 0x00)
  10591.                 {
  10592.                     Mem75[edi_17 + 0x00:word32] = Mem0[esi_13 + 0x00:word32];
  10593.                     esi_13 = esi_13 + 0x04;
  10594.                     edi_17 = edi_17 + 0x04;
  10595.                     ecx_56 = ecx_56 - 0x01;
  10596.                 }
  10597.                 switch (dwArg0C & 0x03)
  10598.                 {
  10599.                 case 0x00:
  10600.                     word32 edi_64;
  10601.                     *ediOut = edi;
  10602.                     word32 ebp_66;
  10603.                     *ebpOut = ebp;
  10604.                     return D;
  10605.                 }
  10606.             }
  10607.         }
  10608.     }
  10609.     else
  10610.     {
  10611.         word32 esi_113 = dwArg0C - 0x04 + dwArg08;
  10612.         word32 edi_114 = dwArg0C - 0x04 + dwArg04;
  10613.         if ((edi_114 & 0x03) != 0x00)
  10614.         {
  10615.             word32 edx_162;
  10616.             *edxOut = 0x03;
  10617.             if (dwArg0C <u 0x04)
  10618.                 switch (dwArg0C)
  10619.                     ;
  10620.         }
  10621.         else
  10622.         {
  10623.             word32 ecx_130 = dwArg0C >>u 0x02;
  10624.             word32 edx_131 = dwArg0C & 0x03;
  10625.             *edxOut = edx_131;
  10626.             if (dwArg0C >>u 0x02 <u 0x08)
  10627.             {
  10628.                 word32 ecx_144 = -(dwArg0C >>u 0x02);
  10629.                 word32 esp_147;
  10630.                 word32 ebp_148;
  10631.                 word32 edi_149;
  10632.                 word32 esi_150;
  10633.                 word32 ecx_151;
  10634.                 word32 eax_152;
  10635.                 word32 edx_153;
  10636.                 byte SCZO_154;
  10637.                 byte CZ_155;
  10638.                 byte C_156;
  10639.                 byte Z_157;
  10640.                 byte SZO_158;
  10641.                 byte D_159;
  10642.                 word128 xmm0_160;
  10643.                 0x00409330[ecx_144 * 0x04]();
  10644.                 return D_159;
  10645.             }
  10646.             else
  10647.             {
  10648.                 while (ecx_130 != 0x00)
  10649.                 {
  10650.                     Mem139[edi_114 + 0x00:word32] = Mem0[esi_113 + 0x00:word32];
  10651.                     esi_113 = esi_113 - 0x04;
  10652.                     edi_114 = edi_114 - 0x04;
  10653.                     ecx_130 = ecx_130 - 0x01;
  10654.                 }
  10655.                 D = false;
  10656.                 switch (dwArg0C & 0x03)
  10657.                 {
  10658.                 case 0x00:
  10659.                     word32 edi_126;
  10660.                     *ediOut = edi;
  10661.                     word32 ebp_128;
  10662.                     *ebpOut = ebp;
  10663.                     return D;
  10664.                 }
  10665.             }
  10666.         }
  10667.     }
  10668. }
  10669.  
  10670. void fn0040950F()
  10671. {
  10672.     Mem21[0x0040DDD4:word32] = CreateFileA(4240236, 0x40000000, 0x03, 0x00, 0x03, 0x00, 0x00);
  10673.     return;
  10674. }
  10675.  
  10676. word32 fn0040972F(word32 edx, word32 ebx, word32 esi, word32 edi, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  10677. {
  10678.     *edxOut = edx;
  10679.     *ebxOut = ebx;
  10680.     *esiOut = esi;
  10681.     *xmm0Out = xmm0;
  10682.     word32 eax_34;
  10683.     word32 eax_24 = GetLocaleInfoA(dwArg04, 0x1004, fp - 0x10, 0x06);
  10684.     if (eax_24 == 0x00)
  10685.         eax_34 = eax_24 | ~0x00;
  10686.     else
  10687.     {
  10688.         word128 xmm0_62;
  10689.         eax_34 = fn0040995C(ebx, es, ds, fp - 0x10, out edx, out ebx, out esi, out xmm0_62);
  10690.     }
  10691.     return fn00404BEF(eax_34, Mem0[fp - 0x08 + 0x00:word32] ^ fp - 0x04, edx, ebx, fp - 0x04, esi, edi, es, ds);
  10692. }
  10693.  
  10694. word32 fn00409778(word32 edx, word32 ebp, selector es, selector ds, word128 xmm0, word32 dwArg04, word32 dwArg08, word32 dwArg0C, word32 dwArg10, word32 dwArg14, ptr32 & edxOut, ptr32 & xmm0Out)
  10695. {
  10696. fn00409778_entry:
  10697.     def fp
  10698.     def ebp
  10699.     def Mem0
  10700.     def dwArg0C
  10701.     def dwArg10
  10702.     def dwArg04
  10703.     def dwArg08
  10704.     def ds
  10705.     def es
  10706.     def xmm0
  10707.     def edx
  10708.     def dwArg00
  10709.     def dwLoc1C
  10710.     dwLoc04_6 = ebp
  10711.     ebp_7 = fp - 0x04
  10712.     eax_14 = dwArg0C
  10713.     dwLoc2C_17 = dwArg0C
  10714.     eax_19 = dwArg10
  10715.     eax_24 = Mem0[dwArg10 + 0x00:word32]
  10716.     dwLoc28_28 = eax_24
  10717.     eax_30 = dwArg04
  10718.     edi_33 = 0x00
  10719.     branch dwArg04 == dwArg08 l00409917
  10720.     goto l004097B8
  10721. l00409778:
  10722. l004097B8:
  10723.     dwLoc48_118 = fp - 0x1C
  10724.     dwLoc4C_120 = dwArg04
  10725.     eax_121 = GetCPInfo(dwArg04, fp - 0x1C)
  10726.     ebx_123 = MultiByteToWideChar
  10727.     branch eax_121 == 0x00 || dwLoc1C != 0x01 l0040982D
  10728.     goto l004097D5
  10729. l004097CF:
  10730. l004097D5:
  10731.     dwLoc48_457 = fp - 0x1C
  10732.     dwLoc4C_459 = dwArg08
  10733.     eax_460 = GetCPInfo(dwArg08, fp - 0x1C)
  10734.     esp_461 = fp - 0x44
  10735.     branch eax_460 == 0x00 || dwLoc1C != 0x01 l0040982D
  10736.     goto l004097E8
  10737. l004097E2:
  10738. l004097E8:
  10739.     esi_467 = eax_24
  10740.     branch eax_24 != ~0x00 l00409803
  10741. l004097F7:
  10742.     dwLoc48_483 = dwArg0C
  10743.     eax_485 = fn00404990(dwArg0C, out edx_484)
  10744.     esi_486 = eax_485
  10745.     esp_488 = fp - 0x44
  10746.     esi_489 = eax_485 + 0x01
  10747. l00409803:
  10748.     edx_472 = PHI(edx, edx_484)
  10749.     esi_473 = PHI(esi_467, esi_489)
  10750.     esp_476 = PHI(esp_461, esp_488)
  10751.     SCZO_477 = cond(esi_473)
  10752.     SZO_478 = SCZO_477 (alias)
  10753. l00409805:
  10754.     ds_160 = PHI(ds, ds_443)
  10755.     es_161 = PHI(es, es_442)
  10756.     xmm0_166 = PHI(xmm0, xmm0_444)
  10757.     edx_167 = PHI(edx_472, edx_441)
  10758.     edi_168 = PHI(edi_33, edi_430)
  10759.     esi_169 = PHI(esi_473, esi_446)
  10760.     ebx_170 = PHI(ebx_123, ebx_437)
  10761.     SZO_172 = PHI(SZO_478, SZO_448)
  10762.     ebp_175 = PHI(ebp_7, ebp_431)
  10763.     esp_176 = PHI(esp_476, esp_429)
  10764.     branch SZO_172 || esi_169 >u 0x7FFFFFF0 l00409862
  10765.     goto l0040980F
  10766. l00409807:
  10767. l0040980F:
  10768.     eax_381 = esi_169 + 0x08 + esi_169
  10769.     branch eax_381 >u 0x0400 l00409849
  10770. l0040981A:
  10771.     fn00409930(eax_381)
  10772.     eax_402 = esp_176
  10773.     branch esp_176 == 0x00 l0040985D
  10774. l00409825:
  10775.     Mem405[esp_176 + 0x00:word32] = 0xCCCC
  10776.     goto l0040985A
  10777. l0040982D:
  10778.     eax_433 = MultiByteToWideChar(Mem0[esp + 0x00:UINT], Mem0[esp + 0x04:DWORD], Mem0[esp + 0x08:LPCSTR], Mem0[esp + 0x0C:int32], Mem0[esp + 0x0010:LPWSTR], Mem0[esp + 0x0014:int32])
  10779.     esi_446 = eax_433
  10780.     SCZO_447 = cond(eax_433)
  10781.     SZO_448 = SCZO_447 (alias)
  10782.     branch eax_433 != 0x00 l00409805
  10783. l00409842:
  10784.     ds_135 = PHI(ds_160, ds_443)
  10785.     es_136 = PHI(es_161, es_442)
  10786.     xmm0_141 = PHI(xmm0_179, xmm0_444)
  10787.     edx_142 = PHI(edx_180, edx_441)
  10788.     ebp_147 = PHI(ebp_175, ebp_431)
  10789.     eax_150 = 0x00
  10790.     goto l0040991A
  10791. l00409849:
  10792.     esp_406 = esp_176 - 0x04
  10793.     Mem407[esp_406 + 0x00:word32] = eax_381
  10794.     eax_411 = fn00408438(ebx_170, ebp_175, es_161, ds_160, dwArg00, out edx_408, out ebx_409, out xmm0_410)
  10795.     esp_413 = esp_406 + 0x04
  10796.     branch eax_411 == edi_168 l0040985D
  10797. l00409854:
  10798.     Mem416[eax_411 + 0x00:word32] = 0xDDDD
  10799. l0040985A:
  10800.     xmm0_394 = PHI(xmm0_166, xmm0_410)
  10801.     edx_395 = PHI(edx_167, edx_408)
  10802.     ebx_396 = PHI(ebx_170, ebx_409)
  10803.     eax_398 = PHI(eax_402, eax_411)
  10804.     esp_399 = PHI(esp_176, esp_413)
  10805.     eax_400 = eax_398 + 0x08
  10806. l0040985D:
  10807.     xmm0_386 = PHI(xmm0_166, xmm0_394, xmm0_410)
  10808.     edx_387 = PHI(edx_167, edx_395, edx_408)
  10809.     ebx_388 = PHI(ebx_170, ebx_396, ebx_409)
  10810.     eax_390 = PHI(eax_402, eax_400, eax_411)
  10811.     esp_391 = PHI(esp_176, esp_399, esp_413)
  10812.     Mem392[ebp_175 - 0x1C + 0x00:word32] = eax_390
  10813. l00409865:
  10814.     xmm0_179 = PHI(xmm0_386, xmm0_166)
  10815.     edx_180 = PHI(edx_387, edx_167)
  10816.     ebx_181 = PHI(ebx_388, ebx_170)
  10817.     esp_184 = PHI(esp_391, esp_176)
  10818.     branch Mem0[ebp_175 - 0x1C + 0x00:word32] == edi_168 l00409842
  10819. l0040986A:
  10820.     eax_187 = esi_169 * 0x02
  10821.     esp_188 = esp_184 - 0x04
  10822.     Mem189[esp_188 + 0x00:word32] = eax_187
  10823.     esp_190 = esp_188 - 0x04
  10824.     Mem191[esp_188 - 0x04 + 0x00:word32] = edi_168
  10825.     esp_192 = esp_188 - 0x08
  10826.     Mem193[esp_188 - 0x08 + 0x00:word32] = Mem191[ebp_175 - 0x1C + 0x00:word32]
  10827.     eax_197 = fn00404CA0(xmm0_179, ebp, dwArg00, dwArg04, dwArg08, out edx_195, out edi_196)
  10828.     esp_198 = esp_188 + 0x04
  10829.     esp_200 = esp_188
  10830.     Mem201[esp_188 + 0x00:word32] = esi_169
  10831.     esp_202 = esp_188 - 0x04
  10832.     Mem203[esp_188 - 0x04 + 0x00:word32] = Mem201[ebp_175 - 0x1C + 0x00:word32]
  10833.     esp_204 = esp_188 - 0x08
  10834.     Mem205[esp_188 - 0x08 + 0x00:word32] = Mem203[ebp_175 - 0x24 + 0x00:word32]
  10835.     esp_206 = esp_188 - 0x0C
  10836.     Mem207[esp_188 - 0x0C + 0x00:word32] = Mem205[ebp_175 - 0x28 + 0x00:word32]
  10837.     esp_208 = esp_188 - 0x10
  10838.     Mem209[esp_188 - 0x10 + 0x00:word32] = 0x01
  10839.     esp_210 = esp_188 - 0x14
  10840.     Mem211[esp_188 - 0x14 + 0x00:word32] = Mem209[ebp_175 + 0x08:word32]
  10841.     call ebx_181 (retsize: 4; depth: 4)
  10842.         uses: C_173,CZ_178,D_164,ds_160,dwLoc04_6,dwLoc08_12,dwLoc20_177,dwLoc24_35,dwLoc28_28,dwLoc2C_17,dwLoc30_158,dwLoc34_23,dwLoc38_34,dwLoc3C_22,dwLoc40_27,dwLoc44_32,dwLoc48_159,dwLoc4C_153,dwLoc50_154,dwLoc54_155,dwLoc58_156,dwLoc5C_157,eax_197,ebp_175,ebx_181,ecx_182,edi_196,edx_195,es_161,esi_169,esp_210,SCZO_199,SZO_172,xmm0_179,Z_186
  10843.         defs: C_218,CZ_223,D_228,ds_226,eax_216,ebp_214,ebx_220,ecx_219,edi_213,edx_224,es_225,esi_221,esp_212,SCZO_215,SZO_217,xmm0_227,Z_222
  10844.     branch eax_216 == 0x00 l0040990E
  10845. l0040988F:
  10846.     ebx_254 = Mem211[ebp_214 - 0x34 + 0x00:word32]
  10847.     branch ebx_254 == edi_213 l004098B3
  10848. l00409896:
  10849.     esp_257 = esp_212 - 0x04
  10850.     Mem258[esp_212 - 0x04 + 0x00:word32] = edi_213
  10851.     esp_259 = esp_212 - 0x08
  10852.     Mem260[esp_212 - 0x08 + 0x00:word32] = edi_213
  10853.     esp_261 = esp_212 - 0x0C
  10854.     Mem262[esp_212 - 0x0C + 0x00:word32] = Mem260[ebp_214 + 0x1C:word32]
  10855.     esp_263 = esp_212 - 0x10
  10856.     Mem264[esp_212 - 0x10 + 0x00:word32] = ebx_254
  10857.     esp_265 = esp_212 - 0x14
  10858.     Mem266[esp_212 - 0x14 + 0x00:word32] = esi_221
  10859.     esp_267 = esp_212 - 0x18
  10860.     Mem268[esp_212 - 0x18 + 0x00:word32] = Mem266[ebp_214 - 0x1C + 0x00:word32]
  10861.     esp_269 = esp_212 - 0x1C
  10862.     Mem270[esp_212 - 0x1C + 0x00:word32] = edi_213
  10863.     esp_271 = esp_212 - 0x20
  10864.     Mem272[esp_212 - 0x20 + 0x00:word32] = Mem270[ebp_214 + 0x0C:word32]
  10865.     eax_273 = WideCharToMultiByte(Mem272[esp_212 - 0x20 + 0x00:UINT], Mem272[esp_212 - 0x1C + 0x00:DWORD], Mem272[esp_212 - 0x18 + 0x00:LPCWSTR], Mem272[esp_212 - 0x14 + 0x00:int32], Mem272[esp_212 - 0x10 + 0x00:LPSTR], Mem272[esp_212 - 0x0C + 0x00:int32], Mem272[esp_212 - 0x08 + 0x00:LPCSTR], Mem272[esp_212 - 0x04 + 0x00:LPBOOL])
  10866.     esp_274 = esp_212
  10867.     branch eax_273 == 0x00 l0040990E
  10868. l004098AE:
  10869.     Mem278[ebp_214 - 0x20 + 0x00:word32] = ebx_254
  10870.     goto l0040990E
  10871. l004098B3:
  10872.     ebx_279 = WideCharToMultiByte
  10873.     branch Mem211[ebp_214 - 44 + 0x00:word32] != edi_213 l004098D2
  10874. l004098BE:
  10875.     esp_355 = esp_212 - 0x04
  10876.     Mem356[esp_212 - 0x04 + 0x00:word32] = edi_213
  10877.     esp_357 = esp_212 - 0x08
  10878.     Mem358[esp_212 - 0x08 + 0x00:word32] = edi_213
  10879.     esp_359 = esp_212 - 0x0C
  10880.     Mem360[esp_212 - 0x0C + 0x00:word32] = edi_213
  10881.     esp_361 = esp_212 - 0x10
  10882.     Mem362[esp_212 - 0x10 + 0x00:word32] = edi_213
  10883.     esp_363 = esp_212 - 0x14
  10884.     Mem364[esp_212 - 0x14 + 0x00:word32] = esi_221
  10885.     esp_365 = esp_212 - 0x18
  10886.     Mem366[esp_212 - 0x18 + 0x00:word32] = Mem364[ebp_214 - 0x1C + 0x00:word32]
  10887.     esp_367 = esp_212 - 0x1C
  10888.     Mem368[esp_212 - 0x1C + 0x00:word32] = edi_213
  10889.     esp_369 = esp_212 - 0x20
  10890.     Mem370[esp_212 - 0x20 + 0x00:word32] = Mem368[ebp_214 + 0x0C:word32]
  10891.     eax_371 = WideCharToMultiByte(Mem370[esp_212 - 0x20 + 0x00:UINT], Mem370[esp_212 - 0x1C + 0x00:DWORD], Mem370[esp_212 - 0x18 + 0x00:LPCWSTR], Mem370[esp_212 - 0x14 + 0x00:int32], Mem370[esp_212 - 0x10 + 0x00:LPSTR], Mem370[esp_212 - 0x0C + 0x00:int32], Mem370[esp_212 - 0x08 + 0x00:LPCSTR], Mem370[esp_212 - 0x04 + 0x00:LPBOOL])
  10892.     esp_372 = esp_212
  10893.     esi_373 = eax_371
  10894.     branch eax_371 == edi_213 l0040990E
  10895. l004098D2:
  10896.     esi_282 = PHI(esi_221, esi_373)
  10897.     esp_283 = PHI(esp_212, esp_372)
  10898.     esp_284 = esp_283 - 0x04
  10899.     Mem285[esp_284 + 0x00:word32] = esi_282
  10900.     esp_286 = esp_284 - 0x04
  10901.     Mem287[esp_284 - 0x04 + 0x00:word32] = 0x01
  10902.     D_295 = fn004048DF(WideCharToMultiByte, edi_213, es_225, ds_226, out eax_288, out edx_289, out ebx_290, out ebp_291, out esi_292, out edi_293, out xmm0_294)
  10903.     esp_297 = esp_284
  10904.     esp_299 = esp_284 + 0x04
  10905.     Mem300[ebp_291 - 0x20 + 0x00:word32] = eax_288
  10906.     branch eax_288 == edi_293 l0040990E
  10907. l004098E3:
  10908.     esp_303 = esp_284
  10909.     Mem304[esp_284 + 0x00:word32] = edi_293
  10910.     esp_305 = esp_284 - 0x04
  10911.     Mem306[esp_284 - 0x04 + 0x00:word32] = edi_293
  10912.     esp_307 = esp_284 - 0x08
  10913.     Mem308[esp_284 - 0x08 + 0x00:word32] = esi_292
  10914.     esp_309 = esp_284 - 0x0C
  10915.     Mem310[esp_284 - 0x0C + 0x00:word32] = eax_288
  10916.     esp_311 = esp_284 - 0x10
  10917.     Mem312[esp_284 - 0x10 + 0x00:word32] = esi_292
  10918.     esp_313 = esp_284 - 0x14
  10919.     Mem314[esp_284 - 0x14 + 0x00:word32] = Mem312[ebp_291 - 0x1C + 0x00:word32]
  10920.     esp_315 = esp_284 - 0x18
  10921.     Mem316[esp_284 - 0x18 + 0x00:word32] = edi_293
  10922.     esp_317 = esp_284 - 0x1C
  10923.     Mem318[esp_284 - 0x1C + 0x00:word32] = Mem316[ebp_291 + 0x0C:word32]
  10924.     call ebx_290 (retsize: 4; depth: 4)
  10925.         uses: C_231,CZ_223,D_295,ds_226,dwLoc04_6,dwLoc08_12,dwLoc20_177,dwLoc24_35,dwLoc28_28,dwLoc2C_17,dwLoc30_158,dwLoc34_23,dwLoc38_34,dwLoc3C_22,dwLoc40_27,dwLoc44_32,dwLoc48_159,dwLoc4C_153,dwLoc50_154,dwLoc54_155,dwLoc58_156,dwLoc5C_157,eax_288,ebp_291,ebx_290,ecx_298,edi_293,edx_289,es_225,esi_292,esp_317,SCZO_301,SZO_229,xmm0_294,Z_302
  10926.         defs: C_325,CZ_330,D_335,ds_333,eax_323,ebp_321,ebx_327,ecx_326,edi_320,edx_331,es_332,esi_328,esp_319,SCZO_322,SZO_324,xmm0_334,Z_329
  10927.     branch eax_323 != edi_320 l00409903
  10928. l004098F5:
  10929.     esp_338 = esp_319 - 0x04
  10930.     Mem339[esp_319 - 0x04 + 0x00:word32] = Mem318[ebp_321 - 0x20 + 0x00:word32]
  10931.     fn004047EB(ebx_327, esi_328, edi_320, es_332, ds_333, out eax_340, out edx_341, out ebx_342, out ebp_343, out esi_344, out edi_345, out xmm0_346)
  10932.     esp_349 = esp_319
  10933.     Mem350[ebp_343 - 0x20 + 0x00:word32] = edi_345
  10934.     goto l0040990E
  10935. l00409903:
  10936.     branch Mem318[ebp_321 - 0x24 + 0x00:word32] == ~0x00 l0040990E
  10937. l00409909:
  10938.     ecx_353 = Mem318[ebp_321 - 0x30 + 0x00:word32]
  10939.     Mem354[ecx_353 + 0x00:word32] = eax_323
  10940. l0040990E:
  10941.     ds_232 = PHI(ds_226, ds_226, ds_226, ds_226, ds_226, ds_333, ds_333, ds_333)
  10942.     es_233 = PHI(es_225, es_225, es_225, es_225, es_225, es_332, es_332, es_332)
  10943.     edi_238 = PHI(edi_213, edi_213, edi_213, edi_213, edi_293, edi_345, edi_320, edi_320)
  10944.     esi_239 = PHI(esi_221, esi_221, esi_221, esi_373, esi_292, esi_344, esi_328, esi_328)
  10945.     ebx_240 = PHI(ebx_220, ebx_254, ebx_254, ebx_279, ebx_290, ebx_342, ebx_327, ebx_327)
  10946.     ebp_244 = PHI(ebp_214, ebp_214, ebp_214, ebp_214, ebp_291, ebp_343, ebp_321, ebp_321)
  10947.     esp_245 = PHI(esp_212, esp_274, esp_274, esp_372, esp_299, esp_349, esp_319, esp_319)
  10948.     esp_246 = esp_245 - 0x04
  10949.     Mem247[esp_246 + 0x00:word32] = Mem211[ebp_244 - 0x1C + 0x00:word32]
  10950.     edx_251 = fn00407A4D(ebx_240, esi_239, edi_238, es_233, ds_232, dwArg00, out ebx_248, out esi_249, out xmm0_250)
  10951. l00409917:
  10952.     ds_98 = PHI(ds, ds_232)
  10953.     es_99 = PHI(es, es_233)
  10954.     xmm0_104 = PHI(xmm0, xmm0_250)
  10955.     edx_105 = PHI(edx, edx_251)
  10956.     ebp_112 = PHI(ebp_7, ebp_244)
  10957.     eax_114 = Mem0[ebp_112 - 0x20 + 0x00:word32]
  10958. l0040991A:
  10959.     ds_63 = PHI(ds_98, ds_135)
  10960.     es_64 = PHI(es_99, es_136)
  10961.     xmm0_69 = PHI(xmm0_104, xmm0_141)
  10962.     edx_70 = PHI(edx_105, edx_142)
  10963.     eax_71 = PHI(eax_114, eax_150)
  10964.     ebp_72 = PHI(ebp_112, ebp_147)
  10965.     esp_73 = ebp_72 - 0x40
  10966.     edi_74 = Mem0[esp_73 + 0x00:word32]
  10967.     esp_75 = esp_73 + 0x04
  10968.     esi_76 = Mem0[esp_73 + 0x04:word32]
  10969.     esp_77 = esp_73 + 0x08
  10970.     ebx_78 = Mem0[esp_73 + 0x08:word32]
  10971.     ecx_80 = Mem0[ebp_72 - 0x04 + 0x00:word32]
  10972.     ecx_81 = ecx_80 ^ ebp_72
  10973.     eax_84 = fn00404BEF(eax_71, ecx_81, edx_70, ebx_78, ebp_72, esi_76, edi_74, es_64, ds_63)
  10974.     return eax_84
  10975. fn00409778_exit:
  10976.     use edx_70 (=> edxOut)
  10977.     use xmm0_69 (=> xmm0Out)
  10978. }
  10979.  
  10980. void fn00409930(word32 eax)
  10981. {
  10982.     word32 eax_9 = eax + ((fp + 0x04) - eax & 0x0F);
  10983.     word32 eax_13 = eax_9 | 0x00 - (eax_9 <u 0x00);
  10984.     fn004077F0(eax_13, dwArg00);
  10985.     return;
  10986. }
  10987.  
  10988. word32 fn0040995C(word32 ebx, selector es, selector ds, word32 dwArg04, ptr32 & edxOut, ptr32 & ebxOut, ptr32 & esiOut, ptr32 & xmm0Out)
  10989. {
  10990.     word32 edx_18;
  10991.     word32 ebx_19;
  10992.     word32 esi_20;
  10993.     word128 xmm0_21;
  10994.     return fn00408D15(ebx, es, ds, dwArg04, 0x00, 0x0A, out edx_18, out ebx_19, out esi_20, out xmm0_21);
  10995. }
  10996.  
  10997. word32 fn00409972(word32 ebx, word32 ebp, selector es, selector ds, word32 dwArg0C, ptr32 & edxOut, ptr32 & blOut, ptr32 & esiOut, ptr32 & xmm0Out)
  10998. {
  10999.     *esiOut = esi;
  11000.     word32 eax_142;
  11001.     word32 eax_133;
  11002.     word32 ebx_19;
  11003.     word128 xmm0_20;
  11004.     word32 edx_21;
  11005.     *edxOut = fn00401759(fp - 0x1C, ebx, es, ds, dwArg0C, out ebx_19, out xmm0_20);
  11006.     word32 ebx_24 = Mem0[fp + 0x04:word32];
  11007.     word32 esp_127 = fp - 0x20;
  11008.     byte bl_25 = (byte) ebx_24;
  11009.     if (ebx_24 <=u ~0xFE)
  11010.         eax_142 = (word32) Mem0[Mem0[fp - 0x1C + 0x00:word32] + 200:word32][ebx_24 * 0x02];
  11011.     else
  11012.     {
  11013.         word32 ecx_150;
  11014.         Mem74[fp + 0x04:word32] = ebx_24;
  11015.         Mem76[fp + 0x04:word32] = Mem74[fp + 0x04:word32] >> 0x08;
  11016.         Mem79[fp - 0x24 + 0x00:word32] = fp - 0x1C;
  11017.         Mem85[fp - 0x28 + 0x00:word32] = Mem79[fp + 0x04:word32] & 0xFF;
  11018.         word32 esp_100 = fp - 0x20;
  11019.         word32 edx_87;
  11020.         word32 ebx_88;
  11021.         word32 esi_89;
  11022.         word128 xmm0_90;
  11023.         if (fn00404BA4(ebx_24, es, ds, dwArg04, out edx_87, out ebx_88, out esi_89, out xmm0_90) != 0x00)
  11024.         {
  11025.             byte al_144 = Mem85[fp + 0x04:byte];
  11026.             Mem146[fp - 0x24 + 0x00:word32] = 0x02;
  11027.             Mem147[fp - 0x0C + 0x00:byte] = al_144;
  11028.             Mem148[fp - 11 + 0x00:byte] = bl_25;
  11029.             Mem149[fp - 0x0A + 0x00:byte] = 0x00;
  11030.             ecx_150 = Mem149[fp - 0x24 + 0x00:word32];
  11031.             esp_100 = fp - 0x20;
  11032.         }
  11033.         else
  11034.         {
  11035.             Mem154[fp - 0x0C + 0x00:byte] = bl_25;
  11036.             Mem155[fp - 11 + 0x00:byte] = 0x00;
  11037.             ecx_150 = 0x01;
  11038.         }
  11039.         word32 eax_101 = Mem85[fp - 0x1C + 0x00:word32];
  11040.         word32 esp_102 = esp_100 - 0x04;
  11041.         Mem103[esp_102 + 0x00:word32] = 0x01;
  11042.         Mem105[esp_102 - 0x04 + 0x00:word32] = Mem103[eax_101 + 0x14:word32];
  11043.         Mem107[esp_102 - 0x08 + 0x00:word32] = Mem105[eax_101 + 0x04:word32];
  11044.         Mem110[esp_102 - 0x0C + 0x00:word32] = fp - 0x08;
  11045.         Mem112[esp_102 - 0x10 + 0x00:word32] = ecx_150;
  11046.         Mem115[esp_102 - 0x14 + 0x00:word32] = fp - 0x0C;
  11047.         Mem118[esp_102 - 0x18 + 0x00:word32] = 0x01;
  11048.         Mem120[esp_102 - 0x1C + 0x00:word32] = fp - 0x1C;
  11049.         word32 edx_122;
  11050.         word32 esi_123;
  11051.         word128 xmm0_124;
  11052.         word32 eax_125 = fn00408011(ebx_88, fp - 0x04, es, ds, dwArg00, out edx_122, out esi_123, out xmm0_124);
  11053.         byte al_126 = (byte) eax_125;
  11054.         esp_127 = esp_102 + 0x04;
  11055.         if (eax_125 == 0x00)
  11056.         {
  11057.             if (Mem120[fp - 0x10 + 0x00:byte] != al_126)
  11058.             {
  11059.                 word32 eax_137 = Mem120[fp - 0x14 + 0x00:word32];
  11060.                 Mem139[eax_137 + 0x70:word32] = Mem120[eax_137 + 0x70:word32] & ~0x02;
  11061.             }
  11062.             eax_133 = 0x00;
  11063. l00409A27:
  11064.             byte bl_41;
  11065.             *blOut = (byte) Mem0[esp_127 + 0x00:word32];
  11066.             return eax_133;
  11067.         }
  11068.         eax_142 = (word32) Mem120[fp - 0x08 + 0x00:word16];
  11069.     }
  11070.     eax_133 = eax_142 & Mem0[fp + 0x08:word32];
  11071.     if (Mem0[fp - 0x10 + 0x00:byte] != 0x00)
  11072.     {
  11073.         word32 ecx_62 = Mem0[fp - 0x14 + 0x00:word32];
  11074.         Mem64[ecx_62 + 0x70:word32] = Mem0[ecx_62 + 0x70:word32] & ~0x02;
  11075.     }
  11076.     goto l00409A27;
  11077. }
Add Comment
Please, Sign In to add comment