Function at 0x403c90
Capabilities:
Resolve function by parsing pe exports

Disassembly:
sub esp, 0xc
push ebx
push ebp
push esi
mov esi, ecx
push edi
mov dword [esp + 0x14], esi
mov eax, dword [esi + 4]
cmp dword [eax], 0
jne 0x403e55
mov ebx, dword [esi + 8]
mov edi, ebx
mov ebp, dword [ebx]
mov ecx, ebp
mov edx, dword [ebx + 0x10]
lea esi, [ebp - 1]
lea eax, [edx - 0x36]
and eax, esi
mov esi, dword [ebx + 0xc]
cmp byte [eax + esi], 0x42
mov esi, dword [esp + 0x14]
jne 0x403d5a
lea eax, [edx - 0x35]
lea edx, [ebp - 1]
and eax, edx
mov edx, dword [ebx + 0xc]
cmp byte [eax + edx], 0x4d
jne 0x403d5a
push 0x2c
mov ecx, esi
call fcn.00406810
cmp eax, 0x3e
jne 0x403d58
push 0x28
mov ecx, esi
call fcn.00406810
cmp eax, 0x28
jne 0x403d58
push 0x18
mov ecx, esi
call fcn.00406810
test eax, eax
jne 0x403d58
mov ecx, dword [ebx + 0x10]
lea eax, [ebp - 1]
add ecx, 0xffffffe6
and ecx, eax
mov eax, dword [ebx + 0xc]
cmp byte [ecx + eax], 1
jne 0x403d58
push 0x24
mov ecx, esi
call fcn.00406810
push 0x20
mov ecx, esi
mov dword [esi + 0xc0], eax
call fcn.00406810
push 0x2c
mov ecx, esi
mov dword [esi + 0xbc], eax
call fcn.00406810
mov ecx, dword [ebx + 0x10]
mov edi, dword [esi + 8]
add ecx, 0xffffffc2
add eax, ecx
mov dword [esi + 0xc8], eax
mov ecx, dword [edi]
jmp 0x403d5a
mov ecx, ebp
mov edx, dword [edi + 0x10]
lea ebx, [ecx - 1]
mov ebp, dword [edi + 0xc]
mov dword [esp + 0x10], edx
lea eax, [edx - 0x25]
and eax, ebx
movzx ecx, byte [eax + ebp]
lea eax, [edx - 0x26]
and eax, ebx
shl ecx, 8
movzx eax, byte [eax + ebp]
add ecx, eax
lea eax, [edx - 0x27]
and eax, ebx
shl ecx, 8
movzx eax, byte [eax + ebp]
add ecx, eax
lea eax, [edx - 0x28]
and eax, ebx
shl ecx, 8
movzx eax, byte [eax + ebp]
add ecx, eax
cmp ecx, 0x28
jne 0x403e16
lea eax, [edx - 0x15]
mov dword [esp + 0x10], edx
and eax, ebx
movzx ecx, byte [eax + ebp]
lea eax, [edx - 0x16]
and eax, ebx
shl ecx, 8
movzx eax, byte [eax + ebp]
add ecx, eax
lea eax, [edx - 0x17]
and eax, ebx
shl ecx, 8
movzx eax, byte [eax + ebp]
add ecx, eax
lea eax, [edx - 0x18]
and eax, ebx
shl ecx, 8
movzx eax, byte [eax + ebp]
add ecx, eax
jne 0x403e16
lea eax, [edx - 0x1a]
mov dword [esp + 0x10], edx
and eax, ebx
cmp byte [eax + ebp], 1
jne 0x403e16
push 0x24
mov ecx, esi
call fcn.00406810
push 0x20
mov ecx, esi
mov dword [esi + 0xc0], eax
call fcn.00406810
mov dword [esi + 0xbc], eax
mov eax, dword [edi + 0x10]
add eax, 2
mov dword [esi + 0xc8], eax
mov eax, dword [edi + 0x10]
jmp 0x403e1a
mov eax, dword [esp + 0x10]
cmp dword [esi + 0xc8], eax
jne 0x403e55
mov eax, dword [esi + 0xc0]
dec eax
sar eax, 5
lea ecx, [eax*4 + 4]
mov eax, dword [esi + 0xbc]
imul eax, ecx
mov dword [esi + 0xcc], ecx
add eax, dword [edi + 0x10]
mov dword [esi + 0xc4], eax
mov dword [esi + 0xc8], 0
mov eax, dword [esi + 8]
mov eax, dword [eax + 0x10]
cmp eax, dword [esi + 0xc4]
jg 0x4042e9
mov edx, dword [esi + 0x30]
add edx, dword [esi + 0x2c]
mov eax, dword [esi]
movzx ecx, byte [edx]
mov eax, dword [eax]
movzx eax, byte [eax + ecx*4 + 0x416220]
mov byte [edx], al
mov edx, dword [esi + 0x34]
add edx, dword [esi + 0x2c]
mov eax, dword [esi]
movzx ecx, byte [edx]
mov eax, dword [eax]
movzx eax, byte [eax + ecx*4 + 0x416220]
mov byte [edx], al
mov edx, dword [esi + 0x2c]
add edx, dword [esi + 0x38]
mov eax, dword [esi]
movzx ecx, byte [edx]
mov eax, dword [eax]
movzx eax, byte [eax + ecx*4 + 0x416220]
mov byte [edx], al
mov edx, dword [esi + 0x2c]
add edx, dword [esi + 0x3c]
mov eax, dword [esi]
movzx ecx, byte [edx]
mov eax, dword [eax]
movzx eax, byte [eax + ecx*4 + 0x416220]
mov byte [edx], al
mov edx, dword [esi + 0x2c]
add edx, dword [esi + 0x40]
mov eax, dword [esi]
movzx ecx, byte [edx]
mov eax, dword [eax]
movzx eax, byte [eax + ecx*4 + 0x416220]
mov byte [edx], al
mov eax, dword [esi]
mov ebp, dword [esi + 8]
mov ecx, dword [esi + 0x10]
mov edi, dword [esi + 0xcc]
mov eax, dword [eax]
mov ebx, dword [esi + 4]
lea eax, [eax + ecx*2]
mov dword [esi + 0x10], eax
mov ecx, dword [ebp + 0x10]
mov dword [esp + 0x18], eax
sub ecx, edi
mov eax, dword [ebp]
inc ecx
dec eax
and ecx, eax
mov eax, dword [ebp + 0xc]
movzx edx, byte [ecx + eax]
mov ecx, 7
sub cl, byte [ebx]
mov eax, dword [esi + 0x14]
shr edx, cl
and edx, 1
lea eax, [edx + eax*2]
mov dword [esi + 0x14], eax
mov ecx, dword [ebp + 0x10]
mov dword [esp + 0x10], eax
lea eax, [edi + edi]
sub ecx, eax
mov eax, dword [ebp]
inc ecx
dec eax
and ecx, eax
mov eax, dword [ebp + 0xc]
movzx edx, byte [ecx + eax]
mov ecx, 7
sub cl, byte [ebx]
mov eax, dword [esi + 0x18]
shr edx, cl
and edx, 1
lea esi, [edx + eax*2]
mov eax, dword [esp + 0x14]
mov dword [eax + 0x18], esi
lea eax, [edi + edi*2]
mov ecx, dword [ebp + 0x10]
sub ecx, eax
inc ecx
mov eax, dword [ebp]
and esi, 0x600
dec eax
and ecx, eax
mov eax, dword [ebp + 0xc]
movzx edx, byte [ecx + eax]
mov ecx, 7
sub cl, byte [ebx]
mov ebx, dword [esp + 0x14]
shr edx, cl
and edx, 1
mov eax, dword [ebx + 0x1c]
lea eax, [edx + eax*2]
mov edx, dword [esp + 0x10]
mov dword [ebx + 0x1c], eax
mov eax, dword [esp + 0x18]
and eax, 7
shr edx, 1
and edx, 0x1c0
or edx, esi
shr edx, 3
or edx, eax
mov dword [ebx + 0x30], edx
mov ecx, dword [ebx + 0x14]
mov eax, dword [ebx + 0x18]
shr ecx, 2
and eax, 0x100
and ecx, 0xf8
or ecx, eax
mov eax, dword [ebx + 0x1c]
shr ecx, 1
and eax, 0x100
or ecx, eax
mov eax, dword [ebx + 0x10]
shr ecx, 1
and eax, 1
or ecx, eax
add ecx, 0x100
mov dword [ebx + 0x34], ecx
mov ecx, dword [ebx + 0x1c]
mov eax, dword [ebx + 0x18]
and ecx, 0x7c0
and eax, 0x1fc0
shl ecx, 3
xor ecx, eax
mov eax, dword [ebx + 0x10]
and eax, 0x3f
shl ecx, 2
xor ecx, eax
mov eax, dword [ebx + 0x14]
and eax, 0x3ffe
xor ecx, eax
add ecx, 0x200
mov dword [ebx + 0x38], ecx
mov ecx, dword [ebx + 0x14]
mov eax, dword [ebx + 0x10]
and ecx, 0xc0c
and eax, 0x3e
xor ecx, eax
mov eax, dword [ebx + 0x18]
and eax, 0xc800
xor ecx, eax
add ecx, 0x400
mov dword [ebx + 0x3c], ecx
mov ecx, dword [ebx + 0x1c]
mov eax, dword [ebx + 0x14]
and ecx, 0xc0c
and eax, 0x30
xor ecx, eax
mov eax, dword [ebx + 0x10]
and eax, 3
or ecx, eax
add ecx, 0x800
mov dword [ebx + 0x40], ecx
mov eax, dword [ebx + 0x2c]
mov esi, dword [ebx + 0xc]
mov ecx, dword [ebx + 0x48]
movzx edi, byte [eax + edx]
mov eax, dword [ebx]
mov edx, dword [eax]
mov eax, dword [ebx + 0x58]
lea eax, [eax + ecx*4]
mov dword [esp + 0x18], eax
mov eax, dword [eax]
mov ecx, eax
mov ebp, eax
and ecx, 0x3ff
shr ebp, 0xa
cmp ecx, 0x3ff
jae 0x404088
inc eax
jmp 0x40408d
or eax, 0x3ff
shl edx, 0x16
sub edx, ebp
sar edx, 3
imul edx, dword [ecx*4 + 0x4452c0]
and edx, 0xfffffc00
add edx, eax
mov eax, dword [esp + 0x18]
mov dword [eax], edx
mov dword [ebx + 0x48], edi
mov eax, dword [ebx + 0x58]
mov ecx, dword [esi + 0x44]
mov eax, dword [eax + edi*4]
shr eax, 0x14
movzx edx, word [eax*2 + 0x4332c0]
lea eax, [ecx + 1]
mov dword [esi + 0x44], eax
mov eax, dword [esi + 0x18]
mov word [eax + ecx*2], dx
mov ecx, dword [ebx + 0x34]
mov eax, dword [ebx + 0x2c]
mov esi, dword [ebx + 0xc]
movzx ebp, byte [ecx + eax]
mov eax, dword [ebx]
mov ecx, dword [ebx + 0x60]
mov edx, dword [eax]
mov eax, dword [ebx + 0x70]
lea eax, [eax + ecx*4]
mov dword [esp + 0x18], eax
mov eax, dword [eax]
mov ecx, eax
mov edi, eax
and ecx, 0x3ff
shr edi, 0xa
cmp ecx, 0x3ff
jae 0x404107
inc eax
jmp 0x40410c
or eax, 0x3ff
shl edx, 0x16
sub edx, edi
sar edx, 3
imul edx, dword [ecx*4 + 0x4452c0]
and edx, 0xfffffc00
add edx, eax
mov eax, dword [esp + 0x18]
mov dword [eax], edx
mov dword [ebx + 0x60], ebp
mov eax, dword [ebx + 0x70]
mov ecx, dword [esi + 0x44]
mov eax, dword [eax + ebp*4]
shr eax, 0x14
movzx edx, word [eax*2 + 0x4332c0]
lea eax, [ecx + 1]
mov dword [esi + 0x44], eax
mov eax, dword [esi + 0x18]
mov word [eax + ecx*2], dx
mov ecx, dword [ebx + 0x2c]
mov eax, dword [ebx + 0x38]
mov esi, dword [ebx + 0xc]
movzx ebp, byte [ecx + eax]
mov eax, dword [ebx]
mov ecx, dword [ebx + 0x78]
mov edx, dword [eax]
mov eax, dword [ebx + 0x88]
lea eax, [eax + ecx*4]
mov dword [esp + 0x18], eax
mov eax, dword [eax]
mov ecx, eax
mov edi, eax
and ecx, 0x3ff
shr edi, 0xa
cmp ecx, 0x3ff
jae 0x404189
inc eax
jmp 0x40418e
or eax, 0x3ff
shl edx, 0x16
sub edx, edi
sar edx, 3
imul edx, dword [ecx*4 + 0x4452c0]
and edx, 0xfffffc00
add edx, eax
mov eax, dword [esp + 0x18]
mov dword [eax], edx
mov dword [ebx + 0x78], ebp
mov eax, dword [ebx + 0x88]
mov ecx, dword [esi + 0x44]
mov eax, dword [eax + ebp*4]
shr eax, 0x14
movzx edx, word [eax*2 + 0x4332c0]
lea eax, [ecx + 1]
mov dword [esi + 0x44], eax
mov eax, dword [esi + 0x18]
mov word [eax + ecx*2], dx
mov ecx, dword [ebx + 0x2c]
mov eax, dword [ebx + 0x3c]
mov esi, dword [ebx + 0xc]
movzx ebp, byte [ecx + eax]
mov eax, dword [ebx]
mov ecx, dword [ebx + 0x90]
mov edx, dword [eax]
mov eax, dword [ebx + 0xa0]
lea eax, [eax + ecx*4]
mov dword [esp + 0x18], eax
mov eax, dword [eax]
mov ecx, eax
mov edi, eax
and ecx, 0x3ff
shr edi, 0xa
cmp ecx, 0x3ff
jae 0x404211
inc eax
jmp 0x404216
or eax, 0x3ff
shl edx, 0x16
sub edx, edi
sar edx, 3
imul edx, dword [ecx*4 + 0x4452c0]
and edx, 0xfffffc00
add edx, eax
mov eax, dword [esp + 0x18]
mov dword [eax], edx
mov dword [ebx + 0x90], ebp
mov eax, dword [ebx + 0xa0]
mov ecx, dword [esi + 0x44]
mov eax, dword [eax + ebp*4]
shr eax, 0x14
movzx edx, word [eax*2 + 0x4332c0]
lea eax, [ecx + 1]
mov dword [esi + 0x44], eax
mov eax, dword [esi + 0x18]
mov word [eax + ecx*2], dx
mov ecx, dword [ebx + 0x2c]
mov eax, dword [ebx + 0x40]
mov esi, dword [ebx + 0xc]
movzx ebp, byte [ecx + eax]
mov eax, dword [ebx]
mov ecx, dword [ebx + 0xa8]
mov edx, dword [eax]
mov eax, dword [ebx + 0xb8]
lea eax, [eax + ecx*4]
mov dword [esp + 0x18], eax
mov eax, dword [eax]
mov ecx, eax
mov edi, eax
and ecx, 0x3ff
shr edi, 0xa
cmp ecx, 0x3ff
jae 0x40429c
inc eax
jmp 0x4042a1
or eax, 0x3ff
shl edx, 0x16
sub edx, edi
sar edx, 3
imul edx, dword [ecx*4 + 0x4452c0]
and edx, 0xfffffc00
add edx, eax
mov eax, dword [esp + 0x18]
mov dword [eax], edx
mov dword [ebx + 0xa8], ebp
mov eax, dword [ebx + 0xb8]
mov ecx, dword [esi + 0x44]
mov eax, dword [eax + ebp*4]
shr eax, 0x14
movzx edx, word [eax*2 + 0x4332c0]
lea eax, [ecx + 1]
mov dword [esi + 0x44], eax
mov eax, dword [esi + 0x18]
mov word [eax + ecx*2], dx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xc
ret