Function at 0x40f1c0
Capabilities:
Accept command line arguments
Link many functions at runtime

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0xdc
mov eax, dword [0x427014]
xor eax, esp
mov dword [esp + 0xd8], eax
push ebx
push esi
push edi
push 0x79c4
mov dword [esp + 0x24], 0xff
call fcn.0041223c
add esp, 4
push 0x79c4
xor ebx, ebx
mov edi, eax
push ebx
push edi
call fcn.00416c10
add esp, 0xc
mov esi, 1
push ebx
mov dword [edi], ebx
mov dword [edi + 4], ebx
mov dword [edi + 8], ebx
mov dword [edi + 0xc], esi
mov dword [edi + 0x10], esi
call fcn.00412a48
mov dword [esp + 0x1c], eax
lea eax, [esp + 0x1c]
add esp, 4
push eax
mov dword [esp + 0x20], edx
call fcn.0041292e
mov ecx, dword [eax + 0xc]
mov edx, dword [eax + 0x10]
add esp, 4
push ecx
mov ecx, dword [eax + 0x14]
add edx, esi
push edx
mov edx, dword [eax]
add ecx, 0x76c
push ecx
mov ecx, dword [eax + 4]
push edx
mov edx, dword [eax + 8]
push ecx
push edx
lea eax, [esp + 0xb8]
push str.Application_started__02d:_02d:_02d__04d__02d__02d.
push eax
call fcn.0041154c
add esp, 0x20
push 8
lea ecx, [esp + 0x38]
push ecx
call dword [sym.imp.WINMM.dll_timeGetDevCaps]
test eax, eax
jne 0x40f286
mov edx, dword [esp + 0x34]
push edx
call dword [sym.imp.WINMM.dll_timeBeginPeriod]
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
mov dword [edi + 0x32c], eax
push 0x104
lea eax, [edi + 0x1c]
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
push str.shell32.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov esi, eax
cmp esi, ebx
mov ebx, dword [sym.imp.KERNEL32.dll_GetProcAddress]
je 0x40f2fb
push str.SHGetFolderPathA
push esi
call ebx
mov dword [esp + 0x10], eax
test eax, eax
je 0x40f2f4
lea ecx, [edi + 0x120]
push ecx
push 0
push 0
push 0x8005
push 0
call eax
lea edx, [edi + 0x224]
push edx
push 0
push 0
push 0x8023
push 0
call dword [esp + 0x24]
push esi
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
mov esi, edi
mov dword [edi + 0x328], eax
call fcn.0040f160
mov eax, dword [edi + 0x32c]
push 1
push eax
call dword [sym.imp.USER32.dll_LoadIconA]
push edi
push 0x40f070
push 0
push 0
mov dword [edi + 0x33c], eax
mov dword [edi + 0x7460], 0
call dword [sym.imp.USER32.dll_EnumDisplayMonitors]
cmp dword [edi + 0x7460], 0
jle 0x410043
mov ecx, dword [edi + 0x74ac]
mov eax, 0x2aaaaaab
imul ecx
mov eax, edx
shr eax, 0x1f
add eax, edx
mov edx, dword [edi + 0x74b0]
mov esi, ecx
sub esi, eax
mov eax, 0x2aaaaaab
imul edx
mov eax, edx
shr eax, 0x1f
add eax, edx
mov edx, eax
mov eax, dword [edi + 0x74b0]
sub eax, edx
mov dword [edi + 0x7450], eax
mov dword [esp + 0x10], eax
mov eax, ecx
sub eax, esi
cdq
sub eax, edx
sar eax, 1
mov dword [edi + 0x7448], eax
mov dword [esp + 0x14], eax
mov eax, dword [edi + 0x74b0]
sub eax, dword [esp + 0x10]
mov dword [edi + 0x7458], ecx
mov ecx, dword [edi + 0x74b0]
cdq
mov dword [edi + 0x745c], ecx
mov ecx, dword [esp + 0x14]
mov dword [edi + 0x7454], esi
sub eax, edx
mov edx, dword [esp + 0x10]
sar eax, 1
mov dword [edi + 0x744c], eax
add esi, ecx
mov dword [esp + 0x2c], esi
xor esi, esi
push esi
add edx, eax
mov dword [esp + 0x2c], eax
push 0x10cf0000
lea eax, [esp + 0x2c]
push eax
mov dword [esp + 0x30], ecx
mov dword [esp + 0x3c], edx
call dword [sym.imp.USER32.dll_AdjustWindowRect]
mov dword [esp + 0x84], esi
mov dword [esp + 0x88], esi
mov dword [esp + 0x8c], esi
mov dword [esp + 0x70], 0x30
mov dword [esp + 0x74], 0x28
mov dword [esp + 0x78], 0x40e650
mov dword [esp + 0x7c], esi
mov dword [esp + 0x80], esi
mov dword [esp + 0x90], esi
mov dword [esp + 0x94], esi
mov dword [esp + 0x98], str.app_wc
mov dword [esp + 0x9c], esi
mov ecx, dword [edi + 0x32c]
mov dword [esp + 0x84], ecx
mov edx, dword [edi + 0x33c]
mov dword [esp + 0x88], edx
mov eax, dword [edi + 0x42c]
push 4
mov dword [esp + 0x90], eax
call dword [sym.imp.GDI32.dll_GetStockObject]
mov dword [esp + 0x90], eax
mov ecx, dword [edi + 0x33c]
lea edx, [esp + 0x70]
push edx
mov dword [esp + 0xa0], ecx
call dword [sym.imp.USER32.dll_RegisterClassExA]
mov eax, dword [edi + 0x32c]
push esi
push eax
push esi
mov ecx, dword [esp + 0x3c]
sub ecx, dword [esp + 0x34]
mov edx, dword [esp + 0x38]
sub edx, dword [esp + 0x30]
mov eax, dword [edi + 0x744c]
push esi
push ecx
mov ecx, dword [edi + 0x7448]
push edx
mov edx, dword [esp + 0xb0]
push eax
push ecx
push 0xcf0000
push esi
push edx
push esi
call dword [sym.imp.USER32.dll_CreateWindowExA]
mov dword [edi + 0x330], eax
cmp eax, esi
je 0x410043
push eax
call dword [sym.imp.USER32.dll_GetDC]
push edi
mov dword [edi + 0x338], eax
mov eax, dword [edi + 0x330]
push 0xffffffffffffffeb
push eax
mov dword [edi + 0x340], 1
mov dword [edi + 0x344], esi
call dword [sym.imp.USER32.dll_SetWindowLongA]
mov ecx, dword [edi + 0x330]
push esi
push ecx
call dword [sym.imp.USER32.dll_ShowWindow]
push str.opengl32.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov dword [edi + 0x3e0], eax
test eax, eax
je 0x410043
push str.wglGetProcAddress
push eax
call ebx
mov dword [edi + 0x3e8], eax
test eax, eax
je 0x410043
mov edx, dword [edi + 0x3e0]
push str.wglCreateContext
push edx
call ebx
mov dword [edi + 0x3ec], eax
test eax, eax
je 0x410043
mov eax, dword [edi + 0x3e0]
push str.wglDeleteContext
push eax
call ebx
mov dword [edi + 0x3f0], eax
test eax, eax
je 0x410043
mov ecx, dword [edi + 0x3e0]
push str.wglMakeCurrent
push ecx
call ebx
mov dword [edi + 0x3f4], eax
test eax, eax
je 0x410043
xor eax, eax
mov dword [esp + 0x3c], eax
mov dword [esp + 0x44], eax
mov dword [esp + 0x54], eax
mov dword [esp + 0x40], eax
mov dword [esp + 0x50], eax
mov dword [esp + 0x48], eax
mov dword [esp + 0x4c], eax
mov dword [esp + 0x58], eax
mov dword [esp + 0x5c], eax
mov dword [esp + 0x60], eax
mov edx, 0x28
lea ecx, [esp + 0x3c]
mov word [esp + 0x3c], dx
mov eax, 1
push ecx
mov edx, ecx
mov word [esp + 0x42], ax
mov dword [esp + 0x44], 0x25
mov byte [esp + 0x48], 0
mov byte [esp + 0x49], 0x20
mov byte [esp + 0x57], 0x18
mov byte [esp + 0x58], 8
mov byte [esp + 0x5a], 0
mov eax, dword [edi + 0x338]
push edx
push eax
call dword [sym.imp.GDI32.dll_ChoosePixelFormat]
mov ecx, dword [edi + 0x338]
push eax
push ecx
call dword [sym.imp.GDI32.dll_SetPixelFormat]
test eax, eax
je 0x410043
mov edx, dword [edi + 0x338]
mov eax, dword [edi + 0x3ec]
push edx
call eax
mov dword [edi + 0x3e4], eax
test eax, eax
je 0x410043
mov ecx, dword [edi + 0x338]
mov edx, dword [edi + 0x3f4]
push eax
push ecx
call edx
test eax, eax
je 0x410043
mov eax, dword [edi + 0x3e8]
push str.wglSwapIntervalEXT
call eax
mov dword [edi + 0x3f8], eax
test eax, eax
je 0x40f684
push 1
call eax
mov ecx, dword [edi + 0x3e0]
push str.glCreateShader
push ecx
lea esi, [edi + 0x348]
call ebx
mov edx, dword [edi + 0x3e0]
push str.glShaderSource
push edx
mov dword [esi], eax
call ebx
mov dword [edi + 0x34c], eax
mov eax, dword [edi + 0x3e0]
push str.glCompileShader
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glGetShaderiv
push ecx
mov dword [edi + 0x350], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glCreateProgram
push edx
mov dword [edi + 0x354], eax
call ebx
mov dword [edi + 0x358], eax
mov eax, dword [edi + 0x3e0]
push str.glAttachShader
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glBindAttribLocation
push ecx
mov dword [edi + 0x35c], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glLinkProgram
push edx
mov dword [edi + 0x360], eax
call ebx
mov dword [edi + 0x364], eax
mov eax, dword [edi + 0x3e0]
push str.glGetProgramiv
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glGenBuffers
push ecx
mov dword [edi + 0x368], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glBindBuffer
push edx
mov dword [edi + 0x36c], eax
call ebx
mov dword [edi + 0x370], eax
mov eax, dword [edi + 0x3e0]
push str.glEnableVertexAttribArray
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glVertexAttribPointer
push ecx
mov dword [edi + 0x374], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glGenTextures
push edx
mov dword [edi + 0x378], eax
call ebx
mov dword [edi + 0x37c], eax
mov eax, dword [edi + 0x3e0]
push str.glEnable
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glActiveTexture
push ecx
mov dword [edi + 0x380], eax
call ebx
mov dword [edi + 0x384], eax
mov edx, dword [edi + 0x3e0]
push str.glBindTexture
push edx
call ebx
mov dword [edi + 0x388], eax
mov eax, dword [edi + 0x3e0]
push str.glTexParameteri
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glDeleteBuffers
push ecx
mov dword [edi + 0x38c], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glDeleteTextures
push edx
mov dword [edi + 0x390], eax
call ebx
mov dword [edi + 0x394], eax
mov eax, dword [edi + 0x3e0]
push str.glBufferData
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glUseProgram
push ecx
mov dword [edi + 0x398], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glUniform1i
push edx
mov dword [edi + 0x39c], eax
call ebx
mov dword [edi + 0x3a0], eax
mov eax, dword [edi + 0x3e0]
push str.glUniform3f
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glGetUniformLocation
push ecx
mov dword [edi + 0x3a4], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glTexImage2D
push edx
mov dword [edi + 0x3a8], eax
call ebx
mov dword [edi + 0x3ac], eax
mov eax, dword [edi + 0x3e0]
push str.glClearColor
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glClear
push ecx
mov dword [edi + 0x3b0], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glDrawArrays
push edx
mov dword [edi + 0x3b4], eax
call ebx
mov dword [edi + 0x3b8], eax
mov eax, dword [edi + 0x3e0]
push str.glViewport
push eax
call ebx
mov ecx, dword [edi + 0x3e0]
push str.glDeleteShader
push ecx
mov dword [edi + 0x3bc], eax
call ebx
mov edx, dword [edi + 0x3e0]
push str.glDeleteProgram
push edx
mov dword [edi + 0x3c0], eax
call ebx
cmp dword [esi], 0
mov dword [edi + 0x3c4], eax
jne 0x40f91a
mov eax, dword [edi + 0x3e8]
push str.glCreateShader
call eax
mov dword [esi], eax
cmp dword [edi + 0x34c], 0
jne 0x40f936
mov ecx, dword [edi + 0x3e8]
push str.glShaderSource
call ecx
mov dword [edi + 0x34c], eax
cmp dword [edi + 0x350], 0
jne 0x40f952
mov edx, dword [edi + 0x3e8]
push str.glCompileShader
call edx
mov dword [edi + 0x350], eax
cmp dword [edi + 0x354], 0
jne 0x40f96e
mov eax, dword [edi + 0x3e8]
push str.glGetShaderiv
call eax
mov dword [edi + 0x354], eax
cmp dword [edi + 0x358], 0
jne 0x40f98a
mov ecx, dword [edi + 0x3e8]
push str.glCreateProgram
call ecx
mov dword [edi + 0x358], eax
cmp dword [edi + 0x35c], 0
jne 0x40f9a6
mov edx, dword [edi + 0x3e8]
push str.glAttachShader
call edx
mov dword [edi + 0x35c], eax
cmp dword [edi + 0x360], 0
jne 0x40f9c2
mov eax, dword [edi + 0x3e8]
push str.glBindAttribLocation
call eax
mov dword [edi + 0x360], eax
cmp dword [edi + 0x364], 0
jne 0x40f9de
mov ecx, dword [edi + 0x3e8]
push str.glLinkProgram
call ecx
mov dword [edi + 0x364], eax
cmp dword [edi + 0x368], 0
jne 0x40f9fa
mov edx, dword [edi + 0x3e8]
push str.glGetProgramiv
call edx
mov dword [edi + 0x368], eax
cmp dword [edi + 0x36c], 0
jne 0x40fa16
mov eax, dword [edi + 0x3e8]
push str.glGenBuffers
call eax
mov dword [edi + 0x36c], eax
cmp dword [edi + 0x370], 0
jne 0x40fa32
mov ecx, dword [edi + 0x3e8]
push str.glBindBuffer
call ecx
mov dword [edi + 0x370], eax
cmp dword [edi + 0x374], 0
jne 0x40fa4e
mov edx, dword [edi + 0x3e8]
push str.glEnableVertexAttribArray
call edx
mov dword [edi + 0x374], eax
cmp dword [edi + 0x378], 0
jne 0x40fa6a
mov eax, dword [edi + 0x3e8]
push str.glVertexAttribPointer
call eax
mov dword [edi + 0x378], eax
cmp dword [edi + 0x37c], 0
jne 0x40fa86
mov ecx, dword [edi + 0x3e8]
push str.glGenTextures
call ecx
mov dword [edi + 0x37c], eax
cmp dword [edi + 0x380], 0
jne 0x40faa2
mov edx, dword [edi + 0x3e8]
push str.glEnable
call edx
mov dword [edi + 0x380], eax
cmp dword [edi + 0x384], 0
jne 0x40fabe
mov eax, dword [edi + 0x3e8]
push str.glActiveTexture
call eax
mov dword [edi + 0x384], eax
cmp dword [edi + 0x388], 0
jne 0x40fada
mov ecx, dword [edi + 0x3e8]
push str.glBindTexture
call ecx
mov dword [edi + 0x388], eax
cmp dword [edi + 0x38c], 0
jne 0x40faf6
mov edx, dword [edi + 0x3e8]
push str.glTexParameteri
call edx
mov dword [edi + 0x38c], eax
cmp dword [edi + 0x390], 0
jne 0x40fb12
mov eax, dword [edi + 0x3e8]
push str.glDeleteBuffers
call eax
mov dword [edi + 0x390], eax
cmp dword [edi + 0x394], 0
jne 0x40fb2e
mov ecx, dword [edi + 0x3e8]
push str.glDeleteTextures
call ecx
mov dword [edi + 0x394], eax
cmp dword [edi + 0x398], 0
jne 0x40fb4a
mov edx, dword [edi + 0x3e8]
push str.glBufferData
call edx
mov dword [edi + 0x398], eax
cmp dword [edi + 0x39c], 0
jne 0x40fb66
mov eax, dword [edi + 0x3e8]
push str.glUseProgram
call eax
mov dword [edi + 0x39c], eax
cmp dword [edi + 0x3a0], 0
jne 0x40fb82
mov ecx, dword [edi + 0x3e8]
push str.glUniform1i
call ecx
mov dword [edi + 0x3a0], eax
cmp dword [edi + 0x3a4], 0
jne 0x40fb9e
mov edx, dword [edi + 0x3e8]
push str.glUniform3f
call edx
mov dword [edi + 0x3a4], eax
cmp dword [edi + 0x3a8], 0
jne 0x40fbba
mov eax, dword [edi + 0x3e8]
push str.glGetUniformLocation
call eax
mov dword [edi + 0x3a8], eax
cmp dword [edi + 0x3ac], 0
jne 0x40fbd6
mov ecx, dword [edi + 0x3e8]
push str.glTexImage2D
call ecx
mov dword [edi + 0x3ac], eax
cmp dword [edi + 0x3b0], 0
jne 0x40fbf2
mov edx, dword [edi + 0x3e8]
push str.glClearColor
call edx
mov dword [edi + 0x3b0], eax
cmp dword [edi + 0x3b4], 0
jne 0x40fc0e
mov eax, dword [edi + 0x3e8]
push str.glClear
call eax
mov dword [edi + 0x3b4], eax
cmp dword [edi + 0x3b8], 0
jne 0x40fc2a
mov ecx, dword [edi + 0x3e8]
push str.glDrawArrays
call ecx
mov dword [edi + 0x3b8], eax
cmp dword [edi + 0x3bc], 0
jne 0x40fc46
mov edx, dword [edi + 0x3e8]
push str.glViewport
call edx
mov dword [edi + 0x3bc], eax
cmp dword [edi + 0x3c0], 0
jne 0x40fc62
mov eax, dword [edi + 0x3e8]
push str.glDeleteShader
call eax
mov dword [edi + 0x3c0], eax
cmp dword [edi + 0x3c4], 0
jne 0x40fc7e
mov ecx, dword [edi + 0x3e8]
push str.glDeleteProgram
call ecx
mov dword [edi + 0x3c4], eax
cmp dword [esi], 0
jne 0x40fc8d
mov esi, str.Could_not_find_function_CreateShader.
call fcn.00410370
cmp dword [edi + 0x34c], 0
jne 0x40fca0
mov esi, str.Could_not_find_function_ShaderSource.
call fcn.00410370
cmp dword [edi + 0x350], 0
jne 0x40fcb3
mov esi, str.Could_not_find_function_CompileShader.
call fcn.00410370
cmp dword [edi + 0x354], 0
jne 0x40fcc6
mov esi, str.Could_not_find_function_GetShaderiv.
call fcn.00410370
cmp dword [edi + 0x358], 0
jne 0x40fcd9
mov esi, str.Could_not_find_function_CreateProgram.
call fcn.00410370
cmp dword [edi + 0x35c], 0
jne 0x40fcec
mov esi, str.Could_not_find_function_AttachShader.
call fcn.00410370
cmp dword [edi + 0x360], 0
jne 0x40fcff
mov esi, str.Could_not_find_function_BindAttribLocation.
call fcn.00410370
cmp dword [edi + 0x364], 0
jne 0x40fd12
mov esi, str.Could_not_find_function_LinkProgram.
call fcn.00410370
cmp dword [edi + 0x368], 0
jne 0x40fd25
mov esi, str.Could_not_find_function_GetProgramiv.
call fcn.00410370
cmp dword [edi + 0x36c], 0
jne 0x40fd38
mov esi, str.Could_not_find_function_GenBuffers.
call fcn.00410370
cmp dword [edi + 0x370], 0
jne 0x40fd4b
mov esi, str.Could_not_find_function_BindBuffer.
call fcn.00410370
cmp dword [edi + 0x374], 0
jne 0x40fd5e
mov esi, str.Could_not_find_function_EnableVertexAttribArray.
call fcn.00410370
cmp dword [edi + 0x378], 0
jne 0x40fd71
mov esi, str.Could_not_find_function_VertexAttribPointer.
call fcn.00410370
cmp dword [edi + 0x37c], 0
jne 0x40fd84
mov esi, str.Could_not_find_function_GenTextures.
call fcn.00410370
cmp dword [edi + 0x380], 0
jne 0x40fd97
mov esi, str.Could_not_find_function_Enable.
call fcn.00410370
cmp dword [edi + 0x384], 0
jne 0x40fdaa
mov esi, str.Could_not_find_function_ActiveTexture.
call fcn.00410370
cmp dword [edi + 0x388], 0
jne 0x40fdbd
mov esi, str.Could_not_find_function_BindTexture.
call fcn.00410370
cmp dword [edi + 0x38c], 0
jne 0x40fdd0
mov esi, str.Could_not_find_function_TexParameteri.
call fcn.00410370
cmp dword [edi + 0x390], 0
jne 0x40fde3
mov esi, str.Could_not_find_function_DeleteBuffers.
call fcn.00410370
cmp dword [edi + 0x394], 0
jne 0x40fdf6
mov esi, str.Could_not_find_function_DeleteTextures.
call fcn.00410370
cmp dword [edi + 0x398], 0
jne 0x40fe09
mov esi, str.Could_not_find_function_BufferData.
call fcn.00410370
cmp dword [edi + 0x39c], 0
jne 0x40fe1c
mov esi, str.Could_not_find_function_UseProgram.
call fcn.00410370
cmp dword [edi + 0x3a0], 0
jne 0x40fe2f
mov esi, str.Could_not_find_function_Uniform1i.
call fcn.00410370
cmp dword [edi + 0x3a4], 0
jne 0x40fe42
mov esi, str.Could_not_find_function_Uniform3f.
call fcn.00410370
cmp dword [edi + 0x3a8], 0
jne 0x40fe55
mov esi, str.Could_not_find_function_GetUniformLocation.
call fcn.00410370
cmp dword [edi + 0x3ac], 0
jne 0x40fe68
mov esi, str.Could_not_find_function_TexImage2D.
call fcn.00410370
cmp dword [edi + 0x3b0], 0
jne 0x40fe7b
mov esi, str.Could_not_find_function_ClearColor.
call fcn.00410370
cmp dword [edi + 0x3b4], 0
jne 0x40fe8e
mov esi, str.Could_not_find_function_Clear.
call fcn.00410370
cmp dword [edi + 0x3b8], 0
jne 0x40fea1
mov esi, str.Could_not_find_function_DrawArrays.
call fcn.00410370
cmp dword [edi + 0x3bc], 0
jne 0x40feb4
mov esi, str.Could_not_find_function_Viewport.
call fcn.00410370
cmp dword [edi + 0x3c0], 0
jne 0x40fec7
mov esi, str.Could_not_find_function_DeleteShader.
call fcn.00410370
cmp dword [edi + 0x3c4], 0
jne 0x40feda
mov esi, str.Could_not_find_function_DeleteProgram.
call fcn.00410370
mov eax, dword [edi + 0x10]
cmp eax, 1
jne 0x40feea
mov ecx, dword [edi + 0x7458]
jmp 0x40fef0
mov ecx, dword [edi + 0x7454]
cmp eax, 1
jne 0x40fefd
mov edx, dword [edi + 0x745c]
jmp 0x40ff03
mov edx, dword [edi + 0x7450]
mov eax, dword [edi + 0xc]
call fcn.0040cb80
test eax, eax
je 0x410043
mov esi, dword [sym.imp.KERNEL32.dll_CreateEventA]
push 0
push 0
push 0
push 0
call esi
push 0
push 0
push 0
push 0
mov dword [edi + 0x400], eax
call esi
push str.dsound.dll
mov dword [edi + 0x404], eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov dword [edi + 0x408], eax
test eax, eax
je 0x40ffbf
push str.DirectSoundCreate8
push eax
call ebx
test eax, eax
jne 0x40ff63
mov edx, dword [edi + 0x408]
push edx
jmp 0x40ffaf
push 0
lea esi, [edi + 0x40c]
push esi
push 0
call eax
test eax, eax
jl 0x40ffa8
mov eax, dword [esi]
test eax, eax
je 0x40ffa8
mov edx, dword [edi + 0x330]
mov ecx, dword [eax]
push 1
push edx
push eax
mov eax, dword [ecx + 0x18]
call eax
test eax, eax
jge 0x40ffbf
mov eax, dword [esi]
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [edi + 0x408]
mov dword [esi], 0
push eax
jmp 0x40ffaf
mov ecx, dword [edi + 0x408]
push ecx
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov dword [edi + 0x408], 0
push str.user32.dll
mov dword [edi + 0x414], 0xffffffff
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov esi, eax
test esi, esi
je 0x41002d
push str.RegisterRawInputDevices
push esi
call ebx
push str.GetRawInputData
push esi
mov dword [esp + 0x1c], eax
call ebx
mov ecx, dword [edi + 0x330]
mov edx, 1
push 0xc
push edx
mov word [esp + 0x6c], dx
mov dword [edi + 0x3fc], eax
lea edx, [esp + 0x6c]
mov eax, 2
push edx
mov word [esp + 0x72], ax
mov dword [esp + 0x74], 0x100
mov dword [esp + 0x78], ecx
call dword [esp + 0x20]
push esi
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov esi, edi
call fcn.0040e4a0
push 0
push edi
call fcn.0040c5f0
add esp, 8
mov dword [esp + 0x20], eax
mov eax, dword [edi + 0x79a8]
test eax, eax
je 0x410056
push eax
mov eax, dword [edi + 0x79b8]
call eax
mov eax, dword [edi + 0x79a4]
mov ebx, dword [sym.imp.KERNEL32.dll_FreeLibrary]
test eax, eax
je 0x410069
push eax
call ebx
cmp dword [edi + 0x414], 0xffffffff
mov esi, dword [sym.imp.KERNEL32.dll_CloseHandle]
je 0x41009f
push 1
lea ecx, [edi + 0x418]
push ecx
call dword [sym.imp.KERNEL32.dll_InterlockedExchange]
mov edx, dword [edi + 0x414]
push 0xffffffffffffffff
push edx
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov eax, dword [edi + 0x414]
push eax
call esi
mov eax, dword [edi + 0x410]
test eax, eax
je 0x4100b1
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [edi + 0x40c]
test eax, eax
je 0x4100c3
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [edi + 0x408]
test eax, eax
je 0x4100d0
push eax
call ebx
mov eax, dword [edi + 0x400]
test eax, eax
je 0x4100dd
push eax
call esi
mov eax, dword [edi + 0x404]
test eax, eax
je 0x4100ea
push eax
call esi
mov eax, dword [edi + 0x3dc]
mov ecx, dword [edi + 0x3c4]
push eax
call ecx
mov eax, dword [edi + 0x390]
lea edx, [edi + 0x3d4]
push edx
push 1
call eax
mov edx, dword [edi + 0x394]
lea ecx, [edi + 0x3d8]
push ecx
push 1
call edx
cmp dword [edi + 0x3e4], 0
je 0x410130
mov eax, dword [edi + 0x3f4]
push 0
push 0
call eax
mov eax, dword [edi + 0x3e4]
test eax, eax
je 0x410143
mov ecx, dword [edi + 0x3f0]
push eax
call ecx
mov eax, dword [edi + 0x3e0]
test eax, eax
je 0x410150
push eax
call ebx
mov eax, dword [edi + 0x33c]
mov esi, dword [sym.imp.USER32.dll_DestroyIcon]
test eax, eax
je 0x410163
push eax
call esi
mov eax, dword [edi + 0x42c]
test eax, eax
je 0x410170
push eax
call esi
mov eax, dword [edi + 0x338]
test eax, eax
je 0x410188
mov edx, dword [edi + 0x330]
push eax
push edx
call dword [sym.imp.USER32.dll_ReleaseDC]
mov eax, dword [edi + 0x330]
test eax, eax
je 0x410199
push eax
call dword [sym.imp.USER32.dll_DestroyWindow]
mov eax, dword [edi + 0x32c]
push eax
push str.app_wc
call dword [sym.imp.USER32.dll_UnregisterClassA]
push 8
lea ecx, [esp + 0x38]
push ecx
call dword [sym.imp.WINMM.dll_timeGetDevCaps]
test eax, eax
jne 0x4101c7
mov edx, dword [esp + 0x34]
push edx
call dword [sym.imp.WINMM.dll_timeEndPeriod]
push 0
call fcn.00412a48
mov dword [esp + 0x1c], eax
lea eax, [esp + 0x1c]
add esp, 4
push eax
mov dword [esp + 0x20], edx
call fcn.0041292e
mov ecx, dword [eax + 0xc]
mov edx, dword [eax + 0x10]
add esp, 4
push ecx
mov ecx, dword [eax + 0x14]
inc edx
push edx
mov edx, dword [eax]
add ecx, 0x76c
push ecx
mov ecx, dword [eax + 4]
push edx
mov edx, dword [eax + 8]
push ecx
push edx
lea eax, [esp + 0xb8]
push str.Application_terminated__02d:_02d:_02d__04d__02d__02d.
push eax
call fcn.0041154c
push edi
call fcn.00411e05
mov ecx, dword [esp + 0x108]
mov eax, dword [esp + 0x44]
add esp, 0x24
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.0041153d
mov esp, ebp
pop ebp
ret