Function at 0x40da50
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x28
mov esi, dword [ebp + 0x18]
mov eax, dword [0x472b30]
test eax, eax
jne 0x40dd6d
movzx eax, byte [0x458ea0]
xor al, 0xb9
mov byte [0x458ed0], al
movzx eax, byte [0x458ea1]
mov ecx, eax
add cl, al
and cl, 0xec
sub al, cl
add al, 0x76
mov byte [0x458ed1], al
movzx eax, byte [0x458ea2]
xor al, 0x19
mov byte [0x458ed2], al
movzx eax, byte [0x458ea3]
mov ecx, eax
not cl
or cl, 0x6b
or al, 0x94
and al, cl
mov byte [0x458ed3], al
movzx eax, byte [0x458ea4]
xor al, 0x34
mov byte [0x458ed4], al
movzx eax, byte [0x458ea5]
xor al, 0xdd
mov byte [0x458ed5], al
movzx eax, byte [0x458ea6]
xor al, 0x9f
mov byte [0x458ed6], al
movzx eax, byte [0x458ea7]
mov ecx, eax
add cl, al
and cl, 0xb2
sub al, cl
add al, 0xd9
mov byte [0x458ed7], al
mov eax, 0x92500fe7
xor eax, dword [0x458ea8]
mov dword [0x458ed8], eax
movzx eax, byte [0x458eac]
mov ecx, eax
add cl, al
and cl, 0xd0
sub al, cl
add al, 0xe8
mov byte [0x458edc], al
mov eax, 0xeef6ad4d
xor eax, dword [0x458ead]
mov dword [0x458edd], eax
movzx eax, byte [0x458eb1]
xor al, 0x44
mov byte [0x458ee1], al
movzx eax, byte [0x458eb2]
xor al, 0x3d
mov byte [0x458ee2], al
movzx eax, byte [0x458eb3]
xor al, 0x63
mov byte [0x458ee3], al
movzx eax, byte [0x458eb4]
mov ecx, eax
add cl, al
and cl, 0x84
sub al, cl
add al, 0xc2
mov byte [0x458ee4], al
movzx eax, byte [0x458eb5]
xor al, 0x9c
mov byte [0x458ee5], al
movzx eax, byte [0x458eb6]
xor al, 0xea
mov byte [0x458ee6], al
movzx eax, byte [0x458eb7]
mov ecx, eax
not cl
or al, 0xa8
or cl, 0x57
and cl, al
not cl
mov eax, 0x6fe337a3
xor eax, dword [0x458eb8]
mov byte [0x458ee7], cl
mov dword [0x458ee8], eax
movzx eax, byte [0x458ebc]
xor al, 0xe4
mov byte [0x458eec], al
movzx eax, byte [0x458ebd]
xor al, 0x55
mov byte [0x458eed], al
movzx eax, byte [0x458ebe]
xor al, 0x33
mov byte [0x458eee], al
movzx eax, byte [0x458ebf]
mov ecx, eax
add cl, al
and cl, 0xa2
sub al, cl
add al, 0xd1
mov byte [0x458eef], al
movzx eax, byte [0x458ec0]
xor al, 0xec
mov byte [0x458ef0], al
movzx eax, byte [0x458ec1]
xor al, 0x43
mov byte [0x458ef1], al
movzx eax, byte [0x458ec2]
xor al, 0x88
mov byte [0x458ef2], al
movzx eax, byte [0x458ec3]
mov ecx, eax
add cl, al
and cl, 0xca
sub al, cl
add al, 0x65
mov byte [0x458ef3], al
movzx eax, byte [0x458ec4]
xor al, 0x51
mov byte [0x458ef4], al
movzx eax, byte [0x458ec5]
mov ecx, eax
add cl, al
and cl, 0x8e
sub al, cl
add al, 0x47
mov byte [0x458ef5], al
movzx eax, byte [0x458ec6]
xor al, 0xe6
mov byte [0x458ef6], al
movzx eax, byte [0x458ec7]
mov ecx, eax
add cl, al
and cl, 0x64
sub al, cl
add al, 0x32
mov byte [0x458ef7], al
movzx eax, byte [0x458ec8]
xor al, 0x10
mov byte [0x458ef8], al
mov eax, 0x9ba2dc67
xor eax, dword [0x458f00]
mov dword [0x458f30], eax
mov eax, dword [0x458f04]
lea ecx, [eax + eax]
and ecx, 0x90695474
neg ecx
add eax, ecx
add eax, 0x4834aa3a
mov dword [0x458f34], eax
movups xmm0, xmmword [0x458f08]
xorps xmm0, xmmword [0x455220]
movups xmmword [0x458f38], xmm0
movsd xmm0, qword [0x458f18]
xorps xmm0, xmmword [0x455230]
movlps qword [0x458f48], xmm0
mov eax, dword [0x458f20]
lea ecx, [eax + eax]
and ecx, 0xa567b48c
neg ecx
add eax, ecx
add eax, 0xd2b3da46
mov dword [0x458f50], eax
movsd xmm0, qword [0x458f24]
xorps xmm0, xmmword [0x455240]
movlps qword [0x458f54], xmm0
movzx eax, byte [0x458f5c]
mov ecx, eax
add cl, al
and cl, 0xe0
sub al, cl
add al, 0x70
mov byte [0x458f61], al
movzx eax, byte [0x458f5d]
xor al, 0x68
mov byte [0x458f62], al
movzx eax, byte [0x458f5e]
xor al, 0x4a
mov byte [0x458f63], al
movzx eax, byte [0x458f5f]
xor al, 0x21
mov byte [0x458f64], al
movzx eax, byte [0x458f60]
mov ecx, eax
add cl, al
and cl, 0xb4
sub al, cl
add al, 0xda
mov byte [0x458f65], al
mov dword [0x472b30], 1
push eax
sub esp, 0xc
mov edi, esp
push eax
mov dword [ebp - 0x18], esp
sub esp, 0x2c
mov dword [ebp - 0x24], esp
push 0x4df40
call fcn.00416d50
add esp, 4
mov ebx, eax
mov dword [esi], 0
xor eax, eax
test ebx, ebx
je 0x40e202
mov esi, dword [ebp + 0x14]
imul esi, dword [ebp + 0xc]
lea eax, [esi + 1]
imul eax, dword [ebp + 0x10]
cmp eax, 0x41
mov ecx, 0x40
cmovge ecx, eax
mov dword [edi], 0
mov dword [edi + 0xc], 1
add ecx, 0x39
mov dword [edi + 4], ecx
push ecx
call fcn.00416d50
add esp, 4
mov dword [edi + 8], eax
test eax, eax
je 0x40e1c9
mov ecx, edi
mov dword [ebp - 0x28], esi
mov dword [ebp - 0x1c], ebx
mov edx, dword [ebp - 0x18]
mov dword [edx], 0x29
xor eax, eax
mov byte [ebp - 0xd], 0x29
mov ebx, 0x29
mov dword [ebp - 0x14], edi
jmp 0x40de34
mov dword [ebp - 0x20], eax
mov eax, dword [ecx + 8]
mov esi, dword [ebp - 0x20]
movzx ebx, byte [ebp - 0xd]
mov byte [eax + esi], bl
mov dword [ecx], edi
mov ebx, dword [edx]
mov eax, edi
dec ebx
mov dword [edx], ebx
mov esi, edx
mov edx, ebx
mov byte [ebp - 0xd], bl
mov edx, esi
je 0x40de8d
lea edi, [eax + 1]
mov esi, dword [ecx + 4]
cmp edi, esi
jbe 0x40de10
cmp dword [ecx + 0xc], 0
je 0x40de7e
mov dword [ebp - 0x20], eax
mov eax, 0x80
nop dword [eax]
test esi, 0x7fffffc0
lea esi, [esi + esi]
cmove esi, eax
cmp edi, esi
ja 0x40de50
push esi
push dword [ecx + 8]
call fcn.00416d70
add esp, 8
test eax, eax
je 0x40de82
mov ecx, dword [ebp - 0x14]
mov dword [ecx + 8], eax
mov dword [ecx + 4], esi
mov edx, dword [ebp - 0x18]
jmp 0x40de16
mov edi, eax
jmp 0x40de24
mov edi, dword [ebp - 0x20]
mov ecx, dword [ebp - 0x14]
mov edx, dword [ebp - 0x18]
jmp 0x40de24
mov edx, dword [ebp + 0x1c]
cmp edx, 0xa
mov eax, 0xa
cmovb eax, edx
mov edi, ecx
mov ecx, dword [eax*4 + 0x458f30]
mov eax, ecx
and eax, 0x1000
mov edx, eax
not edx
lea esi, [ecx + edx]
add esi, 0x1001
add ecx, 0x1001
mov ebx, dword [ebp - 0x1c]
mov dword [ebx], 0x40d8d0
sub eax, ecx
or eax, 0xfff
add eax, esi
add eax, 3
mov ecx, 0x55555556
imul ecx
mov dword [ebx + 4], edi
mov dword [ebx + 8], esi
mov eax, edx
shr eax, 0x1f
add eax, edx
inc eax
mov dword [ebx + 0xc], eax
mov eax, esi
shr eax, 0xe
and eax, 1
mov dword [ebx + 0x14], eax
mov eax, esi
shr eax, 2
and eax, 0x3ff
add eax, 2
imul eax, eax, 0x5556
shr eax, 0x10
inc eax
mov dword [ebx + 0x10], eax
test si, si
js 0x40df2b
lea eax, [ebx + 0x29272]
push 0x10000
push 0
push eax
call fcn.00416ef0
add esp, 0xc
lea eax, [ebx + 0x9272]
lea ecx, [ebx + 0x9273]
lea edx, [ebx + 0x39272]
xorps xmm0, xmm0
movups xmmword [ebx + 0x3c], xmm0
movups xmmword [ebx + 0x58], xmm0
mov dword [ebx + 0x68], 0
mov dword [ebx + 0x28], ecx
mov dword [ebx + 0x2c], eax
mov byte [ebx + 0x9272], 0
mov dword [ebx + 0x38], 8
mov dword [ebx + 0x30], edx
mov dword [ebx + 0x34], edx
mov dword [ebx + 0x6c], 0
mov dword [ebx + 0x54], 0
mov dword [ebx + 0x50], 0
mov dword [ebx + 0x4c], 0
movaps xmm1, xmmword [0x4551e0]
movups xmmword [ebx + 0x18], xmm1
movups xmmword [ebx + 0x70], xmm0
movups xmmword [ebx + 0x80], xmm0
test si, si
js 0x40dfb6
lea eax, [ebx + 0x90]
push 0x8101
push 0
push eax
call fcn.00416ef0
add esp, 0xc
mov eax, ebx
add eax, 0x8192
push 0x280
push 0
push eax
call fcn.00416ef0
add esp, 0xc
mov ecx, dword [ebp + 0x10]
test ecx, ecx
mov edx, dword [ebp - 0x18]
jle 0x40e03e
xor esi, esi
nop dword [eax]
mov dword [ebp - 0x2c], 1
push 0
push 0
push 0
lea eax, [ebp - 0x2c]
push eax
push edx
push ebx
mov edi, ecx
call fcn.00404090
add esp, 0x18
mov eax, esi
not eax
add eax, edi
cmp dword [ebp + 0x20], 0
cmove eax, esi
mov ecx, dword [ebp - 0x28]
imul eax, ecx
add eax, dword [ebp + 8]
mov dword [ebp - 0x30], ecx
push 0
push 0
push 0
lea ecx, [ebp - 0x30]
push ecx
push eax
push ebx
call fcn.00404090
mov edx, dword [ebp - 0x18]
mov ecx, edi
add esp, 0x18
mov eax, esi
and eax, 1
xor esi, 1
lea esi, [esi + eax*2]
cmp esi, edi
jl 0x40dfe0
mov dword [ebp - 0x34], 0
lea eax, [ebp - 0x34]
push 4
push 0
push 0
push eax
push 0
push ebx
call fcn.00404090
add esp, 0x18
cmp eax, 1
jne 0x40e1cc
mov esi, dword [ebp - 0x14]
mov eax, dword [esi]
add eax, 0xffffffd7
mov ecx, dword [ebp + 0x18]
mov dword [ecx], eax
movaps xmm0, xmmword [0x458ee0]
mov edi, dword [ebp - 0x24]
movups xmmword [edi + 0x10], xmm0
movups xmm0, xmmword [0x458ee9]
movups xmmword [edi + 0x19], xmm0
movaps xmm0, xmmword [0x458ed0]
movups xmmword [edi], xmm0
mov ecx, dword [ebp + 0xc]
mov byte [edi + 0x12], ch
mov byte [edi + 0x13], cl
mov ecx, dword [ebp + 0x10]
mov byte [edi + 0x16], ch
mov byte [edi + 0x17], cl
mov ecx, dword [ebp + 0x14]
movzx ecx, byte [ecx + 0x458f61]
mov byte [edi + 0x19], cl
mov ecx, eax
shr ecx, 0x18
mov byte [edi + 0x21], cl
mov ecx, eax
shr ecx, 0x10
mov byte [edi + 0x22], cl
mov byte [edi + 0x23], ah
mov byte [edi + 0x24], al
mov eax, edi
add eax, 0xc
push 0x11
push eax
push 0
call fcn.004033b0
add esp, 0xc
mov ecx, eax
shr ecx, 0x18
mov byte [edi + 0x1d], cl
mov ecx, eax
shr ecx, 0x10
mov byte [edi + 0x1e], cl
mov ecx, esi
mov byte [edi + 0x1f], ah
mov byte [edi + 0x20], al
mov esi, dword [esi + 8]
movups xmm0, xmmword [edi + 0x19]
movups xmmword [esi + 0x19], xmm0
movups xmm0, xmmword [edi + 0x10]
movups xmmword [esi + 0x10], xmm0
movups xmm0, xmmword [edi]
movups xmmword [esi], xmm0
mov eax, dword [ecx]
mov ebx, dword [ecx + 4]
lea edi, [eax + 0x10]
cmp edi, ebx
jbe 0x40e15f
cmp dword [ecx + 0xc], 0
je 0x40e1e3
mov eax, 0x80
nop word cs:[eax + eax]
test ebx, 0x7fffffc0
lea ebx, [ebx + ebx]
cmove ebx, eax
cmp edi, ebx
ja 0x40e130
push ebx
push esi
call fcn.00416d70
add esp, 8
test eax, eax
je 0x40e1dd
mov esi, eax
mov ecx, dword [ebp - 0x14]
mov dword [ecx + 8], eax
mov dword [ecx + 4], ebx
mov eax, dword [ecx]
movups xmm0, xmmword [0x4572f0]
movups xmmword [esi + eax], xmm0
mov dword [ecx], edi
mov esi, dword [ebp + 0x18]
mov eax, dword [esi]
add eax, 4
mov edi, ecx
mov ecx, dword [ecx + 8]
add ecx, 0x25
push eax
push ecx
push 0
call fcn.004033b0
add esp, 0xc
mov ecx, dword [edi]
mov edx, dword [edi + 8]
mov ebx, eax
shr ebx, 0x18
mov byte [edx + ecx - 0x10], bl
mov ecx, dword [edi]
mov edx, dword [edi + 8]
mov ebx, eax
shr ebx, 0x10
mov byte [edx + ecx - 0xf], bl
mov ecx, dword [edi]
mov edx, dword [edi + 8]
mov byte [edx + ecx - 0xe], ah
mov ecx, dword [edi]
mov edx, dword [edi + 8]
mov byte [edx + ecx - 0xd], al
add dword [esi], 0x39
push dword [ebp - 0x1c]
call fcn.00416d60
add esp, 4
mov eax, dword [edi + 8]
jmp 0x40e202
push ebx
jmp 0x40e1f8
push ebx
call fcn.00416d60
add esp, 4
mov eax, dword [ebp - 0x14]
push dword [eax + 8]
jmp 0x40e1f8
mov eax, dword [ebp - 0x14]
mov esi, dword [eax + 8]
mov eax, dword [ebp + 0x18]
mov dword [eax], 0
push dword [ebp - 0x1c]
call fcn.00416d60
add esp, 4
push esi
call fcn.00416d60
add esp, 4
xor eax, eax
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret